{"version":3,"file":"static/js/main.b3c8a9a6.js","mappings":"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AM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,EAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAC//CC,EAAI,CAAC,GAAM,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,EAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAG//CC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAG1/FC,EAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,SAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAG1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAE9/F,SAASC,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AW5hK,OAAO/8I,KAAKggT,WACpC,EAEDlzI,EAAU5iK,UAAUuoJ,MAAQ,WAC1B,OAAO31E,EAAMw9D,OAAOt6I,KAAKy0K,UAAW,OAAO/yG,aAC5C,EAEDyhG,EAAOx3B,QAAUmhC,qBChEjB3J,EAAOx3B,QAAU,CACfq1B,QAAS,CACPr7I,KAAM,EACN8F,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAIN6yI,IAAK,CACHsD,IAAK,EACLn2I,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,2GCrwBR,IAAIqxD,EAAQ6uD,EACRolB,EAAKqoB,EAAQ,OACblb,EAAYkb,EAAQ,OACpBjb,EAAWib,EAAQ,OAEvBt8F,EAAM4gF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AAUklB,YAAYp/S,WAAW6N,KAAKg5H,GAAY7mI,WAAW6N,KAAKg4E,GAAU44E,EACpF,EAWYtkC,EAAAA,QAAU,SACrBt0C,EACAghD,EACAu7B,EACAnD,GAEA,OAAO7jC,EAAOvtH,KACZqsR,EAAUmlB,aAAar/S,WAAW6N,KAAKg5H,GAAYu7B,EAAOpiK,WAAW6N,KAAKg4E,GAAUo5E,GAEvF,EASY9kC,EAAAA,KAAO,SAASskC,EAAmBD,GAE9C,OAAOpjC,EAAOvtH,KAAKqsR,EAAUolB,KAAKt/S,WAAW6N,KAAK4wJ,GAAYz+J,WAAW6N,KAAK2wJ,GAAa,IAC5F,EAEYrkC,EAAAA,WAAa,SACxBskC,EACAD,EACAS,GAKA,GAAyB,KAArBR,EAAUrxK,QAAsC,KAArBqxK,EAAUrxK,OACvC,MAAM,IAAIylO,WAAW,gCAIvB,GAA0B,KAAtBr0D,EAAWpxK,OACb,MAAM,IAAIylO,WAAW,iCAGvB,OAAOz3F,EAAOvtH,KACZiwS,EAAYyB,WAAWv/S,WAAW6N,KAAK4wJ,GAAYz+J,WAAW6N,KAAK2wJ,GAAaS,GAEnF,6GCpZD,IAAMugJ,EAAmCpkL,EAAOvtH,KAAK,CAEnD,GACA,IACA,IACA,EACA,EACA,EACA,EACA,GAEA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAEA,IACA,IACA,IACA,GACA,IACA,IACA,EACA,EACA,EACA,GACA,GACA,EACA,EACA,GACA,IACA,GACA,IACA,GACA,EACA,EACA,EACA,GACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,GACA,EACA,EACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,IACA,GACA,IACA,EACA,GACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,EACA,EACA,EACA,IACA,GACA,EACA,GACA,EAEA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGI4xS,EAAqCrkL,EAAOvtH,KAAK,CAErD,GACA,IACA,EACA,GACA,EACA,EACA,EACA,EACA,GAEA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAEA,IACA,IACA,IACA,GACA,IACA,IACA,EACA,EACA,EACA,GACA,GACA,EACA,EACA,GACA,IACA,GACA,IACA,GACA,EACA,EACA,EACA,GACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,GACA,EACA,EACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,IACA,GACA,IACA,GACA,GACA,IACA,IACA,GACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,GACA,GACA,EACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,IACA,GACA,IACA,IACA,IACA,GACA,IACA,IACA,EACA,GACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,EACA,EACA,EACA,IACA,GACA,EACA,GACA,EAEA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGFssH,EAAAA,iBAA2B,SACzBqkC,EACAC,EACAQ,QAAA,QAAAA,GAAAA,GAEA,IAAMr8F,EAASw4D,EAAOvtH,KACpBoxJ,EAAaugJ,EAAmCC,GAIlD,OAFAjhJ,EAAWl0J,KAAKs4D,EAAQq8F,EAAa,EAAI,GACzCR,EAAUn0J,KAAKs4D,EAAQq8F,EAAa,IAAM,KACnCr8F,CACR,EAEDu3D,EAAAA,iBAA2B,SAASqkC,GAClC,IAAMpxK,EAASoxK,EAAWpxK,OAGtB2Q,EAAQ,EACZ,GAAI3Q,EAAS2Q,EAAQ,GAA2B,KAAtBygK,EAAWzgK,GAAiB,OAAO,KAI7D,GAAI3Q,GAHJ2Q,GAAS,GAGY,KAA2B,IAApBygK,EAAWzgK,IAAgB,OAAO,KAE9D,IAAM2hT,EAA2B,IAApBlhJ,EAAWzgK,GAExB,GAAI2hT,EAAO,GAAKA,EAAO,EAAG,OAAO,KACjC,GAAItyT,GAFJ2Q,GAAS,GAEY2hT,EAAM,OAAO,KAGlC,IAAM5oS,EAAM0nJ,EAAWzgK,EAAQ2hT,EAAO,IAAMA,EAAO,EAAIlhJ,EAAWzgK,EAAQ2hT,EAAO,IAAM,EAAI,GAE3F,OAAItyT,GADJ2Q,GAAS2hT,GACY5oS,GAInB1pB,EAAS2Q,EAAQ,GACK,IAAtBygK,EAAWzgK,IACe,IAA1BygK,EAAWzgK,EAAQ,IACO,IAA1BygK,EAAWzgK,EAAQ,IAQnB3Q,GAJF2Q,GAAS,GAIU,GACK,IAAtBygK,EAAWzgK,IACXygK,EAAWzgK,EAAQ,GAAK,IACxB3Q,EAAS2Q,EAAQ,EAAIygK,EAAWzgK,EAAQ,GAlBT,KAuB1BygK,EAAWrgK,MAAMJ,EAAQ,EAAGA,EAAQ,EAAIygK,EAAWzgK,EAAQ,GACnE,EAEDo8H,EAAAA,mBAA6B,SAAS0M,GACpC,IAAMh/H,EAAIuzH,EAAOivD,MAAM,GAAI,GACrBxoL,EAAIu5H,EAAOivD,MAAM,GAAI,GAErBj9L,EAASy5I,EAAUz5I,OACrB2Q,EAAQ,EAGZ,GAA2B,KAAvB8oI,EAAU9oI,KACZ,OAAO,KAIT,IAAI4hT,EAAU94K,EAAU9oI,KACxB,GAAc,IAAV4hT,IACF5hT,GAAS4hT,EAAU,KACPvyT,EACV,OAAO,KAKX,GAA2B,IAAvBy5I,EAAU9oI,KACZ,OAAO,KAIT,IAAIk+J,EAAOp1B,EAAU9oI,KACrB,GAAW,IAAPk+J,EAAa,CAEf,GAAIl+J,GADJ4hT,EAAU1jJ,EAAO,KACK7uK,EACpB,OAAO,KAET,KAAOuyT,EAAU,GAA0B,IAArB94K,EAAU9oI,GAAiBA,GAAS,EAAG4hT,GAAW,GACxE,IAAK1jJ,EAAO,EAAG0jJ,EAAU,EAAG5hT,GAAS,EAAG4hT,GAAW,EAAG1jJ,GAAQA,GAAQ,GAAKp1B,EAAU9oI,EACtF,CACD,GAAIk+J,EAAO7uK,EAAS2Q,EAClB,OAAO,KAET,IAAI6hT,EAAS7hT,EAIb,GAHAA,GAASk+J,EAGkB,IAAvBp1B,EAAU9oI,KACZ,OAAO,KAIT,IAAIm+J,EAAOr1B,EAAU9oI,KACrB,GAAW,IAAPm+J,EAAa,CAEf,GAAIn+J,GADJ4hT,EAAUzjJ,EAAO,KACK9uK,EACpB,OAAO,KAET,KAAOuyT,EAAU,GAA0B,IAArB94K,EAAU9oI,GAAiBA,GAAS,EAAG4hT,GAAW,GACxE,IAAKzjJ,EAAO,EAAGyjJ,EAAU,EAAG5hT,GAAS,EAAG4hT,GAAW,EAAGzjJ,GAAQA,GAAQ,GAAKr1B,EAAU9oI,EACtF,CACD,GAAIm+J,EAAO9uK,EAAS2Q,EAClB,OAAO,KAET,IAAI8hT,EAAS9hT,EAIb,IAHAA,GAASm+J,EAGFD,EAAO,GAA2B,IAAtBp1B,EAAU+4K,GAAkB3jJ,GAAQ,EAAG2jJ,GAAU,GAEpE,GAAI3jJ,EAAO,GACT,OAAO,KAET,IAAM6jJ,EAASj5K,EAAU1oI,MAAMyhT,EAAQA,EAAS3jJ,GAIhD,IAHA6jJ,EAAOx1S,KAAKzC,EAAG,GAAKi4S,EAAO1yT,QAGpB8uK,EAAO,GAA2B,IAAtBr1B,EAAUg5K,GAAkB3jJ,GAAQ,EAAG2jJ,GAAU,GAEpE,GAAI3jJ,EAAO,GACT,OAAO,KAET,IAAM6jJ,EAASl5K,EAAU1oI,MAAM0hT,EAAQA,EAAS3jJ,GAGhD,OAFA6jJ,EAAOz1S,KAAKzI,EAAG,GAAKk+S,EAAO3yT,QAEpB,CAAEya,EAAGA,EAAGhG,EAAGA,EACnB,6GCzoBD,eAGM44J,EAAK,IAAI6B,EAFJsL,EAAAA,MAAAA,IAEO,aACZo4I,EAAWvlJ,EAAGpL,MAOpBl1B,EAAAA,iBAA2B,SAASqkC,EAAoBS,QAAA,QAAAA,GAAAA,GACtD,IAAMl4J,EAAI,IAAIw4I,EAAGif,GACjB,GAAIz3J,EAAEi7M,KAAKg+F,EAAS9gT,IAAM,EACxB,MAAM,IAAIiB,MAAM,iCAGlB,IAAM2a,EAAQ2/I,EAAGxzJ,EAAE0rI,IAAI5rI,GACvB,OAAOk5S,EAAYnlS,EAAMxW,OAAQwW,EAAMvW,OAAQ06J,EAChD,EAED9kC,EAAAA,qBAA+B,SAASqkC,GACtC,IAAMm8H,EAAK,IAAIp7I,EAAGif,GAClB,GAAIm8H,EAAG34E,KAAKg+F,EAAS9gT,IAAM,GAAKy7R,EAAGhpJ,SACjC,MAAM,IAAIxxI,MAAM,gCAGlB,OAAOw6R,EAAGp9H,KAAKyiJ,EAAS9gT,GAAGu4M,YAAYr8E,EAAQ,KAAM,GACtD,EAEDjB,EAAAA,gBAA0B,SAAS0kL,GACjC,IAAIh3S,EAAI,IAAI03I,EAAGs/J,EAAOh3S,GAClBA,EAAEm6M,KAAKg+F,EAAS9gT,IAAM,IACxB2I,EAAI,IAAI03I,EAAG,IAGb,IAAI19I,EAAI,IAAI09I,EAAGs/J,EAAOh9S,GAKtB,OAJIA,EAAEmgN,KAAKg+F,EAAS9gT,IAAM,IACxB2C,EAAI,IAAI09I,EAAG,IAGNnkB,EAAOmQ,OAAO,CAAC1jI,EAAE4vM,YAAYr8E,EAAQ,KAAM,IAAKv5H,EAAE41M,YAAYr8E,EAAQ,KAAM,KACpF,EAEDjB,EAAAA,WAAqB,SACnBskC,EACAD,EACAS,QAAA,QAAAA,GAAAA,GAEA,IAAMnkJ,EAAQ2/I,EAAGkC,cAAc8B,GAEzBp7J,EAAS,IAAIk8I,EAAGif,GACtB,GAAIn7J,EAAO2+M,KAAKg+F,EAAS9gT,IAAM,GAAKmE,EAAOsuI,SACzC,MAAM,IAAIxxI,MAAM,yCAGlB,IAAM+/S,EAASplS,EAAM6/I,IAAIhoB,IAAItvI,GAC7B,OAAO48S,EAAYC,EAAO57S,OAAQ47S,EAAO37S,OAAQ06J,EAClD,EAED,IAAMghJ,EAAc,SAASzuT,EAAOC,EAAOwtK,GACzC,IAAIR,EAaJ,OAXIQ,IACFR,EAAYrjC,EAAOivD,MAAM,KACf,GAAK54L,EAAE07J,QAAU,EAAO,EAClC37J,EAAEimN,YAAYr8E,EAAQ,KAAM,IAAI9wH,KAAKm0J,EAAW,MAEhDA,EAAYrjC,EAAOivD,MAAM,KACf,GAAK,EACf74L,EAAEimN,YAAYr8E,EAAQ,KAAM,IAAI9wH,KAAKm0J,EAAW,GAChDhtK,EAAEgmN,YAAYr8E,EAAQ,KAAM,IAAI9wH,KAAKm0J,EAAW,KAG3CA,CACR,0MC9ED,IAAMy7H,EAAYtyH,EAAQ,OAC1B,WACA,WACA,UA4IA,SAASu4I,EAAqB78S,EAAW0yH,GACvC,OAAOA,EAAU1yH,GAAK,EAAI0yH,EAAU,IAAM1yH,EAAI,EAC/C,CAED,SAAS88S,EAAmBjB,GAC1B,OAAoB,IAAbA,GAA+B,IAAbA,CAC1B,CAvIYhlL,EAAAA,OAAS,SACpBkmL,EACA7hJ,EACAxoC,GAEA,IAAMwiB,EAAM0hJ,EAAUp5Q,KAAKu/R,EAAS7hJ,GAC9B2gJ,EAAmB3mK,EAAI2mK,SAQ7B,MANY,CACVt3S,EAAG2wI,EAAI3R,UAAU1oI,MAAM,EAAG,IAC1B0D,EAAG22I,EAAI3R,UAAU1oI,MAAM,GAAI,IAC3BmF,EAAG0yH,EAAUmpL,GAAsB,EAAVnpL,EAAc,IAAMmpL,EAAW,GAI3D,EAMYhlL,EAAAA,UAAY,SACvBkmL,EACA/8S,EACAuE,EACAhG,EACAm0H,GAEA,IAAM6Q,EAAYzL,EAAOmQ,OAAO,CAAC+kK,EAAAA,UAAUzoS,EAAG,IAAKyoS,EAAAA,UAAUzuS,EAAG,KAAM,IAChEs9S,EAAWgB,EAAqB78S,EAAG0yH,GACzC,IAAKoqL,EAAmBjB,GACtB,MAAM,IAAIh/S,MAAM,6BAElB,IAAMmgT,EAAepmB,EAAU1pG,QAAQ6vH,EAASx5K,EAAWs4K,GAC3D,OAAOjlB,EAAU4iB,iBAAiBwD,GAAc,GAAOniT,MAAM,EAC9D,EAMYg8H,EAAAA,SAAW,SAAS72H,EAAWuE,EAAWhG,EAAWm0H,GAEhE,IAAKoqL,EADYD,EAAqB78S,EAAG0yH,IAEvC,MAAM,IAAI71H,MAAM,6BAIlB,OAAOmwS,EAAAA,YAAYl1K,EAAOmQ,OAAO,CAAC+kK,EAAAA,cAAczoS,EAAG,IAAKyoS,EAAAA,cAAczuS,EAAG,IAAKyuS,EAAAA,SAAShtS,KACxF,EAMY62H,EAAAA,WAAa,SAASqe,GACjC,IAAMmjB,EAAc20I,EAAAA,SAAS93J,GAG7B,GAAmB,KAAfmjB,EAAIvuK,OACN,MAAM,IAAI+S,MAAM,4BAGlB,IAAImD,EAAIq4J,EAAI,IAMZ,OAJIr4J,EAAI,KACNA,GAAK,IAGA,CACLA,EAAGA,EACHuE,EAAG8zJ,EAAIx9J,MAAM,EAAG,IAChB0D,EAAG85J,EAAIx9J,MAAM,GAAI,IAEpB,EAMYg8H,EAAAA,iBAAmB,SAC9B72H,EACAuE,EACAhG,EACA0+S,EACAvqL,QADA,QAAAuqL,GAAAA,GAGA,IAAMC,EAAoB,IAAIjhK,EAC5B,mEACA,IAEIkhK,EAAc,IAAIlhK,EAAG,mEAAoE,IAE/F,GAAiB,KAAb13I,EAAEza,QAA8B,KAAbyU,EAAEzU,OACvB,OAAO,EAGT,IAAKgzT,EAAmBD,EAAqB78S,EAAG0yH,IAC9C,OAAO,EAGT,IAAM0qL,EAAU,IAAInhK,EAAG13I,GACjB84S,EAAU,IAAIphK,EAAG19I,GAEvB,QAAI6+S,EAAI/uK,UAAY+uK,EAAIluK,GAAGiuK,IAAgBE,EAAIhvK,UAAYgvK,EAAInuK,GAAGiuK,OAI9DF,GAAmD,IAA/BI,EAAI9vJ,IAAI2vJ,GAKjC,EAQYrmL,EAAAA,oBAAsB,SAASt0C,GAC1C,IAAMtuB,EAAS6jE,EAAOvtH,KACpB,iCAAmCg4E,EAAQz4F,OAAO0L,WAClD,SAEF,OAAOi7S,EAAAA,OAAO34K,EAAOmQ,OAAO,CAACh0E,EAAQsuB,IACtC,mvBC7ID,kBACA,WACA,WAMA,UACA,UACA,WACA,WACA,WACA,WASA,aAqCE,WACEojD,EACA23K,EACAC,EACAC,QAHA,IAAA73K,IAAAA,EAAQ,IAAI83K,EAAAA,GAAG,SACf,IAAAH,IAAAA,EAAU,IAAIG,EAAAA,GAAG,SACjB,IAAAF,IAAAA,EAAYzQ,EAAAA,oBACZ,IAAA0Q,IAAAA,EAAW1Q,EAAAA,gBAEX5hT,KAAKy6I,MAAQA,EACbz6I,KAAKoyT,QAAUA,EACfpyT,KAAKqyT,UAAYA,EACjBryT,KAAKsyT,SAAWA,EAEhBtyT,KAAK68K,WACN,CAmDH,OA9FS21I,EAAAA,gBAAP,SAAuBC,GACb,IAAAh4K,EAAwCg4K,EAAW,MAA5CL,EAAiCK,EAAW,QAAnCJ,EAAwBI,EAAW,UAAxBH,EAAaG,EAAW,SAE3D,OAAO,IAAID,EACT/3K,EAAQ,IAAI83K,EAAAA,IAAG,IAAAp1K,UAAS1C,SAAUpxI,EAClC+oT,EAAU,IAAIG,EAAAA,IAAG,IAAAp1K,UAASi1K,SAAY/oT,EACtCgpT,GAAY,IAAAl1K,UAASk1K,QAAahpT,EAClCipT,GAAW,IAAAn1K,UAASm1K,QAAYjpT,EAEnC,EAEampT,EAAAA,yBAAd,SAAuCE,GACrC,IAAMh2R,EAAS61R,EAAAA,IAAIriN,OAAOwiN,GAE1B,IAAK70T,MAAMC,QAAQ4+B,GACjB,MAAM,IAAI/qB,MAAM,mDAGlB,OAAO3R,KAAK2yT,gBAAgBj2R,EAC7B,EAEa81R,EAAAA,gBAAd,SAA8B91R,GACtB,QAAwCA,EAAM,GAA7C+9G,EAAK,KAAE23K,EAAO,KAAEC,EAAS,KAAEC,EAAQ,KAE1C,OAAO,IAAIE,EAAQ,IAAID,EAAAA,GAAG93K,GAAQ,IAAI83K,EAAAA,GAAGH,GAAUC,EAAWC,EAC/D,EAoBOE,EAAAA,UAAAA,UAAR,WACE,GAAIxyT,KAAKy6I,MAAMwJ,GAAG,IAAIsuK,EAAAA,GAAG,IACvB,MAAM,IAAI5gT,MAAM,mCAElB,GAAI3R,KAAKoyT,QAAQnuK,GAAG,IAAIsuK,EAAAA,GAAG,IACzB,MAAM,IAAI5gT,MAAM,qCAElB,GAA8B,KAA1B3R,KAAKqyT,UAAUzzT,OACjB,MAAM,IAAI+S,MAAM,sCAElB,GAA6B,KAAzB3R,KAAKsyT,SAAS1zT,OAChB,MAAM,IAAI+S,MAAM,oCAEnB,EAKD6gT,EAAAA,UAAAA,IAAAA,WACE,MAAO,EACL,IAAAI,oBAAmB5yT,KAAKy6I,QACxB,IAAAm4K,oBAAmB5yT,KAAKoyT,SACxBpyT,KAAKqyT,UACLryT,KAAKsyT,SAER,EAKDE,EAAAA,UAAAA,UAAAA,WACE,OAAOD,EAAAA,IAAIj4K,OAAOt6I,KAAKuzK,MACxB,EAKDi/I,EAAAA,UAAAA,WAAAA,WACE,OAAQxyT,KAAKsyT,SAAShkS,OAAOszR,EAAAA,eAC9B,EAOD4Q,EAAAA,UAAAA,QAAAA,WACE,OAAOxyT,KAAKoyT,QAAQjvK,UAAYnjJ,KAAKy6I,MAAM0I,UAAYnjJ,KAAKsyT,SAAShkS,OAAOszR,EAAAA,eAC7E,EACH,CAAC,CApGD,GAAaj2K,EAAAA,QAAAA,EAyGAA,EAAAA,eAAiB,SAAUknL,GACtC,KACE,IAAAC,gBAAeD,EAGhB,CAFC,MAAO7rT,GACP,OAAO,CACR,CAED,MAAO,sBAAsByW,KAAKo1S,EACnC,EAcYlnL,EAAAA,kBAAoB,SAAUknL,EAAoBhF,IAC7D,IAAAkF,mBAAkBF,GAClB,IAAM5yK,GAAU,IAAA8rK,gBAAe8G,GAAYtiT,cAEvCw4D,EAAS,GACT8kP,IAEF9kP,GADgB,IAAAiqP,QAAOnF,EAAgB34K,EAAAA,WAAW6b,IACjCzmJ,WAAa,MAMhC,IAHA,IAAM6kE,GAAO,IAAA8jP,kBAAiBlqP,EAASk3E,GAAS31I,SAAS,OACrD0+M,EAAM,KAEDprN,EAAI,EAAGA,EAAIqiJ,EAAQrhJ,OAAQhB,IAC9B0e,SAAS6yD,EAAKvxE,GAAI,KAAO,EAC3BorN,GAAO/oE,EAAQriJ,GAAG8jE,cAElBsnJ,GAAO/oE,EAAQriJ,GAInB,OAAOorN,CACR,EAOYr9E,EAAAA,uBAAyB,SACpCknL,EACAhF,GAEA,OAAO,IAAAqF,gBAAeL,KAAe,IAAAM,mBAAkBN,EAAYhF,KAAoBgF,CACxF,EAOYlnL,EAAAA,gBAAkB,SAAUtsH,EAAco7H,IACrD,IAAA24K,gBAAe/zS,IACf,IAAA+zS,gBAAe34K,GACf,IAAMqzK,EAAU,IAAIyE,EAAAA,GAAG93K,GAEvB,OAAIqzK,EAAQ3qK,UAGH,IAAAkwK,SAAQ,CAACh0S,EAAM,OAAO1P,OAAO,KAI/B,IAAA0jT,SAAQ,CAACh0S,EAAMutH,EAAOvtH,KAAKyuS,EAAQxyR,aAAa3rB,OAAO,GAC/D,EAQYg8H,EAAAA,iBAAmB,SAAUtsH,EAAck7H,EAAcgqK,GAYpE,OAXA,IAAA6O,gBAAe/zS,IACf,IAAA+zS,gBAAe74K,IACf,IAAA64K,gBAAe7O,IAEf,aAAuB,KAAhBllS,EAAKzgB,SACZ,aAAuB,KAAhB27I,EAAK37I,SAEI,IAAAw7I,WACdxN,EAAOmQ,OAAO,CAACnQ,EAAOvtH,KAAK,KAAM,OAAQA,EAAMk7H,GAAM,IAAAH,WAAUmqK,MAGlD50S,OAAO,GACvB,EAKYg8H,EAAAA,eAAiB,SAAUqkC,GACtC,OAAO,IAAAk+I,kBAAiBl+I,EACzB,EAQYrkC,EAAAA,cAAgB,SAAUskC,EAAmBk+I,GAExD,YAFwD,IAAAA,IAAAA,GAAAA,IACxD,IAAAiF,gBAAenjJ,GACU,KAArBA,EAAUrxK,QAEL,IAAAwvT,iBAAgBxhL,EAAOmQ,OAAO,CAACnQ,EAAOvtH,KAAK,CAAC,IAAK4wJ,OAGrDk+I,IAIE,IAAAC,iBAAgBn+I,EACxB,EAQYtkC,EAAAA,aAAe,SAAU0iL,EAAgBF,GAOpD,YAPoD,IAAAA,IAAAA,GAAAA,IACpD,IAAAiF,gBAAe/E,GACXF,GAA8B,KAAlBE,EAAOzvT,SACrByvT,EAASzhL,EAAOvtH,MAAK,IAAAivS,kBAAiBD,GAAQ,GAAO1+S,MAAM,MAE7D,aAAyB,KAAlB0+S,EAAOzvT,SAEP,IAAA00T,QAAOjF,GAAQ1+S,OAAO,GAC9B,EACYg8H,EAAAA,gBAAkBA,EAAAA,aAMlBA,EAAAA,gBAAkB,SAAUqkC,GAGvC,OAFA,IAAAojJ,gBAAepjJ,GAERpjC,EAAOvtH,MAAK,IAAAkvS,iBAAgBv+I,GAAY,IAAQrgK,MAAM,EAC9D,EAMYg8H,EAAAA,iBAAmB,SAAUqkC,GACxC,OAAO,IAAAujJ,kBAAgB,IAAAC,iBAAgBxjJ,GACxC,EAKYrkC,EAAAA,aAAe,SAAUskC,GAKpC,OAJA,IAAAmjJ,gBAAenjJ,GACU,KAArBA,EAAUrxK,SACZqxK,EAAYrjC,EAAOvtH,MAAK,IAAAivS,kBAAiBr+I,GAAW,GAAOtgK,MAAM,KAE5DsgK,CACR,EAKYtkC,EAAAA,YAAc,WACzB,IACMpwE,GAAO,IAAA8sJ,OADS,IAEtB,OAAO,IAAAorG,aAAYl4P,EACpB,EAKYowE,EAAAA,cAAgB,SAAUknL,GACrC,KACE,IAAAC,gBAAeD,EAGhB,CAFC,MAAO7rT,GACP,OAAO,CACR,CAGD,OADiB,IAAA0sT,iBACGb,CACrB,8MChUD,kBACA,WACA,WACA,WAQA,aAGE,WAAY1lJ,IACV,aAAsB,KAAfA,EAAIvuK,OAAe,0BAC1BoB,KAAKmtK,IAAMA,CACZ,CAmGH,OA9FSwmJ,EAAAA,KAAP,WACE,OAAO,IAAIA,GAAQ,IAAAtrG,OAAM,IAC1B,EAMMsrG,EAAAA,WAAP,SAAkB/hJ,GAEhB,OADA,cAAO,IAAAshJ,gBAAethJ,GAAM,mBACrB,IAAI+hJ,GAAQ,IAAAx2K,UAASy0B,GAC7B,EAMM+hJ,EAAAA,cAAP,SAAqBtF,GAGnB,OAFA,aAAOzhL,EAAOk2D,SAASurH,GAAS,+BAEzB,IAAIsF,GADC,IAAAC,cAAavF,GAE1B,EAMMsF,EAAAA,eAAP,SAAsB3jJ,GAGpB,OAFA,aAAOpjC,EAAOk2D,SAAS9yB,GAAa,gCAE7B,IAAI2jJ,GADC,IAAAE,kBAAiB7jJ,GAE9B,EAOM2jJ,EAAAA,SAAP,SAAgBt0S,EAAeo7H,GAE7B,OADA,aAAO83K,EAAAA,GAAGjrG,KAAK7sE,IACR,IAAIk5K,GAAQ,IAAAG,iBAAgBz0S,EAAK8tJ,IAAK1yB,EAAMwuE,YAAYr8E,IAChE,EAQM+mL,EAAAA,UAAP,SAAiBt0S,EAAek7H,EAAcgqK,GAG5C,OAFA,aAAO33K,EAAOk2D,SAASvoD,KACvB,aAAO3N,EAAOk2D,SAASyhH,IAChB,IAAIoP,GAAQ,IAAAI,kBAAiB10S,EAAK8tJ,IAAK5yB,EAAMgqK,GACrD,EAKDoP,EAAAA,UAAAA,OAAAA,SAAO1zK,GACL,OAAOjgJ,KAAKmtK,IAAI7+I,OAAO2xH,EAAQktB,IAChC,EAKDwmJ,EAAAA,UAAAA,OAAAA,WACE,OAAO3zT,KAAKsuB,OAAOqlS,EAAQ7zJ,OAC5B,EAMD6zJ,EAAAA,UAAAA,4BAAAA,WACE,IAAMK,EAAY,IAAIzB,EAAAA,GAAGvyT,KAAKmtK,KACxB8mJ,EAAW,IAAI1B,EAAAA,GAAG,GAClB2B,EAAW,IAAI3B,EAAAA,GAAG,OAAQ,OAEhC,OAAOyB,EAAUzhK,IAAI0hK,IAAaD,EAAU1hK,IAAI4hK,EACjD,EAKDP,EAAAA,UAAAA,SAAAA,WACE,MAAO,KAAO3zT,KAAKmtK,IAAI7iK,SAAS,MACjC,EAKDqpT,EAAAA,UAAAA,SAAAA,WACE,OAAO/mL,EAAOvtH,KAAKrf,KAAKmtK,IACzB,EACH,CAAC,CAzGD,GAAaxhC,EAAAA,QAAAA,6+BCXb,eACA,UAQA,WAOaA,EAAAA,SAAW,SAAU/tI,GAChC,IAAKgF,OAAOuxT,cAAcv2T,IAAMA,EAAI,EAClC,MAAM,IAAI+T,MAAM,4CAAqC/T,IAEvD,MAAO,YAAKA,EAAE0M,SAAS,IACxB,EAOYqhI,EAAAA,YAAc,SAAU/tI,GACnC,IAAMoe,GAAM,IAAAo4S,UAASx2T,GACrB,OAAOgvI,EAAOvtH,MAAK,IAAAmvS,WAAUxyS,EAAIrM,MAAM,IAAK,MAC7C,EAMYg8H,EAAAA,MAAQ,SAAUya,GAC7B,OAAOxZ,EAAOigI,YAAYzmH,GAAOhyF,KAAK,EACvC,EAUD,IAAMigQ,EAAY,SAAU5lL,EAAa7vI,EAAgB2H,GACvD,IAAM4mK,GAAM,IAAAk7C,OAAMzpN,GAClB,OAAI2H,EACEkoI,EAAI7vI,OAASA,GACf6vI,EAAI3yH,KAAKqxJ,GACFA,GAEF1+B,EAAI9+H,MAAM,EAAG/Q,GAEhB6vI,EAAI7vI,OAASA,GACf6vI,EAAI3yH,KAAKqxJ,EAAKvuK,EAAS6vI,EAAI7vI,QACpBuuK,GAEF1+B,EAAI9+H,OAAO/Q,EAErB,EASY+sI,EAAAA,cAAgB,SAAU8C,EAAa7vI,GAElD,OADA,IAAAw0T,gBAAe3kL,GACR4lL,EAAU5lL,EAAK7vI,GAAQ,EAC/B,EASY+sI,EAAAA,eAAiB,SAAU8C,EAAa7vI,GAEnD,OADA,IAAAw0T,gBAAe3kL,GACR4lL,EAAU5lL,EAAK7vI,GAAQ,EAC/B,EAOD,IAAM+xJ,EAAa,SAAU7mJ,GAE3B,IADA,IAAIg8M,EAAQh8M,EAAE,GACPA,EAAElL,OAAS,GAA0B,MAArBknN,EAAMx7M,YAE3Bw7M,GADAh8M,EAAIA,EAAE6F,MAAM,IACF,GAEZ,OAAO7F,CACR,EAOY6hI,EAAAA,YAAc,SAAU7hI,GAEnC,OADA,IAAAspT,gBAAetpT,GACR6mJ,EAAW7mJ,EACnB,EAOY6hI,EAAAA,WAAa,SAAU7hI,GAElC,OADA,IAAAwqT,eAAcxqT,GACP6mJ,EAAW7mJ,EACnB,EAOY6hI,EAAAA,eAAiB,SAAU7hI,GAGtC,OAFA,IAAAipT,mBAAkBjpT,GAClBA,GAAI,IAAAiiT,gBAAejiT,GACZ6mJ,EAAW7mJ,EACnB,EAoBY6hI,EAAAA,SAAW,SAAU72H,GAChC,GAAU,OAANA,QAAoBzL,IAANyL,EAChB,OAAO83H,EAAOigI,YAAY,GAG5B,GAAIjgI,EAAOk2D,SAAShuL,GAClB,OAAO83H,EAAOvtH,KAAKvK,GAGrB,GAAIjX,MAAMC,QAAQgX,IAAMA,aAAatD,WACnC,OAAOo7H,EAAOvtH,KAAKvK,GAGrB,GAAiB,kBAANA,EAAgB,CACzB,KAAK,IAAAgoI,aAAYhoI,GACf,MAAM,IAAInD,MACR,qHAA8GmD,IAGlH,OAAO83H,EAAOvtH,MAAK,IAAAmvS,YAAU,IAAAzC,gBAAej3S,IAAK,MAClD,CAED,GAAiB,kBAANA,EACT,OAAO,IAAA25S,aAAY35S,GAGrB,GAAIy9S,EAAAA,GAAGjrG,KAAKxyM,GAAI,CACd,GAAIA,EAAE88I,QACJ,MAAM,IAAIjgJ,MAAM,uDAAgDmD,IAElE,OAAOA,EAAEm0M,YAAYr8E,EACtB,CAED,GAAI93H,EAAEwmB,QAEJ,OAAOsxG,EAAOvtH,KAAKvK,EAAEwmB,WAGvB,GAAIxmB,EAAEqoI,SACJ,OAAOvQ,EAAOvtH,KAAKvK,EAAEqoI,YAGvB,MAAM,IAAIxrI,MAAM,eACjB,EAOYg6H,EAAAA,YAAc,SAAUwhC,GACnC,OAAO,IAAIolJ,EAAAA,IAAG,IAAAp1K,UAASgwB,IAAMz0B,UAC9B,EAMY/M,EAAAA,YAAc,SAAUwhC,GAEnC,MAAO,MADPA,GAAM,IAAAhwB,UAASgwB,IACG7iK,SAAS,MAC5B,EAMYqhI,EAAAA,WAAa,SAAU0yB,GAClC,OAAO,IAAIk0J,EAAAA,GAAGl0J,GAAK9Z,SAAS,IAC7B,EAMY5Y,EAAAA,WAAa,SAAU0yB,GAClC,OAAOzxB,EAAOvtH,KAAKg/I,EAAI/Z,OAAO,KAAKhpH,UACpC,EAKYqwG,EAAAA,aAAe,SAAUimC,GACpC,MAAmB,kBAARA,IAIJ,IAAAk6I,eAAcl6I,GAHZA,EAGyB,KAAOA,CAC1C,EAmBYjmC,EAAAA,OAAS,SAAU3vH,GAG9B,IADAA,GAAM,IAAA+vS,gBAAe/vS,IACbpd,OAAS,IAAM,EACrB,MAAM,IAAI+S,MAAM,2DAIlB,OAFkBi7H,EAAOvtH,KAAKrD,EAAI2mD,QALd,iBAKmC,IAAK,OAE3Cr4D,SAAS,OAC3B,EAOYqhI,EAAAA,SAAW,SAAU+iL,GAChC,GAAI9hL,EAAOk2D,SAAS4rH,GAClB,MAAO,YAAKA,EAAGpkT,SAAS,QACnB,GAAIokT,aAAc7wT,MAAO,CAE9B,IADA,IAAM6R,EAAQ,GACL9R,EAAI,EAAGA,EAAI8wT,EAAG9vT,OAAQhB,IAC7B8R,EAAMhR,MAAK,IAAA61T,UAAS7F,EAAG9wT,KAEzB,OAAO8R,CACR,CACF,EAeYi8H,EAAAA,wBAA0B,SAAUjvG,eAC/C,IAAqB,QAAAx7B,OAAOi6H,QAAQz+F,IAAO83R,EAAAA,EAAAA,QAAA,OAAAA,EAAAA,EAAAA,OAAE,CAAlC,mBAACz/O,EAAC,KAAEjgE,EAAC,KACd,QAAUzL,IAANyL,GAAmBA,EAAElW,OAAS,GAAc,IAATkW,EAAE,GACvC,MAAM,IAAInD,MAAM,UAAGojE,EAAC,2CAAAgoE,OAA0CjoI,EAAExK,SAAS,QAE5E,mGACF,EAQDqhI,EAAAA,YAAA,SAAgB8oL,EAAY92T,GAC1B,OAAKE,MAAMC,QAAQH,GAGZA,EAAIiI,KAAI,SAACkE,GAAM,OAAA2qT,EAAY3qT,EAAE,IAF3B8iI,EAAOvtH,KAAK1hB,EAGtB,EAQDguI,EAAAA,YAAA,SAAgB+oL,EAAY/2T,GAC1B,OAAKE,MAAMC,QAAQH,GAGZA,EAAIiI,KAAI,SAACkE,GAAM,OAAA4qT,EAAY5qT,EAAE,IAF3B0H,WAAW6N,KAAQ,OAAH1hB,QAAG,IAAHA,EAAAA,EAAO,GAGjC,yPC7UD,eACA,WAKaguI,EAAAA,WAAa,IAAI4mL,EAAAA,GAAG,mBAAoB,IAKxC5mL,EAAAA,YAAc,IAAI4mL,EAAAA,GAC7B,mEACA,IAMW5mL,EAAAA,WAAa,IAAI4mL,EAAAA,GAC5B,oEACA,IAMW5mL,EAAAA,iBAAmB,mEAKnBA,EAAAA,eAAiBgpL,EAAAA,OAAOt1S,KAAKssH,EAAAA,iBAAkB,OAK/CA,EAAAA,sBACX,mEAKWA,EAAAA,oBAAsBgpL,EAAAA,OAAOt1S,KAAKssH,EAAAA,sBAAuB,OAKzDA,EAAAA,gBAAkB,mEAKlBA,EAAAA,cAAgBgpL,EAAAA,OAAOt1S,KAAKssH,EAAAA,gBAAiB,s0BC/C1D,kBAMSA,EAAAA,GANFw4K,EAAAA,QACP,kBAUSx4K,EAAAA,IAAAA,mTCjBT,cACMg/F,EAAavxD,EAAQ,OAC3B,WACA,WACA,WAOaztC,EAAAA,OAAS,SAAU7hI,EAAWovF,GAEzC,YAFyC,IAAAA,IAAAA,EAAAA,MACzC,IAAAk6N,gBAAetpT,GACPovF,GACN,KAAK,IACH,OAAO,IAAAy1N,WAAU7kT,GAEnB,KAAK,IACH,OAAO,eAAKA,GAEd,KAAK,IACH,OAAO,IAAA8kT,WAAU9kT,GAEnB,KAAK,IACH,OAAO,IAAA+kT,WAAU/kT,GAEnB,QACE,MAAM,IAAI6H,MAAM,kCAA2BunF,IAGhD,EAMYyyC,EAAAA,UAAY,SAAU7hI,GACjC,OAAO,IAAAwpT,QAAOxpT,EACf,EAOY6hI,EAAAA,iBAAmB,SAAU7hI,EAAWovF,QAAA,IAAAA,IAAAA,EAAAA,MACnD,IAAA45N,gBAAehpT,GACf,IAAMqjK,EAAMvgC,EAAOvtH,KAAKvV,EAAG,QAC3B,OAAO,IAAAwpT,QAAOnmJ,EAAKj0E,EACpB,EAOYyyC,EAAAA,oBAAsB,SAAU7hI,EAAWovF,GAEtD,YAFsD,IAAAA,IAAAA,EAAAA,MACtD,IAAA65N,mBAAkBjpT,IACX,IAAAwpT,SAAO,IAAAn2K,UAASrzI,GAAIovF,EAC5B,EAOYyyC,EAAAA,gBAAkB,SAAU7hI,EAAaovF,GAEpD,YAFoD,IAAAA,IAAAA,EAAAA,MACpD,IAAAo7N,eAAcxqT,IACP,IAAAwpT,SAAO,IAAAn2K,UAASrzI,GAAIovF,EAC5B,EAMD,IAAM07N,EAAU,SAAU9qT,GAExB,OADAA,GAAI,IAAAqzI,UAASrzI,GACN6gO,EAAW,UAAU7lN,OAAOhb,GAAG6hK,QACvC,EAMYhgC,EAAAA,OAAS,SAAU7hI,GAE9B,OADA,IAAAspT,gBAAetpT,GACR8qT,EAAQ9qT,EAChB,EAMY6hI,EAAAA,iBAAmB,SAAU7hI,GAExC,OADA,IAAAgpT,gBAAehpT,GACR8qT,EAAQ9qT,EAChB,EAMY6hI,EAAAA,gBAAkB,SAAU7hI,GAEvC,OADA,IAAAwqT,eAAcxqT,GACP8qT,EAAQ9qT,EAChB,EAOD,IAAM+qT,EAAa,SAAU/qT,EAAQ4oQ,GACnC5oQ,GAAI,IAAAqzI,UAASrzI,GACb,IAAMqlE,EAAOw7J,EAAW,UAAU7lN,OAAOhb,GAAG6hK,SAC5C,OAAe,IAAX+mG,GACK,IAAA26C,eAAcl+O,EAAM,IAEpBA,CAEV,EAOYw8D,EAAAA,UAAY,SAAU7hI,EAAW4oQ,GAE5C,OADA,IAAA0gD,gBAAetpT,GACR+qT,EAAW/qT,EAAG4oQ,EACtB,EAOY/mI,EAAAA,oBAAsB,SAAU7hI,EAAW4oQ,GAEtD,OADA,IAAAogD,gBAAehpT,GACR+qT,EAAW/qT,EAAG4oQ,EACtB,EAOY/mI,EAAAA,mBAAqB,SAAU7hI,EAAa4oQ,GAEvD,OADA,IAAA4hD,eAAcxqT,GACP+qT,EAAW/qT,EAAG4oQ,EACtB,EAMY/mI,EAAAA,QAAU,SAAU7hI,GAC/B,OAAO,IAAAwpT,QAAOf,EAAAA,IAAIj4K,OAAOxwI,GAC1B,0LC9JD,cAMa6hI,EAAAA,kBAAoB,SAAUxJ,GACzC,KAAK,IAAA2a,aAAY3a,GAAQ,CACvB,IAAMsM,EAAM,2EAAoEtM,GAChF,MAAM,IAAIxwH,MAAM88H,EACjB,CACF,EAMY9C,EAAAA,eAAiB,SAAUxJ,GACtC,IAAKyK,EAAOk2D,SAAS3gE,GAAQ,CAC3B,IAAMsM,EAAM,0DAAmDtM,GAC/D,MAAM,IAAIxwH,MAAM88H,EACjB,CACF,EAMY9C,EAAAA,cAAgB,SAAUxJ,GACrC,IAAKtkI,MAAMC,QAAQqkI,GAAQ,CACzB,IAAMsM,EAAM,iEAA0DtM,GACtE,MAAM,IAAIxwH,MAAM88H,EACjB,CACF,EAMY9C,EAAAA,eAAiB,SAAUxJ,GACtC,GAAqB,kBAAVA,EAAoB,CAC7B,IAAMsM,EAAM,2DAAoDtM,GAChE,MAAM,IAAIxwH,MAAM88H,EACjB,CACF,6pBCzCD8lJ,EAAAA,EAAAA,MAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKAA,EAAAA,EAAAA,OAAAA,GAKA,cACErzR,OAAAA,eAAAA,EAAAA,gBAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAshT,aAAa,IACb5qT,OAAAA,eAAAA,EAAAA,iBAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAuhT,cAAc,IACd7qT,OAAAA,eAAAA,EAAAA,YAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAgkT,SAAS,IACTttT,OAAAA,eAAAA,EAAAA,gBAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAsqT,aAAa,IACb5zT,OAAAA,eAAAA,EAAAA,qBAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAuqT,kBAAkB,IAClB7zT,OAAAA,eAAAA,EAAAA,UAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAwqT,OAAO,IACP9zT,OAAAA,eAAAA,EAAAA,WAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAyqT,QAAQ,IACR/zT,OAAAA,eAAAA,EAAAA,YAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAA0qT,SAAS,IACTh0T,OAAAA,eAAAA,EAAAA,UAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAshP,OAAO,IACP5qP,OAAAA,eAAAA,EAAAA,cAAAA,CAAAE,YAAAA,EAAAoJ,IAAAA,WAAA,SAAAsyI,WAAW,6DC5Bb,SAAgBgvK,EAAcl6I,GAC5B,GAAmB,kBAARA,EACT,MAAM,IAAIjgK,MAAM,4EAAqEigK,IAGvF,MAAkB,MAAXA,EAAI,IAAyB,MAAXA,EAAI,EAC9B,oMANDjmC,EAAAA,cAAAA,EAyBA,SAAgB6iL,EAAU7vT,GACxB,IAAImL,EAAInL,EAER,GAAiB,kBAANmL,EACT,MAAM,IAAI6H,MAAM,mEAA4D7H,IAK9E,OAFIA,EAAElL,OAAS,IAAGkL,EAAI,WAAIA,IAEnBA,CACR,CAtBY6hI,EAAAA,eAAiB,SAACimC,GAC7B,GAAmB,kBAARA,EACT,MAAM,IAAIjgK,MAAM,wEAAiEigK,IAEnF,OAAOk6I,EAAcl6I,GAAOA,EAAIjiK,MAAM,GAAKiiK,CAC5C,EAODjmC,EAAAA,UAAAA,EAiBAA,EAAAA,cAAA,SAA8BimC,GAC5B,GAAmB,kBAARA,EACT,MAAM,IAAIjgK,MAAM,+EAAwEigK,IAG1F,OAAOhlC,EAAOv9B,WAAWuiE,EAAK,OAC/B,EAUDjmC,EAAAA,mBAAA,SACEwpL,EACAC,EACAryG,GAEA,IAAgC,IAA5BllN,MAAMC,QAAQq3T,GAChB,MAAM,IAAIxjT,MACR,iGAA0FwjT,EAAQ,MAGtG,IAA8B,IAA1Bt3T,MAAMC,QAAQs3T,GAChB,MAAM,IAAIzjT,MACR,+FAAwFyjT,EAAM,MAIlG,OAAOA,EAAOryG,EAAO,OAAS,UAAS,SAACpkN,GAAU,OAAAw2T,EAASryT,QAAQnE,IAAU,CAAC,GAC/E,EAQDgtI,EAAAA,QAAA,SAAwB3vH,GACtB,IAAI41J,EAAM,GACNh0K,EAAI,EACFgS,EAAIoM,EAAIpd,OAId,IAF4B,OAAxBod,EAAIk9F,UAAU,EAAG,KAAat7G,EAAI,GAE/BA,EAAIgS,EAAGhS,GAAK,EAAG,CACpB,IAAMosE,EAAO1tD,SAASN,EAAI24J,OAAO/2K,EAAG,GAAI,IACxCg0K,GAAOnkI,OAAO2kE,aAAapoC,EAC5B,CAED,OAAO4nG,CACR,EASDjmC,EAAAA,SAAA,SAAyB0pL,GACvB,IAAMzjJ,EAAMhlC,EAAOvtH,KAAKg2S,EAAa,QAErC,MAAO,YAAK7G,EAAU58I,EAAItnK,SAAS,QAAQq4D,QAAQ,WAAY,IAChE,EASDgpE,EAAAA,UAAA,SAA0B0pL,GAExB,IADA,IAAIr5S,EAAM,GACDpe,EAAI,EAAGA,EAAIy3T,EAAYz2T,OAAQhB,IAAK,CAC3C,IACM8S,EADO2kT,EAAYxlK,WAAWjyJ,GACrB0M,SAAS,IACxB0R,GAAOtL,EAAE9R,OAAS,EAAI,WAAI8R,GAAMA,CACjC,CAED,MAAO,YAAKsL,EACb,EAaD2vH,EAAAA,QAAA,SAAwBt4E,EAAkCpyD,EAAaq0T,GACrE,IAAKz3T,MAAMC,QAAQu1D,GACjB,MAAM,IAAI1hD,MAAM,6EAAsE0hD,IAExF,GAAmB,kBAARpyD,EACT,MAAM,IAAI0Q,MACR,+EAAwE0hD,IAM5E,IAFA,IAAM+gB,EAAS,GAENx2E,EAAI,EAAGA,EAAIy1D,EAAOz0D,OAAQhB,IAAK,CACtC,IAAIe,EAAQ00D,EAAOz1D,GAAGqD,GACtB,GAAIq0T,IAAe32T,EACjBA,EAAQ,QACH,GAAqB,kBAAVA,EAChB,MAAM,IAAIgT,MAAM,gEAAyDhT,IAE3Ey1E,EAAO11E,KAAKC,EACb,CAED,OAAOy1E,CACR,EASDu3D,EAAAA,YAAA,SAA4BhtI,EAAeC,GACzC,QAAqB,kBAAVD,IAAuBA,EAAM+D,MAAM,wBAE1C9D,GAAUD,EAAMC,SAAW,EAAI,EAAIA,EAGxC,uNChND,kBACA,UACA,WACA,WAaa+sI,EAAAA,iBAAmB,SAAUxiI,EAAWiqK,EAAa50J,GAwEhE,GAvEArV,EAAKoqK,IAAM,GACXpqK,EAAK4lT,QAAU,GAGf5lT,EAAKoY,OAAS,SAAUwuF,GACtB,QADsB,IAAAA,IAAAA,GAAAA,GAClBA,EAAO,CAET,IAAMi/M,EAAY,CAAC,EAInB,OAHA7lT,EAAK4lT,QAAQ1sT,SAAQ,SAAC+nO,GACpB4kF,EAAI5kF,GAAS,YAAKjhO,EAAKihO,GAAO9/N,SAAS,OACxC,IACM0kT,CACR,CACD,OAAO,IAAAuF,UAASprT,EAAKoqK,IACtB,EAEDpqK,EAAKiyB,UAAY,WACf,OAAOm3R,EAAAA,IAAIj4K,OAAOnxI,EAAKoqK,IACxB,EAEDH,EAAO/wK,SAAQ,SAAC+nO,EAAYxsO,GAE1B,SAAS0rP,IACP,OAAOngP,EAAKoqK,IAAI31K,EACjB,CACD,SAASqxT,EAAOn6S,GAGY,QAF1BA,GAAI,IAAAqoI,UAASroI,IAEPxK,SAAS,QAAoB8/N,EAAM8kF,YACvCp6S,EAAI83H,EAAOigI,YAAY,IAGrBziC,EAAM+kF,WAAa/kF,EAAMxrO,QAC3BkW,GAAI,IAAAygT,aAAYzgT,IAChB,aACEs1N,EAAMxrO,QAAUkW,EAAElW,OAClB,oBAAawrO,EAAM9vN,KAAI,wBAAAyiI,OAAuBqtF,EAAMxrO,OAAM,YAEjDwrO,EAAM8kF,WAA0B,IAAbp6S,EAAElW,SAAiBwrO,EAAMxrO,SACvD,aACEwrO,EAAMxrO,SAAWkW,EAAElW,OACnB,oBAAawrO,EAAM9vN,KAAI,8BAAAyiI,OAA6BqtF,EAAMxrO,SAI9DuK,EAAKoqK,IAAI31K,GAAKkX,CACf,CAzBD3L,EAAK4lT,QAAQrwT,KAAK0rO,EAAM9vN,MA2BxBpZ,OAAOC,eAAegI,EAAMihO,EAAM9vN,KAAM,CACtClZ,YAAY,EACZC,cAAc,EACdmJ,IAAK8+O,EACL7+O,IAAKwkT,IAGH7kF,EAAM52C,UACRrqL,EAAKihO,EAAM9vN,MAAQ8vN,EAAM52C,SAIvB42C,EAAMglF,OACRluT,OAAOC,eAAegI,EAAMihO,EAAMglF,MAAO,CACvChuT,YAAY,EACZC,cAAc,EACdoJ,IAAKwkT,EACLzkT,IAAK8+O,GAGV,IAGG9qO,EASF,GARoB,kBAATA,IACTA,EAAOouH,EAAOvtH,MAAK,IAAA0sS,gBAAevtS,GAAO,QAGvCouH,EAAOk2D,SAAStkL,KAClBA,EAAO+zS,EAAAA,IAAIriN,OAAO1xF,IAGhB3gB,MAAMC,QAAQ0gB,GAAO,CACvB,GAAIA,EAAK5f,OAASuK,EAAK4lT,QAAQnwT,OAC7B,MAAM,IAAI+S,MAAM,kCAIlB6M,EAAKnc,SAAQ,SAACkW,EAAG3a,GACfuL,EAAKA,EAAK4lT,QAAQnxT,KAAM,IAAAu/I,UAAS5kI,EAClC,GACF,KAAM,IAAoB,kBAATiG,EAOhB,MAAM,IAAI7M,MAAM,gBANhB,IAAM09S,EAAOnuT,OAAOQ,KAAK8c,GACzB40J,EAAO/wK,SAAQ,SAAC+nO,IACoB,IAA9BilF,EAAKvsT,QAAQsnO,EAAM9vN,QAAcnR,EAAKihO,EAAM9vN,MAAQkE,EAAK4rN,EAAM9vN,QAChC,IAA/B+0S,EAAKvsT,QAAQsnO,EAAMglF,SAAejmT,EAAKihO,EAAMglF,OAAS5wS,EAAK4rN,EAAMglF,OACtE,GAGF,CAEJ,yNCpHD,eACA,WACA,WACA,WACA,WACA,WAyCA,SAASuC,EAAqB78S,EAAW0yH,GACvC,IAAMguL,GAAM,IAAAxC,QAAOl+S,EAAGogI,EAAAA,WAAW6b,IAEjC,GAAIykK,EAAI3hG,IAAI,IAAM2hG,EAAI3hG,IAAI,GAAI,OAAO,IAAAm/F,QAAOl+S,EAAGogI,EAAAA,WAAW6b,IAE1D,IAAKvpB,EACH,OAAOguL,EAAIvjG,KAAK,IAElB,IAAMwjG,GAAY,IAAAzC,QAAOxrL,EAAS0N,EAAAA,WAAW6b,IAC7C,OAAOykK,EAAIhrS,IAAIirS,EAAUtkG,KAAK,GAAGa,KAAK,IACvC,CAED,SAAS4/F,EAAmBjB,GAC1B,IAAMvoH,EAAM,IAAImqH,EAAAA,GAAG5B,GACnB,OAAOvoH,EAAIyrB,IAAI,IAAMzrB,EAAIyrB,IAAI,EAC9B,CArCDloF,EAAAA,OAAA,SAAuBkmL,EAAiB7hJ,EAAoBxoC,GACpD,OAAiC,IAAAkpL,WAAUmB,EAAS7hJ,GAAlD33B,EAAS,YAASs4K,EAAQ,QAE5Bt3S,EAAIuzH,EAAOvtH,KAAKg5H,EAAU1oI,MAAM,EAAG,KACnC0D,EAAIu5H,EAAOvtH,KAAKg5H,EAAU1oI,MAAM,GAAI,KAE1C,IAAK63H,GAA8B,kBAAZA,EAAsB,CAE3C,GAAIA,IAAY5kI,OAAOuxT,cAAc3sL,GACnC,MAAM,IAAI71H,MACR,+FAIJ,MAAO,CAAE0H,EAAC,EAAEhG,EAAC,EAAEyB,EADL0yH,EAAUmpL,GAAsB,EAAVnpL,EAAc,IAAMmpL,EAAW,GAEhE,CAID,MAAO,CAAEt3S,EAAC,EAAEhG,EAAC,EAAEyB,GAFG,IAAAk+S,QAAOxrL,EAAmB0N,EAAAA,WAAW6b,IACnCogE,KAAK,GAAGa,KAAK,IAAIA,KAAK2+F,GAAU1nG,YAAYr8E,GAEjE,EAwBYjB,EAAAA,UAAY,SACvBkmL,EACA/8S,EACAuE,EACAhG,EACAm0H,GAEA,IAAM6Q,EAAYzL,EAAOmQ,OAAO,EAAC,IAAAswK,eAAch0S,EAAG,KAAK,IAAAg0S,eAAch6S,EAAG,KAAM,IACxEs9S,EAAWgB,EAAqB78S,EAAG0yH,GACzC,IAAKoqL,EAAmBjB,GACtB,MAAM,IAAIh/S,MAAM,6BAElB,IAAMmgT,GAAe,IAAAjB,cAAax4K,EAAWs4K,EAASj4K,WAAYm5K,GAClE,OAAOjlL,EAAOvtH,MAAK,IAAAivS,kBAAiBwD,GAAc,GAAOniT,MAAM,GAChE,EAOYg8H,EAAAA,SAAW,SAAU72H,EAAWuE,EAAWhG,EAAWm0H,GAEjE,IAAKoqL,EADYD,EAAqB78S,EAAG0yH,IAEvC,MAAM,IAAI71H,MAAM,6BAIlB,OAAO,IAAA8hT,aAAY7mL,EAAOmQ,OAAO,EAAC,IAAAswK,eAAch0S,EAAG,KAAK,IAAAg0S,eAAch6S,EAAG,KAAK,IAAA8pI,UAASroI,KACxF,EAOY62H,EAAAA,aAAe,SAAU72H,EAAWuE,EAAWhG,EAAWm0H,GAErE,IAAKoqL,EADYD,EAAqB78S,EAAG0yH,IAEvC,MAAM,IAAI71H,MAAM,6BAGlB,IAAM+jT,GAAK,IAAA1C,QAAOl+S,EAAGogI,EAAAA,WAAWtyI,QAC5B+yT,EAAKtiT,EAMT,OALKqiT,EAAK,IAAMA,EAAK,IAAM,GAAa,IAAPA,GAAmB,KAAPA,MAC3CC,EAAK/oL,EAAOvtH,KAAKhM,IACd,IAAM,MAGJ,IAAAogT,aAAY7mL,EAAOmQ,OAAO,EAAC,IAAAswK,eAAch0S,EAAG,KAAK,IAAAg0S,eAAcsI,EAAI,MAC3E,EAQYhqL,EAAAA,WAAa,SAAUqe,GAClC,IAEI3wI,EACAhG,EACAyB,EAJEq4J,GAAc,IAAAhwB,UAAS6M,GAK7B,GAAImjB,EAAIvuK,QAAU,GAChBya,EAAI8zJ,EAAIx9J,MAAM,EAAG,IACjB0D,EAAI85J,EAAIx9J,MAAM,GAAI,IAClBmF,GAAI,IAAA8gT,aAAYzoJ,EAAIx9J,MAAM,SACrB,IAAmB,KAAfw9J,EAAIvuK,OAOb,MAAM,IAAI+S,MAAM,4BALhB0H,EAAI8zJ,EAAIx9J,MAAM,EAAG,IACjB0D,EAAI85J,EAAIx9J,MAAM,GAAI,IAClBmF,GAAI,IAAA8gT,aAAYzoJ,EAAIx9J,MAAM,GAAI,MAAQ,EACtC0D,EAAE,IAAM,GAGT,CAOD,OAJIyB,EAAI,KACNA,GAAK,IAGA,CACLA,EAAC,EACDuE,EAAC,EACDhG,EAAC,EAEJ,EAOYs4H,EAAAA,iBAAmB,SAC9B72H,EACAuE,EACAhG,EACA0+S,EACAvqL,QADA,IAAAuqL,IAAAA,GAAAA,GAGA,IAAMC,EAAoB,IAAIO,EAAAA,GAC5B,mEACA,IAEIN,EAAc,IAAIM,EAAAA,GAAG,mEAAoE,IAE/F,GAAiB,KAAbl5S,EAAEza,QAA8B,KAAbyU,EAAEzU,OACvB,OAAO,EAGT,IAAKgzT,EAAmBD,EAAqB78S,EAAG0yH,IAC9C,OAAO,EAGT,IAAM0qL,EAAM,IAAIK,EAAAA,GAAGl5S,GACb84S,EAAM,IAAII,EAAAA,GAAGl/S,GAEnB,QAAI6+S,EAAI/uK,UAAY+uK,EAAIluK,GAAGiuK,IAAgBE,EAAIhvK,UAAYgvK,EAAInuK,GAAGiuK,OAI9DF,GAAmD,IAA/BI,EAAI9vJ,IAAI2vJ,GAKjC,EAQYrmL,EAAAA,oBAAsB,SAAUt0C,IAC3C,IAAA+7N,gBAAe/7N,GACf,IAAMtuB,EAAS6jE,EAAOvtH,KAAK,wCAAmCg4E,EAAQz4F,QAAU,SAChF,OAAO,IAAA00T,QAAO1mL,EAAOmQ,OAAO,CAACh0E,EAAQsuB,IACtC,mLChND,IAiFYw+N,EAjFZ,WACA,UAEA,WA6DA,SAAgBjD,EAAmBj0T,GAGjC,OAAO,IAAA42T,aAAY52T,EAAMsqN,YAAYr8E,GACtC,CAbDjB,EAAAA,QAAA,SAAwBhtI,GACtB,MAAO,YAAKA,EAAM2L,SAAS,IAC5B,EAODqhI,EAAAA,mBAAAA,EAUAA,EAAAA,QAAA,SAAwBhtI,GACtB,OAAOi0T,EAAmBj0T,EAC3B,EAKD,SAAYk3T,GACVA,EAAAA,EAAAA,OAAAA,GAAAA,SACAA,EAAAA,EAAAA,GAAAA,GAAAA,KACAA,EAAAA,EAAAA,OAAAA,GAAAA,SACAA,EAAAA,EAAAA,kBAAAA,GAAAA,mBAJF,EAAYA,EAAAlqL,EAAAA,aAAAA,EAAAA,WAAU,KA0BtBA,EAAAA,OAAA,SACExJ,EACAylL,GAEA,GAAc,OAAVzlL,EACF,OAAO,KAET,QAAc94H,IAAV84H,EAAJ,CAIA,GAAqB,kBAAVA,KAAuB,IAAA2a,aAAY3a,GAC5C,MAAM,IAAIxwH,MAAM,6DAAsDwwH,IACjE,GAAqB,kBAAVA,IAAuBv/H,OAAOuxT,cAAchyL,GAC5D,MAAM,IAAIxwH,MACR,+FAIJ,IAAMqN,GAAS,IAAAm+H,UAAShb,GAExB,GAAIylL,IAAeiO,EAAWjpL,OAC5B,OAAO5tH,EACF,GAAI4oS,IAAeiO,EAAW9kK,GACnC,OAAO,IAAIwhK,EAAAA,GAAGvzS,GACT,GAAI4oS,IAAeiO,EAAWjzT,OAAQ,CAC3C,IAAMupS,EAAK,IAAIomB,EAAAA,GAAGvzS,GACZ3Y,EAAM,IAAIksT,EAAAA,GAAG3vT,OAAOi3D,iBAAiBvvD,YAC3C,GAAI6hS,EAAGnoJ,GAAG39I,GACR,MAAM,IAAIsL,MACR,gGAGJ,OAAOw6R,EAAGzzJ,UACX,CAEC,MAAO,YAAK15H,EAAO1U,SAAS,OA3B7B,CA6BF,i0MC3IK42I,EAAS,IAAIC,EAAAA,GAAOviI,EAAAA,GAIpB8nI,EAAoB,CAAC,EAErBrC,EAAO9M,EAAAA,GAAAA,KAAe,GACtB6M,EAAc7M,EAAAA,GAAAA,MAAgB,GAEpC,SAASma,EAAWr6D,EAAiBs7D,EAAerL,EAAmB3oJ,GACnE,IAAM00D,EAAc,CAAEs/F,MAAOA,EAAOrL,UAAWA,GAE/C,YADcj+I,IAAV1K,IAAuB00D,EAAO10D,MAAQA,GACnCuiJ,EAAOM,WAAWnqD,EAAS8pD,EAAAA,GAAAA,OAAAA,cAA6B9tF,EAClE,CAID,IADA,IAAIg1J,EAAQ,IACLA,EAAMzpN,OAAS,KAAOypN,GAASA,EAGtC,SAASytG,EAAchtL,GAEnB,GAAyB,kBAAdA,EACP,IACIA,EAAWyO,EAAAA,GAAAA,KAAezO,GAAU4P,UACzB,CAAb,MAAO1xI,GAAM,CAGnB,MAAyB,kBAAd8hI,GAA0BA,GAAY,GAAKA,GAAY,OAASA,EAAW,GAC1E,IAAMu/E,EAAMnvG,UAAU,EAAG4vB,GAG9BoY,EAAOQ,mBAAmB,uBAAwB,WAAY5Y,EACxE,CAEK,SAAUitL,EAAYp3T,EAAqBmqI,GAC7B,MAAZA,IAAoBA,EAAW,GACnC,IAAMktL,EAAaF,EAAchtL,GAK3B68B,GAFNhnK,EAAQ44I,EAAAA,GAAAA,KAAe54I,IAEAslJ,GAAGI,GACtBshB,IAAYhnK,EAAQA,EAAMwlJ,IAAIC,IAGlC,IADA,IAAI6xK,EAAWt3T,EAAM8/J,IAAIu3J,GAAY1rT,WAC9B2rT,EAASr3T,OAASo3T,EAAWp3T,OAAS,GAAKq3T,EAAW,IAAMA,EAGnEA,EAAWA,EAASvzT,MAAM,wBAAwB,GAElD,IAAMwzT,EAAQv3T,EAAMgzJ,IAAIqkK,GAAY1rT,WASpC,OAPI3L,EADsB,IAAtBq3T,EAAWp3T,OACHs3T,EAEAA,EAAQ,IAAMD,EAGtBtwJ,IAAYhnK,EAAQ,IAAMA,GAEvBA,CACV,CAEK,SAAUw3T,EAAWx3T,EAAemqI,GAEtB,MAAZA,IAAoBA,EAAW,GACnC,IAAMktL,EAAaF,EAAchtL,GAEX,kBAAXnqI,GAAwBA,EAAM+D,MAAM,gBAC3Cw+I,EAAOQ,mBAAmB,wBAAyB,QAAS/iJ,GAIhE,IAAMgnK,EAAsC,MAA1BhnK,EAAMu6G,UAAU,EAAG,GACjCysD,IAAYhnK,EAAQA,EAAMu6G,UAAU,IAE1B,MAAVv6G,GACAuiJ,EAAOQ,mBAAmB,gBAAiB,QAAS/iJ,GAIxD,IAAM2qJ,EAAQ3qJ,EAAMgjE,MAAM,KACtB2nF,EAAM1qJ,OAAS,GACfsiJ,EAAOQ,mBAAmB,0BAA2B,QAAS/iJ,GAGlE,IAAIu3T,EAAQ5sK,EAAM,GAAI2sK,EAAW3sK,EAAM,GAKvC,IAJK4sK,IAASA,EAAQ,KACjBD,IAAYA,EAAW,KAGa,MAAlCA,EAASA,EAASr3T,OAAS,IAC9Bq3T,EAAWA,EAAS/8M,UAAU,EAAG+8M,EAASr3T,OAAS,GAYvD,IARIq3T,EAASr3T,OAASo3T,EAAWp3T,OAAS,GACtC8yJ,EAAW,wCAAyC,YAAa,cAIpD,KAAbukK,IAAmBA,EAAW,KAG3BA,EAASr3T,OAASo3T,EAAWp3T,OAAS,GAAKq3T,GAAY,IAE9D,IAAMG,EAAa7+K,EAAAA,GAAAA,KAAe2+K,GAC5BG,EAAgB9+K,EAAAA,GAAAA,KAAe0+K,GAEjCK,EAAOF,EAAWjyK,IAAI6xK,GAAajqS,IAAIsqS,GAI3C,OAFI1wJ,IAAY2wJ,EAAMA,EAAInyK,IAAIC,IAEvBkyK,CACV,CAGM,IAAMC,EAAb,WAOI,WAAYlvK,EAAuBzD,EAAiBhmI,EAAekrH,IAAgB,eAC3Eue,IAAqBX,GACrBxF,EAAOM,WAAW,2DAA4DL,EAAAA,GAAAA,OAAAA,sBAAqC,CAC/GmG,UAAW,oBAInBtnJ,KAAK4jJ,OAASA,EACd5jJ,KAAK4d,MAAQA,EACb5d,KAAK8oI,SAAWA,EAEhB9oI,KAAKsa,MAAQspI,EAAS,GAAI,KAAO,QAAUn2G,OAAO7vB,GAAS,IAAM6vB,OAAOq7F,GAExE9oI,KAAKw2T,YAAcV,EAAchtL,GAEjC5nI,OAAO6Q,OAAO/R,KACjB,CAvBL,wCAyBI,SAAYrB,GACR,GAAIA,aAAiB43T,EAAe,OAAO53T,EAErB,kBAAXA,IACPA,EAAQ,YAAH,OAAeA,IAGxB,IAAIilJ,GAAS,EACThmI,EAAQ,IACRkrH,EAAW,GAEf,GAAsB,kBAAXnqI,EACP,GAAc,UAAVA,QAEG,GAAc,WAAVA,EACPilJ,GAAS,MACN,CACH,IAAMlhJ,EAAQ/D,EAAM+D,MAAM,gCACrBA,GAASw+I,EAAOQ,mBAAmB,uBAAwB,SAAU/iJ,GAC1EilJ,EAAuB,MAAblhJ,EAAM,GAChBkb,EAAQtB,SAAS5Z,EAAM,IACvBomI,EAAWxsH,SAAS5Z,EAAM,GAC7B,MACE,GAAI/D,EAAO,CACd,IAAMq2J,EAAQ,SAAC/zJ,EAAaoG,EAAc45I,GACtC,OAAkB,MAAdtiJ,EAAMsC,GAAuBggJ,UACtBtiJ,EAAMsC,KAAUoG,GACvB65I,EAAOQ,mBAAmB,yBAA2BzgJ,EAAM,QAAUoG,EAAM,IAAK,UAAYpG,EAAKtC,EAAMsC,IAEpGtC,EAAMsC,GAChB,EACD2iJ,EAASoR,EAAM,SAAU,UAAWpR,GACpChmI,EAAQo3I,EAAM,QAAS,SAAUp3I,GACjCkrH,EAAWksB,EAAM,WAAY,SAAUlsB,EAC1C,CAUD,OARIlrH,EAAQ,GACRsjI,EAAOQ,mBAAmB,gDAAiD,eAAgB9jI,GAG3FkrH,EAAW,IACXoY,EAAOQ,mBAAmB,4CAA6C,kBAAmB5Y,GAGvF,IAAIytL,EAAY7vK,EAAmB9C,EAAQhmI,EAAOkrH,EAC5D,KAtEL,KAyEa2tL,EAAb,WAOI,WAAYpvK,EAAuBrrI,EAAard,EAAeohB,IAAoB,eAC3EsnI,IAAqBX,GACrBxF,EAAOM,WAAW,2DAA4DL,EAAAA,GAAAA,OAAAA,sBAAqC,CAC/GmG,UAAW,oBAInBtnJ,KAAK+f,OAASA,EACd/f,KAAKsxJ,KAAOt1I,EACZhc,KAAKk3P,OAASv4P,EAEdqB,KAAK02T,gBAAiB,EAEtBx1T,OAAO6Q,OAAO/R,KACjB,CArBL,2CAuBI,SAAagjH,GACLhjH,KAAK+f,OAAOzF,OAAS0oG,EAAMjjG,OAAOzF,MAClC4mI,EAAOQ,mBAAmB,gDAAiD,QAAS1+B,EAE3F,GA3BL,uBA6BI,SAAUA,GACNhjH,KAAK22T,aAAa3zM,GAClB,IAAMl5G,EAAIqsT,EAAWn2T,KAAKk3P,OAAQl3P,KAAK+f,OAAO+oH,UACxCl1H,EAAIuiT,EAAWnzM,EAAMk0I,OAAQl0I,EAAMjjG,OAAO+oH,UAChD,OAAO2tL,EAAYG,UAAU9sT,EAAEiiB,IAAInY,GAAI5T,KAAK+f,OAAO+oH,SAAU9oI,KAAK+f,OACrE,GAlCL,uBAoCI,SAAUijG,GACNhjH,KAAK22T,aAAa3zM,GAClB,IAAMl5G,EAAIqsT,EAAWn2T,KAAKk3P,OAAQl3P,KAAK+f,OAAO+oH,UACxCl1H,EAAIuiT,EAAWnzM,EAAMk0I,OAAQl0I,EAAMjjG,OAAO+oH,UAChD,OAAO2tL,EAAYG,UAAU9sT,EAAE0gB,IAAI5W,GAAI5T,KAAK+f,OAAO+oH,SAAU9oI,KAAK+f,OACrE,GAzCL,uBA2CI,SAAUijG,GACNhjH,KAAK22T,aAAa3zM,GAClB,IAAMl5G,EAAIqsT,EAAWn2T,KAAKk3P,OAAQl3P,KAAK+f,OAAO+oH,UACxCl1H,EAAIuiT,EAAWnzM,EAAMk0I,OAAQl0I,EAAMjjG,OAAO+oH,UAChD,OAAO2tL,EAAYG,UAAU9sT,EAAEq6I,IAAIvwI,GAAG+9I,IAAI3xJ,KAAK+f,OAAOy2S,aAAcx2T,KAAK+f,OAAO+oH,SAAU9oI,KAAK+f,OAClG,GAhDL,uBAkDI,SAAUijG,GACNhjH,KAAK22T,aAAa3zM,GAClB,IAAMl5G,EAAIqsT,EAAWn2T,KAAKk3P,OAAQl3P,KAAK+f,OAAO+oH,UACxCl1H,EAAIuiT,EAAWnzM,EAAMk0I,OAAQl0I,EAAMjjG,OAAO+oH,UAChD,OAAO2tL,EAAYG,UAAU9sT,EAAEq6I,IAAInkJ,KAAK+f,OAAOy2S,aAAa7kK,IAAI/9I,GAAI5T,KAAK+f,OAAO+oH,SAAU9oI,KAAK+f,OAClG,GAvDL,mBAyDI,WACI,IAAMupI,EAAQtpJ,KAAKsK,WAAWq3D,MAAM,KACf,IAAjB2nF,EAAM1qJ,QAAgB0qJ,EAAM5qJ,KAAK,KAErC,IAAI01E,EAASqiP,EAAYp3S,KAAKiqI,EAAM,GAAItpJ,KAAK+f,QAEvC82S,GAAevtK,EAAM,GAAG5mJ,MAAM,UAKpC,OAJI1C,KAAK8xJ,cAAgB+kK,IACrBziP,EAASA,EAAO0iP,UAAU1xM,EAAI2xM,SAAS3iP,EAAOr0D,UAG3Cq0D,CACV,GArEL,qBAuEI,WACI,IAAMk1E,EAAQtpJ,KAAKsK,WAAWq3D,MAAM,KACf,IAAjB2nF,EAAM1qJ,QAAgB0qJ,EAAM5qJ,KAAK,KAErC,IAAI01E,EAASqiP,EAAYp3S,KAAKiqI,EAAM,GAAItpJ,KAAK+f,QAEvC82S,GAAevtK,EAAM,GAAG5mJ,MAAM,UAKpC,OAJK1C,KAAK8xJ,cAAgB+kK,IACtBziP,EAASA,EAAO4iP,UAAU5xM,EAAI2xM,SAAS3iP,EAAOr0D,UAG3Cq0D,CACV,GAnFL,mBAsFI,SAAM00D,GACc,MAAZA,IAAoBA,EAAW,GAGnC,IAAMwgB,EAAQtpJ,KAAKsK,WAAWq3D,MAAM,KAOpC,GANqB,IAAjB2nF,EAAM1qJ,QAAgB0qJ,EAAM5qJ,KAAK,MAEjCoqI,EAAW,GAAKA,EAAW,IAAOA,EAAW,IAC7CoY,EAAOQ,mBAAmB,wBAAyB,WAAY5Y,GAG/DwgB,EAAM,GAAG1qJ,QAAUkqI,EAAY,OAAO9oI,KAE1C,IAAM+6E,EAAS07O,EAAYp3S,KAAK,IAAMgpM,EAAMnvG,UAAU,EAAG4vB,GAAW9oI,KAAK+f,QACnEk3S,EAAOC,EAAKH,SAAS/2T,KAAK+f,QAEhC,OAAO/f,KAAKm3T,UAAUp8O,GAAQi8O,UAAUC,GAAMtwT,QAAQywT,UAAUr8O,EACnE,GAvGL,oBAyGI,WACI,MAAwB,QAAhB/6E,KAAKk3P,QAAoC,MAAhBl3P,KAAKk3P,MACzC,GA3GL,wBA6GI,WACI,MAA2B,MAAnBl3P,KAAKk3P,OAAO,EACvB,GA/GL,sBAiHI,WAAqB,OAAOl3P,KAAKk3P,MAAS,GAjH9C,yBAmHI,SAAYt5O,GACR,GAAa,MAATA,EAAiB,OAAO5d,KAAKsxJ,KAC7B1zI,EAAQ,GAAKsjI,EAAOQ,mBAAmB,qBAAsB,QAAS9jI,GAC1E,IAAM5B,EAAMu7H,EAAAA,GAAAA,KAAev3I,KAAKsxJ,MAAM/M,SAASvkJ,KAAK+f,OAAOnC,OAAO0mI,OAAO1mI,GAAO45H,cAChF,OAAOmJ,EAAAA,EAAAA,IAAW3kI,EAAK4B,EAAQ,EAClC,GAxHL,2BA0HI,WAA0B,OAAOzB,WAAWnc,KAAKsK,WAAc,GA1HnE,sBA4HI,SAASyV,GACL,OAAO02S,EAAY9uK,WAAW3nJ,KAAKk3P,OAAQn3O,EAC9C,IA9HL,wBAiII,SAAiBphB,EAAkBmqI,EAAyB/oH,GAUxD,OARc,MAAVA,GAA8B,MAAZ+oH,IAAqBooB,EAAAA,EAAAA,IAAepoB,KACtD/oH,EAAS+oH,EACTA,EAAW,MAGC,MAAZA,IAAoBA,EAAW,GACrB,MAAV/oH,IAAkBA,EAAS,SAExB02S,EAAY9uK,WAAWouK,EAAYp3T,EAAOmqI,GAAWytL,EAAYl3S,KAAKU,GAChF,GA5IL,wBA+II,SAAkBphB,EAAeohB,GACf,MAAVA,IAAkBA,EAAS,SAE/B,IAAMs3S,EAAcd,EAAYl3S,KAAKU,GAE/B2yJ,EAAUyjJ,EAAWx3T,EAAO04T,EAAYvuL,WAEzCuuL,EAAYzzK,QAAU8uB,EAAQzuB,GAAGI,IAClCqN,EAAW,oCAAqC,WAAY,QAAS/yJ,GAGzE,IAAIqd,EAAc,KACdq7S,EAAYzzK,OACZ5nI,EAAM02J,EAAQpuB,OAAO+yK,EAAYz5S,OAAO45H,eAExCx7H,EAAM02J,EAAQl7B,cACdx7H,GAAM2kI,EAAAA,EAAAA,IAAW3kI,EAAKq7S,EAAYz5S,MAAQ,IAG9C,IAAM05S,EAAUvB,EAAYrjJ,EAAS2kJ,EAAYvuL,UAEjD,OAAO,IAAI2tL,EAAY/vK,EAAmB1qI,EAAKs7S,EAASD,EAC3D,GArKL,uBAuKI,SAAiB14T,EAAkBohB,GACjB,MAAVA,IAAkBA,EAAS,SAE/B,IAAMs3S,EAAcd,EAAYl3S,KAAKU,GAErC,IAAIs9H,EAAAA,EAAAA,IAAS1+I,GAAOC,OAASy4T,EAAYz5S,MAAQ,EAC7C,MAAM,IAAIjM,MAAM,YAGpB,IAAI+gK,EAAUn7B,EAAAA,GAAAA,KAAe54I,GACzB04T,EAAYzzK,SAAU8uB,EAAUA,EAAQnuB,SAAS8yK,EAAYz5S,QAEjE,IAAM5B,EAAM02J,EAAQpuB,QAAQ+yK,EAAYzzK,OAAS,EAAG,GAAKyzK,EAAYz5S,OAAO45H,cACtE8/K,EAAUvB,EAAYrjJ,EAAS2kJ,EAAYvuL,UAEjD,OAAO,IAAI2tL,EAAY/vK,EAAmB1qI,EAAKs7S,EAASD,EAC3D,GAvLL,kBAyLI,SAAY14T,EAAYohB,GACpB,GAAsB,kBAAXphB,EACP,OAAO83T,EAAY9uK,WAAWhpJ,EAAOohB,GAGzC,IAAIqxI,EAAAA,EAAAA,IAAQzyJ,GACR,OAAO83T,EAAY7hJ,UAAUj2K,EAAOohB,GAGxC,IACI,OAAO02S,EAAYG,UAAUj4T,EAAO,EAAGohB,EAM1C,CALC,MAAOhX,GAEL,GAAIA,EAAMihE,OAASm3E,EAAAA,GAAAA,OAAAA,iBACf,MAAMp4I,CAEb,CAED,OAAOm4I,EAAOQ,mBAAmB,4BAA6B,QAAS/iJ,EAC1E,GA5ML,2BA8MI,SAAqBA,GACjB,SAAUA,IAASA,EAAM+3T,eAC5B,KAhNL,KAmNMtxM,EAAMqxM,EAAYp3S,KAAK,GACvB63S,EAAOT,EAAYp3S,KAAK,0GClZxB,SAAUgmS,EAAYhuN,GAExB,MADwB,kBAAbA,IAAyBA,GAAUotD,EAAAA,EAAAA,IAAYptD,KACnD+iD,EAAAA,EAAAA,IAAU2C,EAAAA,EAAAA,IAAO,EACpB0H,EAAAA,EAAAA,IALqB,mCAMrBA,EAAAA,EAAAA,IAAYh3G,OAAO4pD,EAAQz4F,SAC3By4F,IAEP,gBCbYz4E,EAAU,8TCSjBsiI,EAAS,IAAIC,EAAAA,GAAOviI,GAIpBi6J,EAAU,IAAIrnK,WAAW,IAC/BqnK,EAAQzkH,KAAK,GAEb,IAAMgwF,EAAyB7M,EAAAA,GAAAA,MAAgB,GACzC8M,EAAkB9M,EAAAA,GAAAA,KAAe,GACjC2M,EAAiB3M,EAAAA,GAAAA,KAAe,GAChCuM,EAAwBvM,EAAAA,GAAAA,KAAe,sEAW7C,IAAMggL,GAAU52K,EAAAA,EAAAA,IAAWuD,EAAI1M,cAAe,IACxCggL,GAAW72K,EAAAA,EAAAA,IAAW0D,EAAK7M,cAAe,IAE1CigL,EAA2C,CAC7Cn9S,KAAM,SACNsE,QAAS,SACT4oH,QAAS,UACTmN,kBAAmB,UACnB4F,KAAM,WAGJm9K,EAAkC,CACpC,OAAQ,UAAW,UAAW,oBAAqB,QAGvD,SAASC,EAAY12T,GACjB,OAAO,SAAUtC,GAIb,MAHsB,kBAAXA,GACPuiJ,EAAOQ,mBAAP,mCAAuD1gI,KAAKE,UAAUjgB,IAAtE,iBAA0FA,GAAQtC,GAE/FA,CACV,CACJ,CAED,IAAMi5T,EAAoD,CACtDt9S,KAAMq9S,EAAY,QAClB/4S,QAAS+4S,EAAY,WACrBnwL,QAAS,SAAS7oI,GACd,IACI,OAAO44I,EAAAA,GAAAA,KAAe54I,GAAO2L,UACd,CAAjB,MAAOvB,GAAU,CACnB,OAAOm4I,EAAOQ,mBAAP,qCAAgE,iBAAkB/iJ,EAC5F,EACDg2I,kBAAmB,SAASh2I,GACxB,IACI,OAAOk6I,EAAAA,EAAAA,IAAWl6I,GAAO4R,aACV,CAAjB,MAAOxH,GAAU,CACnB,OAAOm4I,EAAOQ,mBAAP,2CAAsE,2BAA4B/iJ,EAC5G,EACD47I,KAAM,SAAS57I,GACX,IACI,IAAMynJ,GAAQ/I,EAAAA,EAAAA,IAAS1+I,GACvB,GAAqB,KAAjBynJ,EAAMxnJ,OAAiB,MAAM,IAAI+S,MAAM,cAC3C,OAAO6xI,EAAAA,EAAAA,IAAQ4C,EACA,CAAjB,MAAOr9I,GAAU,CACnB,OAAOm4I,EAAOQ,mBAAP,8BAAyD,cAAe/iJ,EAClF,GAGL,SAASk5T,GAAexwT,GAGhB,IAAM3E,EAAQ2E,EAAK3E,MAAM,kBACzB,GAAIA,EAAO,CACP,IAAMkhJ,EAAuB,KAAblhJ,EAAM,GAEhBkb,EAAQtB,SAAS5Z,EAAM,IAAM,QAC/Bkb,EAAQ,IAAM,GAAKA,EAAQ,KAAQlb,EAAM,IAAMA,EAAM,KAAO+qC,OAAO7vB,KACnEsjI,EAAOQ,mBAAmB,wBAAyB,OAAQr6I,GAG/D,IAAMywT,EAAch0K,EAAWtsH,KAAKosH,EAAUhmI,EAAQ,EAAIA,GACpDm6S,EAAcn0K,EAASk0K,EAAY/rS,IAAIm4H,GAAKC,IAAIC,GAAcC,EAEpE,OAAO,SAAS1lJ,GACZ,IAAMmW,EAAIyiI,EAAAA,GAAAA,KAAe54I,GAMzB,OAJImW,EAAEmvI,GAAG8zK,IAAgBjjT,EAAEkvI,GAAG8zK,KAC1B52K,EAAOQ,mBAAP,kCAAsDr6I,GAAS,QAAS1I,IAGrEgiJ,EAAAA,EAAAA,IAAW7rI,EAAEwvI,OAAO,KAAK9M,cAAe,GAClD,CACJ,CAKD,IAAM90I,EAAQ2E,EAAK3E,MAAM,gBACzB,GAAIA,EAAO,CACP,IAAMkb,EAAQtB,SAAS5Z,EAAM,IAK7B,OAJc,IAAVkb,GAAeA,EAAQ,IAAMlb,EAAM,KAAO+qC,OAAO7vB,KACjDsjI,EAAOQ,mBAAmB,sBAAuB,OAAQr6I,GAGtD,SAAS1I,GAKZ,OAJc0+I,EAAAA,EAAAA,IAAS1+I,GACbC,SAAWgf,GACjBsjI,EAAOQ,mBAAP,6BAAiDr6I,GAAS,QAAS1I,GAjGvF,SAAqBA,GACjB,IAAMynJ,GAAQ/I,EAAAA,EAAAA,IAAS1+I,GACjBq5T,EAAY5xK,EAAMxnJ,OAAS,GACjC,OAAIo5T,GACO9xK,EAAAA,EAAAA,IAAU,CAAEE,EAAOyyB,EAAQlpK,MAAMqoT,MAErCx0K,EAAAA,EAAAA,IAAQ4C,EAClB,CA4FsB6xK,CAAYt5T,EACtB,CACJ,CAGL,OAAQ0I,GACJ,IAAK,UAAW,OAAO,SAAS1I,GAC5B,OAAOgiJ,EAAAA,EAAAA,KAAW9H,EAAAA,EAAAA,IAAWl6I,GAAQ,GACxC,EACD,IAAK,OAAQ,OAAO,SAASA,GACzB,OAAUA,EAAmB44T,EAAVC,CACtB,EACD,IAAK,QAAS,OAAO,SAAS74T,GAC1B,OAAOy7I,EAAAA,EAAAA,GAAUz7I,EACpB,EACD,IAAK,SAAU,OAAO,SAASA,GAC3B,OAAOkC,EAAAA,EAAAA,IAAGlC,EACb,EAGL,OAAO,IACV,CAED,SAASu5T,GAAW59S,EAAc84J,GAC9B,MAAO,GAAP,OAAW94J,EAAX,YAAqB84J,EAAOxtK,KAAI,gBAAG0U,EAAH,EAAGA,KAAH,SAASjT,KAAmB,IAAMiT,CAAlC,IAAyCunD,KAAK,KAA9E,IACH,CAEM,ICnJKs2P,GDmJCC,GAAb,WAOI,WAAYx9K,IAA4C,gBACpDoK,EAAAA,EAAAA,IAAehlJ,KAAM,QAASkB,OAAO6Q,QAAO+jJ,EAAAA,EAAAA,IAASlb,MAErDoK,EAAAA,EAAAA,IAAehlJ,KAAM,gBAAiB,CAAC,IACvCglJ,EAAAA,EAAAA,IAAehlJ,KAAM,SAAU,CAAC,GAGhC,IAAMq4T,EAAiD,CAAC,EAGlDC,EAAyC,CAAC,EAG1CC,EAAoD,CAAC,EAE3Dr3T,OAAOQ,KAAKk5I,GAAOv4I,SAAQ,SAACgF,GACxBgxT,EAAMhxT,GAAQ,CAAC,EACfixT,EAAQjxT,GAAQ,GAChBkxT,EAASlxT,GAAQ,CAAC,CACrB,IAnBmD,eAqBzCiT,GAEP,IAAMooI,EAAuC,CAAC,EAE9C9H,EAAMtgI,GAAMjY,SAAQ,SAAC+nO,GAGb1nF,EAAY0nF,EAAM9vN,OAClB4mI,EAAOQ,mBAAP,kCAAsD1gI,KAAKE,UAAUkpN,EAAM9vN,MAA3E,eAAyF0G,KAAKE,UAAU5G,IAAU,QAASsgI,GAE/H8H,EAAY0nF,EAAM9vN,OAAQ,EAG1B,IAAMmoI,EAAW2nF,EAAM/iO,KAAK3E,MAAM,uBAAuB,GACrD+/I,IAAanoI,GACb4mI,EAAOQ,mBAAP,qCAAyD1gI,KAAKE,UAAUuhI,IAAc,QAAS7H,GAInFi9K,GAAep1K,KAG1B61K,EAAQ71K,IACTvB,EAAOQ,mBAAP,uBAA2C1gI,KAAKE,UAAUuhI,IAAc,QAAS7H,GAIrF09K,EAAQ71K,GAAU/jJ,KAAK4b,GACvB+9S,EAAM/9S,GAAMmoI,IAAY,EAC3B,GAlD+C,EAqBpD,IAAK,IAAMnoI,KAAQsgI,EAAO,EAAftgI,GAiCX,IAAMk+S,EAAet3T,OAAOQ,KAAK42T,GAASz2T,QAAO,SAAC6O,GAAD,OAA8B,IAAtB4nT,EAAQ5nT,GAAG9R,MAAnB,IAmCjD,IAAK,IAAM0b,KAjCiB,IAAxBk+S,EAAa55T,OACbsiJ,EAAOQ,mBAAmB,uBAAwB,QAAS9G,GACpD49K,EAAa55T,OAAS,GAC7BsiJ,EAAOQ,mBAAP,mDAAuE82K,EAAa5yT,KAAI,SAACiL,GAAD,OAAQmQ,KAAKE,UAAUrQ,EAAvB,IAA4BgxD,KAAK,OAAU,QAAS+4E,IAGhJoK,EAAAA,EAAAA,IAAehlJ,KAAM,cAAew4T,EAAa,IAGjD,SAASC,EAAcpxT,EAAc28O,GAC7BA,EAAM38O,IACN65I,EAAOQ,mBAAP,qCAAyD1gI,KAAKE,UAAU7Z,IAAU,QAASuzI,GAG/FopG,EAAM38O,IAAQ,EAEdnG,OAAOQ,KAAK22T,EAAMhxT,IAAOhF,SAAQ,SAACs4B,GACzB29R,EAAQ39R,KAGb89R,EAAc99R,EAAOqpN,GAGrB9iP,OAAOQ,KAAKsiP,GAAO3hP,SAAQ,SAACq2T,GACxBH,EAASG,GAAS/9R,IAAS,CAC9B,IACJ,WAEMqpN,EAAM38O,EAChB,CACDoxT,CAAcz4T,KAAKg7I,YAAa,CAAC,GAGdu9K,EAAU,CACzB,IAAMI,EAAKz3T,OAAOQ,KAAK62T,EAASj+S,IAChCq+S,EAAG/+P,OACH55D,KAAK44T,OAAOt+S,GAAQ49S,GAAW59S,EAAMsgI,EAAMtgI,IAASq+S,EAAG/yT,KAAI,SAACiL,GAAD,OAAOqnT,GAAWrnT,EAAG+pI,EAAM/pI,GAA3B,IAAgCgxD,KAAK,GACnG,CACJ,CArGL,yCAuGI,SAAWx6D,GACP,IAAI6vO,EAAUl3O,KAAK64T,cAAcxxT,GAIjC,OAHK6vO,IACDA,EAAUl3O,KAAK64T,cAAcxxT,GAAQrH,KAAK4/M,YAAYv4M,IAEnD6vO,CACV,GA7GL,yBA+GI,SAAY7vO,GAAY,WAIV6vO,EAAU2gF,GAAexwT,GAC/B,GAAI6vO,EAAW,OAAOA,EAI1B,IAAMx0O,EAAQ2E,EAAK3E,MAAM,yBACzB,GAAIA,EAAO,CACP,IAAMg2T,EAAUh2T,EAAM,GAChBo2T,EAAa94T,KAAK+4T,WAAWL,GAC7B95T,EAAS0d,SAAS5Z,EAAM,IAC9B,OAAO,SAAC/D,GACAC,GAAU,GAAKD,EAAMC,SAAWA,GAChCsiJ,EAAOQ,mBAAmB,0DAA2D,QAAS/iJ,GAGlG,IAAIy1E,EAASz1E,EAAMiH,IAAIkzT,GAKvB,OAJI,EAAKF,OAAOF,KACZtkP,EAASA,EAAOxuE,IAAIw0I,EAAAA,KAGjBA,EAAAA,EAAAA,IAAU8L,EAAAA,EAAAA,IAAU9xE,GAC9B,CACJ,CAGD,IAAMg/F,EAASpzK,KAAK46I,MAAMvzI,GAC1B,GAAI+rK,EAAQ,CACR,IAAM4lJ,GAAcn4T,EAAAA,EAAAA,IAAGb,KAAK44T,OAAOvxT,IACnC,OAAO,SAAC1I,GACJ,IAAM+9B,EAAS02I,EAAOxtK,KAAI,YAAmB,IAAhB0U,EAAgB,EAAhBA,KAAMjT,EAAU,EAAVA,KACzB+sE,EAAS,EAAK2kP,WAAW1xT,EAAhB,CAAsB1I,EAAM2b,IAC3C,OAAI,EAAKs+S,OAAOvxT,IAAgB+yI,EAAAA,EAAAA,GAAUhmE,GACnCA,CACV,IAED,OADA13C,EAAO2rB,QAAQ2wQ,IACR9yK,EAAAA,EAAAA,IAAUxpH,EACpB,CACJ,CAED,OAAOwkH,EAAOQ,mBAAP,wBAA4Cr6I,GAAS,OAAQA,EACvE,GA3JL,wBA6JI,SAAWiT,GACP,IAAM85D,EAASp0E,KAAK44T,OAAOt+S,GAI3B,OAHK85D,GACD8sE,EAAOQ,mBAAP,wBAA4C1gI,KAAKE,UAAU5G,IAAU,OAAQA,GAE1E85D,CACV,GAnKL,wBAqKI,SAAW/sE,EAAc1I,GACrB,OAAOqB,KAAK+4T,WAAW1xT,EAAhBrH,CAAsBrB,EAChC,GAvKL,wBAyKI,SAAW2b,EAAc3b,GACrB,OAAOy7I,EAAAA,EAAAA,GAAUp6I,KAAKi5T,WAAW3+S,EAAM3b,GAC1C,GA3KL,oBA6KI,SAAOA,GACH,OAAOqB,KAAKi5T,WAAWj5T,KAAKg7I,YAAar8I,EAC5C,GA/KL,kBAiLI,SAAKA,GACD,OAAOqB,KAAKk5T,WAAWl5T,KAAKg7I,YAAar8I,EAC5C,GAnLL,oBAqLI,SAAO0I,EAAc1I,EAAY0oB,GAA0C,WAInE,GADgBwwS,GAAexwT,GAChB,OAAOggB,EAAShgB,EAAM1I,GAIzC,IAAM+D,EAAQ2E,EAAK3E,MAAM,yBACzB,GAAIA,EAAO,CACP,IAAMg2T,EAAUh2T,EAAM,GAChB9D,EAAS0d,SAAS5Z,EAAM,IAI9B,OAHI9D,GAAU,GAAKD,EAAMC,SAAWA,GAChCsiJ,EAAOQ,mBAAmB,0DAA2D,QAAS/iJ,GAE3FA,EAAMiH,KAAI,SAACkP,GAAD,OAAY,EAAKqkT,OAAOT,EAAS5jT,EAAGuS,EAApC,GACpB,CAGD,IAAM+rJ,EAASpzK,KAAK46I,MAAMvzI,GAC1B,OAAI+rK,EACOA,EAAOzwB,QAAO,SAACC,EAAD,GAA0B,IAAhBtoI,EAAgB,EAAhBA,KAAMjT,EAAU,EAAVA,KAEjC,OADAu7I,EAAMtoI,GAAQ,EAAK6+S,OAAO9xT,EAAM1I,EAAM2b,GAAO+M,GACtCu7H,CACV,GAAuB,CAAC,GAGtB1B,EAAOQ,mBAAP,wBAA4Cr6I,GAAS,OAAQA,EACvE,GAjNL,mBAmNI,SAAM1I,EAA4B0oB,GAC9B,OAAOrnB,KAAKm5T,OAAOn5T,KAAKg7I,YAAar8I,EAAO0oB,EAC/C,IArNL,mBAuNI,SAAYuzH,GACR,OAAO,IAAIw9K,EAAiBx9K,EAC/B,GAzNL,4BA2NI,SAAsBA,GAClB,OAAOw9K,EAAiB/4S,KAAKu7H,GAAOI,WACvC,GA7NL,wBA+NI,SAAkB1gI,EAAcsgI,EAA8Cj8I,GAC1E,OAAOy5T,EAAiB/4S,KAAKu7H,GAAOs+K,WAAW5+S,EAAM3b,EACxD,GAjOL,wBAmOI,SAAkBo8I,GACd,IAAMq+K,EAAsC,GAC5C,IAAK,IAAM9+S,KAAQygI,EAAQ,CACvB,IAAM1zI,EAAOowT,EAAiBn9S,GACzBjT,GACD65I,EAAOQ,mBAAP,yCAA6D1gI,KAAKE,UAAU5G,IAAU,SAAUygI,GAEpGq+K,EAAa16T,KAAK,CAAE4b,KAAAA,EAAMjT,KAAAA,GAC7B,CAMD,OAJA+xT,EAAax/P,MAAK,SAAC9vD,EAAG8J,GAClB,OAAO8jT,EAAiB50T,QAAQgH,EAAEwQ,MAAQo9S,EAAiB50T,QAAQ8Q,EAAE0G,KACxE,IAEM89S,EAAiBc,WAAW,eAAgB,CAAEr+K,aAAcu+K,GAAgBr+K,EACtF,GAlPL,oBAoPI,SAAcA,EAAyBH,EAA8Cj8I,GACjF,OAAOunJ,EAAAA,EAAAA,IAAU,CACb,SACAkyK,EAAiBiB,WAAWt+K,GAC5Bq9K,EAAiB/4S,KAAKu7H,GAAOzrE,KAAKxwE,IAEzC,GA1PL,kBA4PI,SAAYo8I,EAAyBH,EAA8Cj8I,GAC/E,OAAOy7I,EAAAA,EAAAA,GAAUg+K,EAAiB99K,OAAOS,EAAQH,EAAOj8I,GAC3D,GA9PL,0BAiQI,SAA0Bo8I,EAAyBH,EAA8Cj8I,EAA4BuwJ,4IAEzHnU,GAASoU,EAAAA,EAAAA,IAAYpU,GAGfu+K,EAAmC,CAAC,EAGtCv+K,EAAOpG,qBAAsBmI,EAAAA,EAAAA,IAAY/B,EAAOpG,kBAAmB,MACnE2kL,EAASv+K,EAAOpG,mBAAqB,OAInCuiG,EAAUkhF,EAAiB/4S,KAAKu7H,IAG9B2+K,MAAM56T,GAAO,SAAC0I,EAAc1I,GAIhC,MAHa,YAAT0I,IAAuBy1I,EAAAA,EAAAA,IAAYn+I,EAAO,MAC1C26T,EAAS36T,GAAS,MAEfA,CACV,wBAGkB26T,iDACE,OADVh/S,EAAAA,EAAAA,GAAAA,gBACgB40I,EAAY50I,WAAnCg/S,EAASh/S,GAAD,qCAIRygI,EAAOpG,mBAAqB2kL,EAASv+K,EAAOpG,qBAC5CoG,EAAOpG,kBAAoB2kL,EAASv+K,EAAOpG,oBAI/Ch2I,EAAQu4O,EAAQqiF,MAAM56T,GAAO,SAAC0I,EAAc1I,GACxC,MAAa,YAAT0I,GAAsBiyT,EAAS36T,GAAiB26T,EAAS36T,GACtDA,CACV,sBAEM,CAAEo8I,OAAAA,EAAQp8I,MAAAA,+CACpB,GAzSL,wBA2SI,SAAkBo8I,EAAyBH,EAA8Cj8I,GAErFy5T,EAAiBiB,WAAWt+K,GAG5B,IAAMy+K,EAAoC,CAAC,EACrCC,EAAoD,GAE1D/B,EAAiBr1T,SAAQ,SAACiY,GACtB,IAAM3b,EAAco8I,EAAQzgI,GACf,MAAT3b,IACJ66T,EAAal/S,GAAQs9S,EAAat9S,GAAM3b,GACxC86T,EAAY/6T,KAAK,CAAE4b,KAAAA,EAAMjT,KAAMowT,EAAiBn9S,KACnD,IAED,IAAM48N,EAAUkhF,EAAiB/4S,KAAKu7H,GAEhC8+K,GAAkBvqK,EAAAA,EAAAA,IAAYvU,GAUpC,OATI8+K,EAAgB7+K,aAChBqG,EAAOQ,mBAAmB,2CAA4C,qBAAsB9G,GAE5F8+K,EAAgB7+K,aAAe4+K,EAInCviF,EAAQ58F,OAAO37I,GAER,CACHi8I,MAAO8+K,EACP3+K,OAAQy+K,EACRx+K,YAAak8F,EAAQl8F,YACrB3jD,QAAS6/I,EAAQqiF,MAAM56T,GAAO,SAAC0I,EAAc1I,GAGzC,GAAI0I,EAAK3E,MAAM,eACX,OAAO8gJ,EAAAA,EAAAA,KAAQnG,EAAAA,EAAAA,IAAS1+I,IAI5B,GAAI0I,EAAK3E,MAAM,UACX,OAAO60I,EAAAA,GAAAA,KAAe54I,GAAO2L,WAGjC,OAAQjD,GACJ,IAAK,UACD,OAAO1I,EAAM4R,cACjB,IAAK,OACD,QAAS5R,EACb,IAAK,SAID,MAHsB,kBAAXA,GACPuiJ,EAAOQ,mBAAP,iBAA4C,QAAS/iJ,GAElDA,EAGf,OAAOuiJ,EAAOQ,mBAAmB,mBAAoB,OAAQr6I,EAChE,IAER,KArWL,KExGasyT,GAAb,WAOI,WAAYxoC,IAAgB,gBACxBnsI,EAAAA,EAAAA,IAAehlJ,KAAM,WAAYmxR,IACjCnsI,EAAAA,EAAAA,IAAehlJ,KAAM,OAAQmxR,EAASvyR,SAEtComJ,EAAAA,EAAAA,IAAehlJ,KAAM,eAAgB,CAAC,IACtCglJ,EAAAA,EAAAA,IAAehlJ,KAAM,UAAWmxR,EAAS10Q,OAAO,IAGhD,IAAK,IAAI7e,EAAI,EAAGA,EAAIuzR,EAASvyR,OAAQhB,IACjCoC,KAAK45T,aAAazoC,EAAS10Q,OAAO7e,IAAMA,CAE/C,CAlBL,qCAoBI,SAAOe,GACH,IAAIyD,GAASi7I,EAAAA,EAAAA,IAAS1+I,GAEtB,GAAsB,IAAlByD,EAAOxD,OAAgB,MAAO,GAGlC,IADA,IAAI2kM,EAAS,CAAE,GACN3lM,EAAI,EAAGA,EAAIwE,EAAOxD,SAAUhB,EAAG,CAEpC,IADA,IAAI6qN,EAAQrmN,EAAOxE,GACV8wB,EAAI,EAAGA,EAAI60K,EAAO3kM,SAAU8vB,EACjC+5L,GAASllB,EAAO70K,IAAM,EACtB60K,EAAO70K,GAAK+5L,EAAQzoN,KAAK+pK,KACzB0+C,EAASA,EAAQzoN,KAAK+pK,KAAQ,EAGlC,KAAO0+C,EAAQ,GACXllB,EAAO7kM,KAAK+pN,EAAQzoN,KAAK+pK,MACzB0+C,EAASA,EAAQzoN,KAAK+pK,KAAQ,CAErC,CAKD,IAHA,IAAI7tJ,EAAS,GAGJ64D,EAAI,EAAiB,IAAd3yE,EAAO2yE,IAAYA,EAAI3yE,EAAOxD,OAAS,IAAKm2E,EACxD74D,GAAUlc,KAAK65T,QAInB,IAAK,IAAIl3T,EAAI4gM,EAAO3kM,OAAS,EAAG+D,GAAK,IAAKA,EACtCuZ,GAAUlc,KAAKmxR,SAAS5tF,EAAO5gM,IAGnC,OAAOuZ,CACV,GArDL,oBAuDI,SAAOvd,GACH,GAAsB,kBAAXA,EACP,MAAM,IAAII,UAAU,mBAGxB,IAAIqnJ,EAAuB,GAC3B,GAAqB,IAAjBznJ,EAAMC,OAAgB,OAAO,IAAI4S,WAAW40I,GAEhDA,EAAM1nJ,KAAK,GACX,IAAK,IAAId,EAAI,EAAGA,EAAIe,EAAMC,OAAQhB,IAAK,CACnC,IAAI45N,EAAOx3N,KAAK45T,aAAaj7T,EAAMf,IAEnC,QAAayL,IAATmuN,EACA,MAAM,IAAI7lN,MAAM,WAAa3R,KAAK+pK,KAAO,cAI7C,IADA,IAAI0+C,EAAQ+O,EACH9oM,EAAI,EAAGA,EAAI03H,EAAMxnJ,SAAU8vB,EAChC+5L,GAASriE,EAAM13H,GAAK1uB,KAAK+pK,KACzB3jB,EAAM13H,GAAa,IAAR+5L,EACXA,IAAU,EAGd,KAAOA,EAAQ,GACXriE,EAAM1nJ,KAAa,IAAR+pN,GACXA,IAAU,CAEjB,CAGD,IAAK,IAAI1zI,EAAI,EAAGp2E,EAAMo2E,KAAO/0E,KAAK65T,SAAW9kP,EAAIp2E,EAAMC,OAAS,IAAKm2E,EACjEqxE,EAAM1nJ,KAAK,GAGf,OAAO2+I,EAAAA,EAAAA,IAAS,IAAI7rI,WAAW40I,EAAMm+D,WACxC,KA1FL,KA8FMu1G,IADS,IAAIH,GAAM,oCACV,IAAIA,GAAM,uFDzIzB,SAAYxB,GAAqBA,EAAAA,OAAAA,SAAmBA,EAAAA,OAAAA,QAApD,EAAYA,KAAAA,GAAkB,KEAvB,ICWDj3K,GAAS,IAAIC,EAAAA,GDXI,cCajB,SAAUssK,GAAUjvS,GACtB,MAAO,KAAQ2wD,KAAAA,YAAiBrqD,QAAOu4H,EAAAA,EAAAA,IAAS7+H,IAAOmtJ,OAAO,MACjE,CAEK,SAAUuyI,GAAO1/R,GACnB,MAAO,KAAQ2wD,KAAAA,SAAcrqD,QAAOu4H,EAAAA,EAAAA,IAAS7+H,IAAOmtJ,OAAO,MAC9D,CAEK,SAAUyyI,GAAO5/R,GACnB,MAAO,KAAQ2wD,KAAAA,SAAcrqD,QAAOu4H,EAAAA,EAAAA,IAAS7+H,IAAOmtJ,OAAO,MAC9D,CAEK,SAAUouJ,GAAY3jD,EAA+Bn1Q,EAAgBud,GAQvE,OAPK25S,GAAmB/hD,IACpBl1H,GAAOM,WAAW,yBAA2B40H,EAAWj1H,EAAAA,GAAAA,OAAAA,sBAAqC,CACzFmG,UAAW,OACX8uH,UAAWA,IAIZ,KAAOjnM,KAAAA,KAAgBA,KAAMinM,IAAY/4H,EAAAA,EAAAA,IAASp8I,IAAM6jB,QAAOu4H,EAAAA,EAAAA,IAAS7+H,IAAOmtJ,OAAO,MAChG,CC7BK,SAAU2iI,GAAO7oG,EAAqBlrD,EAAiBy/K,EAAoBx9E,EAAgBy9E,GAG7F,IAAIC,EAFJz0H,GAAWpoD,EAAAA,EAAAA,IAASooD,GACpBlrD,GAAO8C,EAAAA,EAAAA,IAAS9C,GAEhB,IAMIlhI,EACA4xP,EAPAr7P,EAAI,EACFuqT,EAAK,IAAI3oT,WAAWgrO,GACpB49E,EAAS,IAAI5oT,WAAW+oI,EAAK37I,OAAS,GAC5Cw7T,EAAO3vT,IAAI8vI,GAMX,IAAK,IAAI38I,EAAI,EAAGA,GAAKgS,EAAGhS,IAAK,CAEzBw8T,EAAO7/K,EAAK37I,QAAWhB,GAAK,GAAM,IAClCw8T,EAAO7/K,EAAK37I,OAAS,GAAMhB,GAAK,GAAM,IACtCw8T,EAAO7/K,EAAK37I,OAAS,GAAMhB,GAAK,EAAK,IACrCw8T,EAAO7/K,EAAK37I,OAAS,GAAS,IAAJhB,EAG1B,IAAIs8S,GAAI78J,EAAAA,EAAAA,IAAS08K,GAAgCE,EAAex0H,EAAU20H,IAErEF,IACDA,EAAOhgB,EAAEt7S,OACTqsQ,EAAI,IAAIz5P,WAAW0oT,GAEnB7gT,EAAImjO,IADJ5sO,EAAIzJ,KAAK8K,KAAKurO,EAAS09E,IACL,GAAKA,GAI3BjvD,EAAExgQ,IAAIyvS,GAGN,IAAK,IAAIxrR,EAAI,EAAGA,EAAIsrS,EAAYtrS,IAAK,CAEjCwrR,GAAI78J,EAAAA,EAAAA,IAAS08K,GAAgCE,EAAex0H,EAAUy0G,IACtE,IAAK,IAAInlO,EAAI,EAAGA,EAAImlP,EAAMnlP,IAAKk2L,EAAEl2L,IAAMmlO,EAAEnlO,EAC5C,CAGD,IAAMslP,GAAWz8T,EAAI,GAAKs8T,EACpB5xS,EAAO1qB,IAAMgS,EAAIyJ,EAAI6gT,EAE3BC,EAAG1vT,KAAI4yI,EAAAA,EAAAA,IAAS4tH,GAAGt7P,MAAM,EAAG2Y,GAAM+xS,EACrC,CAED,OAAO72K,EAAAA,EAAAA,IAAQ22K,EAClB,6BC3CYj5K,GAAS,IAAIC,EAAAA,GCVH,mBDYDm5K,GAAtB,WAGI,WAAYr1H,IAAc,eACtB/jD,GAAOuM,cAAP,0CAAiC6sK,IACjCt1K,EAAAA,EAAAA,IAAehlJ,KAAM,SAAUilM,EAClC,CANL,oCAYI,SAAMs1H,GACF,OAAOA,EAAShqT,cAAcoxD,MAAM,MACvC,GAdL,kBAiBI,SAAKg4H,GACD,OAAOA,EAAM93H,KAAK,IACrB,IAnBL,oBAqBI,SAAa24P,GAET,IADA,IAAM7gI,EAAQ,GACL/7L,EAAI,EAAGA,EAAI,KAAMA,IAAK,CAC3B,IAAMkgK,EAAO08J,EAASC,QAAQ78T,GAE9B,GAAIA,IAAM48T,EAASE,aAAa58J,GAAS,MAAO,KAChD67B,EAAMj7L,KAAKo/J,EACd,CACD,OAAOj9J,EAAAA,EAAAA,IAAG84L,EAAM93H,KAAK,MAAQ,KAChC,GA9BL,sBAgCI,SAAgB84P,EAAgBrgT,GACvBA,IAAQA,EAAOqgT,EAAK11H,OAa5B,KA9CL,KELIu1H,GAA0B,KAG9B,SAASI,GAAUD,GACf,GAAgB,MAAZH,KACJA,GAPU,+zVAOO73P,QAAQ,WAAY,OAAOpyD,cAAc2oG,UAAU,GAAGv3C,MAAM,KAIhD,uEAAzB24P,GAAStlK,MAAM2lK,IAEf,MADAH,GAAW,KACL,IAAI7oT,MAAM,yCAEvB,KAkBKkpT,GAAS,IAhBTC,SAAAA,iCACF,+CACU,KACT,uCAED,SAAQvrT,GAEJ,OADAqrT,GAAU56T,MACHw6T,GAASjrT,EACnB,6BAED,SAAauuJ,GAET,OADA88J,GAAU56T,MACHw6T,GAAS13T,QAAQg7J,EAC3B,OAbCg9J,CAAeR,KAiBrBA,GAAS1uM,SAASivM,IC5BX,IAAME,GAA8C,CACzDC,GAAIA,ICQA95K,GAAS,IAAIC,EAAAA,GCpBI,gBDsBjBquE,GAAIj4E,EAAAA,GAAAA,KAAe,sEAInB0jL,IAAex2K,EAAAA,EAAAA,IAAY,gBAE3By2K,GAAc,WAGpB,SAASC,GAAajiO,GACnB,OAAS,GAAKA,GAAQ,GAAO,EAAIA,CACnC,CAOD,SAASkiO,GAAQz8T,GACb,OAAOgiJ,EAAAA,EAAAA,KAAW6C,EAAAA,EAAAA,IAAQ7kJ,GAAQ,GACrC,CAED,SAAS08T,GAAY78S,GACjB,OAAOs7S,GAAOx/K,QAAOyC,EAAAA,EAAAA,IAAO,CAAEv+H,GAAM4uI,EAAAA,EAAAA,IAAa8wJ,GAAOA,GAAO1/R,IAAQ,EAAG,KAC7E,CAED,SAAS88S,GAAYd,GACjB,GAAgB,MAAZA,EACA,OAAOO,GAAAA,GAGX,GAAyB,kBAAdP,EAAwB,CAC/B,IAAM7gI,EAAQohI,GAAUP,GAIxB,OAHa,MAAT7gI,GACAz4C,GAAOQ,mBAAmB,iBAAkB,WAAY84K,GAErD7gI,CACV,CAED,OAAO6gI,CACV,CAED,IAAM9zK,GAAyB,CAAC,EAEnB60K,GAAc,mBAQdC,GAAb,WAwBI,WAAYn0K,EAAuB2oB,EAAoBC,EAAmBwrJ,EAA2BC,EAAmBnsT,EAAe6T,EAAeu4S,GAElJ,IAFmL,eAE/Kt0K,IAAqBX,GACrB,MAAM,IAAI/0I,MAAM,gDAGpB,GAAIq+J,EAAY,CACZ,IAAMU,EAAa,IAAIX,GAAAA,GAAWC,IAClChrB,EAAAA,EAAAA,IAAehlJ,KAAM,aAAc0wK,EAAWV,aAC9ChrB,EAAAA,EAAAA,IAAehlJ,KAAM,YAAa0wK,EAAWkrJ,oBAChD,MACG52K,EAAAA,EAAAA,IAAehlJ,KAAM,aAAc,OACnCglJ,EAAAA,EAAAA,IAAehlJ,KAAM,aAAawjJ,EAAAA,EAAAA,IAAQysB,KAG9CjrB,EAAAA,EAAAA,IAAehlJ,KAAM,oBAAqBy7T,IAC1Cz2K,EAAAA,EAAAA,IAAehlJ,KAAM,eAAeotJ,EAAAA,EAAAA,IAAaqgK,GAAUvP,GAAOl+S,KAAKiwK,YAAa,EAAG,KAEvFjrB,EAAAA,EAAAA,IAAehlJ,KAAM,WAAW2yK,EAAAA,GAAAA,IAAe3yK,KAAKiwK,aAEpDjrB,EAAAA,EAAAA,IAAehlJ,KAAM,YAAa07T,IAElC12K,EAAAA,EAAAA,IAAehlJ,KAAM,QAASuP,IAC9By1I,EAAAA,EAAAA,IAAehlJ,KAAM,QAASojB,GAER,MAAlBu4S,IAEA32K,EAAAA,EAAAA,IAAehlJ,KAAM,WAAY,OACjCglJ,EAAAA,EAAAA,IAAehlJ,KAAM,OAAQ,OAEK,kBAApB27T,IAEd32K,EAAAA,EAAAA,IAAehlJ,KAAM,WAAY,OACjCglJ,EAAAA,EAAAA,IAAehlJ,KAAM,OAAQ27T,MAI7B32K,EAAAA,EAAAA,IAAehlJ,KAAM,WAAY27T,IACjC32K,EAAAA,EAAAA,IAAehlJ,KAAM,OAAQ27T,EAAex7P,MAEnD,CAhEL,wCAkEI,WAOI,GAAIngE,KAAKojB,OAAS,IAAO,MAAM,IAAIzR,MAAM,oBAEzC,OAAO0pT,IAAYt+K,EAAAA,EAAAA,IAAO,CACD,MAAnB/8I,KAAKgwK,WAAsB,aAAc,cAC3CxsB,EAAAA,EAAAA,IAAQxjJ,KAAKojB,OACbpjB,KAAKy7T,mBACL96K,EAAAA,EAAAA,KAAW6C,EAAAA,EAAAA,IAAQxjJ,KAAKuP,OAAQ,GAChCvP,KAAK07T,UACgB,MAAnB17T,KAAKgwK,YAAsBjzB,EAAAA,EAAAA,IAAO,CAAE,OAAQ/8I,KAAKgwK,aAAehwK,KAAKiwK,YAE9E,GAnFL,oBAqFI,WACI,OAAO,IAAIurJ,EAAO90K,GAAmB,KAAM1mJ,KAAKiwK,UAAWjwK,KAAKy7T,kBAAmBz7T,KAAK07T,UAAW17T,KAAKuP,MAAOvP,KAAKojB,MAAOpjB,KAAKmgE,KACnI,GAvFL,qBAyFY,SAAQ5wD,GACZ,GAAIA,EAAQ,WAAc,MAAM,IAAIoC,MAAM,mBAAqB87B,OAAOl+B,IAGtE,IAAI4wD,EAAOngE,KAAKmgE,KACZA,IAAQA,GAAQ,KAAe,WAAR5wD,IAE3B,IAAMiP,EAAO,IAAIhN,WAAW,IAE5B,GAAIjC,EAAQ2rT,GAAa,CACrB,IAAKl7T,KAAKgwK,WACN,MAAM,IAAIr+J,MAAM,wCAIpB6M,EAAK/T,KAAI4yI,EAAAA,EAAAA,IAASr9I,KAAKgwK,YAAa,GAGhC7vG,IAAQA,GAAQ,IAEvB,MAEG3hD,EAAK/T,KAAI4yI,EAAAA,EAAAA,IAASr9I,KAAKiwK,YAI3B,IAAK,IAAIryK,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAAK4gB,EAAK,IAAM5gB,GAAK,IAAQ2R,GAAU,GAAK3R,EAAM,IAEhF,IAAMsjK,GAAI7jB,EAAAA,EAAAA,IAAS08K,GAAY5B,GAAmB/Z,OAAQp+S,KAAK07T,UAAWl9S,IACpEq9S,EAAK36J,EAAEvxJ,MAAM,EAAG,IAChBmsT,EAAK56J,EAAEvxJ,MAAM,IAGfosT,EAAa,KAGbC,EAAa,KAEbh8T,KAAKgwK,WACL+rJ,EAAKX,GAAQ7jL,EAAAA,GAAAA,KAAeskL,GAAI9vS,IAAI/rB,KAAKgwK,YAAYvR,IAAI+wD,KAGzDwsG,EADW,IAAIjsJ,GAAAA,IAAWvsB,EAAAA,EAAAA,IAAQq4K,IAC1BI,UAAUj8T,KAAKiwK,WAG3B,IAAI0rJ,EAAoCx7P,EAElC+7P,EAAel8T,KAAKu6T,SAS1B,OARI2B,IACAP,EAAiBz6T,OAAO6Q,OAAO,CAC3BoqT,OAAQD,EAAYC,OACpBh8P,KAAMA,EACN8kI,OAASi3H,EAAYj3H,QAAU,QAIhC,IAAIu2H,EAAO90K,GAAmBq1K,EAAIC,EAAIh8T,KAAKo8T,YAAahB,GAAQU,GAAKvsT,EAAOvP,KAAKojB,MAAQ,EAAGu4S,EACtG,GAlJL,wBAoJI,SAAWx7P,GACP,IAAM9jD,EAAa8jD,EAAKwB,MAAM,KAE9B,GAA0B,IAAtBtlD,EAAWzd,QAAmC,MAAlByd,EAAW,IAA6B,IAAfrc,KAAKojB,MAC1D,MAAM,IAAIzR,MAAM,kBAAoBwuD,GAGlB,MAAlB9jD,EAAW,IAAcA,EAAW+6E,QAGxC,IADA,IAAIhjB,EAAiBp0E,KACZpC,EAAI,EAAGA,EAAIye,EAAWzd,OAAQhB,IAAK,CACxC,IAAMynJ,EAAYhpI,EAAWze,GAC7B,GAAIynJ,EAAU3iJ,MAAM,aAAc,CAC9B,IAAM6M,EAAQ+M,SAAS+oI,EAAUnsC,UAAU,EAAGmsC,EAAUzmJ,OAAS,IACjE,GAAI2Q,GAAS2rT,GAAe,MAAM,IAAIvpT,MAAM,wBAA0B0zI,GACtEjxE,EAASA,EAAOioP,QAAQnB,GAAc3rT,EACzC,KAAM,KAAI81I,EAAU3iJ,MAAM,YAKvB,MAAM,IAAIiP,MAAM,4BAA8B0zI,GAJ9C,IAAM91I,EAAQ+M,SAAS+oI,GACvB,GAAI91I,GAAS2rT,GAAe,MAAM,IAAIvpT,MAAM,wBAA0B0zI,GACtEjxE,EAASA,EAAOioP,QAAQ9sT,EAG3B,CACJ,CAED,OAAO6kE,CACV,IA9KL,wBAiLI,SAAiBo3F,EAAiB+uJ,GAC9B,IAAM+B,GAAwBj/K,EAAAA,EAAAA,IAASmuB,GACvC,GAAI8wJ,EAAU19T,OAAS,IAAM09T,EAAU19T,OAAS,GAAM,MAAM,IAAI+S,MAAM,gBAEtE,IAAMuvJ,GAAgB7jB,EAAAA,EAAAA,IAAS08K,GAAY5B,GAAmB/Z,OAAQ6c,GAAcqB,IAEpF,OAAO,IAAId,EAAO90K,GAAmB00K,GAAQl6J,EAAEvxJ,MAAM,EAAG,KAAM,KAAM,aAAcyrT,GAAQl6J,EAAEvxJ,MAAM,KAAM,EAAG,EAAG4qT,EACjH,GAxLL,0BA0LI,SAAoBA,EAAkB90H,EAAmB+0H,GAQrD,OAFAD,EAAWgC,GAAkBC,GAAkBjC,EAH/CC,EAAWc,GAAYd,IAG6CA,GAE7DgB,EAAOiB,UAAUC,GAAenC,EAAU90H,GAAW,CACxD02H,OAAQ5B,EACRp6P,KAAM,IACN8kI,OAAQu1H,EAASv1H,QAExB,GAvML,sBAyMI,SAAgBz5B,GACZ,OAAOgwJ,EAAOiB,UAAUjxJ,EAAM,KACjC,GA3ML,6BA6MI,SAAuBmxJ,GACnB,IAAMv2K,EAAQ0zK,GAAO5pN,OAAOysN,GAEP,KAAjBv2K,EAAMxnJ,QAAiBy8T,GAAYj1K,EAAMz2I,MAAM,EAAG,OAASgtT,GAC3Dz7K,GAAOQ,mBAAmB,uBAAwB,cAAe,cAGrE,IAAMt+H,EAAQgjI,EAAM,GACdq1K,GAAoBj4K,EAAAA,EAAAA,IAAQ4C,EAAMz2I,MAAM,EAAG,IAC3CJ,EAAQ+M,UAASknI,EAAAA,EAAAA,IAAQ4C,EAAMz2I,MAAM,EAAG,KAAKupG,UAAU,GAAI,IAC3DwiN,GAAYl4K,EAAAA,EAAAA,IAAQ4C,EAAMz2I,MAAM,GAAI,KACpC1O,EAAMmlJ,EAAMz2I,MAAM,GAAI,IAE5B,QAAQ6zI,EAAAA,EAAAA,IAAQ4C,EAAMz2I,MAAM,EAAG,KAE3B,IAAK,aAAc,IAAK,aACpB,OAAO,IAAI6rT,EAAO90K,GAAmB,MAAMlD,EAAAA,EAAAA,IAAQviJ,GAAMw6T,EAAmBC,EAAWnsT,EAAO6T,EAAO,MAGzG,IAAK,aAAc,IAAK,cACpB,GAAe,IAAXniB,EAAI,GAAY,MACpB,OAAO,IAAIu6T,EAAO90K,IAAmBlD,EAAAA,EAAAA,IAAQviJ,EAAI0O,MAAM,IAAK,KAAM8rT,EAAmBC,EAAWnsT,EAAO6T,EAAO,MAGtH,OAAO89H,GAAOQ,mBAAmB,uBAAwB,cAAe,aAC3E,KAtOL,KAyOM,SAAUg7K,GAAenC,EAAkB90H,GACxCA,IAAYA,EAAW,IAE5B,IAAMlrD,GAAOkK,EAAAA,EAAAA,IAAY,WAAaghD,EAAU90B,EAAAA,GAAAA,MAEhD,OAAO29H,IAAO7pJ,EAAAA,EAAAA,IAAY81K,EAAU5pJ,EAAAA,GAAAA,MAAgCp2B,EAAM,KAAM,GAAI,SACvF,CAEK,SAAUiiL,GAAkBjC,EAAkBC,GAChDA,EAAWc,GAAYd,GAEvBt5K,GAAO2wB,iBAEP,IAAM8nB,EAAQ6gI,EAAS74P,MAAM44P,GAC7B,GAAK5gI,EAAM/6L,OAAS,IAAO,EAAK,MAAM,IAAI+S,MAAM,oBAKhD,IAHA,IAAMu5J,GAAU7tB,EAAAA,EAAAA,IAAS,IAAI7rI,WAAWrL,KAAK8K,KAAK,GAAK0oL,EAAM/6L,OAAS,KAElEe,EAAS,EACJ/B,EAAI,EAAGA,EAAI+7L,EAAM/6L,OAAQhB,IAAK,CACnC,IAAI2R,EAAQirT,EAASE,aAAa/gI,EAAM/7L,GAAGgU,UAAU,SACrD,IAAe,IAAXrC,EAAgB,MAAM,IAAIoC,MAAM,oBAEpC,IAAK,IAAIsoL,EAAM,EAAGA,EAAM,GAAIA,IACpB1qL,EAAS,GAAM,GAAK0qL,IACpB/uB,EAAQvrK,GAAU,IAAO,GAAM,EAAKA,EAAS,GAEjDA,GAEP,CAED,IAAMi9T,EAAc,GAAKjjI,EAAM/6L,OAAS,EAGlCi+T,EAAe1B,GADAxhI,EAAM/6L,OAAS,GAKpC,KAFiBy+I,EAAAA,EAAAA,IAAS6gK,GAAOhzI,EAAQv7J,MAAM,EAAGitT,EAAc,KAAK,GAAKC,MAExD3xJ,EAAQA,EAAQtsK,OAAS,GAAKi+T,GAC5C,MAAM,IAAIlrT,MAAM,oBAGpB,OAAO6xI,EAAAA,EAAAA,IAAQ0nB,EAAQv7J,MAAM,EAAGitT,EAAc,GACjD,CAEK,SAAUL,GAAkBrxJ,EAAoBsvJ,GAKlD,GAJAA,EAAWc,GAAYd,IAEvBtvJ,GAAU7tB,EAAAA,EAAAA,IAAS6tB,IAENtsK,OAAS,IAAO,GAAKssK,EAAQtsK,OAAS,IAAMssK,EAAQtsK,OAAS,GACtE,MAAM,IAAI+S,MAAM,mBAMpB,IAHA,IAAM23B,EAAyB,CAAE,GAE7BwzR,EAAgB,GACXl/T,EAAI,EAAGA,EAAIstK,EAAQtsK,OAAQhB,IAG5Bk/T,EAAgB,GAChBxzR,EAAQA,EAAQ1qC,OAAS,KAAO,EAChC0qC,EAAQA,EAAQ1qC,OAAS,IAAMssK,EAAQttK,GAEvCk/T,GAAiB,IAIjBxzR,EAAQA,EAAQ1qC,OAAS,KAAOk+T,EAChCxzR,EAAQA,EAAQ1qC,OAAS,IAAMssK,EAAQttK,IAAO,EAAIk/T,EAGlDxzR,EAAQ5qC,KAAKwsK,EAAQttK,IAtVtB,GAsVwC,EAAIk/T,GAtV/B,GAwVZA,GAAiB,GAKzB,IAAMC,EAAe7xJ,EAAQtsK,OAAS,EAChCwxJ,GAAW/S,EAAAA,EAAAA,IAAS6gK,GAAOhzI,IAAU,GAAKiwJ,GAAa4B,GAM7D,OAHAzzR,EAAQA,EAAQ1qC,OAAS,KAAOm+T,EAChCzzR,EAAQA,EAAQ1qC,OAAS,IAAOwxJ,GAAa,EAAI2sK,EAE1CvC,EAAS34P,KAAKv4B,EAAQ1jC,KAAI,SAAC2J,GAAD,OAAsBirT,EAAUC,QAAQlrT,EAAxC,IACpC,CAEK,SAAUytT,GAAgBzC,EAAkBC,GAC9C,IAEI,OADAgC,GAAkBjC,EAAUC,IACrB,CACQ,CAAjB,MAAOzxT,GAAU,CACnB,OAAO,CACV,CAEK,SAAUk0T,GAAe1tT,GAI3B,OAHsB,kBAAXA,GAAuBA,EAAQ,GAAKA,GAAS2rT,IAAe3rT,EAAQ,IAC3E2xI,GAAOQ,mBAAmB,wBAAyB,QAASnyI,GAEzD,aAAP,OAAqBA,EAArB,QACH,CEzZM,ICMD2xI,GAAS,IAAIC,EAAAA,GDNI,gBCmBvB,IAAM+7K,GAPN,WACE,GAAoB,qBAAT/zT,KAAwB,OAAOA,KAC1C,GAAsB,qBAAXtG,OAA0B,OAAOA,OAC5C,GAAsB,qBAAXsqG,EAAAA,EAA0B,OAAOA,EAAAA,EAC5C,MAAM,IAAIx7F,MAAM,iCACjB,CAEiBwrT,GAEd7zF,GAAc4zF,GAAU5zF,QAAU4zF,GAAU5vD,SAc1C,SAAUC,GAAY3uQ,IACpBA,GAAU,GAAKA,EAAS,MAASA,EAAS,GAAMA,GAAUA,IAC1DsiJ,GAAOQ,mBAAmB,iBAAkB,SAAU9iJ,GAG1D,IAAMw1E,EAAS,IAAI5iE,WAAW5S,GAE9B,OADA0qO,GAAO+jC,gBAAgBj5L,IAChBipE,EAAAA,EAAAA,IAASjpE,EACnB,CArBIk1J,IAAWA,GAAO+jC,kBAEnBnsH,GAAOxsI,KAAK,gDAEZ40N,GAAS,CACL+jC,gBAAiB,SAAS/0N,GACtB,OAAO4oG,GAAOM,WAAW,oCAAqCL,EAAAA,GAAAA,OAAAA,sBAAqC,CAC/FmG,UAAW,0BAElB,sDC1BH,SAAU81K,GAAcC,GAI1B,MAH0B,kBAAfA,GAAyD,OAA9BA,EAAUnkN,UAAU,EAAG,KACzDmkN,EAAY,KAAOA,IAEhBhgL,EAAAA,EAAAA,IAASggL,EACnB,CAEK,SAAUC,GAAK3+T,EAAwBC,GAEzC,IADAD,EAAQ8uC,OAAO9uC,GACRA,EAAMC,OAASA,GAAUD,EAAQ,IAAMA,EAC9C,OAAOA,CACV,CAEK,SAAU4+T,GAAY93H,GACxB,MAAyB,kBAAdA,GACAhhD,EAAAA,EAAAA,IAAYghD,EAAU90B,EAAAA,GAAAA,OAE1BtzB,EAAAA,EAAAA,IAASooD,EACnB,CAEK,SAAU+3H,GAAWh8T,EAAa2+D,GAIpC,IAHA,IAAIs9P,EAAej8T,EAEb8nJ,EAAQnpF,EAAK5vD,cAAcoxD,MAAM,KAC9B/jE,EAAI,EAAGA,EAAI0rJ,EAAM1qJ,OAAQhB,IAAK,CAGnC,IAAI8/T,EAAgB,KACpB,IAAK,IAAMz8T,KAAOw8T,EACb,GAAIx8T,EAAIsP,gBAAkB+4I,EAAM1rJ,GAAI,CAChC8/T,EAAgBD,EAAax8T,GAC7B,KACH,CAIN,GAAsB,OAAlBy8T,EACA,OAAO,KAIXD,EAAeC,CAClB,CAED,OAAOD,CACV,CAGK,SAAUE,GAAOpwD,GACnB,IAAMnnH,GAAQ/I,EAAAA,EAAAA,IAASkwH,GAIvBnnH,EAAM,GAAiB,GAAXA,EAAM,GAAa,GAK/BA,EAAM,GAAiB,GAAXA,EAAM,GAAa,IAE/B,IAAMznJ,GAAQ6kJ,EAAAA,EAAAA,IAAQ4C,GAEtB,MAAO,CACJznJ,EAAMu6G,UAAU,EAAG,IACnBv6G,EAAMu6G,UAAU,GAAI,IACpBv6G,EAAMu6G,UAAU,GAAI,IACpBv6G,EAAMu6G,UAAU,GAAI,IACpBv6G,EAAMu6G,UAAU,GAAI,KACrBr3C,KAAK,IACV,CC1EM,IAAMjjD,GAAU,4TCmBjBsiI,GAAS,IAAIC,EAAAA,GAAOviI,IAI1B,SAASg/S,GAAYj/T,GACjB,OAAiB,MAATA,GAAiBA,EAAM47T,UAAY57T,EAAM47T,SAAS4B,MAC7D,CAUM,IAAM0B,GAAb,qJAOI,SAAkBl/T,GACd,SAAUA,IAASA,EAAMm/T,mBAC5B,KATL,GAAqC1zK,EAAAA,IAyCrC,SAAS2zK,GAAYv/S,EAAWvd,GAC5B,IAAM41K,EAAaumJ,GAAcI,GAAWh/S,EAAM,sBAGlD,IADoBglI,EAAAA,EAAAA,KAAQpJ,EAAAA,EAAAA,IAAU2C,EAAAA,EAAAA,IAAO,CAAE97I,EAAI0O,MAAM,GAAI,IAAKknK,MAAgB39D,UAAU,KACxEskN,GAAWh/S,EAAM,cAAcjO,cAC/C,MAAM,IAAIoB,MAAM,oBAGpB,IAAMq+J,EAtBV,SAAkBxxJ,EAAWvd,EAAiB41K,GAE1C,GAAe,gBADA2mJ,GAAWh/S,EAAM,iBACF,CAC1B,IAAM04J,EAAKkmJ,GAAcI,GAAWh/S,EAAM,2BACpC05J,EAAU,IAAIu3F,KAAAA,SAAYv4F,GAE1B8mJ,EAAS,IAAIvuD,KAAAA,gBAAAA,KAAwBxuQ,EAAKi3K,GAEhD,OAAO76B,EAAAA,EAAAA,IAAS2gL,EAAOpnJ,QAAQC,GAClC,CAED,OAAO,IACV,CAUsB45F,CAASjyP,EAAMvd,EAAI0O,MAAM,EAAG,IAAKknK,GAE/C7G,GACD9uB,GAAOM,WAAW,qBAAsBL,EAAAA,GAAAA,OAAAA,sBAAqC,CACzEmG,UAAW,YAInB,IAAM22K,EAAch9T,EAAI0O,MAAM,GAAI,IAE5BswI,GAAU0yB,EAAAA,GAAAA,IAAe3C,GAC/B,GAAIxxJ,EAAKyhI,QAAS,CACd,IAAI+U,EAAQx2I,EAAKyhI,QAAQ1vI,cAGzB,GAF8B,OAA1BykJ,EAAM97C,UAAU,EAAG,KAAe87C,EAAQ,KAAOA,IAEjDnc,EAAAA,EAAAA,IAAWmc,KAAW/U,EACtB,MAAM,IAAItuI,MAAM,mBAEvB,CAED,IAAMu3H,EAA4B,CAC9B40L,oBAAoB,EACpB79K,QAASA,EACT+vB,YAAYxsB,EAAAA,EAAAA,IAAQwsB,IAIxB,GAA6C,QAAzCwtJ,GAAWh/S,EAAM,oBAA+B,CAChD,IAAM0/S,EAAqBd,GAAcI,GAAWh/S,EAAM,gCACpD2/S,EAAaf,GAAcI,GAAWh/S,EAAM,6BAE5C4/S,EAAkB,IAAI3uD,KAAAA,SAAY0uD,GAClCE,EAAiB,IAAI5uD,KAAAA,gBAAAA,KAAwBwuD,EAAaG,GAE1Dj+P,EAAOq9P,GAAWh/S,EAAM,kBAAoB+8S,GAC5Ct2H,EAASu4H,GAAWh/S,EAAM,oBAAsB,KAEhD0sJ,GAAU7tB,EAAAA,EAAAA,IAASghL,EAAeznJ,QAAQsnJ,IAEhD,IACI,IAAM3D,EAAWgC,GAAkBrxJ,EAAS+5B,GACtCjuF,EAAOwkN,GAAO8C,aAAa/D,EAAU,KAAMt1H,GAAQs5H,WAAWp+P,GAEpE,GAAI62C,EAAKg5D,YAAc9mC,EAAQ8mC,WAC3B,MAAM,IAAIr+J,MAAM,qBAGpBu3H,EAAQqxL,SAAWvjN,EAAKujN,QAS3B,CAPC,MAAOxxT,GAIL,GAAIA,EAAMihE,OAASm3E,EAAAA,GAAAA,OAAAA,kBAAqD,aAAnBp4I,EAAM04I,SACvD,MAAM14I,CAEb,CACJ,CAED,OAAO,IAAI80T,GAAgB30L,EAC9B,CAKD,SAASqlK,GAAWiwB,EAA2BjkL,EAAkB/uH,EAAeizS,EAAeC,GAC3F,OAAOrhL,EAAAA,EAAAA,IAASshL,GAAQH,EAAejkL,EAAM/uH,EAAOizS,EAAOC,GAC9D,CAED,SAASpwB,GAAOkwB,EAA2BjkL,EAAkB/uH,EAAeizS,EAAeC,GACvF,OAAO11T,QAAQP,QAAQ8lS,GAAWiwB,EAAejkL,EAAM/uH,EAAOizS,EAAOC,GACxE,CAED,SAASE,GAAkBpgT,EAAWinL,EAA0Bo5H,EAA2BC,EAA2BC,GAClH,IAAMP,EAAgBjB,GAAY93H,GAE5Bu5H,EAAMxB,GAAWh/S,EAAM,cAE7B,GAAIwgT,GAAuB,kBAATA,EAAmB,CACjC,IAAMx9K,EAAa,SAASlnI,EAAc3b,GACtC,OAAOuiJ,GAAOQ,mBAAmB,6CAA8CpnI,EAAM3b,EACxF,EAED,GAA0B,WAAtBqgU,EAAIzuT,cAA4B,CAChC,IAAMgqI,EAAO6iL,GAAcI,GAAWh/S,EAAM,0BACtCgxM,EAAIlzM,SAASkhT,GAAWh/S,EAAM,uBAC9BnF,EAAIiD,SAASkhT,GAAWh/S,EAAM,uBAC9BhD,EAAIc,SAASkhT,GAAWh/S,EAAM,uBAG/BgxM,GAAMn2M,GAAMmC,GAAKgmI,EAAW,MAAOw9K,GAGlB,KAAjBxvG,EAAKA,EAAI,IAAahuE,EAAW,IAAKguE,GAE3C,IAAMivG,EAAQniT,SAASkhT,GAAWh/S,EAAM,2BAGxC,OAFc,KAAVigT,GAAgBj9K,EAAW,QAASi9K,GAEjCK,EAAWN,EAAejkL,EAAMi1E,EAAGn2M,EAAGmC,EAAG,GAAIujT,EAEvD,CAAM,GAA0B,WAAtBC,EAAIzuT,cAA4B,CAEvC,IAAMgqI,EAAO6iL,GAAcI,GAAWh/S,EAAM,0BAExCkgT,EAAkB,KAChBO,EAAMzB,GAAWh/S,EAAM,wBACjB,gBAARygT,EACAP,EAAU,SACK,gBAARO,EACPP,EAAU,SAEVl9K,EAAW,MAAOy9K,GAGtB,IAAMzzS,EAAQlP,SAASkhT,GAAWh/S,EAAM,uBAElCigT,EAAQniT,SAASkhT,GAAWh/S,EAAM,2BAGxC,OAFc,KAAVigT,GAAgBj9K,EAAW,QAASi9K,GAEjCI,EAAWL,EAAejkL,EAAM/uH,EAAOizS,EAAOC,EACxD,CACJ,CAED,OAAOx9K,GAAOQ,mBAAmB,sCAAuC,MAAOs9K,EAClF,CClMD,IAAM99K,GAAS,IAAIC,EAAAA,GAAOviI,IAWbsgT,GAAb,sJAQI,SAAmBvgU,GACf,SAAUA,IAASA,EAAMwgU,oBAC5B,KAVL,GAAsC/0K,EAAAA,IAchC,SAAUwsB,GAAQj2E,EAAc8kG,GAClC,IAAMjnL,EAAOwC,KAAKC,MAAM0/E,GAExB8kG,EAAW83H,GAAY93H,GAGvB,IAAM25H,GAAUvmL,EAAAA,EAAAA,IAAW2kL,GAAWh/S,EAAM,YAGtC6gT,EAAUjC,GAAcI,GAAWh/S,EAAM,YAC1C6gT,GAAYA,EAAQzgU,OAAS,KAAQ,GACtCsiJ,GAAOQ,mBAAmB,kBAAmB,OAAQ/gD,GAczD,IAXA,IAAM1/F,GAAMo8I,EAAAA,EAAAA,IAASixJ,GAAO7oG,EAAUA,EAAU,IAAM,GAAI,WAAW91L,MAAM,EAAG,IAExEunK,EAAKmoJ,EAAQ1vT,MAAM,EAAG,IACtB2vT,EAAgBD,EAAQ1vT,MAAM,IAG9B4vT,EAAS,IAAI9vD,KAAAA,gBAAAA,KAAwBxuQ,EAAKi2K,GAC1C1L,EAAOikG,KAAAA,QAAAA,MAAAA,OAAwBpyH,EAAAA,EAAAA,IAASkiL,EAAO3oJ,QAAQ0oJ,KAGzDE,EAAU,GACL5hU,EAAI,EAAGA,EAAI4tK,EAAK5sK,OAAQhB,IAC7B4hU,GAAW/xR,OAAO2kE,aAAao5D,EAAK5tK,IAGxC,IAAM6hU,GAAeh7K,EAAAA,EAAAA,IAAY+6K,GAE3BxvJ,GAAa51B,EAAAA,EAAAA,GAAUqlL,GAE7B,OAAO,IAAIP,GAAkB,CACzBC,qBAAqB,EACrBl/K,QAASm/K,EACTpvJ,WAAYA,GAEnB,CCxEK,SAAU0vJ,GAAkB/+N,GAC9B,IAAIniF,EAAY,KAChB,IACIA,EAAOwC,KAAKC,MAAM0/E,EACW,CAA/B,MAAO53F,GAAS,OAAO,CAAQ,CAEjC,OAAQyV,EAAK6gT,SAAW7gT,EAAK4gT,OAChC,CAEK,SAAUO,GAAiBh/N,GAC7B,IAAIniF,EAAY,KAChB,IACIA,EAAOwC,KAAKC,MAAM0/E,EACW,CAA/B,MAAO53F,GAAS,OAAO,CAAQ,CAEjC,SAAKyV,EAAKI,SAAWtC,SAASkC,EAAKI,WAAaJ,EAAKI,SAAsC,IAA3BtC,SAASkC,EAAKI,SAMjF,CAMK,SAAUghT,GAAqBj/N,GACjC,GAAI++N,GAAkB/+N,GAClB,IACI,OAAOk4C,EAAAA,EAAAA,IAAW73H,KAAKC,MAAM0/E,GAAMy+N,QACP,CAA9B,MAAOr2T,GAAS,OAAO,IAAO,CAGpC,GAAI42T,GAAiBh/N,GACjB,IACI,OAAOk4C,EAAAA,EAAAA,IAAW73H,KAAKC,MAAM0/E,GAAMs/C,QACP,CAA9B,MAAOl3I,GAAS,OAAO,IAAO,CAGpC,OAAO,IACV,CCrCD,SAAS82T,GAAkBl/N,EAAc8kG,EAA0Bs5H,GAC/D,GAAIW,GAAkB/+N,GAAO,CACrBo+N,GAAoBA,EAAiB,GACzC,IAAM71L,EAAU42L,GAAiBn/N,EAAM8kG,GAEvC,OADIs5H,GAAoBA,EAAiB,GAClC/1T,QAAQP,QAAQygI,EAC1B,CAED,OAAIy2L,GAAiBh/N,GHyMnB,SAAwBA,EAAc8kG,EAA0Bs5H,2IAGtD,OAFNvgT,EAAOwC,KAAKC,MAAM0/E,YAENi+N,GAAepgT,EAAMinL,EAAU6oG,GAAQyxB,KAAAA,OAAehB,iBAAlE99T,EAAM,EAANA,uBACC88T,GAAYv/S,EAAMvd,8CAC5B,CG7Mc++T,CAAgBr/N,EAAM8kG,EAAUs5H,GAGpC/1T,QAAQN,OAAO,IAAIiJ,MAAM,uBACnC,CAED,SAASsuT,GAAsBt/N,EAAc8kG,GACzC,GAAIi6H,GAAkB/+N,GAClB,OAAOm/N,GAAiBn/N,EAAM8kG,GAGlC,GAAIk6H,GAAiBh/N,GACjB,OHqLF,SAAsBA,EAAc8kG,GACtC,IAAMjnL,EAAOwC,KAAKC,MAAM0/E,GAGxB,OAAOo9N,GAAYv/S,EADPogT,GAAepgT,EAAMinL,EAAU8oG,GAAYwxB,KAAAA,YAE1D,CG1LcG,CAAoBv/N,EAAM8kG,GAGrC,MAAM,IAAI9zL,MAAM,sBACnB,CClCM,2SCkBDuvI,GAAS,IAAIC,EAAAA,GDlBI,gBC6BhB,IAAMg/K,GAAb,0CAUI,WAAYnwJ,EAA6DzmC,GAAmB,MAnB7E5qI,EAsBX,IAHwF,eACxF,eAnBa,OADFA,EAsBGqxK,KArBOlzB,EAAAA,EAAAA,IAAYn+I,EAAMqxK,WAAY,KAAwB,MAAjBrxK,EAAMshJ,QAqBrC,CACvB,IAAMywB,EAAa,IAAIX,GAAAA,GAAWC,EAAWA,YAQ7C,IAPAhrB,EAAAA,EAAAA,KAAe,UAAM,eAAe,kBAAM0rB,CAAN,KACpC1rB,EAAAA,EAAAA,KAAe,UAAM,WAAW2tB,EAAAA,GAAAA,IAAe,EAAK1C,YAEhD,EAAKhwB,WAAYpH,EAAAA,EAAAA,IAAWm3B,EAAW/vB,UACvCiB,GAAOQ,mBAAmB,8BAA+B,aAAc,cAxBvF,SAAqB/iJ,GACjB,IAAM47T,EAAW57T,EAAM47T,SACvB,OAAQA,GAAYA,EAAS4B,MAChC,CAwBeyB,CAAY5tJ,GAAa,CACzB,IAAMksJ,EAAclsJ,EAAWuqJ,UAC/Bv1K,EAAAA,EAAAA,KAAe,UAAM,aAAa,iBAC9B,CACIm3K,OAAQD,EAAYC,OACpBh8P,KAAM+7P,EAAY/7P,MAAQo7P,GAC1Bt2H,OAAQi3H,EAAYj3H,QAAU,KAJJ,IAOlC,IAAMs1H,EAAW,EAAKA,SAChBvjN,EAAOwkN,GAAO8C,aAAa/D,EAAS4B,OAAQ,KAAM5B,EAASt1H,QAAQs5H,WAAWhE,EAASp6P,OACzFwyG,EAAAA,GAAAA,IAAe37D,EAAKg5D,cAAgB,EAAK/vB,SACzCiB,GAAOQ,mBAAmB,4BAA6B,aAAc,aAE5E,MACGsD,EAAAA,EAAAA,KAAe,UAAM,aAAa,kBAAgB,IAAhB,GAIzC,KAAM,CACH,GAAI+qB,GAAAA,GAAAA,aAAwBC,GAEC,cAArBA,EAAWnP,OACX3f,GAAOQ,mBAAmB,uCAAwC,aAAc,eAEpFsD,EAAAA,EAAAA,KAAe,UAAM,eAAe,kBAAmBgrB,CAAnB,QAEjC,CAEwB,kBAAhBA,GACHA,EAAWttK,MAAM,iBAAyC,KAAtBstK,EAAWpxK,SAC/CoxK,EAAa,KAAOA,GAI5B,IAAMU,EAAa,IAAIX,GAAAA,GAAWC,IAClChrB,EAAAA,EAAAA,KAAe,UAAM,eAAe,kBAAM0rB,CAAN,GACvC,EAED1rB,EAAAA,EAAAA,KAAe,UAAM,aAAa,kBAAgB,IAAhB,KAClCA,EAAAA,EAAAA,KAAe,UAAM,WAAW2tB,EAAAA,GAAAA,IAAe,EAAK1C,WACvD,CArDuF,OAwDpF1mC,IAAaikB,EAAAA,GAAAA,WAAoBjkB,IACjC2X,GAAOQ,mBAAmB,mBAAoB,WAAYnY,IAG9Dyb,EAAAA,EAAAA,KAAe,UAAM,WAAYzb,GAAY,MA5D2C,CA6D3F,CAvEL,qCAyEI,WAA2B,OAAOvpI,KAAKogU,WAAc,GAzEzD,sBA0EI,WAA2B,OAAOpgU,KAAKqgU,cAAcrwJ,UAAa,GA1EtE,qBA2EI,WAA0B,OAAOhwK,KAAKqgU,cAAcpwJ,SAAY,GA3EpE,wBA6EI,WACI,OAAOjnK,QAAQP,QAAQzI,KAAKigJ,QAC/B,GA/EL,qBAiFI,SAAQ1W,GACJ,OAAO,IAAI42L,EAAOngU,KAAMupI,EAC3B,GAnFL,6BAqFI,SAAgBslB,GAA+B,WAC3C,OAAOnB,EAAAA,EAAAA,IAAkBmB,GAAa5lJ,MAAK,SAACqQ,GACzB,MAAXA,EAAG+F,QACCw5H,EAAAA,EAAAA,IAAWv/H,EAAG+F,QAAU,EAAK4gI,SAC7BiB,GAAOQ,mBAAmB,oCAAqC,mBAAoBmN,EAAYxvI,aAE5F/F,EAAG+F,MAGd,IAAMg5H,EAAY,EAAKgoL,cAAcC,YAAWlmL,EAAAA,EAAAA,IAAUh/G,EAAAA,GAAAA,IAA+B9hB,KACzF,OAAO8hB,EAAAA,GAAAA,IAA+B9hB,EAAI++H,EAC7C,GACJ,GAjGL,yBAmGU,SAAYhhD,6JACP48D,EAAAA,EAAAA,IAAcj0J,KAAKqgU,cAAcC,WAAWjb,EAAYhuN,qDAClE,GArGL,4BAuGU,SAAe0jD,EAAyBH,EAA8Cj8I,gJAEtE,gBAAM4hU,GAAAA,aAA+BxlL,EAAQH,EAAOj8I,GAAO,SAAC2b,GAO1E,OANqB,MAAjB,EAAKivH,UACL2X,GAAOM,WAAW,8CAA+CL,EAAAA,GAAAA,OAAAA,sBAAqC,CAClGmG,UAAW,cACX3oJ,MAAO2b,IAGR,EAAKivH,SAAS2lB,YAAY50I,EACpC,kBARKkmT,EAAY,EAAZA,wBAUCvsK,EAAAA,EAAAA,IAAcj0J,KAAKqgU,cAAcC,WAAWC,GAAAA,KAAuBC,EAAUzlL,OAAQH,EAAO4lL,EAAU7hU,yDAChH,GApHL,qBAsHI,SAAQ8mM,EAA0B3lM,EAAei/T,GAM7C,GALwB,oBAAbj/T,GAA4Bi/T,IACnCA,EAAmBj/T,EACnBA,EAAU,CAAC,GAGXi/T,GAAiD,oBAAtBA,EAC3B,MAAM,IAAIptT,MAAM,oBAKpB,OAFK7R,IAAWA,EAAU,CAAC,GLqE7B,SAAkBopI,EAAiCu8D,EAA0B3lM,EAA0Bi/T,GAEzG,IAEI,IAAIlmL,EAAAA,EAAAA,IAAW3P,EAAQ+W,YAAa0yB,EAAAA,GAAAA,IAAezpC,EAAQ8mC,YACvD,MAAM,IAAIr+J,MAAM,+BAIpB,GAAIisT,GAAY10L,GAAU,CACtB,IAAMqxL,EAAWrxL,EAAQqxL,SAGzB,GAFaiB,GAAO8C,aAAa/D,EAAS4B,OAAQ,KAAM5B,EAASt1H,QAAQs5H,WAAWhE,EAASp6P,MAAQo7P,IAE5FvrJ,YAAc9mC,EAAQ8mC,WAC3B,MAAM,IAAIr+J,MAAM,oBAEvB,CAIJ,CAFC,MAAO3K,GACL,OAAOgC,QAAQN,OAAO1B,EACzB,CAGuB,oBAAblH,GAA4Bi/T,IACnCA,EAAmBj/T,EACnBA,EAAU,CAAC,GAEVA,IAAWA,EAAU,CAAC,GAE3B,IAAMkwK,GAAyB3yB,EAAAA,EAAAA,IAASnU,EAAQ8mC,YAC1CwuJ,EAAgBjB,GAAY93H,GAE9Bv6B,EAAsB,KACtB/qG,EAAe,KACf8kI,EAAiB,KACrB,GAAI24H,GAAY10L,GAAU,CACtB,IAAMgzL,EAAchzL,EAAQqxL,SAC5BrvJ,GAAU7tB,EAAAA,EAAAA,IAASm/K,GAAkBN,EAAYC,OAAQD,EAAYj3H,QAAU,OAC/E9kI,EAAO+7P,EAAY/7P,MAAQo7P,GAC3Bt2H,EAASi3H,EAAYj3H,QAAU,IAClC,CAED,IAAI86F,EAASjgS,EAAQigS,OAChBA,IAAUA,EAAS,aAGxB,IAAIxlJ,EAAmB,KAEnBA,EADAz6I,EAAQy6I,MACD8C,EAAAA,EAAAA,IAASv9I,EAAQy6I,MAEjBgzH,GAAY,IAIvB,IAAIr2F,EAAiB,KACrB,GAAIp3K,EAAQo3K,IAER,GAAkB,MADlBA,GAAK75B,EAAAA,EAAAA,IAASv9I,EAAQo3K,KACft4K,OAAiB,MAAM,IAAI+S,MAAM,mBAEzCulK,EAAKq2F,GAAY,IAIpB,IAAIkzD,EAAyB,KAC7B,GAAI3gU,EAAQ6e,MAER,GAA0B,MAD1B8hT,GAAapjL,EAAAA,EAAAA,IAASv9I,EAAQ6e,OACf/f,OAAiB,MAAM,IAAI+S,MAAM,qBAEhD8uT,EAAalzD,GAAY,IAI7B,IAAI/9C,EAAK,GAAK,GAAKn2M,EAAI,EAAGmC,EAAI,EAU9B,OATI1b,EAAQigU,SACJjgU,EAAQigU,OAAOvwG,IAAKA,EAAI1vN,EAAQigU,OAAOvwG,GACvC1vN,EAAQigU,OAAO1mT,IAAKA,EAAIvZ,EAAQigU,OAAO1mT,GACvCvZ,EAAQigU,OAAOvkT,IAAKA,EAAI1b,EAAQigU,OAAOvkT,IAMxCukT,KAAAA,OAAcvB,EAAejkL,EAAMi1E,EAAGn2M,EAAGmC,EAAG,GAAIujT,GAAkB91T,MAAK,SAAChI,GAI3E,IAAMy/T,GAHNz/T,GAAMo8I,EAAAA,EAAAA,IAASp8I,IAGQ0O,MAAM,EAAG,IAC1BgxT,EAAY1/T,EAAI0O,MAAM,GAAI,IAG1BsuT,EAAch9T,EAAI0O,MAAM,GAAI,IAG5BuoK,EAAU,IAAIu3F,KAAAA,SAAYv4F,GAC1B8mJ,EAAS,IAAIvuD,KAAAA,gBAAAA,KAAwBixD,EAAYxoJ,GACjDrB,GAAax5B,EAAAA,EAAAA,IAAS2gL,EAAOtnJ,QAAQ1G,IAGrC4wJ,GAAMxmL,EAAAA,EAAAA,IAAU2C,EAAAA,EAAAA,IAAO,CAAC4jL,EAAW9pJ,KAGnCr4J,EAA+B,CACjCyhI,QAAS/W,EAAQ+W,QAAQ/mC,UAAU,GAAG3oG,cACtC1P,GAAI88T,GAAO8C,GACX7hT,QAAS,EACT0qN,OAAQ,CACJu3F,OAAQ,cACRC,aAAc,CACV5pJ,IAAI1zB,EAAAA,EAAAA,IAAQ0zB,GAAIh+D,UAAU,IAE9B29D,YAAYrzB,EAAAA,EAAAA,IAAQqzB,GAAY39D,UAAU,GAC1C8lN,IAAK,SACL+B,UAAW,CACPxmL,MAAMiJ,EAAAA,EAAAA,IAAQjJ,GAAMrhC,UAAU,GAC9BxoG,EAAG8+M,EACHwxG,MAAO,GACPxlT,EAAGA,EACHnC,EAAGA,GAEPunT,IAAKA,EAAI1nN,UAAU,KAK3B,GAAIgyD,EAAS,CACT,IAAMizJ,EAAa5wD,GAAY,IACzB6wD,EAAkB,IAAI3uD,KAAAA,SAAY0uD,GAClCE,EAAiB,IAAI5uD,KAAAA,gBAAAA,KAAwBwuD,EAAaG,GAC1DF,GAAqB7gL,EAAAA,EAAAA,IAASghL,EAAe3nJ,QAAQxL,IACrDzmK,EAAM,IAAID,KACVo0L,EAAan0L,EAAIkiN,iBAAmB,IACvB22G,GAAK74T,EAAImiN,cAAgB,EAAG,GAAK,IACjC02G,GAAK74T,EAAIoiN,aAAc,GAAK,IAC5By2G,GAAK74T,EAAIqiN,cAAe,GAAK,IAC7Bw2G,GAAK74T,EAAIsiN,gBAAiB,GAAK,IAC/Bu2G,GAAK74T,EAAIuiN,gBAAiB,GAAK,MAElDxoM,EAAK,YAAc,CACfuhR,OAAQA,EACRkhC,aAAe,QAAUroI,EAAY,KAAOp6K,EAAKyhI,QACjDm+K,iBAAiB56K,EAAAA,EAAAA,IAAQ26K,GAAYjlN,UAAU,GAC/CglN,oBAAoB16K,EAAAA,EAAAA,IAAQ06K,GAAoBhlN,UAAU,GAC1D/4C,KAAMA,EACN8kI,OAAQA,EACRrmL,QAAS,MAEhB,CAED,OAAOoC,KAAKE,UAAU1C,EACzB,GACJ,CKzNc0iT,CAAgBlhU,KAAMylM,EAAU3lM,EAASi/T,EACnD,IAnIL,2BAyII,SAAoBj/T,GAChB,IAAIorK,EAAsBqiG,GAAY,IAEjCztQ,IAAWA,EAAU,CAAC,GAEvBA,EAAQqhU,eACRj2J,GAAU7tB,EAAAA,EAAAA,KAAS+P,EAAAA,EAAAA,KAAahT,EAAAA,EAAAA,IAAU2C,EAAAA,EAAAA,IAAO,CAAEmuB,EAASprK,EAAQqhU,gBAAkB,EAAG,MAG7F,IAAM5G,EAAWgC,GAAkBrxJ,EAASprK,EAAQmlM,QACpD,OAAOk7H,EAAO7B,aAAa/D,EAAUz6T,EAAQqgE,KAAMrgE,EAAQmlM,OAC9D,GApJL,+BAsJI,SAAyBtkG,EAAc8kG,EAA0Bs5H,GAC7D,OAAOc,GAAkBl/N,EAAM8kG,EAAUs5H,GAAkB91T,MAAK,SAACigI,GAC7D,OAAO,IAAIi3L,EAAOj3L,EACrB,GACJ,GA1JL,mCA4JI,SAA6BvoC,EAAc8kG,GACvC,OAAO,IAAI06H,EAAOF,GAAsBt/N,EAAM8kG,GACjD,GA9JL,0BAgKI,SAAoB80H,EAAkBp6P,EAAeq6P,GAEjD,OADKr6P,IAAQA,EAAOo7P,IACb,IAAI4E,EAAO3E,GAAO8C,aAAa/D,EAAU,KAAMC,GAAU+D,WAAWp+P,GAC9E,KAnKL,GAA4BquF,EAAAA,GAsKtB,SAAU4yK,GAAc/pO,EAAyBghD,GACnD,OAAOu6B,EAAAA,GAAAA,IAAeyyI,EAAYhuN,GAAUghD,EAC/C,CAEK,SAAUgpL,GAAgBtmL,EAAyBH,EAA8Cj8I,EAA4B05I,GAC/H,OAAOu6B,EAAAA,GAAAA,IAAe2tJ,GAAAA,KAAuBxlL,EAAQH,EAAOj8I,GAAQ05I,EACvE,CCzMM,IAAM4oK,GAAc,yDCAdC,GAAW,qECCXC,GAAc,SCGrBjgK,GAAS,IAAIC,EAAAA,GCJI,kBDuBvB,SAASmgL,GAAmBr6L,GACxB,IAAM7L,EAAO,SAASqjB,EAAgB3+I,GACnB,MAAXA,IAAmBA,EAAU,CAAC,GAClC,IAAMyhU,EAA2B,GAEjC,GAAI9iL,EAAU+iL,gBAAqC,MAAnB1hU,EAAQ2hU,OACpC,IACIF,EAAa7iU,KAAK,IAAI+/I,EAAU+iL,eAAev6L,EAASnnI,EAAQ2hU,QAClD,CAAhB,MAAM14T,GAAU,CAGtB,GAAI01I,EAAUijL,mBAA2C,MAAtB5hU,EAAQ6hU,UACvC,IACIJ,EAAa7iU,KAAK,IAAI+/I,EAAUijL,kBAAkBz6L,EAASnnI,EAAQ6hU,WACrD,CAAhB,MAAM54T,GAAU,CAGtB,GAAI01I,EAAUmjL,iBAAuC,MAApB9hU,EAAQ+hU,QACrC,IACIN,EAAa7iU,KAAK,IAAI+/I,EAAUmjL,gBAAgB36L,EAASnnI,EAAQ+hU,SACnD,CAAhB,MAAM94T,GAAU,CAGtB,GAAI01I,EAAUqjL,gBAAqC,MAAnBhiU,EAAQiiU,OAAgB,CAMpD,IACI,IAAMx4L,EAAW,IAAIkV,EAAUqjL,eAAe76L,EAASnnI,EAAQiiU,QAC3Dx4L,EAAStC,UAAoD,IAHxD,CAAE,SAAU,UAAW,UAAW,WAGdnkI,QAAQymI,EAAStC,QAAQ3sH,OAClDinT,EAAa7iU,KAAK6qI,EAER,CAAhB,MAAMxgI,GAAU,CACrB,CAED,GAAI01I,EAAUujL,oBAA6C,MAAvBliU,EAAQmiU,WACxC,IACIV,EAAa7iU,KAAK,IAAI+/I,EAAUujL,mBAAmB/6L,GACrC,CAAhB,MAAMl+H,GAAU,CAGtB,GAAI01I,EAAUyjL,cAAiC,MAAjBpiU,EAAQqiU,KAClC,IACI,IACM54L,EAAW,IAAIkV,EAAUyjL,aAAaj7L,EAASnnI,EAAQqiU,MACzD54L,EAAStC,UAAoD,IAFpD,CAAE,WAEcnkI,QAAQymI,EAAStC,QAAQ3sH,OAClDinT,EAAa7iU,KAAK6qI,EAER,CAAhB,MAAMxgI,GAAU,CAGtB,GAA4B,IAAxBw4T,EAAa3iU,OAAgB,OAAO,KAExC,GAAI6/I,EAAU2jL,iBAAkB,CAC5B,IAAIC,EAAS,EAMb,OALsB,MAAlBviU,EAAQuiU,OACRA,EAASviU,EAAQuiU,OACE,cAAZp7L,IACPo7L,EAAS,GAEN,IAAI5jL,EAAU2jL,iBAAiBb,EAAcc,EACvD,CAED,OAAOd,EAAa,EACvB,EAMD,OAJAnmM,EAAKknM,UAAY,SAASr7L,GACtB,OAAOq6L,GAAmBr6L,EAC7B,EAEM7L,CACV,CAED,SAASmnM,GAAmBtjT,EAAagoH,GACrC,IAAM7L,EAAO,SAASqjB,EAAgB3+I,GAClC,OAAI2+I,EAAUK,gBACH,IAAIL,EAAUK,gBAAgB7/H,EAAKgoH,GAGvC,IACV,EAMD,OAJA7L,EAAKknM,UAAY,SAASr7L,GACtB,OAAOs7L,GAAmBtjT,EAAKgoH,EAClC,EAEM7L,CACV,CAED,IAAMonM,GAAqB,CACvBh7L,QAAS,EACTi7L,WAAY,6CACZnoT,KAAM,YACNooT,iBAAkBpB,GAAmB,cAGnCqB,GAAmB,CACrBn7L,QAAS,EACTi7L,WAAY,6CACZnoT,KAAM,UACNooT,iBAAkBpB,GAAmB,YAGnCsB,GAAyB,CAC3Bp7L,QAAS,GACTltH,KAAM,gBACNooT,iBAAkBH,GAAmB,sCAAuC,kBAI1EM,GAAwC,CAC1CC,YAAa,CAAEt7L,QAAS,EAAGltH,KAAM,eAEjCkoT,UAAWA,GACXO,QAASP,GAETQ,OAAQ,CAAEx7L,QAAS,EAAGltH,KAAM,UAE5BqoT,QAASA,GACTM,QAASN,GAETO,QAAS,CACL17L,QAAS,EACTi7L,WAAY,6CACZnoT,KAAM,UACNooT,iBAAkBpB,GAAmB,YAGzC6B,MAAO,CACH37L,QAAS,GACTltH,KAAM,QACNooT,iBAAkBpB,GAAmB,UAGzC8B,OAAQ,CACJ57L,QAAS,EACTi7L,WAAY,6CACZnoT,KAAM,SACNooT,iBAAkBpB,GAAmB,WAGzC+B,SAAU,CAAE77L,QAAS,QAASltH,KAAM,YAEpCgpT,QAAS,CACL97L,QAAS,SACTltH,KAAM,UACNooT,iBAAkBpB,GAAmB,YAKzCiC,QAAS,CACL/7L,QAAS,GACTltH,KAAM,UACNooT,iBAAkBH,GAAmB,mCAAqC,YAG9EiB,cAAe,CAAEh8L,QAAS,GAAIltH,KAAM,iBAEpCsoT,cAAeA,GACfa,eAAgBb,GAEhBc,aAAc,CACVl8L,QAAS,EACTltH,KAAM,eACNooT,iBAAkBH,GAAmB,qCAAuC,iBAGhFoB,KAAM,CAAEn8L,QAAS,IAAKltH,KAAM,QAE5BspT,MAAO,CACHp8L,QAAS,IACTltH,KAAM,QACNooT,iBAAkBpB,GAAmB,UAEzCuC,SAAU,CAAEr8L,QAAS,MAAOltH,KAAM,YAElCwpT,SAAU,CACNt8L,QAAS,GACTltH,KAAM,WACNooT,iBAAkBpB,GAAmB,aAEzC,iBAAkB,CAAE95L,QAAS,GAAIltH,KAAM,kBACvC,kBAAmB,CAAEktH,QAAS,IAAKltH,KAAM,mBAEzCypT,SAAU,CAAEv8L,QAAS,MAAOltH,KAAM,YAClC,mBAAoB,CAAEktH,QAAS,OAAQltH,KAAM,oBAC7C,kBAAmB,CAAEktH,QAAS,OAAQltH,KAAM,mBAE5C0pT,IAAK,CAAEx8L,QAAS,GAAIltH,KAAM,OAC1B2pT,KAAM,CAAEz8L,QAAS,GAAIltH,KAAM,SASzB,SAAUmlI,GAAWxY,GAEvB,GAAe,MAAXA,EAAmB,OAAO,KAE9B,GAAwB,kBAAbA,EAAuB,CAC9B,IAAK,IAAM3sH,KAAQuoT,GAAU,CACzB,IAAMj9Q,EAAWi9Q,GAASvoT,GAC1B,GAAIsrC,EAAS4hF,UAAYP,EACrB,MAAO,CACH3sH,KAAMsrC,EAAStrC,KACfktH,QAAS5hF,EAAS4hF,QAClBi7L,WAAa78Q,EAAS68Q,YAAc,KACpCC,iBAAmB98Q,EAAS88Q,kBAAoB,KAG3D,CAED,MAAO,CACHl7L,QAASP,EACT3sH,KAAM,UAEb,CAED,GAAwB,kBAAb2sH,EAAuB,CAC9B,IAAMrhF,EAAWi9Q,GAAS57L,GAC1B,OAAgB,MAAZrhF,EAA2B,KACxB,CACHtrC,KAAMsrC,EAAStrC,KACfktH,QAAS5hF,EAAS4hF,QAClBi7L,WAAY78Q,EAAS68Q,WACrBC,iBAAmB98Q,EAAS88Q,kBAAoB,KAEvD,CAED,IAAM98Q,EAAYi9Q,GAAS57L,EAAQ3sH,MAGnC,IAAKsrC,EAID,MAHgC,kBAArBqhF,EAAQO,SACf0Z,GAAOQ,mBAAmB,0BAA2B,UAAWza,GAE7DA,EAIa,IAApBA,EAAQO,SAAiBP,EAAQO,UAAY5hF,EAAS4hF,SACtD0Z,GAAOQ,mBAAmB,2BAA4B,UAAWza,GAKrE,IAhQqBtoI,EAgQjBulU,EAAuCj9L,EAAQy7L,kBAAoB,KAUvE,OATuB,MAAnBwB,GAA2Bt+Q,EAAS88Q,mBAEhCwB,GAnQavlU,EAkQGinD,EAAS88Q,mBAjQY,oBAArB/jU,EAAM2jU,UAkQJ18Q,EAAS88Q,iBAAiBJ,UAAUr7L,GAEpCrhF,EAAS88Q,kBAK5B,CACHpoT,KAAM2sH,EAAQ3sH,KACdktH,QAAS5hF,EAAS4hF,QAClBi7L,WAAax7L,EAAQw7L,YAAc78Q,EAAS68Q,YAAc,KAC1DC,iBAAkBwB,EAEzB,CE/RK,SAAUh0N,GAAOi0N,GACnBA,EAAWC,KAAKD,GAEhB,IADA,IAAM3lT,EAAO,GACJ5gB,EAAI,EAAGA,EAAIumU,EAASvlU,OAAQhB,IACjC4gB,EAAK9f,KAAKylU,EAASt0K,WAAWjyJ,IAElC,OAAOy/I,EAAAA,EAAAA,IAAS7+H,EACnB,CAEK,SAAU87H,GAAO97H,GACnBA,GAAO6+H,EAAAA,EAAAA,IAAS7+H,GAEhB,IADA,IAAI2lT,EAAW,GACNvmU,EAAI,EAAGA,EAAI4gB,EAAK5f,OAAQhB,IAC7BumU,GAAY12R,OAAO2kE,aAAa5zF,EAAK5gB,IAEzC,OAAOkyO,KAAKq0F,EACf,6BCaD,SAASE,GAAK30T,EAAmB0T,GAChB,MAATA,IAAiBA,EAAQ,GAC7B,IAAMgxD,EAAqB,GAErB/xE,EAAU+xE,EAAO/xE,QAavB,OAXiB,SAAXiiU,EAAqB3mU,EAAiBylB,GACxC/gB,EAAQ9D,KAAKZ,GAAK,SAAUggK,GACpBv6I,EAAQ,GAAKvlB,MAAMC,QAAQ6/J,GAC3B2mK,EAAS3mK,EAAKv6I,EAAQ,GAEvBgxD,EAAO11E,KAAKi/J,EAElB,GACJ,CAED2mK,CAAS50T,EAAO0T,GACTgxD,CACV,CAmGK,SAAUmwP,GAAwBn+K,GACvC,OALK,SAAuBtxI,GAC5B,IAAI1N,EAAM,EACV,OAAO,kBAAM0N,EAAE1N,IAAR,CACP,CAEOo9T,CAzFF,SAA4Bp+K,GACjC,IAAIh/I,EAAM,EACV,SAASq9T,IAAQ,OAAQr+K,EAAMh/I,MAAU,EAAKg/I,EAAMh/I,IAAS,CAM7D,IAHA,IAAIs9T,EAAeD,IACf11N,EAAQ,EACR8yD,EAAM,CAAC,EAAG,GACLjkK,EAAI,EAAGA,EAAI8mU,EAAc9mU,IACjCikK,EAAInjK,KAAKqwG,GAAS01N,KAInB,IAAIpkH,EAAOokH,IACPE,EAAcv9T,EAClBA,GAAOi5M,EAEP,IAAIukH,EAAa,EACbC,EAAc,EAClB,SAASC,IAOR,OANkB,GAAdF,IAGHC,EAAeA,GAAe,EAAKz+K,EAAMh/I,KACzCw9T,EAAa,GAENC,KAAiBD,EAAc,CACvC,CAUD,IARA,IACMG,EAAO5+T,KAAAA,IAAAA,EADH,IAEJ6+T,EAAOD,IAAS,EAChBE,EAAOD,GAAQ,EACfE,EAAOH,EAAO,EAGhBn5M,EAAW,EACNhuH,EAAI,EAAGA,EARN,GAQaA,IAAKguH,EAAYA,GAAY,EAAKk5M,IAKzD,IAHA,IAAIljU,EAAU,GACVmR,EAAM,EACNI,EAAQ4xT,IACC,CAIZ,IAHA,IAAIpmU,EAAQwH,KAAKQ,QAASilH,EAAW74G,EAAM,GAAKg8F,EAAS,GAAK57F,GAC1Dg1B,EAAQ,EACRkN,EAAMqvR,EACHrvR,EAAMlN,EAAQ,GAAG,CACvB,IAAI68D,EAAO78D,EAAQkN,IAAS,EACxB12C,EAAQkjK,EAAI78D,GACf3vD,EAAM2vD,EAEN78D,EAAQ68D,CAET,CACD,GAAa,GAAT78D,EAAY,MAChBvmC,EAAQlD,KAAKypC,GAGb,IAFA,IAAIr+B,EAAIiJ,EAAM5M,KAAKQ,MAAMwM,EAAQ0uJ,EAAI15H,GAAW4mE,GAC5Cn7F,EAAIb,EAAM5M,KAAKQ,MAAMwM,EAAQ0uJ,EAAI15H,EAAM,GAAK4mE,GAAS,EAC9B,KAAlBjlG,EAAI8J,GAAKoxT,IACjBp5M,EAAYA,GAAY,EAAKs5M,EAAOJ,IACpCh7T,EAAKA,GAAK,EAAKo7T,EACftxT,EAAKA,GAAK,EAAKsxT,EAAO,EAEvB,KAAOp7T,GAAK8J,EAAIqxT,GACfr5M,EAAYA,EAAWo5M,EAAUp5M,GAAY,EAAMs5M,IAAS,EAAMJ,IAClEh7T,EAAKA,GAAK,EAAKk7T,EACfpxT,GAAMA,EAAIoxT,IAAS,EAAKA,EAAO,EAEhCjyT,EAAMjJ,EACNqJ,EAAQ,EAAIS,EAAI9J,CAChB,CACD,IAAInK,EAAS+kU,EAAe,EAC5B,OAAO9iU,EAAQgE,KAAI,SAAA5C,GAClB,OAAQA,EAAIrD,GACX,KAAK,EAAG,OAAOA,EAAS,OAAYymJ,EAAMu+K,MAAkB,GAAOv+K,EAAMu+K,MAAkB,EAAKv+K,EAAMu+K,MACtG,KAAK,EAAG,OAAOhlU,EAAS,KAAUymJ,EAAMu+K,MAAkB,EAAKv+K,EAAMu+K,MACrE,KAAK,EAAG,OAAOhlU,EAASymJ,EAAMu+K,KAC9B,QAAS,OAAO3hU,EAAI,EAErB,GACD,CASoBmiU,CAAkB/+K,GACtC,CAGK,SAAUxC,GAAOhmJ,GACtB,OAAY,EAAJA,GAAWA,GAAK,EAAMA,GAAK,CACnC,CAQD,SAASwnU,GAAe10T,EAAWlS,GAElC,IADA,IAAIsW,EAAIjX,MAAM6S,GACL9S,EAAI,EAAGoF,GAAK,EAAGpF,EAAI8S,EAAG9S,IAAKkX,EAAElX,GAAKoF,GAAK,EAAIxE,IACpD,OAAOsW,CACP,CAED,SAASuwT,GAAY30T,EAAWlS,GAE/B,IADA,IAAIsW,EAAIjX,MAAM6S,GACL9S,EAAI,EAAGoF,EAAI,EAAGpF,EAAI8S,EAAG9S,IAAKkX,EAAElX,GAAKoF,GAAK4gJ,GAAOplJ,KACtD,OAAOsW,CACP,CAEK,SAAUwwT,GAAkB9mU,EAAgBs8O,GAK9C,IAJA,IAAIhmO,EAAIswT,GAAe5mU,IAAQA,GAC3BkS,EAAIlS,IACJ+mU,EAAKH,GAAe10T,EAAGlS,GACvBgnU,EAtBR,SAAqB90T,EAAWlS,GAE/B,IADA,IAAIsW,EAAIjX,MAAM6S,GACL9S,EAAI,EAAGA,EAAI8S,EAAG9S,IAAKkX,EAAElX,GAAK,EAAIY,IACvC,OAAOsW,CACP,CAkBY2wT,CAAY/0T,EAAGlS,GACfZ,EAAI,EAAGA,EAAI8S,EAAG9S,IACnB,IAAK,IAAI8wB,EAAI,EAAGA,EAAI82S,EAAG5nU,GAAI8wB,IACvB5Z,EAAEpW,KAAK6mU,EAAG3nU,GAAK8wB,GAGvB,OAAOosN,EAAShmO,EAAElP,KAAI,SAAA5C,GAAC,OAAI83O,EAAO93O,EAAX,IAAiB8R,CAC3C,CA8BD,SAAS4wT,GAAgBh1T,EAAWmR,EAAWrjB,GAE3C,IADA,IAAImS,EAAI9S,MAAM6S,GAAG0jD,UAAK/qD,GAAWzD,KAAI,iBAAM,EAAN,IAC5BhI,EAAI,EAAGA,EAAIikB,EAAGjkB,IACnBynU,GAAY30T,EAAGlS,GAAM6D,SAAQ,SAACW,EAAG0rB,GAAJ,OAAU/d,EAAE+d,GAAGhwB,KAAKsE,EAApB,IAEjC,OAAO2N,CACV,CAGD,SAASg1T,GAAkB9jT,EAAWrjB,GACrC,IAAIgX,EAAK,EAAIhX,IACTiX,EAAKjX,IACLgnU,EAtBC,SAAqChnU,GAE1C,IADA,IAAIsW,EAAI,KACK,CACZ,IAAIlX,EAAIY,IACR,GAAS,GAALZ,EAAQ,MACZkX,EAAEpW,KAAKd,EACP,CACD,OAAOkX,CACP,CAcS8wT,CAA2BpnU,GAEpC,OAAO6lU,GADCqB,GAAgBF,EAAG5mU,OAAQ,EAAEijB,EAAGrjB,GAC1BoH,KAAI,SAACkP,EAAGlX,GACpB,IAAMoF,EAAI8R,EAAE,GAAI+wT,EAAK/wT,EAAEnF,MAAM,GAG9B,OAAO9R,MAAM2nU,EAAG5nU,IAAIw2D,UAAK/qD,GAAWzD,KAAI,SAAC6lJ,EAAG/8H,GAC3C,IAAIo3S,EAAOp3S,EAAIjZ,EACf,MAAO,CAACzS,EAAI0rB,EAAIlZ,EAAIqwT,EAAGjgU,KAAI,SAAA3C,GAAC,OAAIA,EAAI6iU,CAAR,IAC5B,GACD,IACD,CAED,SAASC,GAAuBlkT,EAAWrjB,GAG1C,OADQknU,GADA,EAAIlnU,IACe,EAAEqjB,EAAGrjB,GACvBoH,KAAI,SAAAkP,GAAC,MAAI,CAACA,EAAE,GAAIA,EAAEnF,MAAM,GAAnB,GACd,CCvND,IAAM0J,GCEKkrT,GAAwBr0N,GAAO,q6cDIpC81N,GAAQ,IAAI/7P,IAAIq7P,GAAkBjsT,KAClC4sT,GAAU,IAAIh8P,IAAIq7P,GAAkBjsT,KACpC6sT,GDyJA,SAA0B1nU,GAE/B,IADA,IAAIwqN,EAAM,KACG,CACZ,IAAInnM,EAAIrjB,IACR,GAAS,GAALqjB,EAAQ,MACZmnM,EAAItqN,KAAKinU,GAAkB9jT,EAAGrjB,GAC9B,CACD,OAAa,CACZ,IAAIqjB,EAAIrjB,IAAS,EACjB,GAAIqjB,EAAI,EAAG,MACXmnM,EAAItqN,KAAKqnU,GAAuBlkT,EAAGrjB,GACnC,CACD,OAxJD,SAA6FkR,GAEzF,IADA,IAAM0kE,EAAqC,CAAC,EACnCx2E,EAAI,EAAGA,EAAI8R,EAAM9Q,OAAQhB,IAAK,CACnC,IAAMe,EAAQ+Q,EAAM9R,GACpBw2E,EAAOz1E,EAAM,IAAMA,EAAM,EAC5B,CACD,OAAOy1E,CACV,CAiJO+xP,CAAmC9B,GAAKr7G,GAC/C,CCtKco9G,CAAgB/sT,IACzBgtT,GD6NA,SAA0B7nU,GAC/B,IAAIijO,EAAS6jG,GAAkB9mU,GAAMo7D,MAAK,SAAC9vD,EAAG8J,GAAJ,OAAU9J,EAAI8J,CAAd,IAC1C,OACA,SAASu7F,IACR,IAAIm3N,EAAW,GACf,OAAa,CACZ,IAAI5kU,EAAO4jU,GAAkB9mU,EAAMijO,GACnC,GAAmB,GAAf//N,EAAK9C,OAAa,MACtB0nU,EAAS5nU,KAAK,CAAC+L,IAAK,IAAIw/D,IAAIvoE,GAAOs1G,KAAM7H,KACzC,CACCm3N,EAAS1sQ,MAAK,SAAC9vD,EAAG8J,GAAJ,OAAUA,EAAEnJ,IAAI+R,KAAO1S,EAAEW,IAAI+R,IAA7B,IACf,IAAIuvJ,EAAOvtK,IAOX,MAAO,CAAC8nU,SAAAA,EAAUr+N,MANN8jE,EAAO,EAMMw6J,QAJJ,GADrBx6J,EAAQA,EAAO,EAAG,IAKao0C,KAFZ,IADnBp0C,IAAS,GAG4B/W,MADjB,GAAR+W,EAEb,CAjBM58D,EAkBP,CCjPkBq3N,CAAgBntT,IAOnC,SAASotT,GAAWnsT,GAChB,OAAO83J,EAAAA,EAAAA,IAAiB93J,EAC3B,CAED,SAASosT,GAAYC,GACjB,OAAOA,EAAI9kU,QAAO,SAAA+kU,GAAE,OAAU,OAANA,CAAJ,GACvB,CAEK,SAAUC,GAAyBvsT,GAAY,iBAClCA,EAAKqnD,MAAM,MADuB,IACpD,IAAK,EAAL,qBAAmC,KAA1BouC,EAA0B,QAC9B42N,EAAMF,GAAW12N,GACrB,IACC,IAAK,IAAInyG,EAAI+oU,EAAIp0N,YAdD,IAc2B,EAAG30G,GAAK,EAAGA,IACrD,GAfe,KAeX+oU,EAAI/oU,GACP,MAAM,IAAI+T,MAAJ,oCAGR,GAAIg1T,EAAI/nU,QAAU,GAAK+nU,EAAIphJ,OAAM,SAAAqhJ,GAAE,OAAIA,EAAK,GAAT,KApBvB,KAoByCD,EAAI,IApB7C,KAoB8DA,EAAI,GAC7E,MAAM,IAAIh1T,MAAJ,0BAIP,CAFC,MAAO9S,GACR,MAAM,IAAI8S,MAAJ,yBAA4Bo+F,EAA5B,cAAuClxG,EAAIw4F,SACjD,CACD,CAfmD,+BAgBpD,OAAO/8E,CACP,CAEK,SAAUwsT,GAAcxsT,GAC7B,OAAOusT,GAGR,SAAmBvsT,EAAcysT,GAChC,IAAI5kM,EAAQskM,GAAWnsT,GAAMiqM,UACzBvlM,EAAS,GACb,KAAOmjH,EAAMvjI,QAAQ,CACpB,IAAIooU,EAAQC,GAAuB9kM,GACnC,GAAI6kM,EACHhoT,EAAOtgB,KAAP,MAAAsgB,GAAM,QAAS+nT,EAAaC,SAD7B,CAIA,IAAIJ,EAAKzkM,EAAM/0D,MACf,GAAI44P,GAAMz7T,IAAIq8T,GACb5nT,EAAOtgB,KAAKkoU,QAGb,IAAIX,GAAQ17T,IAAIq8T,GAAhB,CAGA,IAAID,EAAMT,GAAOU,GACjB,IAAID,EAIJ,MAAM,IAAIh1T,MAAJ,kCAAqCi1T,EAAGt8T,SAAS,IAAIo3D,gBAH1D1iD,EAAOtgB,KAAP,MAAAsgB,GAAM,QAAS2nT,GAHf,CARA,CAeD,CACD,OAAOE,IAGKxzT,EAHwBo6B,OAAOy5R,cAAP,MAAAz5R,OAAwBzuB,GAIlD3L,EAAEzB,UAAU,SADvB,IAAayB,CAFZ,CA5BgCzB,CAAU0I,EAAMosT,IAChD,CAiCD,SAASO,GAAuBN,EAAoBQ,SAE/CH,EACAI,EAFApwN,EAAOqvN,GAGPnrI,EAAQ,GACR9zL,EAAMu/T,EAAI/nU,OACVuoU,IAAOA,EAAMvoU,OAAS,GAC1B,IAPwE,iBAQvE,IAAIgoU,EAAKD,IAAMv/T,GAEf,KADA4vG,EAA6C,QAAtC,EAAAA,EAAKsvN,SAASe,MAAK,SAAArkU,GAAC,OAAIA,EAAEyH,IAAIF,IAAIq8T,EAAd,WAAkB/lB,IAAAA,OAAA,EAAAA,EAAE7pM,MACpC,cACX,GAAIA,EAAKmpG,KACRinH,EAAQR,OACF,GAAI5vN,EAAKg+C,OACX4xK,IAAOQ,EAAO,cAEnBlsI,EAAMx8L,KAAKkoU,GACP5vN,EAAKuvN,OACRrrI,EAAMx8L,KAAK,OACP0I,EAAM,GAAqB,OAAhBu/T,EAAIv/T,EAAM,IAAcA,KAEpC4vG,EAAK/O,QACR++N,EAAQ9rI,EAAMvrL,QACI,GAAdqnG,EAAK/O,OAAY++N,EAAMx3T,OAAO,EAAG,GACjC23T,GAAOA,EAAMzoU,KAAN,MAAAyoU,GAAK,QAASR,EAAIh3T,MAAMvI,GAAKm9M,YACxCoiH,EAAI/nU,OAASwI,EAzByD,EAOjEA,GAAK,kBAOQ,KAanB,CACD,OAAO4/T,CACP,CErID,IAAM9lL,GAAS,IAAIC,EAAAA,GAAOviI,GAIpBomS,GAAQ,IAAIxzS,WAAW,IAG7B,SAAS81T,GAAe7/K,GACpB,GAAoB,IAAhBA,EAAK7oJ,OAAgB,MAAM,IAAI+S,MAAM,qCACzC,OAAO81I,CACV,CAED,SAAS8/K,GAAajtT,GAClB,IAAM8rI,GAAQ3B,EAAAA,EAAAA,IAAYqiL,GAAcxsT,IAClCgvI,EAA2B,GAEjC,GAAoB,IAAhBhvI,EAAK1b,OAAgB,OAAO0qJ,EAGhC,IADA,IAAIwyG,EAAO,EACFl+P,EAAI,EAAGA,EAAIwoJ,EAAMxnJ,OAAQhB,IAAK,CAIzB,KAHAwoJ,EAAMxoJ,KAIZ0rJ,EAAM5qJ,KAAK4oU,GAAelhL,EAAMz2I,MAAMmsP,EAAMl+P,KAC5Ck+P,EAAOl+P,EAAI,EAElB,CAGD,GAAIk+P,GAAQ11G,EAAMxnJ,OAAU,MAAM,IAAI+S,MAAM,qCAG5C,OADA23I,EAAM5qJ,KAAK4oU,GAAelhL,EAAMz2I,MAAMmsP,KAC/BxyG,CACV,CAMK,SAAUk+K,GAAYltT,GACxB,IACI,OAAsC,IAA9BitT,GAAajtT,GAAM1b,MACZ,CAAjB,MAAOmK,GAAU,CACnB,OAAO,CACV,CAEK,SAAUo8S,GAAS7qS,GAEA,kBAAVA,GACP4mI,GAAOQ,mBAAmB,iCAAkC,OAAQpnI,GAMxE,IAHA,IAAI85D,EAA8B4wO,GAE5B17J,EAAQi+K,GAAajtT,GACpBgvI,EAAM1qJ,QACTw1E,GAASgmE,EAAAA,EAAAA,IAAU2C,EAAAA,EAAAA,IAAO,CAAC3oE,GAAQgmE,EAAAA,EAAAA,GAAUkP,EAAMl8E,UAGvD,OAAOo2E,EAAAA,EAAAA,IAAQpvE,EAClB,CAEK,SAAUqzP,GAAUntT,GACtB,OAAOkpI,EAAAA,EAAAA,KAAQzG,EAAAA,EAAAA,IAAOwqL,GAAajtT,GAAM1U,KAAI,SAAC6hJ,GAE1C,GAAIA,EAAK7oJ,OAAS,GACd,MAAM,IAAI+S,MAAM,sDAGpB,IAAMy0I,EAAQ,IAAI50I,WAAWi2I,EAAK7oJ,OAAS,GAG3C,OAFAwnJ,EAAM37I,IAAIg9I,EAAM,GAChBrB,EAAM,GAAKA,EAAMxnJ,OAAS,EACnBwnJ,CAEV,MAAM,IACV,CAvED4+J,GAAM5wP,KAAK,GCXJ,2SCQD,SAAgBszQ,GAAO99L,EAAc9pI,iJA0BtB,OAzBF,MAAXA,IAAmBA,EAAU,CAAC,GAE5B6oI,EAAuB,CACzB3vC,OAASl5F,EAAQk5F,QAAU,MAC3BmV,QAAUruG,EAAQquG,SAAW,CAAC,EAC9BO,KAAO5uG,EAAQ4uG,WAAQrlG,IAGI,IAA3BvJ,EAAQ6nU,iBACRh/L,EAAQp8E,KAAoB,OAC5Bo8E,EAAQlsG,MAAsB,WAC9BksG,EAAQt6B,YAAkC,cAC1Cs6B,EAAQi/L,SAA4B,SACpCj/L,EAAQk/L,SAAW,UAGK,MAAxB/nU,EAAQ6yG,gBACFgrE,EAAO79K,EAAQ6yG,cACZpmD,OAAQo8E,EAAQp8E,KAAqBoxH,EAAKpxH,MAC/CoxH,EAAKlhJ,QAASksG,EAAQlsG,MAAuBkhJ,EAAKlhJ,OAClDkhJ,EAAKtvE,cAAes6B,EAAQt6B,YAAmCsvE,EAAKtvE,aACpEsvE,EAAKiqJ,WAAYj/L,EAAQi/L,SAA6BjqJ,EAAKiqJ,UAC3DjqJ,EAAKkqJ,WAAYl/L,EAAQk/L,SAAWlqJ,EAAKkqJ,oBAG1Br5N,MAAMo7B,EAAMjB,UACtB,OADP76B,EAAW,EAAXA,eACaA,EAAS4B,6BAAtBhB,EAAO,EAAPA,KAEAP,EAAwC,CAAC,EAC3CL,EAASK,QAAQ9rG,QACjByrG,EAASK,QAAQ9rG,SAAQ,SAAC1D,EAAOsC,GAC7BktG,EAAQltG,EAAIsP,eAAiB5R,CAChC,IAE6BmvG,EAASK,QAAUzsG,OAASW,SAAQ,SAACpB,GAC/DktG,EAAQltG,EAAIsP,eAAiBu9F,EAASK,QAAQ3jG,IAAIvJ,EACrD,sBAGE,CACHktG,QAASA,EACT25N,WAAYh6N,EAAS3sC,OACrBw2B,cAAemW,EAAS2B,WACxBf,MAAM2uC,EAAAA,EAAAA,IAAS,IAAI7rI,WAAWk9F,iDAErC,4SC7CKwyC,GAAS,IAAIC,EAAAA,GFTI,aEavB,SAAS4mL,GAAQnoU,GACb,OAAO,IAAIoJ,SAAQ,SAACP,GAChBulG,WAAWvlG,EAAS7I,EACvB,GACJ,CAED,SAASooU,GAAQrpU,EAAY0I,GACzB,GAAa,MAAT1I,EAAiB,OAAO,KAE5B,GAAsB,kBAAXA,EAAuB,OAAOA,EAEzC,IAAIm0J,EAAAA,EAAAA,IAAYn0J,GAAQ,CACpB,GAAI0I,IAAgC,SAAvBA,EAAKs6D,MAAM,KAAK,IAA+C,qBAA9Bt6D,EAAKs6D,MAAM,KAAK,GAAGJ,QAC7D,IACI,OAAOmjF,EAAAA,EAAAA,IAAa/lJ,EACL,CAAjB,MAAOoK,GAAU,CAEvB,OAAOy6I,EAAAA,EAAAA,IAAQ7kJ,EAClB,CAED,OAAOA,CACV,CA8DK,SAAUspU,GAA2Br6L,EAAqCl/B,EAAmBw5N,GAG/F,IAAMC,EAAuC,kBAAhBv6L,GAAwD,MAA5BA,EAAWw6L,cAAyBx6L,EAAWw6L,cAAe,GACvHlnL,GAAOmnL,eAAgBF,EAAe,GAAMA,EAAe,IAAO,EAC9D,oCAAqC,2BAA4BA,GAErE,IAAMG,EAA4C,kBAAhB16L,EAA4BA,EAAW06L,iBAAkB,KACrFC,EAAgD,kBAAhB36L,GAAwE,kBAArCA,EAAW26L,qBAAsC36L,EAAW26L,qBAAsB,IAC3JrnL,GAAOmnL,eAAgBE,EAAuB,GAAMA,EAAuB,IAAO,EAC9E,4CAA6C,kCAAmCA,GAEpF,IAAMC,EAA4C,kBAAhB56L,KAA+BA,EAAW46L,iBAEtEr6N,EAAqC,CAAC,EAExClvF,EAAc,KAGZnf,EAAmB,CACrBk5F,OAAQ,OAGRyvO,GAAW,EAEXrsL,EAAU,KAEd,GAA2B,kBAAhBxO,EACP3uH,EAAM2uH,OAEH,GAA2B,kBAAhBA,EAA0B,CAWxC,GAVkB,MAAdA,GAAwC,MAAlBA,EAAW3uH,KACjCiiI,GAAOQ,mBAAmB,cAAe,iBAAkB9T,GAG/D3uH,EAAM2uH,EAAW3uH,IAEkB,kBAAxB2uH,EAAWwO,SAAyBxO,EAAWwO,QAAU,IAChEA,EAAUxO,EAAWwO,SAGrBxO,EAAWz/B,QACX,IAAK,IAAMltG,KAAO2sI,EAAWz/B,QACzBA,EAAQltG,EAAIsP,eAAiB,CAAEtP,IAAKA,EAAKtC,MAAO8uC,OAAOmgG,EAAWz/B,QAAQltG,KACtE,CAAC,gBAAiB,qBAAqB6B,QAAQ7B,EAAIsP,gBAAkB,IACrEk4T,GAAW,GAOvB,GAFA3oU,EAAQ4oU,YAAc96L,EAAW86L,UAEV,MAAnB96L,EAAW03D,MAAuC,MAAvB13D,EAAW63D,SAAkB,CAC5B,WAAxBxmL,EAAIi6F,UAAU,EAAG,KAA8D,IAA3C00B,EAAW+6L,6BAC/CznL,GAAOM,WACH,mDACAL,EAAAA,GAAAA,OAAAA,iBACA,CAAEM,SAAU,MAAOxiI,IAAKA,EAAKqmL,KAAM13D,EAAW03D,KAAMG,SAAU,eAItE,IAAM8jC,EAAgB37F,EAAW03D,KAAO,IAAM13D,EAAW63D,SACzDt3F,EAAO,cAAoB,CACvBltG,IAAK,gBACLtC,MAAO,SAAWiqU,IAAankL,EAAAA,EAAAA,IAAY8kF,IAElD,CAEgC,MAA7B37F,EAAW+5L,iBACX7nU,EAAQ6nU,iBAAmB/5L,EAAW+5L,gBAGX,MAA3B/5L,EAAWj7B,eACX7yG,EAAQ6yG,cAAew8C,EAAAA,EAAAA,IAAYvhB,EAAWj7B,cAErD,CAED,IAzFeh0G,EAyFTkqU,EAAS,IAAIhzN,OAAO,kCAAmC,KACvDizN,EAAc7pT,EAAOA,EAAIvc,MAAMmmU,GAAS,KAC9C,GAAIC,EACA,IACI,IAAMh7N,EAAW,CACbg6N,WAAY,IACZnwO,cAAe,KACfwW,QAAS,CAAE,eAAiB26N,EAAU,IAAM,cAC5Cp6N,KAAOo6N,EAAU,GAAKC,GAAaD,EAAU,KAjG1CnqU,EAiGyDmqU,EAAU,IAhG3ErkL,EAAAA,EAAAA,IAAY9lJ,EAAMgkE,QAAQ,yBAAyB,SAACouD,EAAK/mD,GAC5D,OAAOv8B,OAAO2kE,aAAa91F,SAAS0tD,EAAM,IAC7C,OAiGWoK,EAAwB05B,EAASY,KAIrC,OAHIw5N,IACA9zP,EAAS8zP,EAAYp6N,EAASY,KAAMZ,IAEjC9kG,QAAQP,QAAoB2rE,EAUtC,CARC,MAAOrrE,GACLm4I,GAAOM,WAAW,4BAA6BL,EAAAA,GAAAA,OAAAA,aAA4B,CACvEzyC,KAAMs5N,GAAQc,EAAU,GAAIA,EAAU,IACtC//T,MAAOA,EACPigU,YAAa,KACbC,cAAe,MACfhqT,IAAKA,GAEZ,CAGDyvF,IACA5uG,EAAQk5F,OAAS,OACjBl5F,EAAQ4uG,KAAOA,EACgB,MAA3BP,EAAQ,kBACRA,EAAQ,gBAAkB,CAAEltG,IAAK,eAAgBtC,MAAO,6BAE3B,MAA7BwvG,EAAQ,oBACRA,EAAQ,kBAAoB,CAAEltG,IAAK,iBAAkBtC,MAAO8uC,OAAOihE,EAAK9vG,WAIhF,IAAMsqU,EAA2C,CAAC,EAClDhoU,OAAOQ,KAAKysG,GAAS9rG,SAAQ,SAACpB,GAC1B,IAAM8yH,EAAS5lB,EAAQltG,GACvBioU,EAAYn1M,EAAO9yH,KAAO8yH,EAAOp1H,KACpC,IACDmB,EAAQquG,QAAU+6N,EAElB,IAAMC,EAAkB,WACpB,IAAIC,EAAsB,KAuB1B,MAAO,CAAExrM,QAtBuB,IAAI50H,SAAQ,SAASP,EAASC,GACtD0zI,IACAgtL,EAAQp7N,YAAW,WACF,MAATo7N,IACJA,EAAQ,KAER1gU,EAAOw4I,GAAO2T,UAAU,UAAW1T,EAAAA,GAAAA,OAAAA,QAAuB,CACtD6nL,YAAahB,GAAQloU,EAAQ4uG,KAAMw6N,EAAY,iBAC/CD,cAAenpU,EAAQk5F,OACvBojD,QAASA,EACTn9H,IAAKA,KAEZ,GAAEm9H,GAEV,IAQiBolD,OANH,WACE,MAAT4nI,IACJpgE,aAAaogE,GACbA,EAAQ,KACX,EAGJ,CAzBuB,GA2BlBC,EAAgB,mKAETtsE,EAAU,cAAGA,EAAUorE,GAAAA,iBAIb,OAHXr6N,EAA2B,uBAGV45N,GAAOzoT,EAAKnf,aAA7BguG,EAAAA,EAAAA,OAEIivJ,EAAUorE,GAAAA,oBACkB,MAAxBr6N,EAASg6N,YAA8C,MAAxBh6N,EAASg6N,WAAe,oBAEjD58Q,EAAW4iD,EAASK,QAAQjjD,UAAY,GACvB,QAAnBprD,EAAQk5F,SAAoB9tC,EAASxoD,MAAM,WAAf,wBAC5Buc,EAAM6uF,EAASK,QAAQjjD,oEAII,MAAxB4iD,EAASg6N,WAAe,oBAE3BwB,GAAW,GACXhB,EAAkB,iBACP,iBAAMA,EAAiBvrE,EAAS99O,WAA3CqqT,EAAW,EAAXA,iBAGAA,EAAU,iBAWV,OAVIC,EAAQ,EAENC,EAAa17N,EAASK,QAAQ,eAEhCo7N,EADuB,kBAAhBC,GAA4BA,EAAW9mU,MAAM,iBACrB,IAAvB4Z,SAASktT,GAETjB,EAAuBjsT,SAASmxB,OAAOtnC,KAAKS,SAAWT,KAAK6K,IAAI,EAAG+rP,eAIzEgrE,GAAQwB,oGAQV,OADhBz7N,EAAiB,KAAOA,YAEpBq7N,EAAe3nI,SACftgD,GAAOM,WAAW,mBAAoBL,EAAAA,GAAAA,OAAAA,aAA4B,CAC9D6nL,YAAahB,GAAQloU,EAAQ4uG,KAAMw6N,EAAY,iBAC/CD,cAAenpU,EAAQk5F,OACvBywO,YAAa,EAAF,GACXxqT,IAAKA,gBAMbyvF,EAAOZ,EAASY,KAEhB+5N,GAAoC,MAAxB36N,EAASg6N,WACrBp5N,EAAO,MACC85N,IAAqB16N,EAASg6N,WAAa,KAAOh6N,EAASg6N,YAAc,OACjFqB,EAAe3nI,SACftgD,GAAOM,WAAW,eAAgBL,EAAAA,GAAAA,OAAAA,aAA4B,CAC1DhgF,OAAQ2sC,EAASg6N,WACjB35N,QAASL,EAASK,QAClBO,KAAMs5N,GAAQt5N,EAAQZ,EAASK,QAAWL,EAASK,QAAQ,gBAAiB,MAC5E66N,YAAahB,GAAQloU,EAAQ4uG,KAAMw6N,EAAY,iBAC/CD,cAAenpU,EAAQk5F,OACvB/5E,IAAKA,MAITipT,EAAa,iBAEM,2BAAMA,EAAYx5N,EAAMZ,kBAAjC15B,EAAAA,EAAAA,KACN+0P,EAAe3nI,2BACRptH,2CAIH,KAAMs1P,eAAiB3sE,EAAUorE,GAAAA,oBAC7BmB,GAAW,GACXhB,EAAkB,iBACP,iBAAMA,EAAiBvrE,EAAS99O,WAA3CqqT,EAAAA,EAAAA,iBAGAA,EAAAA,iBAGA,OAFMltL,EAAUmsL,EAAuBjsT,SAASmxB,OAAOtnC,KAAKS,SAAWT,KAAK6K,IAAI,EAAG+rP,eAE7EgrE,GAAQ3rL,kDAKtB+sL,EAAe3nI,SACftgD,GAAOM,WAAW,4BAA6BL,EAAAA,GAAAA,OAAAA,aAA4B,CACvEzyC,KAAMs5N,GAAQt5N,EAAQZ,EAASK,QAAWL,EAASK,QAAQ,gBAAiB,MAC5EplG,MAAO,EAAF,GACLigU,YAAahB,GAAQloU,EAAQ4uG,KAAMw6N,EAAY,iBAC/CD,cAAenpU,EAAQk5F,OACvB/5E,IAAKA,mBAKjBkqT,EAAe3nI,2BAIK9yF,WA1GsBquJ,oDA6GvC77G,GAAOM,WAAW,kBAAmBL,EAAAA,GAAAA,OAAAA,aAA4B,CACpE6nL,YAAahB,GAAQloU,EAAQ4uG,KAAMw6N,EAAY,iBAC/CD,cAAenpU,EAAQk5F,OACvB/5E,IAAKA,sEAEZ,CApHqB,GAsHtB,OAAOjW,QAAQ08P,KAAK,CAAEyjE,EAAevrM,QAASyrM,GACjD,CAEK,SAAUM,GAAU/7L,EAAqCjtC,EAAeunO,GAC1E,IAuBIx5N,EAAmB,KACvB,GAAY,MAAR/N,EAAc,CACd+N,GAAO+1C,EAAAA,EAAAA,IAAY9jD,GAGnB,IAAMipO,EAAkD,kBAAhBh8L,EAA6B,CAAE3uH,IAAK2uH,IAAeuhB,EAAAA,EAAAA,IAAYvhB,GACvG,GAAIg8L,EAAQz7N,QAC6G,IAA7FjtG,OAAOQ,KAAKkoU,EAAQz7N,SAAStsG,QAAO,SAACkzE,GAAD,MAA4B,iBAApBA,EAAExkE,aAAV,IAA6C3R,SAErGgrU,EAAQz7N,SAAUghD,EAAAA,EAAAA,IAAYy6K,EAAQz7N,SACtCy7N,EAAQz7N,QAAQ,gBAAkB,yBAGtCy7N,EAAQz7N,QAAU,CAAE,eAAgB,oBAExCy/B,EAAag8L,CAChB,CAED,OAAO3B,GAAgBr6L,EAAYl/B,GAzCb,SAAC/vG,EAAmBmvG,GACtC,IAAI15B,EAAc,KAClB,GAAa,MAATz1E,EACA,IACIy1E,EAASpzD,KAAKC,OAAMyjI,EAAAA,EAAAA,IAAa/lJ,GAMpC,CALC,MAAOoK,GACLm4I,GAAOM,WAAW,eAAgBL,EAAAA,GAAAA,OAAAA,aAA4B,CAC1DzyC,KAAM/vG,EACNoK,MAAOA,GAEd,CAOL,OAJIm/T,IACA9zP,EAAS8zP,EAAY9zP,EAAQ05B,IAG1B15B,CACV,GAwBJ,CAEK,SAAUy1P,GAAQzuM,EAAwBt7H,GAO5C,OANKA,IAAWA,EAAU,CAAC,GAEN,OADrBA,GAAUqvJ,EAAAA,EAAAA,IAAYrvJ,IACV6G,QAAiB7G,EAAQ6G,MAAQ,GACtB,MAAnB7G,EAAQgqU,UAAmBhqU,EAAQgqU,QAAU,KACzB,MAApBhqU,EAAQsF,WAAoBtF,EAAQsF,SAAW,KAE5C,IAAI4D,SAAQ,SAASP,EAASC,GAEjC,IAAI0gU,EAAsB,KACtB3qU,GAAgB,EAGd+iM,EAAS,WACX,OAAI/iM,IACJA,GAAO,EACH2qU,GAASpgE,aAAaogE,IACnB,EACV,EAEGtpU,EAAQs8I,UACRgtL,EAAQp7N,YAAW,WACXwzF,KAAY94L,EAAO,IAAIiJ,MAAM,WACpC,GAAE7R,EAAQs8I,UAGf,IAAM2tL,EAAajqU,EAAQiqU,WAEvBhtE,EAAU,GACd,SAAS/nG,IACL,OAAO55B,IAAOnyH,MAAK,SAASmrE,GAGxB,QAAe/qE,IAAX+qE,EACIotH,KAAY/4L,EAAQ2rE,QAErB,GAAIt0E,EAAQkqU,SACflqU,EAAQkqU,SAAS9yK,KAAK,OAAQlC,QAE3B,GAAIl1J,EAAQmqU,UACfnqU,EAAQmqU,UAAU/yK,KAAK,QAASlC,QAG7B,IAAKv2J,EAAM,CAEd,KADAs+P,EACcgtE,EAEV,YADIvoI,KAAY94L,EAAO,IAAIiJ,MAAM,yBAIrC,IAAIyqI,EAAUt8I,EAAQsF,SAAWkX,SAASmxB,OAAOtnC,KAAKS,SAAWT,KAAK6K,IAAI,EAAG+rP,KACzE3gH,EAAUt8I,EAAQ6G,QAASy1I,EAAUt8I,EAAQ6G,OAC7Cy1I,EAAUt8I,EAAQgqU,UAAW1tL,EAAUt8I,EAAQgqU,SAEnD97N,WAAWgnD,EAAO5Y,EACrB,CAED,OAAO,IACV,IAAE,SAASrzI,GACJy4L,KAAY94L,EAAOK,EAC1B,GACJ,CACDisJ,EACH,GACJ,4BC5dYp2I,GAAU,kBCYjBsiI,GAAS,IAAIC,EAAAA,GAAOviI,IAiBbsrT,GAAb,WAGI,6BACIlqU,KAAKu5K,QAAUv5K,KAAKmqU,mBACvB,CALL,gDAOI,WAAiB,WACP5wJ,EAA6B,CAAC,EAE9Bt5B,EAAUjgJ,KAAKigJ,QAAQp2I,KAAK7J,MAC5BoqU,EAAYpqU,KAAKoqU,UAAUvgU,KAAK7J,MAChCyuJ,EAAWzuJ,KAAKyuJ,SAAS5kJ,KAAK7J,MAC9Bwe,EAAOxe,KAAKwe,KAAK3U,KAAK7J,MACtBmvE,EAAOnvE,KAAKmvE,KAAKtlE,KAAK7J,MACtBgc,EAAMhc,KAAKgc,IAAInS,KAAK7J,MACpB68J,EAAS78J,KAAK68J,OAAOhzJ,KAAK7J,MAC1BqH,EAAOrH,KAAKqH,KAAKwC,KAAK7J,MAmI5B,OA/HAu5K,EAAQ1qB,YAAc,CAClB1/E,KAAMA,EAEN9nE,KAAMA,EACNitJ,WAAY41K,EAAUG,UAAUrqU,KAAKs0J,WAAWzqJ,KAAK7J,MAAO,MAE5Dm2J,UAAW+zK,EAAUG,UAAUl7P,EAAM,MACrCm7P,YAAaJ,EAAUG,UAAUxtK,EAAQ,MACzC0tK,iBAAkBL,EAAUG,UAAUxtK,EAAQ,MAE9CjH,cAAes0K,EAAUG,UAAUxtK,EAAQ,MAE3Cx9I,KAAM4gI,EAIN4N,SAAUq8K,EAAUG,UAAUD,GAC9Bn8K,qBAAsBi8K,EAAUG,UAAUD,GAC1Cp8K,aAAck8K,EAAUG,UAAUD,GAElC/yL,SAAU+yL,EACV5qU,GAAI0qU,EAAUG,UAAUpqL,EAAS,MACjCthJ,MAAOyrU,EACP3vL,MAAOoiB,EACPr+I,KAAMA,EAENnF,EAAG6wT,EAAUG,UAAUrqU,KAAKwqU,SAC5Bn3T,EAAG62T,EAAUG,UAAUrqU,KAAKwqU,SAC5B11T,EAAGo1T,EAAUG,UAAUxtK,GAEvB4tK,QAASP,EAAUG,UAAUpqL,EAAS,MAEtCszB,IAAK22J,EAAUG,UAAU7rT,IAG7B+6J,EAAQmxJ,mBAAqB,CACzBrrT,KAAM6qT,EAAUG,UAAUpqL,GAC1BxF,MAAOyvL,EAAUG,UAAUxtK,GAC3BxlB,SAAU6yL,EAAUG,UAAUD,GAC9Bv8K,SAAUq8K,EAAUG,UAAUD,GAC9Bn8K,qBAAsBi8K,EAAUG,UAAUD,GAC1Cp8K,aAAck8K,EAAUG,UAAUD,GAClC5qU,GAAI0qU,EAAUG,UAAUpqL,GACxBthJ,MAAOurU,EAAUG,UAAUD,GAC3B5rT,KAAM0rT,EAAUG,WA9CD,SAACv1T,GAAa,OAAO,EAAK0J,KAAK1J,GAAG,EAAQ,IA+CzDzN,KAAM6iU,EAAUG,UAAUxtK,GAC1BvI,WAAY41K,EAAUG,UAAUrqU,KAAKs0J,WAAWzqJ,KAAK7J,MAAO,OAGhEu5K,EAAQoxJ,WAAa,CACjBJ,iBAAkB1tK,EAClBytK,YAAaztK,EACbpxB,gBAAiBt8D,EACjB8wE,QAASA,EACToM,OAAQ69K,EAAUU,QAAQz7P,GAC1B3wD,KAAMA,EACNqsT,SAAUhuK,EACV1G,UAAWhnF,GAGfoqG,EAAQ7tC,QAAU,CACdlsI,GAAI0qU,EAAUG,UAAUrqU,KAAKigJ,QAAS,MACtC5gI,KAAM6qT,EAAUG,UAAUrqU,KAAKigJ,QAAS,MACxC9I,gBAAiB+yL,EAAUG,UAAUpqL,EAAS,MAC9CsqL,iBAAkB1tK,EAElBhkD,KAAMqxN,EAAUG,UAAUruT,GAC1B8uT,QAASV,EACTW,UAAWb,EAAUG,UAAU7rT,GAC/B23I,UAAWhnF,EACXs8D,gBAAiBt8D,EACjB0mF,KAAMq0K,EAAUU,QAAQ5qU,KAAK2qU,WAAW9gU,KAAK7J,OAC7CsqU,YAAaztK,EACbjH,cAAes0K,EAAUG,UAAUxtK,EAAQ,MAC3CmuK,kBAAmBZ,EACnBa,kBAAmBf,EAAUG,UAAUD,GACvCjpQ,OAAQ+oQ,EAAUG,UAAUxtK,GAC5Bx1J,KAAMA,GAGVkyK,EAAQ5rB,MAAQ,CACZx+E,KAAM+6P,EAAUG,UAAUl7P,GAC1B+7P,WAAY/7P,EACZ0tF,OAAQA,EAER+7B,UAAW/7B,EACXpiB,MAAOyvL,EAAUG,UAAUruT,GAC3BmvT,WAAYnrU,KAAKmrU,WAAWthU,KAAK7J,MAEjCq3I,SAAU+yL,EACVU,QAASV,EAETgB,MAAOlB,EAAUG,UAAUpqL,GAC3BorL,UAAW7sT,EAEX8sT,aAAcpB,EAAUG,UAAUH,EAAUU,QAAQz7P,IAEpD++E,cAAeg8K,EAAUG,UAAUD,IAGvC7wJ,EAAQgyJ,uBAAwBp8K,EAAAA,EAAAA,IAAYoqB,EAAQ5rB,OACpD4rB,EAAQgyJ,sBAAsBD,aAAepB,EAAUG,UAAUH,EAAUU,QAAQ5qU,KAAKwrU,oBAAoB3hU,KAAK7J,QAEjHu5K,EAAQ13K,OAAS,CACbs3J,UAAW+wK,EAAUG,UAAU57K,OAAUplJ,GACzC4vJ,QAASixK,EAAUG,UAAU57K,OAAUplJ,GACvC8sJ,UAAW+zK,EAAUG,UAAUl7P,OAAM9lE,GACrC42I,QAASiqL,EAAUG,UAAUpqL,OAAS52I,GACtCgjJ,OAAQ69K,EAAUG,UAAUrqU,KAAKqsJ,OAAOxiJ,KAAK7J,WAAOqJ,IAGxDkwK,EAAQkyJ,UAAY,CAChBnB,YAAaJ,EAAUG,UAAUxtK,GACjC1G,UAAW+zK,EAAUG,UAAUl7P,GAC/Bo7P,iBAAkB1tK,EAElBrxE,QAAS0+O,EAAUG,UAAUrqU,KAAK84F,QAAQjvF,KAAK7J,OAE/CigJ,QAASA,EACTzhI,KAAM0rT,EAAUwB,aAAaltT,EAAM,MAEnC6tI,OAAQ69K,EAAUU,QAAQz7P,GAE1Bs8D,gBAAiBt8D,EACjB07P,SAAUhuK,GAGP0c,CACV,GArJL,wBAuJI,SAAWjlB,GACP,OAAOgB,EAAAA,GAAAA,IAAchB,GAAc,GACtC,GAzJL,oBA6JI,SAAOuI,GACH,MAAe,OAAXA,EAA0B,EACvBtlB,EAAAA,GAAAA,KAAeslB,GAAQnkB,UACjC,GAhKL,kBAkKI,SAAKmkB,GACD,MAAe,OAAXA,GAA6B,MAAVA,EAAyB,EACzCtlB,EAAAA,GAAAA,KAAeslB,GAAQnkB,UACjC,GArKL,uBAwKI,SAAU/5I,GACN,OAAO44I,EAAAA,GAAAA,KAAe54I,EACzB,GA1KL,qBA6KI,SAAQA,GACJ,GAAsB,mBAAXA,EAAwB,OAAOA,EAC1C,GAAsB,kBAAXA,EAAqB,CAE5B,GAAc,UADdA,EAAQA,EAAM4R,eACU,OAAO,EAC/B,GAAc,UAAV5R,EAAqB,OAAO,CACnC,CACD,MAAM,IAAIgT,MAAM,qBAAuBhT,EAC1C,GArLL,iBAuLI,SAAIA,EAAYmgO,GACZ,MAAsB,kBAAXngO,IACFmgO,GAAoC,OAA1BngO,EAAMu6G,UAAU,EAAG,KAAev6G,EAAQ,KAAOA,IAC5Dm+I,EAAAA,EAAAA,IAAYn+I,IACNA,EAAM4R,cAGb2wI,GAAOQ,mBAAmB,eAAgB,QAAS/iJ,EAC7D,GA/LL,kBAiMI,SAAKA,EAAYmgO,GACb,IAAM1qJ,EAASp0E,KAAKgc,IAAIrd,EAAOmgO,GAC/B,GAAK1qJ,EAAOx1E,OAAS,IAAO,EACxB,MAAM,IAAI+S,MAAM,8BAAgChT,GAEpD,OAAOy1E,CACV,GAvML,qBA2MI,SAAQz1E,GACJ,OAAOk6I,EAAAA,EAAAA,IAAWl6I,EACrB,GA7ML,yBA+MI,SAAYA,GACR,KAAKm+I,EAAAA,EAAAA,IAAYn+I,EAAO,IAAO,OAAO,KACtC,IAAMshJ,GAAUpH,EAAAA,EAAAA,KAAWuU,EAAAA,EAAAA,IAAazuJ,EAAO,KAC/C,OAAQshJ,IAAYghK,GAAe,KAAMhhK,CAC5C,GAnNL,6BAqNI,SAAgBthJ,GACZ,OAAO+xJ,EAAAA,EAAAA,IAAmB/xJ,EAC7B,GAvNL,sBA0NI,SAAS8vJ,GACL,GAAgB,MAAZA,EAAoB,MAAO,SAE/B,GAAiB,aAAbA,EAA2B,MAAO,MAEtC,OAAQA,GACJ,IAAK,WAAY,MAAO,MACxB,IAAK,SAAU,IAAK,UAAW,IAAK,OAAQ,IAAK,YAC7C,OAAOA,EAGf,GAAyB,kBAAdA,IAA0B3R,EAAAA,EAAAA,IAAY2R,GAC7C,OAAO8E,EAAAA,EAAAA,IAA0B9E,GAGrC,MAAM,IAAI98I,MAAM,mBACnB,GA1OL,kBA6OI,SAAKhT,EAAYmgO,GACb,IAAM1qJ,EAASp0E,KAAKgc,IAAIrd,EAAOmgO,GAC/B,OAA8B,MAA1BhuE,EAAAA,EAAAA,IAAc18E,GACP8sE,GAAOQ,mBAAmB,eAAgB,QAAS/iJ,GAEvDy1E,CACV,GAnPL,wBAsPI,SAAWz1E,GACP,GAAa,MAATA,EAAiB,OAAO,KAE5B,IAAMmW,EAAIyiI,EAAAA,GAAAA,KAAe54I,GAEzB,IACI,OAAOmW,EAAE4jI,UACM,CAAjB,MAAO3vI,GAAU,CAEpB,OAAO,IACT,GAhQL,qBAkQI,SAAQpK,GACJ,KAAKm+I,EAAAA,EAAAA,IAAYn+I,GACb,MAAM,IAAIgT,MAAM,mBAEpB,OAAOgvI,EAAAA,EAAAA,IAAWhiJ,EAAO,GAC5B,GAvQL,oBAyQI,SAAOA,EAAYohB,GACK,MAAhBphB,EAAMgtU,QAAiC,MAAfhtU,EAAMysU,QAC9BzsU,EAAMysU,MAAQzsU,EAAMgtU,QAGxB,IAAMR,EAAmC,MAArBxsU,EAAMitU,YAAuBjtU,EAAMitU,YAAajtU,EAAMwsU,WACpE/2P,EAAS81P,EAAUl1K,MAAMj1I,EAAQphB,GAEvC,OADAy1E,EAAOw3P,YAA8B,MAAdT,EAAsB,KAAM5zL,EAAAA,GAAAA,KAAe4zL,GAC3D/2P,CACV,GAlRL,mBAoRI,SAAMz1E,GACF,OAAOqB,KAAK6rU,OAAOltU,EAAOqB,KAAKu5K,QAAQ5rB,MAC1C,GAtRL,mCAwRI,SAAsBhvJ,GAClB,OAAOqB,KAAK6rU,OAAOltU,EAAOqB,KAAKu5K,QAAQgyJ,sBAC1C,GA1RL,gCA6RI,SAAmB5sU,GACf,OAAOurU,EAAUl1K,MAAMh1J,KAAKu5K,QAAQmxJ,mBAAoB/rU,EAC3D,GA/RL,iCAiSI,SAAoBkwJ,GAGO,MAAnBA,EAAYvX,KAAuC,MAAxBuX,EAAYxX,WACvCwX,EAAYxX,SAAWwX,EAAYvX,KAKnCuX,EAAYrvJ,IAAM+3I,EAAAA,GAAAA,KAAesX,EAAYrvJ,IAAI2jJ,WACjD0L,EAAYrvJ,GAAK,8CAII,MAArBqvJ,EAAY1sB,OAAqC,MAApB0sB,EAAYrwI,OACzCqwI,EAAYrwI,KAAOqwI,EAAY1sB,OAIb,MAAlB0sB,EAAYrvJ,IAAqC,MAAvBqvJ,EAAY47K,UACtC57K,EAAY47K,QAAUzqU,KAAKm3I,gBAAgB0X,IAGrB,IAArBA,EAAYxnJ,MAAmC,IAArBwnJ,EAAYxnJ,MAAwC,MAA1BwnJ,EAAYyF,aACjEzF,EAAYyF,WAAa,IAG7B,IAAMlgF,EAA8B81P,EAAUl1K,MAAMh1J,KAAKu5K,QAAQ1qB,YAAaA,GAE9E,GAA2B,MAAvBA,EAAYrnB,QAAiB,CAC7B,IAAIA,EAAUqnB,EAAYrnB,SAEtBsV,EAAAA,EAAAA,IAAYtV,KACZA,EAAU+P,EAAAA,GAAAA,KAAe/P,GAASkR,YAGtCtkE,EAAOozD,QAAUA,CAEpB,KAAM,CACH,IAAIA,EAAUqnB,EAAYpiB,UAGX,MAAXjF,GAA+B,MAAZpzD,EAAOt/D,IAC1B0yH,EAAUqnB,EAAYrnB,UAGtBsV,EAAAA,EAAAA,IAAYtV,KACZA,EAAU+P,EAAAA,GAAAA,KAAe/P,GAASkR,YAGd,kBAAblR,GAAqC,MAAZpzD,EAAOt/D,KACvC0yH,GAAWpzD,EAAOt/D,EAAI,IAAM,GACd,IAAK0yH,EAAU,GAC7BA,EAAUlrH,SAASkrH,IAGC,kBAAbA,IAAyBA,EAAU,GAE9CpzD,EAAOozD,QAAUA,CACpB,CAOD,OAJIpzD,EAAO+hF,WAAoD,MAAvC/hF,EAAO+hF,UAAUxzF,QAAQ,KAAM,MACnDyR,EAAO+hF,UAAY,MAGhB/hF,CACV,GApWL,yBAsWI,SAAYz1E,GACR,OAAOq9I,EAAAA,GAAAA,IAAiBr9I,EAC3B,GAxWL,wBA0WI,SAAWA,GACP,OAAOurU,EAAUl1K,MAAMh1J,KAAKu5K,QAAQoxJ,WAAYhsU,EACnD,GA5WL,qBA8WI,SAAQA,GACJ,IAAMy1E,EAA6B81P,EAAUl1K,MAAMh1J,KAAKu5K,QAAQ7tC,QAAS/sI,GAGzE,GAAmB,MAAfy1E,EAAOykC,KACP,GAAIzkC,EAAOykC,KAAKj6G,QAAU,EAAG,CAEzB,IAAMD,EAAQ44I,EAAAA,GAAAA,KAAenjE,EAAOykC,MAAM6/B,WAC5B,IAAV/5I,GAAyB,IAAVA,GAEM,MAAjBy1E,EAAOjT,QAAmBiT,EAAOjT,SAAWxiE,GAC5CuiJ,GAAOQ,mBAAmB,kCAAmC,QAAS,CAAE7oC,KAAMzkC,EAAOykC,KAAM13C,OAAQiT,EAAOjT,SAE9GiT,EAAOjT,OAASxiE,SACTy1E,EAAOykC,MAEdqoC,GAAOQ,mBAAmB,0BAA2B,aAActtE,EAAOykC,KAEjF,MAAiC,KAAvBzkC,EAAOykC,KAAKj6G,QAEnBsiJ,GAAOQ,mBAAmB,oBAAqB,aAActtE,EAAOykC,MAQ5E,OAJqB,MAAjBzkC,EAAOjT,SACPiT,EAAO03P,WAAY,GAGhB13P,CACV,GA3YL,oBA6YI,SAAOz1E,GAAU,WACb,OAAId,MAAMC,QAAQa,GACPA,EAAMiH,KAAI,SAACkP,GAAD,OAAO,EAAKu3I,OAAOv3I,EAAnB,IAED,MAATnW,EACAqB,KAAKmvE,KAAKxwE,GAAO,GAGrB,IACV,GAtZL,oBAwZI,SAAOA,GACH,OAAOurU,EAAUl1K,MAAMh1J,KAAKu5K,QAAQ13K,OAAQlD,EAC/C,GA1ZL,uBA4ZI,SAAUA,GACN,OAAOurU,EAAUl1K,MAAMh1J,KAAKu5K,QAAQkyJ,UAAW9sU,EAClD,IA9ZL,oBAgaI,SAAaohB,EAA0Cve,GACnD,IAAM4yE,EAAc,CAAC,EACrB,IAAK,IAAMnzE,KAAO8e,EACd,IACI,IAAMphB,EAAQohB,EAAO9e,GAAKO,EAAOP,SACnBoI,IAAV1K,IAAuBy1E,EAAOnzE,GAAOtC,EAK5C,CAJC,MAAOoK,GAGL,MAFAA,EAAMgjU,SAAW9qU,EACjB8H,EAAMgvQ,WAAav2Q,EAAOP,GACpB8H,CACT,CAEL,OAAOqrE,CACV,GA7aL,uBAgbI,SAAiBr0D,EAAoBisT,GACjC,OAAQ,SAASrtU,GACb,OAAa,MAATA,EAAwBqtU,EACrBjsT,EAAOphB,EACjB,CACJ,GArbL,0BAwbI,SAAoBohB,EAAoBksT,GACpC,OAAQ,SAASttU,GACb,OAAKA,EACEohB,EAAOphB,GADOstU,CAExB,CACJ,GA7bL,qBAgcI,SAAelsT,GACX,OAAQ,SAASrQ,GACb,IAAK7R,MAAMC,QAAQ4R,GAAU,MAAM,IAAIiC,MAAM,gBAE7C,IAAMyiE,EAAc,GAMpB,OAJA1kE,EAAMrN,SAAQ,SAAS1D,GACnBy1E,EAAO11E,KAAKqhB,EAAOphB,GACtB,IAEMy1E,CACV,CACJ,KA5cL,KAmdM,SAAU83P,GAAuBvtU,GACnC,OAAQA,GAA+C,oBAA/BA,EAAMwtU,mBACjC,CAEK,SAAUA,GAAoBxtU,GAChC,OAAQutU,GAAuBvtU,IAAUA,EAAMwtU,qBAClD,CAGD,IAAIC,IAAkB,EAChB,SAAUC,KACRD,KACJA,IAAkB,EAElB33T,QAAQvD,IAAI,8BACZuD,QAAQvD,IAAI,8DACZuD,QAAQvD,IAAI,IACZuD,QAAQvD,IAAI,6EACZuD,QAAQvD,IAAI,sEACZuD,QAAQvD,IAAI,IACZuD,QAAQvD,IAAI,2EACZuD,QAAQvD,IAAI,0EACZuD,QAAQvD,IAAI,iFACZuD,QAAQvD,IAAI,IACZuD,QAAQvD,IAAI,sDACZuD,QAAQvD,IAAI,8BACf,4SCnfKgwI,GAAS,IAAIC,EAAAA,GAAOviI,IAS1B,SAAS0tT,GAAWt/K,GACf,OAAa,MAATA,EAAwB,QACC,MAAzB8D,EAAAA,EAAAA,IAAc9D,IACd9L,GAAOQ,mBAAmB,gBAAiB,QAASsL,GAEjDA,EAAMz8I,cACjB,CAED,SAASg8T,GAAgBlgL,GAGrB,IADAA,EAASA,EAAO18I,QACT08I,EAAOztJ,OAAS,GAAkC,MAA7BytJ,EAAOA,EAAOztJ,OAAS,IAAcytJ,EAAOj/E,MAExE,OAAOi/E,EAAOzmJ,KAAI,SAAConJ,GACf,GAAInvJ,MAAMC,QAAQkvJ,GAAQ,CAGtB,IAAMzL,EAAyC,CAAC,EAChDyL,EAAM3qJ,SAAQ,SAAC2qJ,GACXzL,EAAO+qL,GAAWt/K,KAAU,CAC/B,IAGD,IAAMy0E,EAASvgO,OAAOQ,KAAK6/I,GAG3B,OAFAkgF,EAAO7nK,OAEA6nK,EAAO5/J,KAAK,IAEtB,CACG,OAAOyqQ,GAAWt/K,EAEzB,IAAEnrF,KAAK,IACX,CAgBD,SAASk1F,GAAY5I,GACjB,GAA0B,kBAAfA,EAAyB,CAGhC,GAFAA,EAAYA,EAAU59I,cAEW,MAA7BugJ,EAAAA,EAAAA,IAAc3C,GACd,MAAO,MAAQA,EAGnB,IAAgC,IAA5BA,EAAUrrJ,QAAQ,KAClB,OAAOqrJ,CAGd,KAAM,IAAItwJ,MAAMC,QAAQqwJ,GACrB,MAAO,YAAco+K,GAAgBp+K,GAElC,GAAIb,EAAAA,GAAAA,YAAsBa,GAE7B,MADAjN,GAAOxsI,KAAK,mBACN,IAAI/C,MAAM,mBAEb,GAAIw8I,GAAmC,kBAAfA,EAC3B,MAAO,WAAaA,EAAUlO,SAAW,KAAO,IAAMssL,GAAgBp+K,EAAU9B,QAAU,GAC7F,CAED,MAAM,IAAI16I,MAAM,mBAAqBw8I,EACxC,CAKD,SAASy4E,KACL,OAAQ,IAAIpiO,MAAQoiO,SACvB,CAED,SAAS2iG,GAAM3pU,GACX,OAAO,IAAIoJ,SAAQ,SAACP,GAChBulG,WAAWvlG,EAAS7I,EACvB,GACJ,CAmBD,IAAM4sU,GAAiB,CAAE,QAAS,UAAW,UAAW,QAE3Cv7E,GAAb,WAQI,WAAYh6F,EAAa9nJ,EAAoB+nJ,IAAa,gBACtDlS,EAAAA,EAAAA,IAAehlJ,KAAM,MAAOi3J,IAC5BjS,EAAAA,EAAAA,IAAehlJ,KAAM,WAAYmP,IACjC61I,EAAAA,EAAAA,IAAehlJ,KAAM,OAAQk3J,GAE7Bl3J,KAAKysU,kBAAoB,EACzBzsU,KAAK0sU,WAAY,CACpB,CAfL,kCAiBI,WACI,OAAQ1sU,KAAKqH,MACT,IAAK,KACF,OAAOrH,KAAKmvE,KACf,IAAK,SACF,OAAOnvE,KAAK6B,OAEnB,OAAO7B,KAAKi3J,GACf,GAzBL,gBA2BI,WACI,OAAOj3J,KAAKi3J,IAAIt1F,MAAM,KAAK,EAC9B,GA7BL,gBA+BI,WACI,IAAM2nF,EAAQtpJ,KAAKi3J,IAAIt1F,MAAM,KAC7B,MAAiB,OAAb2nF,EAAM,GAAsB,KACzBA,EAAM,EAChB,GAnCL,kBAqCI,WACI,IAAMA,EAAQtpJ,KAAKi3J,IAAIt1F,MAAM,KAC7B,GAAiB,WAAb2nF,EAAM,GAAmB,OAAO,KACpC,IAhHmB9qI,EAgHbyhI,EAAUqJ,EAAM,GAEhB+C,EAjHG,MADU7tI,EAkHc8qI,EAAM,IAjHjB,GAEnB9qI,EAAKmjD,MAAM,MAAM/7D,KAAI,SAAConJ,GACzB,GAAc,KAAVA,EAAgB,MAAO,GAE3B,IAAM1D,EAAQ0D,EAAMrrF,MAAM,KAAK/7D,KAAI,SAAConJ,GAChC,MAAmB,SAAVA,EAAoB,KAAMA,CACtC,IAED,OAA0B,IAAjB1D,EAAM1qJ,OAAgB0qJ,EAAM,GAAIA,CAC5C,IAwGSznJ,EAAiB,CAAC,EAKxB,OAHIwqJ,EAAOztJ,OAAS,IAAKiD,EAAOwqJ,OAASA,GACrCpM,GAAuB,MAAZA,IAAmBp+I,EAAOo+I,QAAUA,GAE5Cp+I,CACV,GAjDL,sBAmDI,WACI,OAAQ7B,KAAKi3J,IAAIn0J,QAAQ,MAAQ,GAAK0pU,GAAe1pU,QAAQ9C,KAAKi3J,MAAQ,CAC7E,KArDL,KA4FM01K,GAAgD,CAClD,EAAO,CAAE5jM,OAAQ,MAAQ6jM,MAAO,EAAMC,KAAM,EAAM9jQ,OAAQ,MAC1D,EAAO,CAAEggE,OAAQ,MAAQ6jM,MAAO,GAAMC,KAAM,GAAM9jQ,OAAQ,OAC1D,EAAO,CAAEggE,OAAQ,OAAQ6jM,MAAO,GAAMC,KAAM,IAC5C,GAAO,CAAE9jM,OAAQ,MAAQ+jM,IAAK,OAC9B,GAAO,CAAE/jM,OAAQ,MAAQ+jM,IAAK,OAC9B,IAAO,CAAE/jM,OAAQ,OAAQ+jM,IAAK,QAGlC,SAASC,GAAWpuU,GAChB,OAAOgiJ,EAAAA,EAAAA,IAAWpJ,EAAAA,GAAAA,KAAe54I,GAAO64I,cAAe,GAC1D,CAGD,SAASw1L,GAAaxuT,GAClB,OAAOs7S,GAAOx/K,QAAOyC,EAAAA,EAAAA,IAAO,CAAEv+H,GAAM4uI,EAAAA,EAAAA,IAAa8wJ,GAAOA,GAAO1/R,IAAQ,EAAG,KAC7E,CAOD,IAAMyuT,GAAc,IAAIp3N,OAAO,kBAAoB,KAC7Cq3N,GAAW,CACb,IAAIr3N,OAAO,mBAAqB,KAChC,IAAIA,OAAO,gBAAiB,KAC5Bo3N,GACA,IAAIp3N,OAAO,mCAAoC,MAGnD,SAASs3N,GAAa/4P,EAAgBjsC,GAClC,IACI,OAAOu8G,EAAAA,EAAAA,IAAa0oL,GAAYh5P,EAAQjsC,GAC1B,CAAhB,MAAMp/B,GAAU,CAClB,OAAO,IACV,CAED,SAASqkU,GAAYh5P,EAAgBjsC,GACjC,GAAe,OAAXisC,EAAmB,OAAO,KAE9B,IAAMz0E,EAAS43I,EAAAA,GAAAA,MAAe6V,EAAAA,EAAAA,IAAah5E,EAAQjsC,EAAOA,EAAQ,KAAKuwG,WACjE95I,EAAS24I,EAAAA,GAAAA,MAAe6V,EAAAA,EAAAA,IAAah5E,EAAQz0E,EAAQA,EAAS,KAAK+4I,WAEzE,OAAO0U,EAAAA,EAAAA,IAAah5E,EAAQz0E,EAAS,GAAIA,EAAS,GAAKf,EAC1D,CAGD,SAASyuU,GAAYC,GASjB,OARIA,EAAK5qU,MAAM,qBACX4qU,EAAOA,EAAKp0N,UAAU,IACfo0N,EAAK5qU,MAAM,eAClB4qU,EAAOA,EAAKp0N,UAAU,GAEtBgoC,GAAOQ,mBAAmB,0BAA2B,OAAQ4rL,GAG1D,gCAAP,OAAyCA,EAC5C,CAED,SAASC,GAAO5uU,GACZ,IAAMy1E,GAASipE,EAAAA,EAAAA,IAAS1+I,GACxB,GAAIy1E,EAAOx1E,OAAS,GAAM,MAAM,IAAI+S,MAAM,+BAE1C,IAAM+gQ,EAAS,IAAIlhQ,WAAW,IAE9B,OADAkhQ,EAAOjoQ,IAAI2pE,EAAQ,GAAKA,EAAOx1E,QACxB8zQ,CACV,CAED,SAAS86D,GAAS7uU,GACd,GAAKA,EAAMC,OAAS,KAAQ,EAAK,OAAOD,EAExC,IAAMy1E,EAAS,IAAI5iE,WAA0C,GAA/BrL,KAAK8K,KAAKtS,EAAMC,OAAS,KAEvD,OADAw1E,EAAO3pE,IAAI9L,GACJy1E,CACV,CAGD,SAASq5P,GAAYC,GAMjB,IALA,IAAMt5P,EAA4B,GAE9B+zO,EAAY,EAGPvqT,EAAI,EAAGA,EAAI8vU,EAAM9uU,OAAQhB,IAC9Bw2E,EAAO11E,KAAK,MACZypT,GAAa,GAGjB,IAAK,IAAIvqT,EAAI,EAAGA,EAAI8vU,EAAM9uU,OAAQhB,IAAK,CACnC,IAAM4gB,GAAO6+H,EAAAA,EAAAA,IAASqwL,EAAM9vU,IAG5Bw2E,EAAOx2E,GAAK2vU,GAAOplB,GAGnB/zO,EAAO11E,KAAK6uU,GAAO/uT,EAAK5f,SACxBw1E,EAAO11E,KAAK8uU,GAAShvT,IACrB2pS,GAAa,GAAmC,GAA9BhiT,KAAK8K,KAAKuN,EAAK5f,OAAS,GAC7C,CAED,OAAOsnJ,EAAAA,EAAAA,IAAU9xE,EACpB,CAEM,IAAMu5P,GAAb,WAYI,WAAYpkM,EAAwB0W,EAAiB3lI,EAAc26I,IAAwB,gBACvFjQ,EAAAA,EAAAA,IAAehlJ,KAAM,WAAYupI,IACjCyb,EAAAA,EAAAA,IAAehlJ,KAAM,OAAQsa,IAC7B0qI,EAAAA,EAAAA,IAAehlJ,KAAM,UAAWupI,EAASmnK,UAAUzwJ,QAAQA,KAC3D+E,EAAAA,EAAAA,IAAehlJ,KAAM,mBAAoBi1J,EAC5C,CAjBL,+CAmBI,WAAgB,WAgBZ,OAfKj1J,KAAK4tU,mBAEN5tU,KAAK4tU,iBAAmB5tU,KAAKupI,SAAShrI,KAAK,CACvCiB,GAAIQ,KAAKigJ,QACTzhI,KAAM,+EACPvV,MAAK,SAACmrE,GACL,OAAOmjE,EAAAA,GAAAA,KAAenjE,GAAQi+E,GAAG,EACpC,IAAEliD,OAAM,SAACpnG,GACN,GAAIA,EAAMihE,OAASm3E,EAAAA,GAAAA,OAAAA,eAAgC,OAAO,EAG1D,MADA,EAAKysL,iBAAmB,KAClB7kU,CACT,KAGE/I,KAAK4tU,gBACf,GApCL,oBAsCU,SAAOzhL,EAAkBpwH,6IAWvB,OAREziB,EAAK,CACP9Z,GAAIQ,KAAKigJ,QACTuU,iBAAiB,EACjBh2I,MAAM0nI,EAAAA,EAAAA,IAAU,CAAEiG,EAAUg5J,GAASnlT,KAAKsa,MAAQyhB,GAAc,QAIhEyjI,GAAa,WACPx/J,KAAK6tU,qDACXruK,GAAa,EAGblmJ,EAAGkF,MAAO0nI,EAAAA,EAAAA,IAAU,CAAE,aAAcunL,GAAY,CAAEhG,GAAUznU,KAAKsa,MAAOhB,EAAGkF,gBAI9D,0BAAMxe,KAAKupI,SAAShrI,KAAK+a,kBAAlC86D,EAAS,EAATA,MACCipE,EAAAA,EAAAA,IAASjpE,GAAQx1E,OAAS,KAAQ,GACnCsiJ,GAAOM,WAAW,uBAAwBL,EAAAA,GAAAA,OAAAA,eAA8B,CACpE0N,YAAav1I,EAAIkF,KAAM41D,IAG3BorF,IAAcprF,EAASg5P,GAAYh5P,EAAQ,sBACxCA,wCAEH,KAAMpK,OAASm3E,EAAAA,GAAAA,OAAAA,eAA4Bqa,0CAAW,kFAGjE,GArEL,yBAuEU,SAAYrP,EAAkBpwH,yIACjB,gBAAM/7B,KAAK8tU,OAAO3hL,EAAUpwH,aAC7B,OADRq4C,EAAS,EAATA,MACQ,yCAAeg5P,GAAYh5P,EAAQ,oCAC1C,qDACV,GA3EL,yBA6EI,SAAY25P,EAAkBC,GAC1B,IAAMC,EAAWtB,GAAUl/R,OAAOsgS,IAQlC,GANgB,MAAZE,GACA/sL,GAAOM,WAAP,iCAA6CusL,GAAa5sL,EAAAA,GAAAA,OAAAA,sBAAqC,CAC3FmG,UAAW,cAAF,OAAiBymL,EAAjB,OAII,QAAjBE,EAASnB,IACT,OAAO9sU,KAAKupI,SAASmnK,UAAUzwJ,QAAQ+tL,GAG3C,IAAM5nL,GAAQ/I,EAAAA,EAAAA,IAAS2wL,GAGvB,GAAsB,MAAlBC,EAASrB,MAAe,CACxB,IAAMA,EAAQoB,EAAStrU,MAAM,6CAC7B,GAAIkqU,EAAO,CACP,IAAMhuU,EAAS0d,SAASswT,EAAM,GAAI,IAClC,GAAIA,EAAM,GAAGhuU,SAAoB,EAATA,GAAcA,GAAU,GAAKA,GAAU,GAC3D,OAAOouU,IAAajwL,EAAAA,EAAAA,IAAO,CAAE,CAAEkxL,EAASrB,OAAU,KAAOA,EAAM,KAEtE,CACJ,CAGD,GAAqB,MAAjBqB,EAASpB,KAAc,CACvB,IAAMA,EAAOmB,EAAStrU,MAAM,yCAC5B,GAAImqU,EAAM,CACN,IAAMjuU,EAAS0d,SAASuwT,EAAK,GAAI,IACjC,GAAIA,EAAK,GAAGjuU,SAAoB,EAATA,GAAcA,GAAU,GAAKA,GAAU,GAC1D,OAAOouU,IAAajwL,EAAAA,EAAAA,IAAO,CAAE,CAAEkxL,EAASpB,MAAS,KAAOA,EAAK,KAEpE,CACJ,CAGD,GAAuB,MAAnBoB,EAASllQ,OAAgB,CACzB,IAAMnqE,EAASwnJ,EAAM,GAGjBxnI,EAAUwnI,EAAM,GASpB,GARgB,IAAZxnI,EACe,KAAXhgB,GAA4B,KAAXA,IACjBggB,GAAW,GAGfA,GAAW,EAGXA,GAAW,GAAKwnI,EAAMxnJ,SAAW,EAAIA,GAAUA,GAAU,GAAKA,GAAU,GAAI,CAC5E,IAAM+6L,EAAQu0I,KAAAA,QAAe9nL,EAAMz2I,MAAM,IAEzC,OADAgqL,EAAMtxI,QAAQzpC,GACPsvT,KAAAA,OAAcD,EAASllQ,OAAQ4wH,EACzC,CACJ,CAED,OAAO,IACV,GAxIL,wBA2IU,SAAWo0I,gJACG,MAAZA,IAAoBA,EAAW,IAGlB,KAAbA,EAAa,iBAGM,yBAAM/tU,KAAK8tU,OAAO,wBAGlB,QAHT15P,EAAS,EAATA,OAGiBA,IAAW8sO,GAAQA,yCAAW,sCAE9ClhT,KAAKupI,SAASmnK,UAAUy9B,YAAY/5P,yCAEvC,KAAMpK,OAASm3E,EAAAA,GAAAA,OAAAA,eAA4Bqa,0CAAW,iCAMjD,iBAAMx7J,KAAKouU,YAAY,aAAcrB,GAAWgB,eAGjD,OAHVC,EAAW,EAAXA,OAG+B,OAAbA,EAAa,0CAAe,qBAKrC,OAFT/tL,EAAUjgJ,KAAKquU,YAAYN,EAAUC,KAGvC9sL,GAAOM,WAAP,mCAAsDL,EAAAA,GAAAA,OAAAA,sBAAqC,CACvFmG,UAAW,cAAF,OAAiBymL,EAAjB,KACTA,SAAUA,EACVvvT,KAAMwvT,sBAIP/tL,4DACV,GAhLL,uBAkLU,+KAKiB,OAJbquL,EAAoD,CAAE,CAAEjnU,KAAM,OAAQ2lH,QAAShtH,KAAKsa,yBAIjEta,KAAKuuU,QAAQ,oBACpB,OADRC,EAAS,EAATA,MACQ,yCAAe,aAEpB5wU,EAAI,cAAGA,EAAIsvU,GAAStuU,QAAAA,oBAEZ,OADP8D,EAAQ8rU,EAAO9rU,MAAMwqU,GAAStvU,KACvB,wDAEP6wU,EAAS/rU,EAAM,GAAG6N,mBAEhBk+T,SACC,kBAIA,SAJA,KAIA,GAIA,SAJA,KAIA,GAIA,WAJA,MAKA,YADA,QACA,wBAZDH,EAAQ5vU,KAAK,CAAE2I,KAAM,MAAO2lH,QAASwhN,sBAC9B,CAAEF,QAAAA,EAASrvT,IAAKuvT,mBAGvBF,EAAQ5vU,KAAK,CAAE2I,KAAM,OAAQ2lH,QAASwhN,sBAC/B,CAAEF,QAAAA,EAASrvT,IAAKuvT,mBAGvBF,EAAQ5vU,KAAK,CAAE2I,KAAM,OAAQ2lH,QAASwhN,sBAC/B,CAAEF,QAAAA,EAASrvT,IAAKouT,GAAYmB,gBAK7BriL,EAAuB,WAAXsiL,EAAuB,aAAc,aACvDH,EAAQ5vU,KAAK,CAAE2I,KAAMonU,EAAQzhN,QAASwhN,SAGvBxuU,KAAK0uU,uCAAoB,iBAAM1uU,KAAK64I,4CAA7C81L,EAAQ,EAARA,GAGe,KADfrlL,GAAS5mJ,EAAM,IAAM,IAAIi/D,MAAM,MAC3B/iE,OAAW,0CAAY,cAEpB,iBAAMoB,KAAKupI,SAASmnK,UAAUzwJ,QAAQqJ,EAAM,eAAnD/tF,EAAO,EAAPA,KACA+tE,GAAUqX,EAAAA,EAAAA,IAAWpJ,EAAAA,GAAAA,KAAe+R,EAAM,IAAI9R,cAAe,IAGpD,WAAXi3L,EAAW,iBAE4C,YAApCzuU,KAAKupI,SAASmnK,oBAA4B1wS,KAAKupI,SAAShrI,KAAK,CAC5EiB,GAAI+7D,EAAM/8C,MAAM0nI,EAAAA,EAAAA,IAAU,CAAE,aAAc5c,6BADxCslM,EAAa,EAAbA,GAAqCT,YAAAA,KAAAA,EAAAA,GAAAA,EAAAA,IAGvCQ,IAAUC,EAAAA,0CAAqB,cACnCN,EAAQ5vU,KAAK,CAAE2I,KAAM,QAAS2lH,QAAS4hN,+BAErB,YAAXH,EAAW,iBAEa,YAAfl3L,EAAAA,aAAqBv3I,KAAKupI,SAAShrI,KAAK,CACpDiB,GAAI+7D,EAAM/8C,MAAM0nI,EAAAA,EAAAA,IAAU,CAAE,cAAcvF,EAAAA,EAAAA,IAAWguL,EAAO,IAAKrlM,+BAD/D8oL,EAAU,EAAVA,GAAoB/yS,KAAAA,KAAAA,EAAAA,GAAAA,EAAAA,KAGd8jI,SAAR,0CAA2B,cAC/BmrL,EAAQ5vU,KAAK,CAAE2I,KAAM,UAAW2lH,QAASolM,EAAQ9nT,qBAStB,OALzBgP,EAAK,CACP9Z,GAAIQ,KAAKupI,SAASmnK,UAAUzwJ,QAAQqJ,EAAM,IAC1C9qI,MAAM0nI,EAAAA,EAAAA,IAAU,CAAEiG,EAAU7iB,UAGd6jM,aAAmBntU,KAAKupI,SAAShrI,KAAK+a,0BACrC,OADfu1T,GAAc,EAAdA,EAAAA,IAAAA,EAAAA,GAAyD,IAC1C,0CAAe,cAiBjB,OAhBjBP,EAAQ5vU,KAAK,CAAE2I,KAAM,oBAAqB2lH,QAAS6hN,IAGpC,YAAXJ,IACAI,EAAcA,EAAYlsQ,QAAQ,OAAQ2mE,EAAQpwB,UAAU,IAC5Do1N,EAAQ5vU,KAAK,CAAE2I,KAAM,wBAAyB2lH,QAAS6hN,KAIvDA,EAAYnsU,MAAM,aAClBmsU,EAAcxB,GAAYwB,IAG9BP,EAAQ5vU,KAAK,CAAE2I,KAAM,eAAgB2lH,QAAS6hN,cAGvBlF,GAAUkF,cAA3BxtT,EAAW,EAAXA,KACS,0CAAS,iBACxBitT,EAAQ5vU,KAAK,CAAE2I,KAAM,WAAY2lH,QAAShsG,KAAKE,UAAUG,KAIhC,kBADrBytT,EAAWztT,EAAS7D,OACC,0CAAmB,kBAExCsxT,EAASpsU,MAAM,wBAAf,4CAKY,MADCosU,EAASpsU,MAAMuqU,IAChB,0CAAe,cAE3BqB,EAAQ5vU,KAAK,CAAE2I,KAAM,WAAY2lH,QAAS8hN,IAC1CA,EAAWzB,GAAYyB,kBAG3BR,EAAQ5vU,KAAK,CAAE2I,KAAM,MAAO2lH,QAAS8hN,sBAE9B,CAAER,QAAAA,EAASrvT,IAAK6vT,YAjGElxU,8GAuGlC,+DACV,GAlSL,4BAoSU,iKAGe,gBAAMoC,KAAKouU,YAAY,wBAGxB,OAHVJ,EAAW,EAAXA,OAG+B,OAAbA,EAAa,yCAAe,kBAG9Ce,EAAOf,EAAStrU,MAAM,kEAClB,oBACA9D,EAAS0d,SAASyyT,EAAK,GAAI,IAC7BA,EAAK,GAAGnwU,SAAoB,EAATA,EAAS,0CACrB,UAAak7T,GAAOx/K,OAAO,KAAOy0L,EAAK,kBAKhDC,EAAOhB,EAAStrU,MAAM,kEAClB,oBACA9D,EAAS0d,SAAS0yT,EAAK,GAAI,IAC7BA,EAAK,GAAGpwU,SAAoB,EAATA,EAAS,0CACrB,UAAak7T,GAAOx/K,OAAO,KAAO00L,EAAK,kBAKhDC,EAAQjB,EAAStrU,MAAM,kCAClB,oBACkB,KAArBusU,EAAM,GAAGrwU,OAAqB,0CACvB,SAAYqwU,EAAM,iBAI3BC,EAASlB,EAAStrU,MAAM,4BAClB,oBACkB,KAAtBwsU,EAAO,GAAGtwU,OAAqB,wBAEzBuwU,EAAkC,CAAE,IAAK,GAAI,IAAK,IAAK,IAAK,KAC5DhgQ,EAAOy5P,GAAa,KAAOsG,EAAO,IAAIvsQ,QAAQ,WAAW,SAAC74D,GAAD,OAAQqlU,EAAQrlU,EAAhB,sBACxD,SAAYqlE,oCAIpB+xE,GAAOM,WAAP,2CAA8DL,EAAAA,GAAAA,OAAAA,sBAAqC,CACtGmG,UAAW,mBACX9oI,KAAMwvT,qDAEb,GApVL,qBAsVU,SAAQ/sU,2IAcO,OAXbmuU,GAAW3qL,EAAAA,EAAAA,IAAYxjJ,IAI3BmuU,GAAWryL,EAAAA,EAAAA,IAAO,CAAEgwL,GAAW,IAAKA,GAAWqC,EAASxwU,QAASwwU,KAGnDxwU,OAAS,KAAQ,IAC3BwwU,GAAWryL,EAAAA,EAAAA,IAAO,CAAEqyL,GAAUzuL,EAAAA,EAAAA,IAAW,KAAM,GAAM1/I,EAAIrC,OAAS,gBAG/CoB,KAAKouU,YAAY,cAAc5qL,EAAAA,EAAAA,IAAQ4rL,cAC9C,OADVpB,EAAW,EAAXA,OAC+B,OAAbA,EAAa,yCAAe,uCAE7CtpL,EAAAA,EAAAA,IAAaspL,mDACvB,KAxWL,KA2WIqB,GAA8B,KAE9BC,GAAa,EAEJC,GAAb,0CAiDI,WAAYtoM,GAAsC,MAkB9C,IAlB8C,gBAC9C,gBAGKq3I,QAAU,GAEf,EAAKkxD,SAAW,CAAE7hL,OAAQ,GAE1B,EAAK8hL,iBAAkB,EAEvB,EAAK/+B,WAAY,2CAAWg/B,gBAK5B1qL,EAAAA,EAAAA,KAAe,UAAM,aAA2B,QAAZ/d,GAChC,EAAK0oM,aAAc1oM,EAAU,EAAK2oM,iBAElC3oM,aAAmBj+H,QACnB,EAAK6mU,gBAAkB5oM,EAGvBA,EAAQ92B,OAAM,SAACpnG,GAAa,IAG5B,EAAK88R,SAAS11L,OAAM,SAACpnG,GAAa,QAE/B,CACH,IAAM+mU,GAAejlL,EAAAA,EAAAA,IAAS,0CAA+C,aAAxDA,CAAsE5jB,GACvF6oM,IACA9qL,EAAAA,EAAAA,KAAe,UAAM,WAAY8qL,GACjC,EAAKx7L,KAAK,UAAWw7L,EAAc,OAGnC5uL,GAAOQ,mBAAmB,kBAAmB,UAAWza,EAE/D,CApC6C,OAsC9C,EAAK8oM,yBAA2B,KAEhC,EAAKtD,kBAAoB,EACzB,EAAKuD,qBAAuB,GAE5B,EAAKC,iBAAmB,IAExB,EAAKC,eAAiB,EA7CwB,CA8CjD,CA/FL,qCAiGU,oJACmB,MAAjBlwU,KAAKmwU,SAAY,oBACblpM,EAAmB,MACnBjnI,KAAK6vU,gBAAiB,iBAER,yBAAM7vU,KAAK6vU,uBAArB5oM,EAAU,EAAVA,gEAKO,MAAXA,EAAW,iBACD,iBAAMjnI,KAAK4vU,wBAArB3oM,EAAU,EAAVA,aAKCA,GACDia,GAAOM,WAAW,sBAAuBL,EAAAA,GAAAA,OAAAA,cAA6B,CAAC,GAItD,MAAjBnhJ,KAAKmwU,WACDnwU,KAAK2vU,WACL3vU,KAAKmwU,SAAWlpM,GAEhB+d,EAAAA,EAAAA,IAAehlJ,KAAM,WAAYinI,GAErCjnI,KAAKs0I,KAAK,UAAWrN,EAAS,wCAI/BjnI,KAAKmwU,kEACf,GAjIL,iBAsII,WAAS,WACL,OAAOtG,IAAK,WACR,OAAO,EAAKhkC,SAAS58R,MAAK,SAACg+H,GACvB,OAAOA,CACV,IAAE,SAACl+H,GAEA,GAAIA,EAAMihE,OAASm3E,EAAAA,GAAAA,OAAAA,eAA+C,cAAhBp4I,EAAM0G,MAGxD,MAAM1G,CACT,GACJ,GACJ,GAlJL,2BAiKU,SAAcuQ,EAAiBstI,EAAkBwpL,6JAC/CpwU,KAAKyvU,iBAAmC,IAAhBW,EAAKxxU,OAAW,yCAAY,aAElD2nQ,EAASjtP,EAAG9Z,GAAG+Q,cACfiO,EAAOooI,EAASr2I,cAEhB8/T,EAA+B,GAE5BzyU,EAAI,cAAGA,EAAIwyU,EAAKxxU,QAAAA,iBASN,OARTqgB,EAAMmxT,EAAKxyU,GAGXgsI,EAAO3qH,EAAI0jD,QAAQ,WAAY4jM,GAAQ5jM,QAAQ,SAAUnkD,GAGzDmiF,EAAuB1hF,EAAInc,QAAQ,WAAa,EAAK,KAAMke,KAAKE,UAAU,CAAE1C,KAAAA,EAAM+nP,OAAAA,cAEnEojE,GAAU,CAAE1qT,IAAK2qH,EAAM4+L,kBAAkB,GAAQ7nO,GAAM,SAAChiG,EAAOmvG,GAEhF,OADAnvG,EAAMwiE,OAAS2sC,EAASg6N,WACjBnpU,CACV,iBAHKy1E,EAAS,EAATA,MAKK51D,KAAM,0CAAS41D,EAAO51D,iBAE3BuuH,EAAgB34D,EAAOijB,SAAW,kBAGpCjjB,EAAOjT,QAAU,KAAOiT,EAAOjT,OAAS,+CACjC+/E,GAAOM,WAAP,gDAA4DzU,GAAiBoU,EAAAA,GAAAA,OAAAA,aAA4B,CAAEliI,IAAAA,EAAK8tH,aAAAA,aAI3HsjM,EAAc3xU,KAAKquI,WAxBUnvI,oDA2B1BsjJ,GAAOM,WAAP,+CAA2D6uL,EAAczqU,KAAI,SAAC+K,GAAD,OAAOqQ,KAAKE,UAAUvQ,EAAtB,IAA0BkxD,KAAK,OAAUs/E,EAAAA,GAAAA,OAAAA,aAA4B,CACrJivL,KAAAA,EAAMC,cAAAA,qDAEb,GAvML,qCA2MU,SAAwBC,sJAC1B,gBAAMtwU,KAAK6lS,qBAGPyqC,EAAS,+BAGFtwU,KAAKuwU,qBAAsB,iBAOX,OAJbC,EAAsBxwU,KAAKuwU,uCAIRC,YAAfp8P,EAAS,EAATA,OACDwyJ,KAAYxyJ,EAAOq8P,UAAaH,GAAAA,0CAC1Bl8P,EAAOk2P,sFAYdtqU,KAAKuwU,uBAAyBC,EAAAA,4EAyCtC,OAlCFE,EAAU9pG,KAEV+pG,GAA2BjjL,EAAAA,EAAAA,IAAkB,CAC/C48K,YAAatqU,KAAK4wU,QAAQ,iBAAkB,CAAC,GAC7CC,aAAc7wU,KAAKy/I,aAAax2I,MAAK,SAACg+H,GAAD,OAAc,IAAd,IAAqB,SAACl+H,GAAD,OAAYA,CAAZ,MAC3DE,MAAK,YAAkC,IAA/BqhU,EAA+B,EAA/BA,YAAauG,EAAkB,EAAlBA,aACpB,GAAIA,EAKA,MAHI,EAAKN,uBAAyBI,IAC9B,EAAKJ,qBAAuB,MAE1BM,EAGV,IAAMJ,EAAW7pG,KAOjB,OALA0jG,EAAc/yL,EAAAA,GAAAA,KAAe+yL,GAAa5xL,YACxB,EAAKq3L,0BAA2BzF,EAAc,EAAKyF,yBAErE,EAAKA,wBAA0BzF,EAC/B,EAAKwG,oBAAoBxG,GAClB,CAAEA,YAAAA,EAAaoG,QAAAA,EAASD,SAAAA,EAClC,IAEDzwU,KAAKuwU,qBAAuBI,EAG5BA,EAAyBxgO,OAAM,SAACpnG,GAExB,EAAKwnU,uBAAyBI,IAC9B,EAAKJ,qBAAuB,KAEnC,cAEaI,0CAA0BrG,sEAC3C,GAjRL,kBAmRU,8JAQgB,OAPZyG,EAASzB,KAGT0B,EAAgC,GAElC1G,EAAsB,uBAEFtqU,KAAKixU,wBAAwB,IAAMjxU,KAAKkxU,gBAAkB,UAA9E5G,EAAc,EAAdA,4DAEAtqU,KAAKs0I,KAAK,QAAV,oCAGJt0I,KAAK8wU,oBAAoBxG,GAGzBtqU,KAAKs0I,KAAK,OAAQy8L,EAAQzG,GAGtBA,IAAgBtqU,KAAKysU,iBAAAA,wBACrBzsU,KAAKs0I,KAAK,UAAWy8L,8BASzB,IAJ6B,IAAzB/wU,KAAKwvU,SAAS7hL,QACd3tJ,KAAKwvU,SAAS7hL,MAAQ28K,EAAc,GAGpCnkU,KAAKG,IAActG,KAAKwvU,SAAS7hL,MAAU28K,GAAe,IAC1DppL,GAAOxsI,KAAP,sEAA4E1U,KAAKwvU,SAAS7hL,MAA1F,uBAAgH28K,EAAhH,MACAtqU,KAAKs0I,KAAK,QAAS4M,GAAO2T,UAAU,8BAA+B1T,EAAAA,GAAAA,OAAAA,cAA6B,CAC5FmpL,YAAaA,EACb76T,MAAO,YACP0hU,oBAAqBnxU,KAAKwvU,SAAS7hL,SAEvC3tJ,KAAKs0I,KAAK,QAASg2L,QAInB,IAAS1sU,EAAaoC,KAAKwvU,SAAS7hL,MAAS,EAAG/vJ,GAAK0sU,EAAa1sU,IAC9DoC,KAAKs0I,KAAK,QAAS12I,UAKdoC,KAAKwvU,SAAS7hL,QAAW28K,IAClCtqU,KAAKwvU,SAAS7hL,MAAQ28K,EAEtBppU,OAAOQ,KAAK1B,KAAKwvU,UAAUntU,SAAQ,SAACpB,GAEhC,GAAY,UAARA,EAAJ,CAGA,IAAMmwU,EAAmB,EAAK5B,SAASvuU,GAKd,YAArBmwU,GAIA9G,EAAc8G,EAAmB,WAC1B,EAAK5B,SAASvuU,EAbO,CAenC,MAI0B,IAA3BjB,KAAKysU,mBACLzsU,KAAKysU,iBAAmBnC,EAAc,GAG1CtqU,KAAKs+Q,QAAQj8Q,SAAQ,SAACoN,GAClB,OAAQA,EAAMpI,MACV,IAAK,KACD,IAAM8nE,EAAO1/D,EAAM0/D,KACfkiQ,EAAS,EAAKh7K,sBAAsBlnF,GAAMlmE,MAAK,SAACyiI,GAChD,OAAKA,GAAkC,MAAvBA,EAAQ4+L,aACxB,EAAKkF,SAAS,KAAOrgQ,GAAQu8D,EAAQ4+L,YACrC,EAAKh2L,KAAKnlE,EAAMu8D,GACT,MAH+C,IAIzD,IAAEv7B,OAAM,SAACpnG,GAAmB,EAAKurI,KAAK,QAASvrI,EAAS,IAEzDioU,EAAQtyU,KAAK2yU,GAEb,MAGJ,IAAK,SAED,IAAK5hU,EAAMi9T,UAAW,CAClBj9T,EAAMi9T,WAAY,GAIc,IAA5Bj9T,EAAMg9T,mBACNh9T,EAAMg9T,iBAAmBnC,EAAc,GAO3C,IAAMzoU,EAAS4N,EAAM5N,OACrBA,EAAOs3J,UAAY1pJ,EAAMg9T,iBAAmB,EAC5C5qU,EAAOo3J,QAAUqxK,EAIjB,IAAMgH,EAAezvU,EAAOo3J,QAAU,EAAK+2K,qBACvCsB,EAAezvU,EAAOs3J,YAAat3J,EAAOs3J,UAAYm4K,GAEtDzvU,EAAOs3J,UAAY,IAAKt3J,EAAOs3J,UAAY,GAE/C,IAAMk4K,EAAS,EAAKj4K,QAAQv3J,GAAQoH,MAAK,SAAC4sJ,GAEtCpmJ,EAAMi9T,WAAY,EAEE,IAAhB72K,EAAKj3J,QAETi3J,EAAKxzJ,SAAQ,SAAC6O,GAGNA,EAAIo5T,YAAc76T,EAAMg9T,mBACxBh9T,EAAMg9T,iBAAmBv7T,EAAIo5T,aAIjC,EAAKkF,SAAS,KAAOt+T,EAAIilJ,WAAajlJ,EAAIo5T,YAC1C,EAAKkF,SAAS,KAAOt+T,EAAIu6H,iBAAmBv6H,EAAIo5T,YAEhD,EAAKh2L,KAAKzyI,EAAQqP,EACrB,GACJ,IAAEi/F,OAAM,SAACpnG,GACN,EAAKurI,KAAK,QAASvrI,GAGnB0G,EAAMi9T,WAAY,CACrB,IACDsE,EAAQtyU,KAAK2yU,EAChB,EAKZ,IAEDrxU,KAAKysU,iBAAmBnC,EAGxBthU,QAAQ+nH,IAAIigN,GAAS/nU,MAAK,WACtB,EAAKqrI,KAAK,UAAWy8L,EACxB,IAAE5gO,OAAM,SAACpnG,GAAY,EAAKurI,KAAK,QAASvrI,EAAS,+EAGrD,GAhbL,8BAmbI,SAAiBuhU,GACbtqU,KAAKysU,iBAAmBnC,EAAc,EAClCtqU,KAAKuxU,SAAWvxU,KAAK6pU,MAC5B,GAtbL,mBAwbI,WACI,OAAO7pU,KAAKmwU,QACf,GA1bL,2BA8bU,oKACKjvL,GAAOM,WAAW,8CAA+CL,EAAAA,GAAAA,OAAAA,sBAAqC,CACzGmG,UAAW,sEAElB,GAlcL,wBAocU,qJACc,gBAAMtnJ,KAAK6lS,gBAKJ,OALjB5+J,EAAU,EAAVA,cAKuBjnI,KAAK4vU,0BAA5B4B,EAAiB,EAAjBA,KACFvqM,EAAQO,UAAYgqM,EAAehqM,QAAAA,qBAI/BxnI,KAAK2vU,WAAY,iBAgBjB,OAfA3vU,KAAKmwU,SAAWqB,EAGhBxxU,KAAKysU,kBAAoB,EACzBzsU,KAAKyxU,iBAAmB,KACxBzxU,KAAK0xU,wBAA0B,KAC/B1xU,KAAKkwU,eAAiB,EACtBlwU,KAAKwvU,SAAS7hL,OAAS,EACvB3tJ,KAAK+vU,yBAA2B,KAChC/vU,KAAKuwU,qBAAuB,KAK5BvwU,KAAKs0I,KAAK,UAAWk9L,EAAgBvqM,aAC/BsiM,GAAM,oCAELvpU,KAAKmwU,wBAGVpnU,EAAQm4I,GAAO2T,UAAU,6BAA8B1T,EAAAA,GAAAA,OAAAA,cAA6B,CACtF1xI,MAAO,UACPw3H,QAASA,EACT0qM,gBAAiBH,IAGrBxxU,KAAKs0I,KAAK,QAASvrI,GACbA,mCAGHk+H,mDACV,GA/eL,uBAifI,WAAe,WAKX,OAJAjnI,KAAKixU,wBAAwB,IAAMjxU,KAAKkxU,gBAAkB,GAAGjoU,MAAK,SAACqhU,GAC/D,EAAKwG,oBAAoBxG,EAC5B,IAAE,SAACvhU,GAAa,IAEgB,MAAzB/I,KAAKyxU,iBAA4BzxU,KAAKyxU,kBAAmB,CACpE,GAvfL,mBAyfI,WACI,OAAwB,MAAhBzxU,KAAK4xU,OAChB,EA3fL,IA6fI,SAAYjzU,GAAc,WAClBA,IAAUqB,KAAK4xU,SACf5xU,KAAK4xU,QAAUvsU,aAAY,WAAQ,EAAKwkU,MAAS,GAAE7pU,KAAKkxU,iBAEnDlxU,KAAK6xU,iBACN7xU,KAAK6xU,eAAiB7jO,YAAW,WAC7B,EAAK67N,OAIL,EAAKgI,eAAiB7jO,YAAW,WAGxB,EAAK4jO,SAAW,EAAK/H,OAG1B,EAAKgI,eAAiB,IACzB,GAAE,EAAKX,gBACX,GAAE,MAGCvyU,GAASqB,KAAK4xU,UACtBtsU,cAActF,KAAK4xU,SACnB5xU,KAAK4xU,QAAU,KAEtB,GAthBL,2BAwhBI,WACI,OAAO5xU,KAAKiwU,gBACf,EA1hBL,IA4hBI,SAAoBtxU,GAAa,WAC7B,GAAsB,kBAAXA,GAAuBA,GAAS,GAAK2d,SAASmxB,OAAO9uC,KAAWA,EACvE,MAAM,IAAIgT,MAAM,4BAGpB3R,KAAKiwU,iBAAmBtxU,EAEpBqB,KAAK4xU,UACLtsU,cAActF,KAAK4xU,SACnB5xU,KAAK4xU,QAAUvsU,aAAY,WAAQ,EAAKwkU,MAAS,GAAE7pU,KAAKiwU,kBAE/D,GAviBL,iCAyiBI,WAAmB,WACTxrU,EAAMmiO,KAaZ,OAVKniO,EAAMzE,KAAKkwU,eAAkB,EAAIlwU,KAAKiwU,mBACvCjwU,KAAKkwU,eAAiBzrU,EACtBzE,KAAK0xU,wBAA0B1xU,KAAK8xU,iBAAiB7oU,MAAK,SAACqhU,GAIvD,OAH6B,MAAzB,EAAKmH,kBAA4BnH,EAAc,EAAKmH,oBACpD,EAAKA,iBAAmBnH,GAErB,EAAKmH,gBACf,KAGEzxU,KAAK0xU,uBACf,GAxjBL,iCA0jBI,SAAoBpH,GAEa,MAAzBtqU,KAAKyxU,kBAA4BnH,EAActqU,KAAKyxU,mBAGxDzxU,KAAKkwU,eAAiBtpG,MAGO,MAAzB5mO,KAAKyxU,kBAA4BnH,EAActqU,KAAKyxU,oBACpDzxU,KAAKyxU,iBAAmBnH,EACxBtqU,KAAK0xU,wBAA0B1oU,QAAQP,QAAQ6hU,IAEtD,GAtkBL,gCAwkBU,SAAmB7+L,EAAyBmqB,EAAwBxZ,4JAC/Dp8I,KAAK+xU,oBAAoBtmM,EAAmC,MAAjBmqB,EAAyB,EAAGA,EAAexZ,GAAW,EAAG,sDAC9G,GA1kBL,iCA4kBU,SAAoB3Q,EAAyBmqB,EAAuBxZ,EAAiB41L,gJACvE,gBAAMhyU,KAAKq2J,sBAAsB5qB,iBAA3CC,EAAU,EAAVA,MAGSA,EAAQkqB,cAAe,IAAMA,GAAAA,yCAAwBlqB,mCAG7D,IAAI1iI,SAAQ,SAACP,EAASC,GACzB,IAAMupU,EAAiC,GAEnCxzU,GAAO,EACLyzU,EAAc,WAChB,QAAIzzU,IACJA,GAAO,EACPwzU,EAAY5vU,SAAQ,SAAC+4H,GAAWA,GAAS,KAClC,EACV,EAEK+2M,EAAe,SAACzmM,GACdA,EAAQkqB,cAAgBA,GACxBs8K,KACJzpU,EAAQijI,EACX,EAID,GAHA,EAAKnD,GAAGkD,EAAiB0mM,GACzBF,EAAYvzU,MAAK,WAAQ,EAAKw3J,eAAezqB,EAAiB0mM,EAAgB,IAE1EH,EAAa,CACb,IAAII,EAAkBJ,EAAYK,WAC9BC,EAAuB,KACrBC,EAAiB,SAAjBA,EAAwBjI,GAAP,OAA8B57L,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,qFAC7CjwI,EAD6C,iDAMjD,OANiD,SAM3C8qU,GAAM,KANqC,OAQjDvpU,KAAK4uJ,oBAAoBojL,EAAY3yT,MAAMpW,MAAK,SAAOwxI,GAAP,OAAgB/L,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,0FACxDjwI,EADwD,sDAGxDg8I,GAASu3L,EAAYv3L,OAHmC,gBAIxD23L,EAAkB9H,EAJsC,uBAStC,OATsC,SAShCtqU,KAAKo2J,eAAe3qB,GATY,YAS9C+mM,EAT8C,SAUlB,MAArBA,EAAMlI,YAViC,mDAiBpC,MAAhBgI,IACAA,EAAeF,EAAkB,GACdJ,EAAYK,aAC3BC,EAAeN,EAAYK,YApBqB,aAwBjDC,GAAgBhI,GAxBiC,qBAyBhD7rU,EAzBgD,mDA2BtC,OA3BsC,UA2BhCuB,KAAKyyU,yBAAyBH,GA3BE,QA2B9C3kL,EA3B8C,OA4B3C+kL,EAAK,EA5BsC,aA4BnCA,EAAK/kL,EAAM29K,aAAa1sU,QA5BW,qBA6B1C0a,EAAKq0I,EAAM29K,aAAaoH,IAGvBvjQ,OAASs8D,EAhCgC,sDAmC5CnyH,EAAG+F,OAAS2yT,EAAY3yT,MAAQ/F,EAAGmhI,QAAUu3L,EAAYv3L,MAnCb,qBAoCxCh8I,EApCwC,mDAuC5B,OAvC4B,UAuCtBuB,KAAK2yU,mBAAmBr5T,EAAG61D,KAAMymF,GAvCX,WAuCtClqB,EAvCsC,QA0CxCwmM,IA1CwC,0DA6CxCxnL,EAAS,WACTpxI,EAAGkF,OAASwzT,EAAYxzT,MAAQlF,EAAG9Z,KAAOwyU,EAAYxyU,IAAM8Z,EAAG3a,MAAM0zJ,GAAG2/K,EAAYrzU,OACpF+rJ,EAAS,WACW,OAAZpxI,EAAGkF,MAAiBlF,EAAG+F,OAAS/F,EAAG9Z,IAAM8Z,EAAG3a,MAAMwkJ,WAC1DuH,EAAS,aAIbhiJ,EAAOw4I,GAAO2T,UAAU,2BAA4B1T,EAAAA,GAAAA,OAAAA,qBAAoC,CACpFyxL,UAAuB,aAAXloL,GAAoC,cAAXA,EACrCA,OAAAA,EACA+rG,YAAaz2P,KAAK6yU,iBAAiBv5T,GACnC61D,KAAMs8D,EACNC,QAAAA,KA1DwC,2BA4BHgnM,IA5BG,wBAgEpDJ,IAhEoD,4BAoExD7zU,EApEwD,mDAqE5DuB,KAAKk3J,KAAK,QAASq7K,GArEyC,gDAAhB,IAuE7C,SAACxpU,GACItK,GACJ,EAAKy4J,KAAK,QAASq7K,EACtB,IAlFgD,+CAA9B,EAqFvB,GAAI9zU,EAAQ,OACZ,EAAKy4J,KAAK,QAASq7K,GAEnBN,EAAYvzU,MAAK,WACb,EAAKw3J,eAAe,QAASq8K,EAChC,GACJ,CAED,GAAwB,kBAAbn2L,GAAyBA,EAAU,EAAG,CAC7C,IAAMgtL,EAAQp7N,YAAW,WACjBkkO,KACJxpU,EAAOw4I,GAAO2T,UAAU,mBAAoB1T,EAAAA,GAAAA,OAAAA,QAAuB,CAAE/E,QAASA,IACjF,GAAEA,GACCgtL,EAAM0J,OAAS1J,EAAM0J,QAEzBb,EAAYvzU,MAAK,WAAQsqQ,aAAaogE,EAAS,GAClD,CACJ,oDACJ,GAhtBL,4BAktBU,oKACKppU,KAAKixU,wBAAwB,mDACvC,GAptBL,yBAstBU,iJACF,gBAAMjxU,KAAKy/I,oBAEI,gBAAMz/I,KAAK4wU,QAAQ,cAAe,CAAC,iBAA5Cx8P,EAAS,EAATA,gCAEKmjE,EAAAA,GAAAA,KAAenjE,6DAEf8sE,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,aAA4B,CAC5EnoD,OAAQ,cACR5kB,OAAAA,EAAQrrE,MAAK,gEAGxB,GAluBL,wBAouBU,SAAW2uJ,EAAyCjJ,2IACtD,gBAAMzuJ,KAAKy/I,oBACI,iBAAMiO,EAAAA,EAAAA,IAAkB,CACnCzN,QAASjgJ,KAAKquU,YAAY32K,GAC1BjJ,SAAUzuJ,KAAK+yU,aAAatkL,YAGjB,OALTp7F,EAAS,EAATA,cAKerzD,KAAK4wU,QAAQ,aAAcv9Q,iBAA1C+gB,EAAS,EAATA,gCAEKmjE,EAAAA,GAAAA,KAAenjE,+DAEf8sE,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,aAA4B,CAC5EnoD,OAAQ,aACR3lC,OAAAA,EAAQ+gB,OAAAA,EAAQrrE,MAAK,iEAGhC,GApvBL,iCAsvBU,SAAoB2uJ,EAAyCjJ,2IAC/D,gBAAMzuJ,KAAKy/I,oBACI,iBAAMiO,EAAAA,EAAAA,IAAkB,CACnCzN,QAASjgJ,KAAKquU,YAAY32K,GAC1BjJ,SAAUzuJ,KAAK+yU,aAAatkL,YAGjB,OALTp7F,EAAS,EAATA,cAKerzD,KAAK4wU,QAAQ,sBAAuBv9Q,iBAAnD+gB,EAAS,EAATA,gCAEKmjE,EAAAA,GAAAA,KAAenjE,GAAQskE,uEAEvBwI,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,aAA4B,CAC5EnoD,OAAQ,sBACR3lC,OAAAA,EAAQ+gB,OAAAA,EAAQrrE,MAAK,iEAGhC,GAtwBL,qBAwwBU,SAAQ2uJ,EAAyCjJ,2IACnD,gBAAMzuJ,KAAKy/I,oBACI,iBAAMiO,EAAAA,EAAAA,IAAkB,CACnCzN,QAASjgJ,KAAKquU,YAAY32K,GAC1BjJ,SAAUzuJ,KAAK+yU,aAAatkL,YAGjB,OALTp7F,EAAS,EAATA,cAKerzD,KAAK4wU,QAAQ,UAAWv9Q,iBAAvC+gB,EAAS,EAATA,iCAEKovE,EAAAA,EAAAA,IAAQpvE,+DAER8sE,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,aAA4B,CAC5EnoD,OAAQ,UACR3lC,OAAAA,EAAQ+gB,OAAAA,EAAQrrE,MAAK,iEAGhC,GAxxBL,0BA0xBU,SAAa2uJ,EAAyC9zJ,EAAgD6qJ,2IACxG,gBAAMzuJ,KAAKy/I,oBACI,iBAAMiO,EAAAA,EAAAA,IAAkB,CACnCzN,QAASjgJ,KAAKquU,YAAY32K,GAC1BjJ,SAAUzuJ,KAAK+yU,aAAatkL,GAC5B7qJ,SAAUoF,QAAQP,QAAQ7E,GAAUqF,MAAK,SAACuS,GAAD,OAAO+3I,EAAAA,EAAAA,IAAS/3I,EAAhB,aAE9B,OALT63C,EAAS,EAATA,cAKerzD,KAAK4wU,QAAQ,eAAgBv9Q,iBAA5C+gB,EAAS,EAATA,iCAEKovE,EAAAA,EAAAA,IAAQpvE,+DAER8sE,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,aAA4B,CAC5EnoD,OAAQ,eACR3lC,OAAAA,EAAQ+gB,OAAAA,EAAQrrE,MAAK,iEAGhC,GA1yBL,8BA6yBI,SAAiBuQ,EAAiB61D,EAAekjQ,GAAmB,WAChE,GAAY,MAARljQ,GAAwC,MAAxB2hF,EAAAA,EAAAA,IAAc3hF,GAAgB,MAAM,IAAIx9D,MAAM,sCAElE,IAAMyiE,EAA8B96D,EAwCpC,OArCY,MAAR61D,GAAgB71D,EAAG61D,OAASA,GAC5B+xE,GAAOM,WAAW,2DAA4DL,EAAAA,GAAAA,OAAAA,cAA6B,CAAE6xL,aAAc15T,EAAG61D,KAAM8jQ,aAAc9jQ,IAGtJiF,EAAOuhF,KAAO,SAAOu9K,EAAmB92L,GAA1B,OAA8C1N,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,8EAiBxC,OAhBA,MAAZwkM,IAAoBA,EAAW,GACpB,MAAX92L,IAAmBA,EAAU,GAG7Bq6G,OAAcptP,EACD,IAAb6pU,GAAgC,MAAdb,IAClB57E,EAAc,CACVj4O,KAAMlF,EAAGkF,KACTa,KAAM/F,EAAG+F,KACTo7H,MAAOnhI,EAAGmhI,MACVj7I,GAAI8Z,EAAG9Z,GACPb,MAAO2a,EAAG3a,MACV0zU,WAAAA,IAbgD,SAiBlCryU,KAAK+xU,oBAAoBz4T,EAAG61D,KAAM+jQ,EAAU92L,EAASq6G,GAjBnB,UAkBzC,OADT/qH,EAjBkD,SAkBpB,IAAbwnM,EAlBiC,yCAkBR,MAlBQ,cAqBxDlzU,KAAKwvU,SAAS,KAAOl2T,EAAG61D,MAAQu8D,EAAQ4+L,YAEjB,IAAnB5+L,EAAQvqE,QACR+/E,GAAOM,WAAW,qBAAsBL,EAAAA,GAAAA,OAAAA,eAA8B,CAClE1V,gBAAiBnyH,EAAG61D,KACpB0/E,YAAav1I,EACboyH,QAASA,IA3BuC,kBA8BjDA,GA9BiD,gDAA9C,EAiCPt3D,CACV,GAz1BL,6BA21BU,SAAgB++P,+IAClB,gBAAMnzU,KAAKy/I,oBACG,gBAAMz2I,QAAQP,QAAQ0qU,GAAmBlqU,MAAK,SAAA4H,GAAC,OAAI2yI,EAAAA,EAAAA,IAAQ3yI,EAAZ,WAGzC,OAHduiU,EAAQ,EAARA,KAEkB,OADlB95T,EAAKtZ,KAAK0wS,UAAU7hJ,YAAYskL,IAC/Bv9K,gBAAyBt8I,EAAGs8I,cAAgB,YACzB51J,KAAKixU,wBAAwB,IAAM,EAAIjxU,KAAKkxU,wBAErD,OAFX5G,EAAc,EAAdA,yBAEiBtqU,KAAK4wU,QAAQ,kBAAmB,CAAEuC,kBAAmBC,mBAAlEjkQ,EAAO,EAAPA,uBACCnvE,KAAK6yU,iBAAiBv5T,EAAI61D,EAAMm7P,6CAEjC,KAAOz7K,YAAcv1I,EACrB,KAAOmyH,gBAAkBnyH,EAAG61D,oEAGzC,GAz2BL,oCA22BU,SAAuB0/E,kJACL,gBAAMA,SA4Be,OA5BnCnyH,EAAAA,EAAAA,KAEApjB,EAAU,CAAC,EAEjB,CAAC,OAAQ,MAAMjX,SAAQ,SAACpB,GACD,MAAfy7B,EAAOz7B,KACXqY,EAAGrY,GAAO+H,QAAQP,QAAQi0B,EAAOz7B,IAAMgI,MAAK,SAAC6L,GAAD,OAAQA,EAAI,EAAKu5T,YAAYv5T,GAAI,IAAjC,IAC/C,IAED,CAAC,WAAY,WAAY,eAAgB,uBAAwB,SAASzS,SAAQ,SAACpB,GAC5D,MAAfy7B,EAAOz7B,KACXqY,EAAGrY,GAAO+H,QAAQP,QAAQi0B,EAAOz7B,IAAMgI,MAAK,SAAC6L,GAAD,OAAQA,EAAIyiI,EAAAA,GAAAA,KAAeziI,GAAI,IAA/B,IAC/C,IAED,CAAC,QAAQzS,SAAQ,SAACpB,GACK,MAAfy7B,EAAOz7B,KACXqY,EAAGrY,GAAO+H,QAAQP,QAAQi0B,EAAOz7B,IAAMgI,MAAK,SAAC6L,GAAD,OAAc,MAALA,EAAaA,EAAG,IAAzB,IAC/C,IAEG4nB,EAAO43H,aACPh7I,EAAGg7I,WAAat0J,KAAK0wS,UAAUp8I,WAAW53H,EAAO43H,aAGrD,CAAC,QAAQjyJ,SAAQ,SAACpB,GACK,MAAfy7B,EAAOz7B,KACXqY,EAAGrY,GAAO+H,QAAQP,QAAQi0B,EAAOz7B,IAAMgI,MAAK,SAAC6L,GAAD,OAAQA,GAAI0uI,EAAAA,EAAAA,IAAQ1uI,GAAI,IAAxB,IAC/C,SAEM9U,KAAK0wS,qBAAmChjJ,EAAAA,EAAAA,IAAkBp0I,qDAA3CoxT,mBAAAA,KAAAA,EAAAA,GAAAA,EAAAA,qDACzB,GAz4BL,wBA24BU,SAAW7oU,gJACJ,gBAAMA,SAkBc,OAlB7BA,EAAS,EAATA,KAEMuyE,EAAc,CAAC,EAEC,MAAlBvyE,EAAOo+I,UACP7rE,EAAO6rE,QAAUjgJ,KAAKquU,YAAYxsU,EAAOo+I,UAG7C,CAAC,YAAa,UAAU59I,SAAQ,SAACpB,GACH,MAAhBY,EAAQZ,KAClBmzE,EAAOnzE,GAAaY,EAAQZ,GAC/B,IAED,CAAC,YAAa,WAAWoB,SAAQ,SAACpB,GACJ,MAAhBY,EAAQZ,KAClBmzE,EAAOnzE,GAAO,EAAK8xU,aAAmBlxU,EAAQZ,IACjD,SAEMjB,KAAK0wS,qBAAuBhjJ,EAAAA,EAAAA,IAAkBt5E,qDAA/BvyE,OAAAA,KAAAA,EAAAA,GAAAA,EAAAA,qDACzB,GA/5BL,mBAi6BU,SAAMgtJ,EAAiCJ,EAAoBsuG,qKAS9C,OARXA,GApkDe,IAqkDf77G,GAAOM,WAAW,0CAA2CL,EAAAA,GAAAA,OAAAA,aAA4B,CACrFkyL,UAAWt2E,EAASluG,YAAAA,IAItBykL,EAAWzkL,EAAYrvJ,YAERQ,KAAK4wU,QAAQ,OAAQ,CAAE/hL,YAAAA,EAAaJ,SAAAA,cAAnDr6E,EAAS,EAATA,OAGF2oL,GAAW,GAAkB,WAAbtuG,GAAqC,MAAZ6kL,GAAgD,eAA5Bl/P,EAAO8kC,UAAU,EAAG,MAAyB43C,EAAAA,EAAAA,IAAc18E,GAAU,KAAO,GAAI,iBAmBzI,aAjBM51D,GAAO4uI,EAAAA,EAAAA,IAAah5E,EAAQ,GAG5BmyL,GAASn5G,EAAAA,EAAAA,IAAa5uI,EAAM,EAAG,IAChC+4H,EAAAA,GAAAA,KAAegvH,GAAQl0G,GAAGihL,IAC3BpyL,GAAOM,WAAW,iCAAkCL,EAAAA,GAAAA,OAAAA,eAA8B,CAC9E7mI,KAAM,iBACN+9H,UAAW,sDACXwW,YAAAA,EAAarwI,KAAM41D,IAKrBg8P,EAAsB,GACtBmD,EAAah8L,EAAAA,GAAAA,MAAe6V,EAAAA,EAAAA,IAAa5uI,EAAM,GAAI,KAAKk6H,WACxD86L,EAAaj8L,EAAAA,GAAAA,MAAe6V,EAAAA,EAAAA,IAAa5uI,EAAM+0T,EAAYA,EAAa,KAAK76L,WAC7E+6L,GAAWrmL,EAAAA,EAAAA,IAAa5uI,EAAM+0T,EAAa,IACxCroT,EAAI,EAAGA,EAAIsoT,EAAYtoT,IAEjB,OADLjM,EAAMkuT,GAAasG,EAAc,GAAJvoT,KAE/Bg2H,GAAOM,WAAW,yCAA0CL,EAAAA,GAAAA,OAAAA,eAA8B,CACtF7mI,KAAM,iBACN+9H,UAAW,sDACXwW,YAAAA,EAAarwI,KAAM41D,IAG3Bg8P,EAAK1xU,KAAKugB,GAmBK,OAfb2nI,EAAWwmL,GAAY5uT,EAAM,IAG9B+4H,EAAAA,GAAAA,MAAe6V,EAAAA,EAAAA,IAAa5uI,EAAM,IAAK,MAAM2kI,UAC9CjC,GAAOM,WAAW,4CAA6CL,EAAAA,GAAAA,OAAAA,eAA8B,CACzF7mI,KAAM,iBACN+9H,UAAW,sDACXwW,YAAAA,EAAarwI,KAAM41D,IAGrBs/P,GAAmBtmL,EAAAA,EAAAA,IAAa5uI,EAAM,GAAI,KAG1C6sT,EAAY+B,GAAY5uT,EAAM,eAEXxe,KAAK2zU,cAA2B9kL,EAAajI,EAAUwpL,kBAC9D,OADZwD,EAAa,EAAbA,OAEF1yL,GAAOM,WAAW,yCAA0CL,EAAAA,GAAAA,OAAAA,eAA8B,CACtF7mI,KAAM,iBACN+9H,UAAW,sDACXwW,YAAAA,EAAarwI,KAAM41D,IAIrB96D,EAAK,CACP9Z,GAAI8zU,EACJ90T,MAAM0nI,EAAAA,EAAAA,IAAU,CAAEwtL,EAAkBjG,GAAY,CAAEmG,EAAYvI,yBAG3DrrU,KAAKo8R,MAAM9iR,EAAIm1I,EAAUsuG,EAAU,yCAGtC,KAAM/yL,OAASm3E,EAAAA,GAAAA,OAAAA,aAA0B0yL,wEAK1CrwL,EAAAA,EAAAA,IAAQpvE,gEAER8sE,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,aAA4B,CAC5EnoD,OAAQ,OACR3lC,OAAQ,CAAEw7F,YAAAA,EAAaJ,SAAAA,GAAYr6E,OAAAA,EAAQrrE,MAAK,yEAI3D,GA1/BL,kBA4/BU,SAAK8lJ,EAA6CJ,yIACpD,gBAAMzuJ,KAAKy/I,oBACM,iBAAMiO,EAAAA,EAAAA,IAAkB,CACrCmB,YAAa7uJ,KAAK8zU,uBAAuBjlL,GACzCJ,SAAUzuJ,KAAK+yU,aAAatkL,GAC5B+F,gBAAiBxrJ,QAAQP,QAAQomJ,EAAY2F,iCAH3CU,EAAW,EAAXA,uBAKCl1J,KAAKo8R,MAAMlnI,EAASrG,YAAaqG,EAASzG,SAAUyG,EAASV,gBAAkB,GAAI,mDAC7F,GApgCL,yBAsgCU,SAAY3F,2IACd,gBAAM7uJ,KAAKy/I,oBACI,iBAAMiO,EAAAA,EAAAA,IAAkB,CACnCmB,YAAa7uJ,KAAK8zU,uBAAuBjlL,YAG9B,OAJTx7F,EAAS,EAATA,cAIerzD,KAAK4wU,QAAQ,cAAev9Q,iBAA3C+gB,EAAS,EAATA,gCAEKmjE,EAAAA,GAAAA,KAAenjE,+DAEf8sE,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,aAA4B,CAC5EnoD,OAAQ,cACR3lC,OAAAA,EAAQ+gB,OAAAA,EAAQrrE,MAAK,iEAGhC,GArhCL,yBAuhCU,SAAY2uJ,yIACE,gBAAMA,SAKN,MAJc,kBAD9BA,EAAgB,EAAhBA,OAEIxW,GAAOQ,mBAAmB,8BAA+B,OAAQgW,YAG/C13J,KAAKkvJ,YAAYwI,iBACxB,OADTzX,EAAU,EAAVA,OAEFiB,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,sBAAqC,CAC9EmG,UAAW,eAAF,OAAkBtmI,KAAKE,UAAUw2I,GAAjC,yBAGVzX,kDACV,GApiCL,uBAsiCU,SAAU8zL,EAAqEC,kJACjF,gBAAMh0U,KAAKy/I,oBAEW,gBAAMs0L,YAA5BA,EAAsB,EAAtBA,KAGIzJ,GAAe,IAEbj3Q,EAAiC,CACnC2gR,sBAAuBA,KAGvBl3L,EAAAA,EAAAA,IAAYi3L,EAAqB,IAAtB,iBACX1gR,EAAO8iG,UAAY49K,0BAGG,2BAAM/zU,KAAK+yU,aAAagB,WAA1C1gR,EAAOo7F,SAAW,EAAXA,MACH3R,EAAAA,EAAAA,IAAYzpF,EAAOo7F,YACnB67K,EAAchuT,SAAS+2C,EAAOo7F,SAASv1C,UAAU,GAAI,wDAGzDgoC,GAAOQ,mBAAmB,kCAAmC,sBAAuBqyL,oCAIrFlK,IAAK,kBAAWn7L,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,6FACL,OADK,SACC1uI,KAAK4wU,QAAQ,WAAYv9Q,GAD1B,UAIN,OAHPs6F,EADa,4BASS,MAApBt6F,EAAO8iG,UATI,mBAUmC,MAA1Cn2J,KAAKwvU,SAAS,KAAOn8Q,EAAO8iG,WAVrB,yCAUkD,MAVlD,UAcQ,MAAnB9iG,EAAOo7F,SAdI,sBAeP67K,EAActqU,KAAKwvU,SAAS7hL,OAfrB,0CAeqC,MAfrC,sCAmBRtkJ,GAnBQ,YAuBf2qU,EAvBe,iBAwBX1J,EAAsB,KACjB1sU,EAAI,EAzBE,aAyBCA,EAAI+vJ,EAAM29K,aAAa1sU,QAzBxB,oBA2BW,OADhB0a,EAAKq0I,EAAM29K,aAAa1tU,IACvB0sU,YA3BI,iBA4BPhxT,EAAGs8I,cAAgB,EA5BZ,2BA8BoB,MAApBt8I,EAAGs8I,cA9BH,oBA+BY,MAAf00K,EA/BG,iBAgCW,OAhCX,UAgCiBtqU,KAAKixU,wBAAwB,IAAM,EAAIjxU,KAAKkxU,iBAhC7D,QAgCH5G,EAhCG,gBAoCH10K,EAAiB00K,EAAchxT,EAAGgxT,YAAe,IAChC,IAAK10K,EAAgB,GAC1Ct8I,EAAGs8I,cAAgBA,EAtCZ,QAyBgCh4J,IAzBhC,+BA0CTq2U,EAAoBj0U,KAAK0wS,UAAU66B,sBAAsB59K,IAClD29K,aAAe2I,EAAa3I,aAAa1lU,KAAI,SAAC0T,GAAD,OAA6B,EAAKu5T,iBAAiBv5T,EAAnD,IA3C3C,kBA4CR26T,GA5CQ,iCA+CZj0U,KAAK0wS,UAAU/iJ,MAAMA,IA/CT,gDAAX,GAiDT,CAAEq8K,SAAUhqU,kEAClB,GAjnCL,sBAmnCI,SAAS+zU,GACL,OAAwB/zU,KAAKk0U,UAAUH,GAAqB,EAC/D,GArnCL,sCAunCI,SAAyBA,GACrB,OAAwC/zU,KAAKk0U,UAAUH,GAAqB,EAC/E,GAznCL,4BA2nCU,SAAetoM,gJACjB,gBAAMzrI,KAAKy/I,oBACO,gBAAMhU,gBAAxBA,EAAkB,EAAlBA,KAEMp4E,EAAS,CAAEo4E,gBAAiBzrI,KAAK0wS,UAAUvhO,KAAKs8D,GAAiB,sBAEhEo+L,IAAK,kBAAWn7L,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,kFACJ,OADI,SACE1uI,KAAK4wU,QAAQ,iBAAkBv9Q,GADjC,UAGL,OAFR+gB,EADa,2BAI8B,MAAzCp0E,KAAKwvU,SAAS,KAAO/jM,GAJV,yCAKJ,MALI,qCAORpiI,GAPQ,UAYG,OAFhBiQ,EAAKtZ,KAAK0wS,UAAU86B,oBAAoBp3P,IAEvCk2P,YAZY,iBAafhxT,EAAGs8I,cAAgB,EAbJ,2BAeY,MAApBt8I,EAAGs8I,cAfK,iBAgBK,OAhBL,UAgBW51J,KAAKixU,wBAAwB,IAAM,EAAIjxU,KAAKkxU,iBAhBvD,QAgBT5G,EAhBS,QAmBX10K,EAAiB00K,EAAchxT,EAAGgxT,YAAe,IAChC,IAAK10K,EAAgB,GAC1Ct8I,EAAGs8I,cAAgBA,EArBJ,iCAwBZ51J,KAAK6yU,iBAAiBv5T,IAxBV,gDAAX,GAyBT,CAAE0wT,SAAUhqU,uDAClB,GA3pCL,mCA6pCU,SAAsByrI,gJACxB,gBAAMzrI,KAAKy/I,oBAEO,gBAAMhU,gBAAxBA,EAAkB,EAAlBA,KAEMp4E,EAAS,CAAEo4E,gBAAiBzrI,KAAK0wS,UAAUvhO,KAAKs8D,GAAiB,sBAEhEo+L,IAAK,kBAAWn7L,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,kFACJ,OADI,SACE1uI,KAAK4wU,QAAQ,wBAAyBv9Q,GADxC,UAGL,OAFR+gB,EADa,2BAI8B,MAAzCp0E,KAAKwvU,SAAS,KAAO/jM,GAJV,yCAKJ,MALI,qCAORpiI,GAPQ,UAWK,MAApB+qE,EAAO+hF,UAXQ,8CAWoB9sJ,GAXpB,UAeQ,OAFrBqiI,EAAU1rI,KAAK0wS,UAAUhlK,QAAQt3D,IAE3Bk2P,YAfO,iBAgBf5+L,EAAQkqB,cAAgB,EAhBT,2BAkBiB,MAAzBlqB,EAAQkqB,cAlBA,iBAmBK,OAnBL,UAmBW51J,KAAKixU,wBAAwB,IAAM,EAAIjxU,KAAKkxU,iBAnBvD,QAmBT5G,EAnBS,QAsBX10K,EAAiB00K,EAAc5+L,EAAQ4+L,YAAe,IACrC,IAAK10K,EAAgB,GAC1ClqB,EAAQkqB,cAAgBA,EAxBT,iCA2BZlqB,GA3BY,gDAAX,GA4BT,CAAEs+L,SAAUhqU,uDAClB,GAjsCL,qBAmsCU,SAAQ6B,2IACV,gBAAM7B,KAAKy/I,oBACI,iBAAMiO,EAAAA,EAAAA,IAAkB,CAAE7rJ,OAAQ7B,KAAKm0U,WAAWtyU,YACxC,OADnBwxD,EAAS,EAATA,cACyBrzD,KAAK4wU,QAAQ,UAAWv9Q,iBAAjDwiG,EAAAA,EAAAA,MACDxzJ,SAAQ,SAAC6O,GACS,MAAfA,EAAIs6E,UAAmBt6E,EAAIs6E,SAAU,EAC5C,sBACM0+O,GAAUU,QAAQ5qU,KAAK0wS,UAAU+6B,UAAU5hU,KAAK7J,KAAK0wS,WAArDw5B,CAAiEr0K,oDAC3E,GA3sCL,2BA6sCU,2IACF,gBAAM71J,KAAKy/I,6CACJz/I,KAAK4wU,QAAQ,gBAAiB,CAAC,mDACzC,GAhtCL,0BAktCU,SAAaniL,yIACJ,gBAAMA,cAEQ,kBAFzBA,EAAW,EAAXA,OAEqCA,EAAW,oBAK1B,OAJdA,EAAW,GACXvN,GAAOQ,mBAAmB,mBAAoB,WAAY+M,YAGtCzuJ,KAAKixU,wBAAwB,IAAM,EAAIjxU,KAAKkxU,+BAAhE5G,EAAc,EAAdA,MACJA,GAAe77K,GACG,IAAK67K,EAAc,qBAC9BtqU,KAAK0wS,UAAUjiJ,SAAS67K,qCAG5BtqU,KAAK0wS,UAAUjiJ,SAASA,oDAClC,GAjuCL,yBAouCU,SAAYn0I,6IACV85T,EAAc95T,YAEM,KAAhB85T,GAAsC,MAAhBA,EAAgB,yCAAc,gBAI3C,QAAT95T,GAAkC,QAAhB85T,EAAgB,yCAAgB,aAGzC,gBAAMp0U,KAAKq0U,aAAaD,EAAa,yBAGtC,OAHN74Q,EAAO,EAAPA,MAGM,oBACFk5F,EAAW,IAAIk5K,GAAS3tU,KAAMu7D,EAAMjhD,QAGtC85T,IAAgB95T,yBAAU,iBAAMm6I,EAASo5K,mGAA8B,uCAEpEp5K,WAIX2/K,EAAcA,EAAYzyQ,MAAM,KAAKhyD,MAAM,GAAGkyD,KAAK,oEAG1D,GA9vCL,0BAgwCU,SAAavnD,EAAcgtI,2IAGb,OAFC,MAAbA,IAAqBA,EAAY,gBAEftnJ,KAAKy/I,oBAaN,OAbfxY,EAAU,EAAVA,MAGOw7L,YACTvhL,GAAOM,WACH,+BACAL,EAAAA,GAAAA,OAAAA,sBACA,CAAEmG,UAAAA,EAAWrgB,QAASA,EAAQ3sH,yBAMXta,KAAKzB,KAAK,CAC7BiB,GAAIynI,EAAQw7L,WACZjkT,KAAO,aAAe2mS,GAAS7qS,GAAM4+F,UAAU,mBAF7Co7N,EAAW,EAAXA,uBAICt0U,KAAK0wS,UAAUy9B,YAAYmG,uEAK/B,+DACV,GA1xCL,yBA4xCU,SAAYh6T,yIACP,gBAAMA,gBAAbA,EAAO,EAAPA,gCAIWtR,QAAQP,QAAQzI,KAAK0wS,UAAUzwJ,QAAQ3lI,0CAG1CwiI,EAAAA,EAAAA,IAAYxiI,GAAD,oCAQF,MALI,kBAAVA,GACP4mI,GAAOQ,mBAAmB,mBAAoB,OAAQpnI,aAInCta,KAAKu0U,YAAYj6T,cAAlCm6I,EAAW,EAAXA,KACS,0CAAS,cAEjB,iBAAMA,EAAS5b,8GACzB,GAhzCL,2BAkzCU,SAAcoH,6IACN,gBAAMA,SAKK,OALrBA,EAAU,EAAVA,KACAA,EAAUjgJ,KAAK0wS,UAAUzwJ,QAAQA,GAE3BjpC,EAAOipC,EAAQ/mC,UAAU,GAAG3oG,cAAgB,yBAEvBvQ,KAAKq0U,aAAar9N,EAAM,2BAC/B,OADdw9N,EAAe,EAAfA,MACc,0CAAe,cAGT,YAAbrH,aAAmBntU,KAAKzB,KAAK,CACtCiB,GAAIg1U,EACJh2T,KAAO,aAAe2mS,GAASnuM,GAAMkC,UAAU,aAGtC,mBALP5+F,GAAO,EAAPA,EAAAA,IAAAA,EAAAA,GAGF,aAEeta,KAAKkvJ,YAAY50I,cAAvB,EAAPihD,MACM0kF,EAAAA,0CAAkB,uCAEvB3lI,mDACV,GAr0CL,uBAu0CU,SAAUm6T,wJACRhgL,EAAqB,OACrB3X,EAAAA,EAAAA,IAAY23L,GAAD,iBAMa,OAJlBx0L,EAAUjgJ,KAAK0wS,UAAUzwJ,QAAQw0L,GAEjCz9N,EAAOipC,EAAQ/mC,UAAU,GAAG3oG,cAAgB,yBAEpBvQ,KAAKq0U,aAAar9N,EAAM,uBAAhD09N,EAAkB,EAAlBA,KACgB,yCAAS,aAKZ,OAFnBjgL,EAAW,IAAIk5K,GAAS3tU,KAAM00U,EAAiB19N,uBAEtBy9C,EAASkgL,yBAAxBnG,EAAAA,EAAAA,MACFA,0CAAiBA,EAAOvvT,mEAExB,KAAM+qD,OAASm3E,EAAAA,GAAAA,OAAAA,eAA4Bqa,oCAMrB,sBAAb2xK,aAAmBntU,KAAKzB,KAAK,CACtCiB,GAAIk1U,EACJl2T,KAAO,aAAe2mS,GAASnuM,GAAMkC,UAAU,aAExC,mBAJL5+F,GAAO,EAAPA,EAAAA,IAAAA,EAAAA,GAGF,aACata,KAAKu0U,YAAYj6T,WAAlCm6I,EAAW,EAAXA,2DAEI,KAAMzqF,OAASm3E,EAAAA,GAAAA,OAAAA,eAA4Bqa,6DACxC,sCAKA,iBAAMx7J,KAAKu0U,YAAYE,cAAlChgL,EAAW,EAAXA,KACe,0CAAS,cAGb,iBAAMA,EAASkgL,uBAChB,OADRnG,EAAS,EAATA,MACQ,0CAAe,uCAEtBA,EAAOvvT,uEACjB,GAl3CL,qBAo3CI,SAAQ+5E,EAAgB3lC,GACpB,OAAO6tF,GAAOM,WAAWxoD,EAAS,mBAAoBmoD,EAAAA,GAAAA,OAAAA,gBAA+B,CAAEmG,UAAWtuD,GACrG,GAt3CL,yBAw3CI,SAAYvpF,GACRzP,KAAKuxU,QAAWvxU,KAAKs+Q,QAAQz8Q,QAAO,SAACmF,GAAD,OAAOA,EAAE4tU,UAAT,IAAqBh2U,OAAS,CACrE,GA13CL,wBA43CI,SAAW6Q,GACPzP,KAAKuxU,QAAWvxU,KAAKs+Q,QAAQz8Q,QAAO,SAACmF,GAAD,OAAOA,EAAE4tU,UAAT,IAAqBh2U,OAAS,CACrE,GA93CL,+BAg4CI,SAAkBuvJ,EAAsBh/I,EAAoB+nJ,GACxD,IAAMznJ,EAAQ,IAAIwhP,GAAMl6F,GAAY5I,GAAYh/I,EAAU+nJ,GAI1D,OAHAl3J,KAAKs+Q,QAAQ5/Q,KAAK+Q,GAClBzP,KAAKsjH,YAAY7zG,GAEVzP,IACV,GAt4CL,gBAw4CI,SAAGmuJ,EAAsBh/I,GACrB,OAAOnP,KAAKq5J,kBAAkBlL,EAAWh/I,GAAU,EACtD,GA14CL,kBA44CI,SAAKg/I,EAAsBh/I,GACvB,OAAOnP,KAAKq5J,kBAAkBlL,EAAWh/I,GAAU,EACtD,GA94CL,kBAi5CI,SAAKg/I,GAAyC,kCAAhB/kJ,EAAgB,iCAAhBA,EAAgB,kBAC1C,IAAIgrE,GAAS,EAETygQ,EAAwB,GAExBC,EAAW/9K,GAAY5I,GAoB3B,OAnBAnuJ,KAAKs+Q,QAAUt+Q,KAAKs+Q,QAAQz8Q,QAAO,SAAC4N,GAChC,OAAIA,EAAMwnJ,MAAQ69K,IAElB9mO,YAAW,WACPv+F,EAAMN,SAASnN,MAAM,EAAMoH,EAC9B,GAAE,GAEHgrE,GAAS,GAEL3kE,EAAMynJ,OACN29K,EAAQn2U,KAAK+Q,IACN,GAId,IAEDolU,EAAQxyU,SAAQ,SAACoN,GAAY,EAAKslU,WAAWtlU,EAAS,IAE/C2kE,CACV,GA36CL,2BA66CI,SAAc+5E,GACV,IAAKA,EAAa,OAAOnuJ,KAAKs+Q,QAAQ1/Q,OAEtC,IAAIk2U,EAAW/9K,GAAY5I,GAC3B,OAAOnuJ,KAAKs+Q,QAAQz8Q,QAAO,SAAC4N,GACxB,OAAQA,EAAMwnJ,MAAQ69K,CACzB,IAAEl2U,MACN,GAp7CL,uBAs7CI,SAAUuvJ,GACN,GAAiB,MAAbA,EACA,OAAOnuJ,KAAKs+Q,QAAQ14Q,KAAI,SAAC6J,GAAD,OAAWA,EAAMN,QAAjB,IAG5B,IAAI2lU,EAAW/9K,GAAY5I,GAC3B,OAAOnuJ,KAAKs+Q,QACPz8Q,QAAO,SAAC4N,GAAD,OAAYA,EAAMwnJ,MAAQ69K,CAA1B,IACPlvU,KAAI,SAAC6J,GAAD,OAAWA,EAAMN,QAAjB,GACZ,GA/7CL,iBAi8CI,SAAIg/I,EAAsBh/I,GAAmB,WACzC,GAAgB,MAAZA,EACA,OAAOnP,KAAKu5J,mBAAmBpL,GAGnC,IAAM0mL,EAAwB,GAE1B7wF,GAAQ,EAER8wF,EAAW/9K,GAAY5I,GAW3B,OAVAnuJ,KAAKs+Q,QAAUt+Q,KAAKs+Q,QAAQz8Q,QAAO,SAAC4N,GAChC,OAAIA,EAAMwnJ,MAAQ69K,GAAYrlU,EAAMN,UAAYA,MAC5C60O,IACJA,GAAQ,EACR6wF,EAAQn2U,KAAK+Q,IACN,GACV,IAEDolU,EAAQxyU,SAAQ,SAACoN,GAAY,EAAKslU,WAAWtlU,EAAS,IAE/CzP,IACV,GAt9CL,gCAw9CI,SAAmBmuJ,GAAqB,WAChC0mL,EAAwB,GAC5B,GAAiB,MAAb1mL,EACA0mL,EAAU70U,KAAKs+Q,QAEft+Q,KAAKs+Q,QAAU,OACZ,CACH,IAAMw2D,EAAW/9K,GAAY5I,GAC7BnuJ,KAAKs+Q,QAAUt+Q,KAAKs+Q,QAAQz8Q,QAAO,SAAC4N,GAChC,OAAIA,EAAMwnJ,MAAQ69K,IAClBD,EAAQn2U,KAAK+Q,IACN,EACV,GACJ,CAID,OAFAolU,EAAQxyU,SAAQ,SAACoN,GAAY,EAAKslU,WAAWtlU,EAAS,IAE/CzP,IACV,IA1+CL,2BAqJI,WAII,OAHwB,MAApBqvU,KACAA,GAAmB,IAAInF,IAEpBmF,EACV,GA1JL,wBA6JI,SAAkBpoM,GACd,OAAOwY,GAAuB,MAAXxY,EAAmB,YAAaA,EACtD,KA/JL,GAAkCumB,EAAAA,+UC5qB5BtM,GAAS,IAAIC,EAAAA,GAAOviI,IAKpBo2T,GAAW,CAAE,OAAQ,eAE3B,SAASC,GAAQt2U,EAAYu2U,GACzB,GAAa,MAATv2U,EAAiB,OAAO,KAG5B,GAA8B,kBAAnBA,EAAM04F,SAAyB14F,EAAM04F,QAAQ30F,MAAM,YAAa,CACvE,IAAM8b,GAAOs+H,EAAAA,EAAAA,IAAYn+I,EAAM6f,MAAQ7f,EAAM6f,KAAM,KACnD,IAAK02T,GAAe12T,EAChB,MAAO,CAAE64E,QAAS14F,EAAM04F,QAAS74E,KAAAA,EAExC,CAGD,GAAsB,kBAAX7f,EAAqB,CAC5B,IAAK,IAAMsC,KAAOtC,EAAO,CACrB,IAAMy1E,EAAS6gQ,GAAQt2U,EAAMsC,GAAMi0U,GACnC,GAAI9gQ,EAAU,OAAOA,CACxB,CACD,OAAO,IACV,CAGD,GAAsB,kBAAXz1E,EACP,IACI,OAAOs2U,GAAQj0T,KAAKC,MAAMtiB,GAAQu2U,EACnB,CAAjB,MAAOnsU,GAAU,CAGvB,OAAO,IACV,CAED,SAASosU,GAAWn8O,EAAgBjwF,EAAYsqD,GAE5C,IAAMw7F,EAAcx7F,EAAOw7F,aAAex7F,EAAO8/Q,kBAIjD,GAAe,SAAXn6O,EAAmB,CACnB,IAAM5kB,EAAS6gQ,GAAQlsU,GAAO,GAC9B,GAAIqrE,EAAU,OAAOA,EAAO51D,KAG5B0iI,GAAOM,WAAW,sFAAuFL,EAAAA,GAAAA,OAAAA,eAA8B,CACnI3iI,KAAM,KAAMqwI,YAAAA,EAAa9lJ,MAAAA,GAEhC,CAED,GAAe,gBAAXiwF,EAA0B,CAE1B,IAAI5kB,EAAS6gQ,GAAQlsU,EAAM2lG,MAAM,GACnB,MAAVt6B,IAAkBA,EAAS6gQ,GAAQlsU,GAAO,IAG1CqrE,GACA8sE,GAAOM,WAAW,4EAA6EL,EAAAA,GAAAA,OAAAA,wBAAuC,CAClIuJ,OAAQt2E,EAAOijB,QAAS2B,OAAAA,EAAQ61D,YAAAA,EAAa9lJ,MAAAA,GAGxD,CAID,IAAIsuF,EAAUtuF,EAAMsuF,QA4CpB,MA3CItuF,EAAMihE,OAASm3E,EAAAA,GAAAA,OAAAA,cAA8Bp4I,EAAMA,OAAyC,kBAAzBA,EAAMA,MAAMsuF,QAC/EA,EAAUtuF,EAAMA,MAAMsuF,QACQ,kBAAhBtuF,EAAM2lG,KACpBrX,EAAUtuF,EAAM2lG,KACsB,kBAAxB3lG,EAAMonO,eACpB94I,EAAUtuF,EAAMonO,eAEpB94I,GAAWA,GAAW,IAAI9mF,eAGd7N,MAAM,mDACdw+I,GAAOM,WAAW,oDAAqDL,EAAAA,GAAAA,OAAAA,mBAAkC,CACrGp4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAKnBx3D,EAAQ30F,MAAM,yBACdw+I,GAAOM,WAAW,8BAA+BL,EAAAA,GAAAA,OAAAA,cAA6B,CAC1Ep4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAKnBx3D,EAAQ30F,MAAM,wEACdw+I,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,wBAAuC,CAChFp4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAKnBx3D,EAAQ30F,MAAM,2BACdw+I,GAAOM,WAAW,gDAAiDL,EAAAA,GAAAA,OAAAA,sBAAqC,CACpGp4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAInBmmL,GAASlyU,QAAQk2F,IAAW,GAAK3B,EAAQ30F,MAAM,iFAC/Cw+I,GAAOM,WAAW,4EAA6EL,EAAAA,GAAAA,OAAAA,wBAAuC,CAClIp4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAIjB9lJ,CACT,CAED,SAASqgU,GAAMhtL,GACX,OAAO,IAAIpzI,SAAQ,SAASP,GACxBulG,WAAWvlG,EAAS2zI,EACvB,GACJ,CAED,SAASg5L,GAAUp2L,GACf,GAAIA,EAAQj2I,MAAO,CAEf,IAAMA,EAAa,IAAI4I,MAAMqtI,EAAQj2I,MAAMsuF,SAG3C,MAFAtuF,EAAMihE,KAAOg1E,EAAQj2I,MAAMihE,KAC3BjhE,EAAMyV,KAAOwgI,EAAQj2I,MAAMyV,KACrBzV,CACT,CAED,OAAOi2I,EAAQ5qE,MAClB,CAED,SAASihQ,GAAa12U,GAClB,OAAIA,EAAgBA,EAAM4R,cACnB5R,CACV,CAED,IAAM+nJ,GAAoB,CAAC,EAEd4uL,GAAb,0CAKI,WAAYjuL,EAAuB9d,EAA2BgsM,GAAgC,MAG1F,IAH0F,eAC1F,eAEIluL,IAAqBX,GACrB,MAAM,IAAI/0I,MAAM,8EAJsE,OAO1FqzI,EAAAA,EAAAA,KAAe,UAAM,WAAYzb,GAEX,MAAlBgsM,IAA0BA,EAAiB,GAEhB,kBAApBA,IACPvwL,EAAAA,EAAAA,KAAe,UAAM,WAAY,EAAKzb,SAASmnK,UAAUzwJ,QAAQs1L,KACjEvwL,EAAAA,EAAAA,KAAe,UAAM,SAAU,OAEG,kBAApBuwL,IACdvwL,EAAAA,EAAAA,KAAe,UAAM,SAAUuwL,IAC/BvwL,EAAAA,EAAAA,KAAe,UAAM,WAAY,OAGjC9D,GAAOQ,mBAAmB,2BAA4B,iBAAkB6zL,GApBc,CAsB7F,CA3BL,sCA6BI,SAAQhsM,GACJ,OAAO2X,GAAOM,WAAW,0CAA2CL,EAAAA,GAAAA,OAAAA,sBAAqC,CACrGmG,UAAW,WAElB,GAjCL,8BAmCI,WACI,OAAO,IAAIkuL,GAAuB9uL,GAAmB1mJ,KAAKupI,SAAUvpI,KAAKy1U,UAAYz1U,KAAK01U,OAC7F,GArCL,wBAuCI,WAAU,WACN,OAAI11U,KAAKy1U,SACEzsU,QAAQP,QAAQzI,KAAKy1U,UAGzBz1U,KAAKupI,SAAS0R,KAAK,eAAgB,IAAIhyI,MAAK,SAACggI,GAMhD,OALIA,EAASrqI,QAAU,EAAK82U,QACxBx0L,GAAOM,WAAW,oBAAsB,EAAKk0L,OAAQv0L,EAAAA,GAAAA,OAAAA,sBAAqC,CACtFmG,UAAW,eAGZ,EAAK/d,SAASmnK,UAAUzwJ,QAAQhX,EAAS,EAAKysM,QACxD,GACJ,GApDL,sCAsDI,SAAyB7mL,GAA2C,WAChEA,GAAcM,EAAAA,EAAAA,IAAYN,GAE1B,IAAM8mL,EAAc31U,KAAK64I,aAAa5vI,MAAK,SAACg3I,GAExC,OADIA,IAAWA,EAAUA,EAAQ1vI,eAC1B0vI,CACV,IAKD,GAA4B,MAAxB4O,EAAYxX,SAAkB,CAC9B,IAAMu+L,GAAWzmL,EAAAA,EAAAA,IAAYN,GAC7B+mL,EAASv2T,KAAOs2T,EAChB9mL,EAAYxX,SAAWr3I,KAAKupI,SAASiP,YAAYo9L,EACpD,CAaD,OAXsB,MAAlB/mL,EAAYrvJ,KACZqvJ,EAAYrvJ,GAAKwJ,QAAQP,QAAQomJ,EAAYrvJ,IAAIyJ,MAAK,SAAOzJ,GAAP,OAAakvI,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,+EACrD,MAANlvI,EAD2D,yCACtC,MADsC,OAE/C,OAF+C,SAEzCQ,KAAKupI,SAAS2lB,YAAY1vJ,GAFe,cAGhD,OADTygJ,EAFyD,SAI3DiB,GAAOQ,mBAAmB,qCAAsC,QAASliJ,GAJd,kBAMxDygJ,GANwD,+CAAb,MAUnDyN,EAAAA,EAAAA,IAAkB,CACrBp0I,IAAIo0I,EAAAA,EAAAA,IAAkBmB,GACtB03G,OAAQovE,IACT1sU,MAAK,YAAmB,IAAhBqQ,EAAgB,EAAhBA,GAAIitP,EAAY,EAAZA,OAEI,MAAXjtP,EAAG+F,KACC/F,EAAG+F,KAAK9O,gBAAkBg2P,GAC1BrlH,GAAOQ,mBAAmB,wBAAyB,cAAemN,GAGtEv1I,EAAG+F,KAAOknP,EAGd,IAAM6sE,EAAc,EAAK7pM,SAAS3+H,YAAairU,mBAAmBv8T,EAAI,CAAE+F,MAAM,IAE9E,OAAO,EAAKkqH,SAAS0R,KAAK,sBAAuB,CAAEm4L,IAASnqU,MAAK,SAACkmE,GAC9D,OAAOA,CACV,IAAE,SAACpmE,GAQA,MAP8B,kBAAnBA,EAAMsuF,SAAyBtuF,EAAMsuF,QAAQ30F,MAAM,iBAC1Dw+I,GAAOM,WAAW,4BAA6BL,EAAAA,GAAAA,OAAAA,gBAA+B,CAC1E/jC,OAAQ,kBACRyxC,YAAav1I,IAId67T,GAAW,kBAAmBpsU,EAAOqqU,EAC/C,GACJ,GACJ,GA9GL,6BAgHI,SAAgBvkL,GACZ,OAAO3N,GAAOM,WAAW,sCAAuCL,EAAAA,GAAAA,OAAAA,sBAAqC,CACjGmG,UAAW,mBAElB,GApHL,6BAsHU,SAAgBuH,kJAEE,gBAAM7uJ,KAAKupI,SAAS0nM,wBAAwB,IAAM,EAAIjxU,KAAKupI,SAAS2nM,wBAG3E,OAHP5G,EAAc,EAAdA,cAGatqU,KAAK81U,yBAAyBjnL,UAMtC,OANL1/E,EAAO,EAAPA,uBAMW06P,IAAK,kBAAWn7L,GAAAA,OAAAA,OAAAA,GAAAA,EAAAA,EAAAA,KAAAA,MAAAA,SAAAA,IAAA,4EACd,OADc,SACR1uI,KAAKupI,SAAS6sB,eAAejnF,GADrB,UAEd,QADL71D,EADmB,sDAECjQ,GAFD,gCAGlBrJ,KAAKupI,SAASspM,iBAAiBv5T,EAAI61D,EAAMm7P,IAHvB,+CAAX,GAIf,CAAEN,SAAUhqU,KAAKupI,2FAEd,KAAOkC,gBAAkBt8D,gEAGtC,GA1IL,yBA4IU,SAAYkoB,2IAEE,OADV74E,EAA6B,kBAAb64E,GAAyBotD,EAAAA,EAAAA,IAAYptD,GAAUA,WAC/Cr3F,KAAK64I,oBAEhB,OAFLoH,EAAU,EAAVA,uBAEWjgJ,KAAKupI,SAAS0R,KAAK,gBAAiB,EAAEuI,EAAAA,EAAAA,IAAQhlI,GAAOyhI,EAAQ1vI,gGAE5C,kBAAnB,KAAM8mF,SAAyB,KAAMA,QAAQ30F,MAAM,iBAC1Dw+I,GAAOM,WAAW,wBAAyBL,EAAAA,GAAAA,OAAAA,gBAA+B,CACtE/jC,OAAQ,cACR/9F,KAAM4gI,EACN81L,YAAa1+O,kEAK5B,GA3JL,gCA6JU,SAAmBA,2IAEL,OADV74E,EAA6B,kBAAb64E,GAAyBotD,EAAAA,EAAAA,IAAYptD,GAAUA,WAC/Cr3F,KAAK64I,oBAIhB,OAJLoH,EAAU,EAAVA,uBAIWjgJ,KAAKupI,SAAS0R,KAAK,WAAY,CAAEgF,EAAQ1vI,eAAeizI,EAAAA,EAAAA,IAAQhlI,qFAE/C,kBAAnB,KAAM64E,SAAyB,KAAMA,QAAQ30F,MAAM,iBAC1Dw+I,GAAOM,WAAW,wBAAyBL,EAAAA,GAAAA,OAAAA,gBAA+B,CACtE/jC,OAAQ,qBACR/9F,KAAM4gI,EACN81L,YAAa1+O,kEAK5B,GA9KL,4BAgLU,SAAe0jD,EAAyBH,EAA8Cj8I,kJAEtE,gBAAM4hU,GAAAA,aAA+BxlL,EAAQH,EAAOj8I,GAAO,SAAC2b,GAC1E,OAAO,EAAKivH,SAAS2lB,YAAY50I,EACpC,WAEe,OAJVkmT,EAAY,EAAZA,cAIgBxgU,KAAK64I,oBAGhB,OAHLoH,EAAU,EAAVA,uBAGWjgJ,KAAKupI,SAAS0R,KAAK,uBAAwB,CACpDgF,EAAQ1vI,cACRyQ,KAAKE,UAAUq/S,GAAAA,WAA6BC,EAAUzlL,OAAQH,EAAO4lL,EAAU7hU,0FAGrD,kBAAnB,KAAM04F,SAAyB,KAAMA,QAAQ30F,MAAM,iBAC1Dw+I,GAAOM,WAAW,wBAAyBL,EAAAA,GAAAA,OAAAA,gBAA+B,CACtE/jC,OAAQ,iBACR/9F,KAAM4gI,EACN81L,YAAa,CAAEh7L,OAAQylL,EAAUzlL,OAAQH,MAAAA,EAAOj8I,MAAO6hU,EAAU7hU,uEAKhF,GAvML,oBAyMU,SAAO8mM,2IAGO,OAFVl8D,EAAWvpI,KAAKupI,kBAEAvpI,KAAK64I,2BAArBoH,EAAU,EAAVA,uBAEC1W,EAAS0R,KAAK,yBAA0B,CAAEgF,EAAQ1vI,cAAek1L,EAAU,uDACrF,KA/ML,GAAmCj3C,EAAAA,GAkN7BgnL,GAAAA,SAAAA,0IACF,SAAgB3mL,GAA2C,WACvD,OAAO7uJ,KAAK81U,yBAAyBjnL,GAAa5lJ,MAAK,SAACkmE,GACpD,MAA4B,CACxBA,KAAMA,EACNsrE,MAAO,KACPpD,SAAU,KACVwW,SAAU,KACVrvI,KAAM,KACN7f,MAAO,KACP6oI,QAAS,KACTouB,cAAe,EACfv2I,KAAM,KACNs2I,KAAM,SAACC,GAA6B,OAAO,EAAKrsB,SAASopM,mBAAmBxjQ,EAAMymF,EAAiB,EAE1G,GACJ,OAhBC4/K,CAA+BF,IAmB/BhnL,GAAuD,CACzD9mB,SAAS,EAAMhpH,MAAM,EAAM64H,UAAU,EAAMwW,UAAS,EAAMpT,OAAO,EAAMj7I,IAAI,EAAMb,OAAO,EACxF0I,MAAM,EAAMitJ,YAAY,EACxBtG,cAAc,EAAMC,sBAAsB,GAGjCnP,GAAb,0CAiBI,WAAY7/H,EAA+BgoH,GAAoB,sBAC3D,IAAI+uM,EAAgD/uM,EADO,OAIrC,MAAlB+uM,IACAA,EAAiB,IAAIhtU,SAAQ,SAACP,EAASC,GACnCslG,YAAW,WACP,EAAK4hO,gBAAgB3mU,MAAK,SAACg+H,GACvBx+H,EAAQw+H,EACX,IAAE,SAACl+H,GACAL,EAAOK,EACV,GACJ,GAAE,EACN,KAGL,cAAMitU,GAGD/2T,IAAOA,GAAM4rI,EAAAA,EAAAA,IAAwB,EAAKjgJ,YAAa,aAA1CigJ,IAEE,kBAAT5rI,GACP+lI,EAAAA,EAAAA,KAAe,UAAM,aAAa9jJ,OAAO6Q,OAAO,CAC5CkN,IAAKA,MAGT+lI,EAAAA,EAAAA,KAAe,UAAM,aAAc9jJ,OAAO6Q,QAAOo9I,EAAAA,EAAAA,IAAYlwI,KAGjE,EAAKg3T,QAAU,GA7B4C,CA8B9D,CA/CL,mCAUI,WAII,OAH4B,MAAxBj2U,KAAKk2U,kBACLl2U,KAAKk2U,gBAAkB,CAAC,GAErBl2U,KAAKk2U,eACf,GAfL,2BAqDI,WAAa,WAST,OARKl2U,KAAKoK,OAAL,gBACDpK,KAAKoK,OAAL,cAA+BpK,KAAKm2U,yBAGpCnoO,YAAW,WACP,EAAK5jG,OAAL,cAA+B,IAClC,GAAE,IAEApK,KAAKoK,OAAL,aACV,GA/DL,oCAiEU,mJACF,gBAAMg/T,GAAM,UAIE,OAFV5hM,EAAU,uBAEMxnI,KAAKi7I,KAAK,cAAe,WAAzCzT,EAAU,EAAVA,4BAGc,oDAAMxnI,KAAKi7I,KAAK,cAAe,YAAzCzT,EAAU,EAAVA,mEAIO,MAAXA,EAAW,wBACLiY,GAAaoL,EAAAA,EAAAA,IAA4C7qJ,KAAK4K,YAAa,0CAEtE60I,EAAWlI,EAAAA,GAAAA,KAAe/P,GAASkR,yEAEnCwI,GAAOM,WAAW,2BAA4BL,EAAAA,GAAAA,OAAAA,cAA6B,CAC9E3Z,QAASA,EACT/3H,MAAO,iBACPg6T,YAAa,EAAF,uCAKhBvoL,GAAOM,WAAW,2BAA4BL,EAAAA,GAAAA,OAAAA,cAA6B,CAC9E1xI,MAAO,uFAEd,GA7FL,uBA+FI,SAAU8lU,GACN,OAAO,IAAID,GAAc5uL,GAAmB1mJ,KAAMu1U,EACrD,GAjGL,gCAmGI,SAAmBA,GACf,OAAOv1U,KAAKs/I,UAAUi2L,GAAgBa,kBACzC,GArGL,0BAuGI,WAAY,WACR,OAAOp2U,KAAKi7I,KAAK,eAAgB,IAAIhyI,MAAK,SAACggI,GACvC,OAAOA,EAASrjI,KAAI,SAACkE,GAAD,OAAO,EAAK4mS,UAAUzwJ,QAAQn2I,EAA9B,GACvB,GACJ,GA3GL,kBA6GI,SAAKkvF,EAAgB3lC,GAAkB,WAC7Bs1E,EAAU,CACZ3vC,OAAQA,EACR3lC,OAAQA,EACRxyD,GAAKb,KAAKi2U,UACVI,QAAS,OAGbr2U,KAAKs0I,KAAK,QAAS,CACfl3B,OAAQ,UACRurB,SAASmtB,EAAAA,EAAAA,IAASntB,GAClBY,SAAUvpI,OAKd,IAAMy8B,EAAS,CAAE,cAAe,mBAAoB35B,QAAQk2F,IAAW,EACvE,GAAIv8D,GAASz8B,KAAKoK,OAAO4uF,GACrB,OAAOh5F,KAAKoK,OAAO4uF,GAGvB,IAAM5kB,EAASu1P,GAAU3pU,KAAK4tI,WAAY5sH,KAAKE,UAAUynH,GAAUysM,IAAWnsU,MAAK,SAACmrE,GAQhF,OAPA,EAAKkgE,KAAK,QAAS,CACfl3B,OAAQ,WACRurB,QAASA,EACT76B,SAAU15B,EACVm1D,SAAU,IAGPn1D,CAEV,IAAE,SAACrrE,GAQA,MAPA,EAAKurI,KAAK,QAAS,CACfl3B,OAAQ,WACRr0G,MAAOA,EACP4/H,QAASA,EACTY,SAAU,IAGRxgI,CACT,IAUD,OAPI0zB,IACAz8B,KAAKoK,OAAO4uF,GAAU5kB,EACtB45B,YAAW,WACP,EAAK5jG,OAAO4uF,GAAU,IACzB,GAAE,IAGA5kB,CACV,GAhKL,4BAkKI,SAAe4kB,EAAgB3lC,GAC3B,OAAQ2lC,GACJ,IAAK,iBACD,MAAO,CAAE,kBAAmB,IAEhC,IAAK,cACD,MAAO,CAAE,eAAgB,IAE7B,IAAK,aACD,MAAO,CAAE,iBAAkB,CAAEq8O,GAAahiR,EAAO4sF,SAAU5sF,EAAOo7F,WAEtE,IAAK,sBACD,MAAO,CAAE,0BAA2B,CAAE4mL,GAAahiR,EAAO4sF,SAAU5sF,EAAOo7F,WAE/E,IAAK,UACD,MAAO,CAAE,cAAe,CAAE4mL,GAAahiR,EAAO4sF,SAAU5sF,EAAOo7F,WAEnE,IAAK,eACD,MAAO,CAAE,mBAAoB,CAAE4mL,GAAahiR,EAAO4sF,UAAUU,EAAAA,EAAAA,IAAWttF,EAAOzvD,SAAU,IAAKyvD,EAAOo7F,WAEzG,IAAK,kBACD,MAAO,CAAE,yBAA0B,CAAEp7F,EAAO8/Q,oBAEhD,IAAK,WACD,OAAI9/Q,EAAOo7F,SACA,CAAE,uBAAwB,CAAEp7F,EAAOo7F,WAAYp7F,EAAO2gR,sBACtD3gR,EAAO8iG,UACP,CAAE,qBAAsB,CAAE9iG,EAAO8iG,YAAa9iG,EAAO2gR,sBAEzD,KAEX,IAAK,iBACD,MAAO,CAAE,2BAA4B,CAAE3gR,EAAOo4E,kBAElD,IAAK,wBACD,MAAO,CAAE,4BAA6B,CAAEp4E,EAAOo4E,kBAEnD,IAAK,OAED,MAAO,CAAE,WAAY,EADMof,EAAAA,EAAAA,IAAgG7qJ,KAAK4K,YAAa,qBACtHirU,CAAmBxiR,EAAOw7F,YAAa,CAAExvI,MAAM,IAASg0C,EAAOo7F,WAG1F,IAAK,cAED,MAAO,CAAE,kBAAmB,EADD5D,EAAAA,EAAAA,IAAgG7qJ,KAAK4K,YAAa,qBAC/GirU,CAAmBxiR,EAAOw7F,YAAa,CAAExvI,MAAM,MAGjF,IAAK,UAID,OAHIg0C,EAAOxxD,QAAmC,MAAzBwxD,EAAOxxD,OAAOo+I,UAC/B5sF,EAAOxxD,OAAOo+I,QAAUo1L,GAAahiR,EAAOxxD,OAAOo+I,UAEhD,CAAE,cAAe,CAAE5sF,EAAOxxD,SAMzC,OAAO,IACV,GA5NL,qBA8NU,SAAQm3F,EAAgB3lC,gJAGX,SAAX2lC,GAAgC,gBAAXA,EAAW,qBAC1B1/E,EAAK+5C,EAAOw7F,cACG,MAAXv1I,EAAGjS,OAAgBkwI,EAAAA,GAAAA,KAAej+H,EAAGjS,MAAM87I,SAAxB,mBAEF,MAAnB7pI,EAAG00I,cAAmD,MAA3B10I,EAAG20I,qBAAwB,gBACtC,gBAAMjuJ,KAAKivJ,oBACC,OADtBI,EAAU,EAAVA,MACMrB,cAAwD,MAAhCqB,EAAQpB,wBAExC56F,GAAS87F,EAAAA,EAAAA,IAAY97F,IACdw7F,aAAcM,EAAAA,EAAAA,IAAY71I,UAC1B+5C,EAAOw7F,YAAYxnJ,aAY/B,OAJC,OAFN+B,EAAOpJ,KAAK0rO,eAAe1yI,EAAS3lC,KAGtC6tF,GAAOM,WAAWxoD,EAAS,mBAAoBmoD,EAAAA,GAAAA,OAAAA,gBAA+B,CAAEmG,UAAWtuD,wBAG9Eh5F,KAAKi7I,KAAK7xI,EAAK,GAAIA,EAAK,yGAE9B+rU,GAAWn8O,EAAD,KAAgB3lC,8DAExC,GA3PL,yBA6PI,SAAY5jD,GACU,YAAdA,EAAMwnJ,KAAqBj3J,KAAKs2U,iBACpC,4DAAkB7mU,EACrB,GAhQL,2BAkQI,WACI,GAA2B,MAAvBzP,KAAKu2U,eAAT,CACA,IAAMptU,EAAOnJ,KAEPw2U,EAAiCx2U,KAAKi7I,KAAK,kCAAmC,IACpFj7I,KAAKu2U,eAAiBC,EAEtBA,EAAcvtU,MAAK,SAASwtU,GAgCxB,OA/BA,SAAS5M,IACL1gU,EAAK8xI,KAAK,uBAAwB,CAAEw7L,IAAYxtU,MAAK,SAASmlS,GAC1D,GAAIjlS,EAAKotU,gBAAkBC,EAAiB,OAAO,KAEnD,IAAI32Q,EAAM72D,QAAQP,UAYlB,OAXA2lS,EAAO/rS,SAAQ,SAAS8sE,GAEpBhmE,EAAKqmU,SAAS,KAAOrgQ,EAAK5+D,eAAiB,UAC3CsvD,EAAMA,EAAI52D,MAAK,WACX,OAAOE,EAAKitJ,eAAejnF,GAAMlmE,MAAK,SAASqQ,GAE3C,OADAnQ,EAAKmrI,KAAK,UAAWh7H,GACd,IACV,GACJ,GACJ,IAEMumD,EAAI52D,MAAK,WACZ,OAAOmgU,GAAM,IAChB,GACJ,IAAEngU,MAAK,WACJ,GAAIE,EAAKotU,gBAAkBC,EAM3B,OAFAxoO,YAAW,WAAa67N,GAAS,GAAE,GAE5B,KALH1gU,EAAK8xI,KAAK,sBAAuB,CAAEw7L,GAM1C,IAAEtmO,OAAM,SAACpnG,GAAoB,GACjC,CACD8gU,GAEO4M,CACV,IAAEtmO,OAAM,SAACpnG,GAAoB,GAvCc,CAwC/C,GA3SL,wBA6SI,SAAW0G,GACW,YAAdA,EAAMwnJ,KAAuD,IAAlCj3J,KAAKm3J,cAAc,aAC9Cn3J,KAAKu2U,eAAiB,OAE1B,2DAAiB9mU,EACpB,IAlTL,yBAiDI,WACI,MAAO,uBACV,GAnDL,gCA6TI,SAA0Bo/I,EAAiC6nL,GAEvD,IAAMC,GAAUxnL,EAAAA,EAAAA,IAAYb,IAC5B,GAAIooL,EACA,IAAK,IAAMz1U,KAAOy1U,EACVA,EAAWz1U,KAAQ01U,EAAQ11U,IAAO,IAI9C07J,EAAAA,EAAAA,IAAgB9N,EAAa8nL,GAE7B,IAAMviQ,EAAiD,CAAC,EAmBxD,MAhBA,CAAC,UAAW,WAAY,WAAY,OAAQ,eAAgB,uBAAwB,QAAS,SAAS/xE,SAAQ,SAASpB,GACnH,GAA+B,MAArB4tJ,EAAa5tJ,GAAvB,CACA,IAAMtC,GAAQ40J,EAAAA,EAAAA,IAAShc,EAAAA,GAAAA,KAAqBsX,EAAa5tJ,KAC7C,aAARA,IAAsBA,EAAM,OAChCmzE,EAAOnzE,GAAOtC,CAHkC,CAInD,IAED,CAAC,OAAQ,KAAM,QAAQ0D,SAAQ,SAASpB,GACL,MAArB4tJ,EAAa5tJ,KACvBmzE,EAAOnzE,IAAOuiJ,EAAAA,EAAAA,IAAcqL,EAAa5tJ,IAC5C,IAES4tJ,EAAayF,aACnBlgF,EAAM,YAAiBkhF,EAAAA,GAAAA,IAAoBzG,EAAayF,aAGrDlgF,CACV,KA5VL,GAAqCm7P,ICnYjCqH,GAAU,KAEd,IAEI,GAAU,OADVA,GAAMr9C,WACY,MAAM,IAAI5nR,MAAM,gBAQrC,CAPC,MAAO5I,IACL,IAAMm4I,GAAS,IAAIC,EAAAA,GAAOviI,IAC1Bg4T,GAAK,WACD11L,GAAOM,WAAW,+CAAgDL,EAAAA,GAAAA,OAAAA,sBAAqC,CACnGmG,UAAW,mBAElB,CACJ,4SCLKpG,GAAS,IAAIC,EAAAA,GAAOviI,IAiBtBi4T,GAAS,EA0BAC,GAAb,0CAaI,WAAY73T,EAA6BgoH,GAAoB,wBAGzC,QAAZA,GACAia,GAAOM,WAAW,uDAAwDL,EAAAA,GAAAA,OAAAA,sBAAqC,CAC3GmG,UAAW,iBAKf,EADgB,kBAATroI,EACP,YAAMA,EAAKgoH,GAEX,YAAM,aAAcA,IAGnBgpM,kBAAoB,EAEzB,EAAK8G,UAAW,EAEI,kBAAT93T,GACP+lI,EAAAA,EAAAA,KAAe,UAAM,aAAc,IAAIu0I,GAAU,EAAK3rJ,WAAW3uH,OAEjE+lI,EAAAA,EAAAA,KAAe,UAAM,aAAc/lI,IAGvC+lI,EAAAA,EAAAA,KAAe,UAAM,YAAa,CAAC,IACnCA,EAAAA,EAAAA,KAAe,UAAM,QAAS,CAAC,IAC/BA,EAAAA,EAAAA,KAAe,UAAM,UAAW,CAAC,IACjCA,EAAAA,EAAAA,KAAe,UAAM,kBAAP,yEAGd,EAAKlZ,UAAU8vJ,OAAS,WACpB,EAAKm7C,UAAW,EAChB71U,OAAOQ,KAAK,EAAKs1U,WAAW30U,SAAQ,SAACxB,GACjC,EAAKirI,UAAUmP,KAAK,EAAK+7L,UAAUn2U,GAAIm+I,QAC1C,GACJ,EAED,EAAKlT,UAAUmxJ,UAAY,SAACg6C,GACxB,IAAMz4T,EAAOy4T,EAAaz4T,KACpB41D,EAASpzD,KAAKC,MAAMzC,GAC1B,GAAiB,MAAb41D,EAAOvzE,GAAY,CACnB,IAAMA,EAAK4sC,OAAO2mC,EAAOvzE,IACnB8nI,EAAU,EAAKquM,UAAUn2U,GAG/B,UAFO,EAAKm2U,UAAUn2U,QAEAwI,IAAlB+qE,EAAOA,OACPu0D,EAAQthH,SAAS,KAAM+sD,EAAOA,QAE9B,EAAKkgE,KAAK,QAAS,CACfl3B,OAAQ,WACRurB,QAAS3nH,KAAKC,MAAM0nH,EAAQqW,SAC5BlxC,SAAU15B,EAAOA,OACjBm1D,UAAU,gBAGX,CACH,IAAIxgI,EAAe,KACfqrE,EAAOrrE,OACPA,EAAQ,IAAI4I,MAAMyiE,EAAOrrE,MAAMsuF,SAAW,kBAC1C2tD,EAAAA,EAAAA,IAAoBj8I,EAAO,OAAQqrE,EAAOrrE,MAAMihE,MAAQ,OACxDg7E,EAAAA,EAAAA,IAAoBj8I,EAAO,WAAYyV,IAEvCzV,EAAQ,IAAI4I,MAAM,iBAGtBg3H,EAAQthH,SAASte,OAAOM,GAExB,EAAKirI,KAAK,QAAS,CACfl3B,OAAQ,WACRr0G,MAAOA,EACP4/H,QAAS3nH,KAAKC,MAAM0nH,EAAQqW,SAC5BzV,UAAU,WAGjB,CAEJ,MAAM,GAAsB,qBAAlBn1D,EAAO4kB,OAA+B,CAE7C,IAAMxuE,EAAM,EAAKurQ,MAAM3hN,EAAO/gB,OAAO6jR,cACjC1sT,GAEAA,EAAI09S,YAAY9zP,EAAO/gB,OAAO+gB,OAGrC,MACG3/D,QAAQC,KAAK,yBAEpB,EAKD,IAAMyiU,EAAW9xU,aAAY,WACzB,EAAKivI,KAAK,OACb,GAAE,KA/FsD,OAgGrD6iM,EAASrE,OAASqE,EAASrE,SAhG0B,UAiG5D,CA9GL,sCAkHI,WAAiC,OAAO9yU,KAAK60R,UAAa,GAlH9D,2BAoHI,WACI,OAAO70R,KAAKo3U,cACf,GAtHL,2BAwHI,WACI,OAAO,CACV,EA1HL,IAkII,SAAoBz4U,GAChBuiJ,GAAOM,WAAW,mDAAoDL,EAAAA,GAAAA,OAAAA,sBAAqC,CACvGmG,UAAW,sBAElB,GAtIL,8BA4HI,SAAiBgjL,GACbppL,GAAOM,WAAW,iDAAkDL,EAAAA,GAAAA,OAAAA,sBAAqC,CACrGmG,UAAW,mBAElB,GAhIL,kBAwIU,oKACK,gDACV,GA1IL,mBA4II,SAAY3oJ,GACHA,GAELuiJ,GAAOM,WAAW,0CAA2CL,EAAAA,GAAAA,OAAAA,sBAAqC,CAC9FmG,UAAW,cAElB,GAlJL,kBAoJI,SAAKtuD,EAAgB3lC,GAAmB,WAC9BgkR,EAAMR,KAEZ,OAAO,IAAI7tU,SAAQ,SAACP,EAASC,GAMzB,IAAMs2I,EAAUh+H,KAAKE,UAAU,CAC3B83E,OAAQA,EACR3lC,OAAQA,EACRxyD,GAAIw2U,EACJhB,QAAS,QAGb,EAAK/hM,KAAK,QAAS,CACfl3B,OAAQ,UACRurB,QAAS3nH,KAAKC,MAAM+9H,GACpBzV,SAAU,IAGd,EAAKytM,UAAUvpS,OAAO4pS,IAAQ,CAAEhwT,SAlBhC,SAAkBte,EAAcqrE,GAC5B,OAAIrrE,EAAgBL,EAAOK,GACpBN,EAAQ2rE,EAClB,EAeyC4qE,QAAAA,GAEtC,EAAK+3L,UAAY,EAAKjrM,UAAUmP,KAAK+D,EAC5C,GACJ,GA9KL,wBAoLU,SAAWiY,EAAahS,EAAmBijL,kJAQ/B,OANM,OADhBoP,EAAet3U,KAAKu3U,QAAQtgL,MAE5BqgL,EAAetuU,QAAQ+nH,IAAIk0B,GAAOh8I,MAAK,SAACg8I,GACpC,OAAO,EAAKhK,KAAK,gBAAiBgK,EACrC,IACDjlJ,KAAKu3U,QAAQtgL,GAAOqgL,YAEJA,SAAdE,EAAQ,EAARA,KACNx3U,KAAK+1R,MAAMyhD,GAAS,CAAEvgL,IAAAA,EAAKixK,YAAAA,kDAC9B,GA9LL,yBAgMI,SAAYz4T,GAAY,WACpB,OAAQA,EAAMpI,MACV,IAAK,QACDrH,KAAKkhS,WAAW,QAAS,CAAE,aAAc,SAAC9sN,GACtC,IAAMk2P,EAAc/yL,EAAAA,GAAAA,KAAenjE,EAAOyoF,QAAQnkB,WAClD,EAAK82L,SAAS7hL,MAAQ28K,EACtB,EAAKh2L,KAAK,QAASg2L,EACtB,IACD,MAEJ,IAAK,UACDtqU,KAAKkhS,WAAW,UAAW,CAAE,2BAA4B,SAAC9sN,GACtD,EAAKkgE,KAAK,UAAWlgE,EACxB,IACD,MAEJ,IAAK,SACDp0E,KAAKkhS,WAAWzxR,EAAMwnJ,IAAK,CAAE,OAAQj3J,KAAKm0U,WAAW1kU,EAAM5N,UAAW,SAACuyE,GAC7C,MAAlBA,EAAOoX,UAAmBpX,EAAOoX,SAAU,GAC/C,EAAK8oD,KAAK7kI,EAAM5N,OAAQ,EAAK6uS,UAAU+6B,UAAUr3P,GACpD,IACD,MAEJ,IAAK,KACD,IAAMqjQ,EAAc,SAAChoU,GACjB,IAAM0/D,EAAO1/D,EAAM0/D,KACnB,EAAKknF,sBAAsBlnF,GAAMlmE,MAAK,SAACyiI,GAC9BA,GACL,EAAK4I,KAAKnlE,EAAMu8D,EACnB,GACJ,EAGD+rM,EAAYhoU,GAMZzP,KAAKkhS,WAAW,KAAM,CAAE,aAAc,SAAC9sN,GACnC,EAAKkqM,QAAQz8Q,QAAO,SAACmF,GAAD,MAAmB,OAAXA,EAAEK,IAAV,IAA0BhF,QAAQo1U,EACzD,IACD,MAIJ,IAAK,QACL,IAAK,OACL,IAAK,WACL,IAAK,UACL,IAAK,QACD,MAEJ,QACIhjU,QAAQvD,IAAI,aAAczB,GAGrC,GAzPL,wBA2PI,SAAWA,GAAY,WACfwnJ,EAAMxnJ,EAAMwnJ,IAEhB,GAAmB,OAAfxnJ,EAAMpI,KAAe,CAErB,GAAIrH,KAAKs+Q,QAAQz8Q,QAAO,SAACmF,GAAD,MAAmB,OAAXA,EAAEK,IAAV,IAA0BzI,OAC9C,OAEJq4J,EAAM,IACT,MAAM,GAAIj3J,KAAKm3J,cAAc1nJ,EAAMA,OAEhC,OAGJ,IAAM+nU,EAAQx3U,KAAKu3U,QAAQtgL,GACtBugL,WAECx3U,KAAKu3U,QAAQtgL,GACpBugL,EAAMvuU,MAAK,SAACuuU,GACF,EAAKzhD,MAAMyhD,YACT,EAAKzhD,MAAMyhD,GAClB,EAAKv8L,KAAK,kBAAmB,CAAEu8L,IAClC,IACJ,GAlRL,qBAoRU,yJAEEx3U,KAAK8rI,UAAUwkG,aAAeipD,GAAAA,WAAoBm+C,gBAClD,gBAAO,IAAI1uU,SAAQ,SAACP,GAChB,EAAKqjI,UAAU8vJ,OAAS,WACpBnzR,GAAQ,EACX,EAED,EAAKqjI,UAAU5Y,QAAU,WACrBzqH,GAAQ,EACX,CACJ,WAKLzI,KAAK8rI,UAAU18B,MAAM,oDACxB,IArSL,yBAgLI,WACI,MAAO,qBACV,KAlLL,GAAuC0vC,2SC9CjCoC,GAAS,IAAIC,EAAAA,GAAOviI,IAkBb+4T,GAAb,iJACU,WAAa,oQAEA,OADX1wM,EAAUjnI,KAAKinI,SACJ,gBACD,gBAAMy7K,EAAMktB,cAAarxU,KAAA,cAAnC0oI,EAAU,EAAVA,OAGIia,GAAOM,WAAW,sBAAuBL,EAAAA,GAAAA,OAAAA,cAA6B,CAAC,GAItD,MAAjBnhJ,KAAKmwU,YAELnrL,EAAAA,EAAAA,IAAehlJ,KAAM,WAAYinI,GAEjCjnI,KAAKs0I,KAAK,UAAWrN,EAAS,uCAG/BA,kDACV,KAnBL,GAA2C6X,IAsBrB84L,GAAtB,0CAGI,WAAY3wM,EAAsBiB,GAAY,sBAC1CgZ,GAAOuM,cAAP,0CAAiCmqL,GAGjC3wM,GAAU4jB,EAAAA,EAAAA,IAAS,0CAA+C,aAAxDA,CAAsE5jB,GAChFiB,GAAS2iB,EAAAA,EAAAA,IAAS,0CAAyC,YAAlDA,CAA+D3iB,GAExE,IAAM0F,GAAaid,EAAAA,EAAAA,IAAS,0CAAyB,SAAlCA,CAA4C5jB,EAASiB,GAP9B,OAS1C,cAAM0F,EAAY3G,GAEK,kBAAZiB,GACP8c,EAAAA,EAAAA,KAAe,UAAM,SAAU9c,GACd,MAAVA,GACPhnI,OAAOQ,KAAKwmI,GAAQ7lI,SAAQ,SAACpB,IACzB+jJ,EAAAA,EAAAA,KAAc,UAAiB/jJ,EAAKinI,EAAOjnI,GAC9C,IAhBqC,CAkB7C,CArBL,4CAuBI,WACIigJ,GAAOxsI,KAAK,yDACf,GAzBL,iCA2BI,WACI,OAAO,CACV,GA7BL,uBA+BI,SAAUurI,GACN,OAAOiB,GAAOM,WACV,wCACAL,EAAAA,GAAAA,OAAAA,sBACA,CAAEmG,UAAW,aAEpB,GArCL,0BAuCI,WACI,OAAOt+I,QAAQP,QAAQ,GAC1B,IAzCL,wBA4CI,SAAiBy/H,GACb,OAAOA,CACV,GA9CL,oBAmDI,SAAcjB,EAAkBiB,GAC5B,OAAOgZ,GAAOM,WAAW,oDAAqDL,EAAAA,GAAAA,OAAAA,gBAA+B,CACzGmG,UAAW,UAElB,KAvDL,GAAiDqwL,ICtC3Cz2L,GAAS,IAAIC,EAAAA,GAAOviI,IASpBi5T,GAAgB,mCAETC,GAAb,0CAGI,WAAY7wM,EAAsBiB,GAAY,sBAC1C,IAAMqB,EAAW,IAAIq4L,GAAgB36L,EAASiB,GAExCjpH,EAAMsqH,EAASqE,WAAW3uH,IAAI0jD,QAAQ,SAAU,MAClBA,QAAQ,eAAgB,mBAJlB,OAM1C,cAAM1jD,EAAKsqH,EAAStC,UACpB+d,EAAAA,EAAAA,KAAe,UAAM,SAAUzb,EAASrB,QAPE,CAQ7C,CAXL,kDAaI,WACI,OAAQloI,KAAKkoI,SAAW2vM,EAC3B,KAfL,GAA8Cf,IAkBjClV,GAAb,uJAwEI,WACI,OAAQ5hU,KAAKkoI,SAAW2vM,EAC3B,IA1EL,mCAEI,SAA4B5wM,EAAsBiB,GAC9C,OAAO,IAAI4vM,GAAyB7wM,EAASiB,EAChD,GAJL,uBAMI,SAAiBA,GACb,OAAc,MAAVA,EAAyB2vM,IACzB3vM,GAA6B,kBAAZA,GACjBgZ,GAAOQ,mBAAmB,iBAAkB,SAAUxZ,GAEnDA,EACV,GAZL,oBAcI,SAAcjB,EAAkBiB,GAC5B,IAAIk+D,EAAO,KACX,OAAQn/D,EAAQ3sH,MACZ,IAAK,YACD8rL,EAAO,gCACP,MACJ,IAAK,UACDA,EAAO,gCACP,MACJ,IAAK,UACDA,EAAO,gCACP,MACJ,IAAK,SACDA,EAAO,+BACP,MACJ,IAAK,QACDA,EAAO,8BACP,MACJ,IAAK,QACDA,EAAO,oCACP,MACJ,IAAK,WACDA,EAAO,mCACP,MACJ,IAAK,WACDA,EAAO,gCACP,MACJ,IAAK,mBACDA,EAAO,gCACP,MACJ,IAAK,kBACDA,EAAO,+BACP,MACJ,IAAK,WACDA,EAAO,gCACP,MACJ,IAAK,iBACDA,EAAO,8BACP,MACJ,IAAK,kBACDA,EAAO,+BACP,MACJ,QACGllD,GAAOQ,mBAAmB,sBAAuB,UAAWv/I,UAAU,IAG7E,MAAO,CACHumU,WAAW,EACXzpT,IAAM,WAAkBmnL,EAAOl+D,EAC/BogM,iBAAkB,SAACvrE,EAAiB99O,GAIhC,OAHIipH,IAAW2vM,IACXxL,KAEGrjU,QAAQP,SAAQ,EAC1B,EAER,KAtEL,GAAqCmvU,IC9B/B12L,GAAS,IAAIC,EAAAA,GAAOviI,IAGpBi5T,GAAgB,mEAEtB,SAASE,GAAQz9T,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,oBACX,IAAK,UACD,MAAO,4BACX,IAAK,UACD,MAAO,4BACX,IAAK,SACD,MAAO,2BAEX,IAAK,QACD,MAAO,wBAEX,IAAK,WACD,MAAO,yBAEf,OAAO4mI,GAAOQ,mBAAmB,sBAAuB,OAAQpnI,EACnE,CAEM,IAAM4nT,GAAb,uJAGI,WACI,OAAQliU,KAAKkoI,SAAW2vM,EAC3B,IALL,wBAOI,SAAiB3vM,GACb,OAAc,MAAVA,EAAyB2vM,GACtB3vM,CACV,GAVL,oBAYI,SAAcjB,EAAkBiB,GACd,MAAVA,IAAkBA,EAAS2vM,IAC/B,IAAMjqM,EAA6B,CAC/B86L,WAAW,EACXzpT,IAAM,WAAc84T,GAAQ9wM,EAAQ3sH,MAAQ4tH,EAC5CogM,iBAAkB,SAACvrE,EAAiB99O,GAIhC,OAHIipH,EAAOA,SAAW2vM,IAClBxL,KAEGrjU,QAAQP,SAAQ,EAC1B,GAQL,OAL4B,MAAxBy/H,EAAO8vM,gBACPpqM,EAAW03D,KAAO,GAClB13D,EAAW63D,SAAWv9D,EAAO8vM,eAG1BpqM,CACV,KA/BL,GAAkCgqM,2SC5B5B12L,GAAS,IAAIC,EAAAA,GAAOviI,IAEbojT,GAAb,2IAsBU,SAAQhpO,EAAgB3lC,GAAW,wPAGtB,mBAAX2lC,EAAW,gBACG,gBAAM0pN,EAAMkuB,QAAOryU,KAAA,KAAC,WAAY,CAAEkwJ,SAAU,yBAApDd,EAAQ,EAARA,uBACCA,EAAMkP,wCAGV6lJ,EAAMkuB,QAAOryU,KAAA,KAACy6F,EAAQ3lC,mDAChC,IA/BL,wBAEI,SAAiB60E,GAIb,OAHc,MAAVA,GACAgZ,GAAOQ,mBAAmB,sCAAuC,SAAUxZ,GAExE,IACV,GAPL,oBASI,SAAcjB,EAAkBiB,GAC5B,IAAIk+D,EAAO,KACX,GACS,cADDn/D,EAAQ3sH,KAER8rL,EAAO,mCAGRllD,GAAOQ,mBAAmB,sBAAuB,UAAWv/I,UAAU,IAG7E,OAAOikM,CACV,KApBL,GAAwCwxI,2SCIlC12L,GAAS,IAAIC,EAAAA,GAAOviI,IAM1B,SAASq5T,GAAuBppL,GAC5B,IAAMz6E,EAAiC,CAAC,EACxC,IAAK,IAAInzE,KAAO4tJ,EACZ,GAA+B,MAArBA,EAAa5tJ,GAAvB,CACA,IAAItC,EAAckwJ,EAAa5tJ,GACnB,SAARA,GAA4B,IAAVtC,IAMlBA,EAHM,CAAE0I,MAAM,EAAMgwI,UAAU,EAAMwW,UAAU,EAAMqqL,aAAa,EAAMjqL,sBAAsB,EAAMxT,OAAO,EAAM97I,OAAO,GAAQsC,IACvHsyJ,EAAAA,EAAAA,KAAS/P,EAAAA,EAAAA,IAAQ7kJ,IACV,eAARsC,EACC,KAAMq0J,EAAAA,GAAAA,IAAc32J,GAAOiH,KAAI,SAAC6E,GACpC,MAAO,aAAP,OAAqBA,EAAIw1I,QAAzB,2BAAqDx1I,EAAIsoK,YAAYlxG,KAAK,OAA1E,MACH,IAAEA,KAAK,KAAO,KAEP2hF,EAAAA,EAAAA,IAAQ7kJ,GAEpBy1E,EAAOnzE,GAAOtC,EAdoC,CAgBtD,OAAOy1E,CACV,CAED,SAASghQ,GAAUhhQ,GAEf,GAAqB,GAAjBA,EAAOjT,SAAmC,qBAAnBiT,EAAOijB,SAAqD,0BAAnBjjB,EAAOijB,SACvE,OAAOjjB,EAAOA,OAGlB,GAAqB,GAAjBA,EAAOjT,QAA0C,kBAApBiT,EAAOijB,UAA0BjjB,EAAOijB,QAAQ30F,MAAM,OAAQ,CAC3F,IAAMqG,EAAa,IAAI4I,MAAM,oBAK7B,MAJA5I,EAAMqrE,OAASpzD,KAAKE,UAAUkzD,IACzBA,EAAOA,QAAU,IAAI7jE,cAAczN,QAAQ,eAAiB,IAC7DiG,EAAM2gU,eAAgB,GAEpB3gU,CACT,CAED,OAAOqrE,EAAOA,MACjB,CAED,SAAS+jQ,GAAc/jQ,GAEnB,GAAIA,GAAkC,GAAlBA,EAAQjT,QAAwC,SAAnBiT,EAAQijB,UAAuBjjB,EAAOA,QAAU,IAAI7jE,cAAczN,QAAQ,eAAiB,EAAG,CAC3I,IAAMiG,EAAa,IAAI4I,MAAM,sBAG7B,MAFA5I,EAAMqrE,OAASpzD,KAAKE,UAAUkzD,GAC9BrrE,EAAM2gU,eAAgB,EAChB3gU,CACT,CAED,GAAsB,OAAlBqrE,EAAOiiQ,QAAkB,CAEzB,IAAMttU,EAAa,IAAI4I,MAAM,oBAE7B,MADA5I,EAAMqrE,OAASpzD,KAAKE,UAAUkzD,GACxBrrE,CACT,CAED,GAAIqrE,EAAOrrE,MAAO,CAEd,IAAMA,EAAa,IAAI4I,MAAMyiE,EAAOrrE,MAAMsuF,SAAW,iBAGrD,MAFIjjB,EAAOrrE,MAAMihE,OAAQjhE,EAAMihE,KAAOoK,EAAOrrE,MAAMihE,MAC/CoK,EAAOrrE,MAAMyV,OAAQzV,EAAMyV,KAAO41D,EAAOrrE,MAAMyV,MAC7CzV,CACT,CAED,OAAOqrE,EAAOA,MACjB,CAGD,SAASgkQ,GAAY3pL,GACjB,GAAiB,YAAbA,EAA0B,MAAM,IAAI98I,MAAM,yBAC9C,MAAiB,WAAb88I,EAAgCA,EAE7BnyI,SAASmyI,EAASv1C,UAAU,GAAI,GAC1C,CAGD,SAASi8N,GAAWn8O,EAAgBjwF,EAAY8lJ,GAG5C,GAAe,SAAX71D,GAAqBjwF,EAAMihE,OAASm3E,EAAAA,GAAAA,OAAAA,aAA4B,CAChE,IAAMn6I,EAAI+B,EAAMA,MAGhB,GAAI/B,IAAMA,EAAEqwF,QAAQ30F,MAAM,cAAgBsE,EAAEqwF,QAAQ30F,MAAM,wBAAyB,CAE/E,IAAI8b,EAAOxX,EAAEwX,KAGb,GAFIA,IAAQA,EAAO,KAAOA,EAAKmkD,QAAQ,SAAU,MAE7Cm6E,EAAAA,EAAAA,IAAYt+H,GAAS,OAAOA,EAEhC0iI,GAAOM,WAAW,wCAAyCL,EAAAA,GAAAA,OAAAA,eAA8B,CACrFp4I,MAAAA,EAAOyV,KAAM,MAEpB,CACJ,CAGD,IAAI64E,EAAUtuF,EAAMsuF,QAuCpB,MAtCItuF,EAAMihE,OAASm3E,EAAAA,GAAAA,OAAAA,eACXp4I,EAAMA,OAAyC,kBAAzBA,EAAMA,MAAMsuF,QAClCA,EAAUtuF,EAAMA,MAAMsuF,QACQ,kBAAhBtuF,EAAM2lG,KACpBrX,EAAUtuF,EAAM2lG,KACsB,kBAAxB3lG,EAAMonO,eACpB94I,EAAUtuF,EAAMonO,gBAGxB94I,GAAWA,GAAW,IAAI9mF,eAGd7N,MAAM,uBACdw+I,GAAOM,WAAW,oDAAqDL,EAAAA,GAAAA,OAAAA,mBAAkC,CACtGp4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAKlBx3D,EAAQ30F,MAAM,8EACdw+I,GAAOM,WAAW,8BAA+BL,EAAAA,GAAAA,OAAAA,cAA6B,CAC3Ep4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAKlBx3D,EAAQ30F,MAAM,wCACbw+I,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,wBAAuC,CACjFp4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAInBx3D,EAAQ30F,MAAM,4DACdw+I,GAAOM,WAAW,4EAA6EL,EAAAA,GAAAA,OAAAA,wBAAuC,CAClIp4I,MAAAA,EAAOiwF,OAAAA,EAAQ61D,YAAAA,IAIjB9lJ,CACT,CAEM,IAAM24T,GAAb,0CAII,WAAYz6L,EAAsBiB,GAAe,4BAC7C,cAAMjB,IAEN+d,EAAAA,EAAAA,KAAe,UAAM,UAAW,EAAKqzL,eACrCrzL,EAAAA,EAAAA,KAAe,UAAM,SAAU9c,GAAU,MAJI,CAKhD,CATL,yCAWI,WACI,OAAOloI,KAAKinI,QAAUjnI,KAAKinI,QAAQ3sH,KAAM,WACrC,IAAK,YACD,MAAO,2BACX,IAAK,UACD,MAAO,mCACX,IAAK,UACD,MAAO,mCACX,IAAK,QACD,MAAO,iCACX,IAAK,SACD,MAAO,kCACX,IAAK,UACD,MAAO,mCACX,IAAK,WACD,MAAO,sCACX,IAAK,iBACD,MAAO,4CAIf,OAAO4mI,GAAOQ,mBAAmB,sBAAuB,UAAW1hJ,KAAKinI,QAAQ3sH,KACnF,GAjCL,oBAmCI,SAAO6oJ,EAAgB9vG,GACnB,IAAMuxI,EAAQ1jM,OAAOQ,KAAK2xD,GAAQsvF,QAAO,SAACC,EAAO3hJ,GAC7C,IAAMtC,EAAQ00D,EAAOpyD,GAIrB,OAHa,MAATtC,IACAikJ,GAAS,IAAJ,OAAS3hJ,EAAT,YAAkBtC,IAEpBikJ,CACV,GAAE,IACG1a,EAAWloI,KAAKkoI,OAAN,kBAA4BloI,KAAKkoI,QAAW,GAC5D,MAAO,GAAP,OAAWloI,KAAKs4U,QAAhB,uBAAwCn1K,GAAxC,OAAmDyhC,GAAnD,OAA6D18D,EAChE,GA7CL,wBA+CI,WACI,MAAO,GAAP,OAAWloI,KAAKs4U,QAAhB,OACH,GAjDL,yBAmDI,SAAYn1K,EAAgB9vG,GAGxB,OAFAA,EAAO8vG,OAASA,EAChB9vG,EAAOklR,OAASv4U,KAAKkoI,OACd70E,CACV,GAvDL,mBAyDU,SAAM8vG,EAAgB9vG,EAA6BgpF,0JA8BtC,OA7BTp9H,EAAOo9H,EAAOr8I,KAAKw4U,aAAcx4U,KAAK0nU,OAAOvkK,EAAQ9vG,GACrD2rF,EAAW3C,EAAOr8I,KAAKy4U,YAAYt1K,EAAQ9vG,GAAS,KACpDqlR,EAAuB,UAAXv1K,EAAsBg1K,GAAe/C,GAEvDp1U,KAAKs0I,KAAK,QAAS,CACfl3B,OAAQ,UACRurB,QAAS1pH,EACTsqH,SAAUvpI,OAGR4tI,EAA6B,CAC/B3uH,IAAKA,EACLspT,qBAAsB,IACtBD,iBAAkB,SAACvrE,EAAiB99O,GAIhC,OAHI,EAAKktT,uBACLE,KAEGrjU,QAAQP,SAAQ,EAC1B,GAGDkwU,EAAqB,KACrB35L,IACApR,EAAWz/B,QAAU,CAAE,eAAgB,oDACvCwqO,EAAaz3U,OAAOQ,KAAKs9I,GAASp5I,KAAI,SAAC3E,GACnC,MAAO,GAAP,OAAWA,EAAX,YAAoB+9I,EAAQ/9I,GAC/B,IAAE4gE,KAAK,eAGS8nQ,GAAU/7L,EAAY+qM,EAAYD,GAAYP,kBAA7D/jQ,EAAS,EAATA,KAENp0E,KAAKs0I,KAAK,QAAS,CACfl3B,OAAQ,WACRurB,QAAS1pH,EACT6uF,UAAUgoD,EAAAA,EAAAA,IAAS1hF,GACnBm1D,SAAUvpI,yBAGPo0E,mDACV,GAjGL,2BAmGU,oKACKp0E,KAAKinI,wDACf,GArGL,qBAuGU,SAAQjuC,EAAgB3lC,GAAW,0QAE7B2lC,SACC,0BAGA,gBAHA,KAGA,EAGA,eAHA,KAGA,EAQA,wBARA,KAQA,EAOA,YAPA,KAOA,EAOA,iBAPA,KAOA,EAQA,oBARA,KAQA,EAQA,aARA,KAQA,GAUA,mBAVA,KAUA,GAMA,0BANA,KAMA,GAMA,SANA,KAMA,GAgBA,gBAhBA,KAgBA,GAYA,YAZA,KAYA,GAmDA,kBAnDA,KAmDA,4CAhJMh5F,KAAKwuG,MAAM,QAAS,CAAE4O,OAAQ,qDAG9Bp9G,KAAKwuG,MAAM,QAAS,CAAE4O,OAAQ,kDAI9Bp9G,KAAKwuG,MAAM,UAAW,CACzB4O,OAAQ,UACR6iC,QAAS5sF,EAAO4sF,QAChBgX,IAAK5jG,EAAOo7F,4CAITzuJ,KAAKwuG,MAAM,QAAS,CACvB4O,OAAQ,0BACR6iC,QAAS5sF,EAAO4sF,QAChBgX,IAAK5jG,EAAOo7F,4CAITzuJ,KAAKwuG,MAAM,QAAS,CACvB4O,OAAQ,cACR6iC,QAAS5sF,EAAO4sF,QAChBgX,IAAK5jG,EAAOo7F,4CAITzuJ,KAAKwuG,MAAM,QAAS,CACvB4O,OAAQ,mBACR6iC,QAAS5sF,EAAO4sF,QAChBr8I,SAAUyvD,EAAOzvD,SACjBqzJ,IAAK5jG,EAAOo7F,4CAITzuJ,KAAKwuG,MAAM,QAAS,CACvB4O,OAAQ,yBACRphG,IAAKq3C,EAAO8/Q,oBACb,GAAMhjO,OAAM,SAACpnG,GACZ,OAAOosU,GAAW,kBAAmBpsU,EAAOsqD,EAAO8/Q,kBACtD,iBAGG9/Q,EAAOo7F,SAAU,0CACVzuJ,KAAKwuG,MAAM,QAAS,CACvB4O,OAAQ,uBACR65C,IAAK5jG,EAAOo7F,SACZ31D,QAAUzlC,EAAO2gR,oBAAsB,OAAQ,yBAGjD,IAAIriU,MAAM,0EAGT3R,KAAKwuG,MAAM,QAAS,CACvB4O,OAAQ,2BACRw7N,OAAQvlR,EAAOo4E,oDAIZzrI,KAAKwuG,MAAM,QAAS,CACvB4O,OAAQ,4BACRw7N,OAAQvlR,EAAOo4E,8BAIK,WAApBp4E,EAAOo7F,SAAa,uBACd,IAAI98I,MAAM,gEAQT,OALLknU,EAAWZ,GAAuB5kR,EAAOw7F,cACtCsU,OAAS,QAClB01K,EAASz7N,OAAS,+BAGDp9G,KAAKwuG,MAAM,QAASqqO,GAAU,wGAEpC1D,GAAW,OAAD,KAAgB9hR,EAAOw7F,sBAUjC,OALLgqL,EAAWZ,GAAuB5kR,EAAOw7F,cACtCsU,OAAS,QAClB01K,EAASz7N,OAAS,sCAGDp9G,KAAKwuG,MAAM,QAASqqO,GAAU,wGAEpC1D,GAAW,cAAD,KAAuB9hR,EAAOw7F,sBAkC1B,OA7BnBzlJ,EAA4B,CAAEg0G,OAAQ,WAExC/pD,EAAOxxD,OAAOs3J,YACd/vJ,EAAK+vJ,UAAYi/K,GAAY/kR,EAAOxxD,OAAOs3J,YAG3C9lG,EAAOxxD,OAAOo3J,UACd7vJ,EAAK6vJ,QAAUm/K,GAAY/kR,EAAOxxD,OAAOo3J,UAGzC5lG,EAAOxxD,OAAOo+I,UACd72I,EAAK62I,QAAU5sF,EAAOxxD,OAAOo+I,SAI7B5sF,EAAOxxD,OAAOwqJ,QAAUh5F,EAAOxxD,OAAOwqJ,OAAOztJ,OAAS,IAClDy0D,EAAOxxD,OAAOwqJ,OAAOztJ,OAAS,GAC9BsiJ,GAAOM,WAAW,0BAA2BL,EAAAA,GAAAA,OAAAA,sBAAqC,CAAEkL,OAAQh5F,EAAOxxD,OAAOwqJ,SAG1E,IAAhCh5F,EAAOxxD,OAAOwqJ,OAAOztJ,SAEE,kBADjBk6U,EAASzlR,EAAOxxD,OAAOwqJ,OAAO,KACiB,KAAlBysL,EAAOl6U,QACtCsiJ,GAAOM,WAAW,2BAA4BL,EAAAA,GAAAA,OAAAA,sBAAqC,CAAE23L,OAAQA,IAEjG1vU,EAAK0vU,OAASA,cAIS94U,KAAKwuG,MAAM,OAAQplG,WAA5CysJ,EAAAA,EAAAA,KAGFgmF,EAAoC,CAAC,EAGhCj+O,EAAI,eAAGA,EAAIi4J,EAAKj3J,QAAAA,oBAEA,OADfsS,EAAM2kJ,EAAKj4J,IACTu4J,UAAa,2DACU,MAA3B0lF,EAAO3qO,EAAIo5T,aAAgB,iBACb,iBAAMtqU,KAAK4tJ,SAAS18I,EAAIo5T,sBAAhC38K,EAAQ,EAARA,QAEFkuF,EAAO3qO,EAAIo5T,aAAe38K,EAAMx+E,cAGxCj+D,EAAIilJ,UAAY0lF,EAAO3qO,EAAIo5T,qBATE1sU,qDAY1Bi4J,cAImB,cAAtB71J,KAAKinI,QAAQ3sH,KAAS,0CAAsB,WAC7B,YAAZ6B,qBAAkBnc,KAAKwuG,MAAM,QAAS,CAAE4O,OAAQ,wCAAe27N,8GAMvEr2B,EAAMkuB,QAAOryU,KAAA,KAACy6F,EAAQ3lC,sEAChC,GApQL,wBA0QU,SAAWqkG,EAAyC26K,EAAuB2G,kJAG/D,gBAAMh5U,KAAKkvJ,YAAYwI,UAMtB,wBALiB,MAAd26K,EAAsB,EAAGA,OACf,MAAZ2G,EAAoB,SAAUA,EAJxC3lR,EAAS,CACX+pD,OAAQ,SACR6iC,QAAS,EAATA,GACAg5L,WAAY,EAAZA,GACAC,SAAU,EAAVA,GACAt/Q,KAAM,gBAGW55D,KAAKwuG,MAAM,UAAWn7C,iBAArC+gB,EAAS,EAATA,uBAECA,EAAOxuE,KAAI,SAAC0T,GACf,CAAC,kBAAmB,MAAMjX,SAAQ,SAASpB,GACxB,IAAXqY,EAAGrY,WAAqBqY,EAAGrY,EAClC,IACiB,MAAdqY,EAAGmxT,SAAyC,MAAtBnxT,EAAG69H,kBACzB79H,EAAGmxT,QAAUnxT,EAAG69H,iBAEpB,IAAMtxI,EAAO,EAAK6qS,UAAU86B,oBAAoBlyT,GAEhD,OADIA,EAAG6/T,YAAatzU,EAAK+yL,UAAYt8K,SAAShD,EAAG6/T,YAC1CtzU,CACV,qDACJ,GAhSL,iCAkSI,WACI,OAAuB,MAAf7F,KAAKkoI,MAChB,KApSL,GAAuCqnM,IC5JjC,SAAU6J,GAAS1pU,GAGrB,IAAK,IAAI9R,GAFT8R,EAAQA,EAAMC,SAEK/Q,OAAS,EAAGhB,EAAI,EAAGA,IAAK,CACvC,IAAM8wB,EAAIvoB,KAAKQ,MAAMR,KAAKS,UAAYhJ,EAAI,IACpCob,EAAMtJ,EAAM9R,GAClB8R,EAAM9R,GAAK8R,EAAMgf,GACjBhf,EAAMgf,GAAK1V,CACd,CAED,OAAOtJ,CACV,4SCEKwxI,GAAS,IAAIC,EAAAA,GAAOviI,IAE1B,SAASna,KAAQ,OAAQ,IAAID,MAAQoiO,SAAY,CAIjD,SAASyyG,GAAcxW,GAGnB,IAFA,IAAIzuP,EAAS,KAEJx2E,EAAI,EAAGA,EAAIilU,EAASjkU,OAAQhB,IAAK,CACtC,IAAMqpI,EAAU47L,EAASjlU,GAGzB,GAAe,MAAXqpI,EAAmB,OAAO,KAE1B7yD,EAEMA,EAAO95D,OAAS2sH,EAAQ3sH,MAAQ85D,EAAOozD,UAAYP,EAAQO,UAC3DpzD,EAAOquP,aAAex7L,EAAQw7L,YAAqC,MAArBruP,EAAOquP,YAA4C,MAAtBx7L,EAAQw7L,aAErFvhL,GAAOQ,mBAAmB,oBAAqB,WAAYmhL,GAG/DzuP,EAAS6yD,CAEhB,CAED,OAAO7yD,CACV,CAED,SAASklQ,GAAO58S,EAAuB68S,GACnC78S,EAASA,EAAO/sB,QAAQiqD,OACxB,IAAM4/Q,EAASrzU,KAAKQ,MAAM+1B,EAAO99B,OAAS,GAG1C,GAAI89B,EAAO99B,OAAS,EAChB,OAAO89B,EAAO88S,GAIlB,IAAM1vU,EAAI4yB,EAAO88S,EAAS,GAAI5lU,EAAI8oB,EAAO88S,GAEzC,OAAgB,MAAZD,GAAoBpzU,KAAKG,IAAIwD,EAAI8J,GAAK2lU,EAC/B,MAGHzvU,EAAI8J,GAAK,CACpB,CAED,SAASwnB,GAAUz8B,GACf,GAAc,OAAVA,EACA,MAAO,OACJ,GAAsB,kBAAXA,GAAyC,mBAAXA,EAC5C,OAAOqiB,KAAKE,UAAUviB,GACnB,GAAsB,kBAAXA,EACd,OAAOA,EACJ,GAAI44I,EAAAA,GAAAA,YAAsB54I,GAC7B,OAAOA,EAAM2L,WACV,GAAIzM,MAAMC,QAAQa,GACrB,OAAOqiB,KAAKE,UAAUviB,EAAMiH,KAAI,SAAChI,GAAD,OAAOw9B,GAAUx9B,EAAjB,KAC7B,GAAsB,kBAAXe,EAAqB,CACnC,IAAM+C,EAAOR,OAAOQ,KAAK/C,GAEzB,OADA+C,EAAKk4D,OACE,IAAMl4D,EAAKkE,KAAI,SAAC3E,GACnB,IAAI6T,EAAInW,EAAMsC,GAMd,OAJI6T,EADc,oBAAPA,EACH,aAEAsmB,GAAUtmB,GAEXkM,KAAKE,UAAUjgB,GAAO,IAAM6T,CACtC,IAAE+sD,KAAK,KAAO,GAClB,CAED,MAAM,IAAIlwD,MAAM,8BAAgChT,EACnD,CAGD,IAAI86U,GAAU,EA+Bd,SAASlQ,GAAM3pU,GACX,IAAI4hM,EAAqB,KAErB4nI,EAAsB,KACtBxrM,EAA0B,IAAI50H,SAAQ,SAACP,GACvC+4L,EAAS,WACD4nI,IACApgE,aAAaogE,GACbA,EAAQ,MAEZ3gU,GACH,EACD2gU,EAAQp7N,WAAWwzF,EAAQ5hM,EAC9B,IAWD,MAAO,CAAE4hM,OAAAA,EAAQk4I,WAJjB,WACI,OAAO97M,CACV,EAE4B+3B,KAThB,SAACv6B,GAEV,OADAwC,EAAUA,EAAQ30H,KAAKmyH,EAE1B,EAOJ,CAED,IAAMu+M,GAAgB,CAClBx4L,EAAAA,GAAAA,OAAAA,eACAA,EAAAA,GAAAA,OAAAA,mBACAA,EAAAA,GAAAA,OAAAA,cACAA,EAAAA,GAAAA,OAAAA,wBACAA,EAAAA,GAAAA,OAAAA,yBAGEy4L,GAAoB,CACtB,UACA,OACA,YACA,iBACA,SACA,eAeJ,SAASC,GAAkBtzI,EAAuB9hM,GAC9C,IAAM2vE,EAAc,CAChBne,OAAQswI,EAAOtwI,QAYnB,OAVA/0D,OAAOC,eAAeizE,EAAQ,WAAY,CAAE5pE,IAAK,kBAAM+7L,EAAOh9D,QAAb,IAC7Cg9D,EAAOp+J,QAASisC,EAAOjsC,MAAQo+J,EAAOp+J,OACtC1jC,IAAO2vE,EAAOx0E,SAAY6E,EAAM8hM,EAAOp+J,OACvCo+J,EAAO9nM,OACH8nM,EAAOx9L,MACPqrE,EAAOrrE,MAAQw9L,EAAOx9L,MAEtBqrE,EAAOA,OAASmyH,EAAOnyH,QAAU,MAGlCA,CACV,CA0BD,SAAS0lQ,GAAevwM,EAA4BvwC,EAAgB3lC,GAEhE,IAAIzhD,EAAYwpB,GAEhB,OAAQ49D,GACJ,IAAK,iBAKD,OAAO,SAAS+gP,GACZ,IAAMr9S,EAASq9S,EAAQn0U,KAAI,SAACiO,GAAD,OAAOA,EAAEugE,MAAT,IAGvBk2P,EAAcgP,GAAOS,EAAQn0U,KAAI,SAACiO,GAAD,OAAOA,EAAEugE,MAAT,IAAkB,GACvD,GAAmB,MAAfk2P,EAYJ,OAVAA,EAAcnkU,KAAK8K,KAAKq5T,GAGpB5tS,EAAO55B,QAAQwnU,EAAc,IAAM,GAAKA,IAGxCA,GAAe/gM,EAASywM,sBACxBzwM,EAASywM,oBAAsB1P,GAG5B/gM,EAASywM,mBACnB,EAEL,IAAK,cAID,OAAO,SAASD,GACZ,IAAMr9S,EAASq9S,EAAQn0U,KAAI,SAACiO,GAAD,OAAOA,EAAEugE,MAAT,IAE3B,OADA13C,EAAOk9B,OACAl9B,EAAOv2B,KAAKQ,MAAM+1B,EAAO99B,OAAS,GAC5C,EAEL,IAAK,gBAGD,OAAO,SAASm7U,GACZ,OAAOT,GAAOS,EAAQn0U,KAAI,SAACiO,GAAD,OAAOA,EAAEugE,MAAT,IAC7B,EAGL,IAAK,aACL,IAAK,sBACL,IAAK,UACL,IAAK,eACL,IAAK,OACL,IAAK,cACL,IAAK,UACD,MAGJ,IAAK,iBACL,IAAK,wBACDxiE,EAAY,SAAS0H,GACjB,OAAU,MAANA,EAAqB,OAEzBA,GAAK61I,EAAAA,EAAAA,IAAY71I,IACds8I,eAAiB,EACbx6H,GAAU9hB,GACpB,EACD,MAGJ,IAAK,WAGG1H,EADAyhD,EAAO2gR,oBACK,SAASrmL,GACjB,OAAa,MAATA,EAAwB,OAE5BA,GAAQwB,EAAAA,EAAAA,IAAYxB,IACd29K,aAAe39K,EAAM29K,aAAa1lU,KAAI,SAAC0T,GAGzC,OAFAA,GAAK61I,EAAAA,EAAAA,IAAY71I,IACds8I,eAAiB,EACbt8I,CACV,IACM8hB,GAAUuyH,GACpB,EAEW,SAASA,GACjB,OAAa,MAATA,EAAwB,KACrBvyH,GAAUuyH,EACpB,EAEL,MAEJ,QACI,MAAM,IAAIh8I,MAAM,mBAAqBqnF,GAK7C,OA1HJ,SAAyBpnF,EAAmCywT,GACxD,OAAO,SAAS0X,GAGZ,IAAME,EAA4D,CAAC,EACnEF,EAAQ13U,SAAQ,SAACwR,GACb,IAAMlV,EAAQiT,EAAUiC,EAAEugE,QACrB6lQ,EAAMt7U,KAAUs7U,EAAMt7U,GAAS,CAAE6sB,MAAO,EAAG4oD,OAAQvgE,EAAEugE,SAC1D6lQ,EAAMt7U,GAAO6sB,OAChB,IAID,IADA,IAAM9pB,EAAOR,OAAOQ,KAAKu4U,GAChBr8U,EAAI,EAAGA,EAAI8D,EAAK9C,OAAQhB,IAAK,CAClC,IAAMo3J,EAAQilL,EAAMv4U,EAAK9D,IACzB,GAAIo3J,EAAMxpI,OAAS62S,EACf,OAAOrtK,EAAM5gF,MAEpB,CAIJ,CACJ,CAmGU8lQ,CAAgBtoU,EAAW23H,EAAS84L,OAE9C,CAID,SAAe8X,GAAY5zI,EAAuB+jI,8IAGjB,OAFvB/gM,EAA0Bg9D,EAAOh9D,UAEzB+gM,aAAuB/gM,EAAS+gM,aAAeA,IAAiC,IAAjBA,GAAiB,yCACnF/gM,mCAGJsgM,IAAK,WACR,OAAO,IAAI7gU,SAAQ,SAACP,EAASC,GACzBslG,YAAW,WAGP,OAAIu7B,EAAS+gM,aAAeA,EAAsB7hU,EAAQ8gI,GAGtDg9D,EAAOqsI,UAAoBnqU,EAAQ,MAGhCA,OAAQY,EAClB,GAAE,EACN,GACJ,GAAE,CAAE2gU,SAAUzgM,+CAClB,CAED,SAAe6wM,GAAU7zI,EAAuB8zI,EAA4BrhP,EAAgB3lC,2IACpFk2E,EAAWg9D,EAAOh9D,cAEdvwC,SACC,yBACA,gBADA,OAGA,kBAFA,KAEA,EAKA,eALA,MAMA,wBADA,MAEA,YADA,KADA,EAOA,iBALA,KAKA,GAKA,aALA,KAKA,GAKA,SALA,MAMA,gBADA,QASA,mBARA,MASA,0BADA,QAGA,YAFA,KAEA,4CAnCMuwC,EAASvwC,iBAENuwC,EAAU+wM,cAAe,yCAClB/wM,EAAU+wM,+DAMvBjnR,EAAOo7F,YAAY3R,EAAAA,EAAAA,IAAYzpF,EAAOo7F,UAAR,iBACnB,iBAAM0rL,GAAY5zI,EAAQ8zI,WAArC9wM,EAAW,EAAXA,sCAEGA,EAASvwC,GAAQ3lC,EAAO4sF,QAAS5sF,EAAOo7F,UAAY,uBAEvDp7F,EAAOo7F,YAAY3R,EAAAA,EAAAA,IAAYzpF,EAAOo7F,UAAR,iBACnB,iBAAM0rL,GAAY5zI,EAAQ8zI,WAArC9wM,EAAW,EAAXA,sCAEGA,EAASgxM,aAAalnR,EAAO4sF,QAAS5sF,EAAOzvD,SAAUyvD,EAAOo7F,UAAY,uBAE7Ep7F,EAAOo7F,YAAY3R,EAAAA,EAAAA,IAAYzpF,EAAOo7F,UAAR,iBACnB,iBAAM0rL,GAAY5zI,EAAQ8zI,WAArC9wM,EAAW,EAAXA,sCAEGA,EAAUl2E,EAAO2gR,oBAAsB,2BAA4B,YAAa3gR,EAAOo7F,UAAYp7F,EAAO8iG,wBAG7G9iG,EAAOo7F,YAAY3R,EAAAA,EAAAA,IAAYzpF,EAAOo7F,UAAR,iBACnB,iBAAM0rL,GAAY5zI,EAAQ8zI,WAArC9wM,EAAW,EAAXA,gBAEW,SAAXvwC,IAAqB3lC,EAAOo7F,SAAAA,0CACrBllB,EAASvwC,GAAQ3lC,EAAOw7F,YAAax7F,EAAOo7F,4CAEhDllB,EAASvwC,GAAQ3lC,EAAOw7F,+CAGxBtlB,EAASvwC,GAAQ3lC,EAAOo4E,gCAE3B5pI,EAASwxD,EAAOxxD,QACRs3J,YAAarc,EAAAA,EAAAA,IAAYj7I,EAAOs3J,YAAgBt3J,EAAOo3J,UAAWnc,EAAAA,EAAAA,IAAYj7I,EAAOo3J,UAAR,iBAC1E,iBAAMkhL,GAAY5zI,EAAQ8zI,WAArC9wM,EAAW,EAAXA,sCAEGA,EAAS6vB,QAAQv3J,qCAIzBq/I,GAAOM,WAAW,uBAAwBL,EAAAA,GAAAA,OAAAA,cAA6B,CAC1EnoD,OAAQA,EACR3lC,OAAQA,gDAEf,CAEM,IAAM+uQ,GAAb,0CASI,WAAY3jL,EAAqD4jL,GAAe,sBACnD,IAArB5jL,EAAU7/I,QACVsiJ,GAAOQ,mBAAmB,oBAAqB,YAAajD,GAGhE,IAAM+7L,EAAiD/7L,EAAU74I,KAAI,SAAC60U,EAAkBlrU,GACpF,GAAIi+I,EAAAA,GAAAA,WAAoBitL,GAAmB,CACvC,IAAMC,EAAevO,GAAoBsO,GAAoB,IAAM,IAEnE,OAAOv5U,OAAO6Q,OAAO,CAAEw3H,SAAUkxM,EAAkBxkR,OAAQ,EAAGykR,aAAAA,EAAcliJ,SAD3D,GAEpB,CAED,IAAM+N,GAAiCp3C,EAAAA,EAAAA,IAAYsrL,GAE5B,MAAnBl0I,EAAO/N,WAAoB+N,EAAO/N,SAAW,GACtB,MAAvB+N,EAAOm0I,eACPn0I,EAAOm0I,aAAevO,GAAoBsO,GAAoB,IAAM,KAEnD,MAAjBl0I,EAAOtwI,SAAkBswI,EAAOtwI,OAAS,GAE7C,IAAMA,EAASswI,EAAOtwI,OAKtB,OAJIA,EAAS,GAAKA,EAAS,KAAOA,EAAS,IACvCirF,GAAOQ,mBAAmB,8CAA1B,oBAAuFnyI,EAAvF,YAAyG0mD,GAGtG/0D,OAAO6Q,OAAOw0L,EACxB,IAEKx3F,EAAQyrO,EAAgB73L,QAAO,SAACC,EAAO/uI,GAAR,OAAe+uI,EAAQ/uI,EAAEoiD,MAAzB,GAAkC,GAEzD,MAAVosQ,EACAA,EAAStzN,EAAQ,EACVszN,EAAStzN,GAChBmyC,GAAOQ,mBAAmB,oDAAqD,SAAU2gL,GAI7F,IAAI2T,EAA6CqD,GAAcmB,EAAgB50U,KAAI,SAACiO,GAAD,OAAcA,EAAE01H,SAAWtC,OAA3B,KArCP,OAwCtD,MAAlB+uM,IACAA,EAAiB,IAAIhtU,SAAQ,SAACP,EAASC,GACnCslG,YAAW,WACP,EAAK4hO,gBAAgB3mU,KAAKR,EAASC,EACtC,GAAE,EACN,KAGL,cAAMstU,IAGNhxL,EAAAA,EAAAA,KAAe,UAAM,kBAAmB9jJ,OAAO6Q,OAAOyoU,KACtDx1L,EAAAA,EAAAA,KAAe,UAAM,SAAUq9K,GAE/B,EAAK2X,qBAAuB,EAtDgD,CAuD/E,CAhEL,4CAkEU,iJACe,gBAAMhxU,QAAQ+nH,IAAI/wH,KAAKw6U,gBAAgB50U,KAAI,SAACiO,GAAD,OAAOA,EAAE01H,SAASkW,YAAlB,mBAAtDojL,EAAW,EAAXA,uBACCwW,GAAcxW,mDACxB,GArEL,qBAuEU,SAAQ7pO,EAAgB3lC,qKAEX,oBAAX2lC,EAAW,iBAC4B,gBAAMhwF,QAAQ+nH,IAAI/wH,KAAKw6U,gBAAgB50U,KAAI,SAACiO,GAC/E,OAAOA,EAAE01H,SAASiQ,gBAAgBnmF,EAAO8/Q,mBAAmBlqU,MAAK,SAACmrE,GAC9D,OAAOA,EAAOjF,IACjB,IAAE,SAACpmE,GACA,OAAOA,CACV,GACJ,YANKiwG,EAAAA,EAAAA,KASGp7G,EAAI,cAAGA,EAAIo7G,EAAQp6G,QAAAA,oBAED,kBADjBw1E,EAAS4kC,EAAQp7G,IACA,yCAAmBw2E,UAFVx2E,iCAM9Bo7G,EAAQ,eAKgB,IAA9Bh5G,KAAKg6U,qBAAyC,mBAAXhhP,EAAW,iBAC9C,iBAAMh5F,KAAK8xU,yBAGT5J,EAAc4R,GAAe95U,KAAMg5F,EAAQ3lC,IAI3C0mR,EAAgCX,GAASp5U,KAAKw6U,gBAAgB50U,IAAIupJ,EAAAA,MAChEv1F,MAAK,SAAC9vD,EAAG8J,GAAJ,OAAW9J,EAAE0uL,SAAW5kL,EAAE4kL,QAA1B,IAEP6hJ,EAAqBr6U,KAAKg6U,oBAE5Bp8U,EAAI,EACJkoN,GAAQ,yHASR,IAPMv0L,EAAK9sB,KAGPk2U,EAAiBZ,EAAQl4U,QAAO,SAACgS,GAAD,OAAQA,EAAEw9T,QAAY9/S,EAAK1d,EAAEs0B,MAASt0B,EAAE6mU,YAAxC,IACP/3L,QAAO,SAACC,EAAO/uI,GAAR,OAAe+uI,EAAQ/uI,EAAEoiD,MAAzB,GAAkC,gBAIlE,IAAMswI,EAASwzI,EAAQn8U,KAEjBy5U,EAAMoC,KAEZlzI,EAAOp+J,MAAQ1jC,KACf8hM,EAAOwhI,QAAUwB,GAAMhjI,EAAOm0I,cAC9Bn0I,EAAOwhI,QAAQpyK,MAAK,WAAQ4wC,EAAOwhI,QAAU,IAAO,IAEpDxhI,EAAO8qI,OAAS+I,GAAU7zI,EAAQ8zI,EAAoBrhP,EAAQ3lC,GAAQpqD,MAAK,SAACmrE,GACxEmyH,EAAO9nM,MAAO,EACd8nM,EAAOnyH,OAASA,EAEZ,EAAK+iF,cAAc,UACnB,EAAK7iB,KAAK,QAAS,CACfl3B,OAAQ,UACRi6N,IAAKA,EACLuD,QAASf,GAAkBtzI,EAAQ9hM,MACnCkkI,QAAS,CAAE3vC,OAAQA,EAAQ3lC,QAAQyiG,EAAAA,EAAAA,IAASziG,IAC5Ck2E,SAAU,GAIrB,IAAE,SAACxgI,GACAw9L,EAAO9nM,MAAO,EACd8nM,EAAOx9L,MAAQA,EAEX,EAAKouJ,cAAc,UACnB,EAAK7iB,KAAK,QAAS,CACfl3B,OAAQ,UACRi6N,IAAKA,EACLuD,QAASf,GAAkBtzI,EAAQ9hM,MACnCkkI,QAAS,CAAE3vC,OAAQA,EAAQ3lC,QAAQyiG,EAAAA,EAAAA,IAASziG,IAC5Ck2E,SAAU,GAGrB,IAEG,EAAK4tB,cAAc,UACnB,EAAK7iB,KAAK,QAAS,CACfl3B,OAAQ,UACRi6N,IAAKA,EACLuD,QAASf,GAAkBtzI,EAAQ,MACnC59D,QAAS,CAAE3vC,OAAQA,EAAQ3lC,QAAQyiG,EAAAA,EAAAA,IAASziG,IAC5Ck2E,SAAU,IAIlBoxM,GAAkBp0I,EAAOtwI,QAhDtB0kR,EAAiB,EAAKtY,QAAUzkU,EAAIm8U,EAAQn7U,QAAQ,OAoDrDi8U,EAA+B,GACrCd,EAAQ13U,SAAQ,SAACwR,IACTA,EAAEpV,MAASoV,EAAEw9T,SACjBwJ,EAAQn8U,KAAKmV,EAAEw9T,QACXx9T,EAAEk0T,SAAW8S,EAAQn8U,KAAKmV,EAAEk0T,QAAQ2R,cAC3C,KAEGmB,EAAQj8U,OAAQ,gBAAE,gBAAMoK,QAAQ08P,KAAKm1E,gBAInC7hO,EAAU+gO,EAAQl4U,QAAO,SAACgS,GAAD,OAAQA,EAAEpV,MAAmB,MAAXoV,EAAE9K,KAApB,KACnBnK,QAAU,EAAKyjU,QAAAA,yBAERh5T,KADT+qE,EAAS8zP,EAAYlvN,IACZ3vG,wBAEX0wU,EAAQ13U,SAAQ,SAAAwR,GACRA,EAAEk0T,SAAWl0T,EAAEk0T,QAAQvmI,SAC3B3tL,EAAE++T,WAAY,CACjB,yBACMx+P,eAEN0xI,EAAO,iBAAE,iBAAMyjH,GAAM,KAAKmQ,qBAC/B5zH,GAAQ,aAINzkJ,EAAS04Q,EAAQp3L,QAAO,SAACC,EAAO/uI,GAClC,IAAKA,EAAEpV,MAAmB,MAAXoV,EAAE9K,MAAiB,OAAO65I,EAEzC,IAAM54E,EAAcn2D,EAAE9K,MAAQihE,KAM9B,OALI2vQ,GAAc72U,QAAQknE,IAAS,IAC1B44E,EAAM54E,KAAS44E,EAAM54E,GAAQ,CAAEjhE,MAAO8K,EAAE9K,MAAOktD,OAAQ,IAC5D2sF,EAAM54E,GAAM/T,QAAUpiD,EAAEoiD,QAGrB2sF,CACV,GAA2D,CAAC,GAE7D1hJ,OAAOQ,KAAK2/D,GAAQh/D,SAAQ,SAACy4U,GACzB,IAAMb,EAAQ54Q,EAAOy5Q,GACrB,KAAIb,EAAMhkR,OAAS,EAAKosQ,QAAxB,CAGA0X,EAAQ13U,SAAQ,SAAAwR,GACRA,EAAEk0T,SAAWl0T,EAAEk0T,QAAQvmI,SAC3B3tL,EAAE++T,WAAY,CACjB,IAED,IAAM5rU,EAAUizU,EAAMlxU,MAEhB9I,EAAmC,CAAC,EAC1C25U,GAAkBv3U,SAAQ,SAACiY,GACR,MAAXtT,EAAEsT,KACNra,EAAMqa,GAAQtT,EAAEsT,GACnB,IAED4mI,GAAOM,WAAWx6I,EAAE0jJ,QAAU1jJ,EAAEqwF,QAAcyjP,EAAW76U,EAhBd,CAiB9C,IAG6C,IAA1C85U,EAAQl4U,QAAO,SAACgS,GAAD,OAAQA,EAAEpV,IAAV,IAAgBG,OAAW,0UAIlDm7U,EAAQ13U,SAAQ,SAAAwR,GACRA,EAAEk0T,SAAWl0T,EAAEk0T,QAAQvmI,SAC3B3tL,EAAE++T,WAAY,CACjB,sBAEM1xL,GAAOM,WAAW,wBAAyBL,EAAAA,GAAAA,OAAAA,aAA4B,CAC1EnoD,OAAQA,EACR3lC,OAAQA,EAGR2lD,QAAS+gO,EAAQn0U,KAAI,SAACiO,GAAD,OAAOgmU,GAAkBhmU,EAAzB,IACrB01H,SAAUvpI,wDAEjB,KAvPL,GAAsCuvU,ICnZhCwL,GAAmB,KCSnB75L,GAAS,IAAIC,EAAAA,GAAOviI,IAKpBo8T,GAAmB,mCAEZC,GAAb,0CAKI,WAAYh0M,EAAsBiB,GAAY,sBAC1C,IAAMqB,EAAW,IAAIi4L,GAAev6L,EAASiB,GACvC0F,EAAarE,EAASqE,WACxBA,EAAW63D,UACXvkD,GAAOM,WAAW,+CAAgDL,EAAAA,GAAAA,OAAAA,sBAAqC,CACnGmG,UAAW,0CAInB,IAAMroI,EAAM2uH,EAAW3uH,IAAI0jD,QAAQ,SAAU,MAAMA,QAAQ,OAAQ,WATzB,OAU1C,cAAM1jD,EAAKgoH,IAEX+d,EAAAA,EAAAA,KAAe,UAAM,SAAUzb,EAAS2xM,YACxCl2L,EAAAA,EAAAA,KAAe,UAAM,YAAazb,EAAS2xM,YAC3Cl2L,EAAAA,EAAAA,KAAe,UAAM,gBAAiBzb,EAASyuM,eAdL,CAe7C,CApBL,kDAsBI,WACI,OAAQh4U,KAAKk7U,YAAcF,EAC9B,KAxBL,GAA6ClE,IA2BhCtV,GAAb,uJAuGI,WACI,OAAQxhU,KAAKk7U,YAAcF,EAC9B,IAzGL,mCAII,SAA4B/zM,EAAsBiB,GAC9C,OAAO,IAAI+yM,GAAwBh0M,EAASiB,EAC/C,GANL,uBAQI,SAAiBA,GACb,IAAMizM,EAA0E,CAC5EjzM,OAAQ8yM,GACRE,UAAWF,GACXhD,cAAe,MAGnB,OAAc,MAAV9vM,IAEmB,kBAAZA,EACPizM,EAAUD,UAAYhzM,EAES,MAAxBA,EAAO8vM,eACd92L,GAAOmnL,eAA6C,kBAAtBngM,EAAOgzM,UACjC,qCAAsC,YAAahzM,EAAOgzM,WAC9Dh6L,GAAOmnL,eAAiD,kBAA1BngM,EAAO8vM,cACjC,wBAAyB,gBAAiB,cAE9CmD,EAAUD,UAAYhzM,EAAOgzM,UAC7BC,EAAUnD,cAAgB9vM,EAAO8vM,eAE1B9vM,EAAOgzM,YACdC,EAAUD,UAAYhzM,EAAOgzM,WAGjCC,EAAUjzM,OAASizM,EAAUD,WAlBAC,CAqBhC,GApCL,oBAsCI,SAAcl0M,EAAkBiB,GAC5B,IAAIk+D,EAAe,KACnB,OAAOn/D,EAAUA,EAAQ3sH,KAAM,WAC3B,IAAK,YACD8rL,EAAO,oBACP,MACJ,IAAK,UACDA,EAAO,oBACP,MACJ,IAAK,UACDA,EAAO,oBACP,MACJ,IAAK,QACDA,EAAO,kBACP,MACJ,IAAK,SACDA,EAAO,mBACP,MACJ,IAAK,UACDA,EAAO,oBACP,MACJ,IAAK,QACDA,EAAO,4BACP,MACJ,IAAK,WACDA,EAAO,2BACP,MACJ,IAAK,WACDA,EAAO,6BACP,MACJ,IAAK,iBACDA,EAAO,2BACP,MACJ,IAAK,WACDA,EAAO,6BACP,MACJ,IAAK,mBACDA,EAAO,6BACP,MACJ,QACIllD,GAAOM,WAAW,sBAAuBL,EAAAA,GAAAA,OAAAA,iBAAgC,CACrEM,SAAU,UACV9iJ,MAAOsoI,IAInB,IAAM2G,EAA6B,CAC/B86L,WAAW,EACXzpT,IAAM,WAAkBmnL,EAAO,OAASl+D,EAAOgzM,UAC/C5S,iBAAkB,SAACvrE,EAAiB99O,GAIhC,OAHIipH,EAAOgzM,YAAcF,IACrB3O,KAEGrjU,QAAQP,SAAQ,EAC1B,GAQL,OAL4B,MAAxBy/H,EAAO8vM,gBACPpqM,EAAW03D,KAAO,GAClB13D,EAAW63D,SAAWv9D,EAAO8vM,eAG1BpqM,CACV,KArGL,GAAoCgqM,ICrCvBwD,GAAb,wIAQI,SAAKpiP,EAAgB3lC,GAAkB,WAC7Bs1E,EAAU,CACZ3vC,OAAQA,EACR3lC,OAAQA,EACRxyD,GAAKb,KAAKi2U,UACVI,QAAS,OAGa,MAAtBr2U,KAAKq7U,gBACLr7U,KAAKq7U,cAAgB,IAGzB,IAAMC,EAAuB,CAAE3yM,QAAAA,EAASlgI,QAAS,KAAMC,OAAQ,MAEzDk1H,EAAU,IAAI50H,SAAQ,SAACP,EAASC,GAClC4yU,EAAgB7yU,QAAUA,EAC1B6yU,EAAgB5yU,OAASA,CAC5B,IA6DD,OA3DA1I,KAAKq7U,cAAc38U,KAAK48U,GAEnBt7U,KAAKu7U,0BAENv7U,KAAKu7U,wBAA0BvtO,YAAW,WAItC,IAAMi3L,EAAQ,EAAKo2C,cACnB,EAAKA,cAAgB,KACrB,EAAKE,wBAA0B,KAG/B,IAAM5yM,EAAUs8J,EAAMr/R,KAAI,SAAC41U,GAAD,OAAcA,EAAS7yM,OAAvB,IAQ1B,OANA,EAAK2L,KAAK,QAAS,CACfl3B,OAAQ,eACRurB,SAASmtB,EAAAA,EAAAA,IAASntB,GAClBY,SAAU,IAGPogM,GAAU,EAAK/7L,WAAY5sH,KAAKE,UAAUynH,IAAU1/H,MAAK,SAACmrE,GAC7D,EAAKkgE,KAAK,QAAS,CACfl3B,OAAQ,WACRurB,QAASA,EACT76B,SAAU15B,EACVm1D,SAAU,IAKd07J,EAAM5iS,SAAQ,SAACi5U,EAAiB/rU,GAC5B,IAAMyvI,EAAU5qE,EAAO7kE,GACvB,GAAIyvI,EAAQj2I,MAAO,CACf,IAAMA,EAAQ,IAAI4I,MAAMqtI,EAAQj2I,MAAMsuF,SAChCtuF,EAAOihE,KAAOg1E,EAAQj2I,MAAMihE,KAC5BjhE,EAAOyV,KAAOwgI,EAAQj2I,MAAMyV,KAClC88T,EAAgB5yU,OAAOK,EAC1B,MACGuyU,EAAgB7yU,QAAQu2I,EAAQ5qE,OAEvC,GAEJ,IAAE,SAACrrE,GACA,EAAKurI,KAAK,QAAS,CACfl3B,OAAQ,WACRr0G,MAAOA,EACP4/H,QAASA,EACTY,SAAU,IAGd07J,EAAM5iS,SAAQ,SAACi5U,GACXA,EAAgB5yU,OAAOK,EAC1B,GACJ,GAEJ,GAAE,KAGA60H,CACV,KAvFL,GAA0CkhB,ICCpCoC,GAAS,IAAIC,EAAAA,GAAOviI,IAKb68T,GAAb,kJAEI,SAAiBvzM,GAIb,OAHIA,GAA6B,kBAAZA,GACjBgZ,GAAOQ,mBAAmB,iBAAkB,SAAUxZ,GAEnDA,GARO,kBASjB,GAPL,oBASI,SAAcjB,EAAkBiB,GAC5BgZ,GAAOxsI,KAAK,qFAEZ,IAAI0xL,EAAO,KACX,OAAQn/D,EAAQ3sH,MACZ,IAAK,YACD8rL,EAAO,uDACP,MACJ,IAAK,UACDA,EAAO,uDACP,MACJ,IAAK,UACDA,EAAO,uDACP,MACJ,IAAK,SACDA,EAAO,sDACP,MACJ,IAAK,QACDA,EAAO,qDACP,MACJ,QACGllD,GAAOQ,mBAAmB,sBAAuB,UAAWv/I,UAAU,IAG7E,OAAQikM,EAAO,WAAal+D,CAC/B,KAlCL,GAAuC0vM,ICPjC12L,GAAS,IAAIC,EAAAA,GAAOviI,IAIpB88T,GAAuB,2BAGhB5Z,GAAb,uJA2EI,WACI,OAAQ9hU,KAAK27U,gBAAkBD,EAClC,IA7EL,wBAKI,SAAiBxzM,GACb,IAAMizM,EAA4F,CAC9FQ,cAAe,KACfC,cAAc,EACdC,qBAAsB,MAqB1B,OAjBc,MAAV3zM,EACAizM,EAAUQ,cAAgBD,GAEC,kBAAZxzM,EACfizM,EAAUQ,cAAgBzzM,EAEY,MAA/BA,EAAO2zM,sBACdV,EAAUQ,cAAgBzzM,EAAOyzM,cACjCR,EAAUU,qBAAuB3zM,EAAO2zM,sBAEjC3zM,EAAOyzM,cACdR,EAAUQ,cAAgBzzM,EAAOyzM,cAGjCz6L,GAAOQ,mBAAmB,oCAAqC,SAAUxZ,GAGtEizM,CACV,GA/BL,oBAiCI,SAAcl0M,EAAkBiB,GAC5B,IAAIk+D,EAAe,KACnB,OAAQn/D,EAAUA,EAAQ3sH,KAAO,WAC7B,IAAK,SACD8rL,EAAO,kCACP,MACJ,IAAK,YACDA,EAAO,mCACP,MACJ,IAAK,QACDA,EAAO,iCACP,MACJ,IAAK,QACDA,EAAO,oCACP,MACJ,IAAK,WACDA,EAAO,0CACP,MACJ,IAAK,UACDA,EAAO,mCACP,MACJ,IAAK,UACDA,EAAO,mCACP,MACJ,QACIllD,GAAOM,WAAW,sBAAuBL,EAAAA,GAAAA,OAAAA,iBAAgC,CACrEM,SAAU,UACV9iJ,MAAOsoI,IAInB,IAEM2G,EAA6B,CAAEz/B,QAAS,CAAC,EAAIlvF,IAFvC,WAAH,OAAgBmnL,EAAhB,kBAAgCl+D,EAAOyzM,gBAQhD,OALmC,MAA/BzzM,EAAO2zM,uBACPjuM,EAAW03D,KAAO,GAClB13D,EAAW63D,SAAWv9D,EAAO2zM,sBAG1BjuM,CACV,KAzEL,GAAoCgqM,ICP9B12L,GAAS,IAAIC,EAAAA,GAAOviI,IAetBq3T,GAAU,EAMd,SAAS6F,GAAuBvyM,EAA4BwyM,GACxD,IAAMC,EAAU,oBAEhB,OAAO,SAAShjP,EAAgB3lC,GAAkB,WACxCs1E,EAAU,CACZ3vC,OAAQA,EACR3lC,OAAQA,EACRxyD,GAAKo1U,KACLI,QAAS,OAGb,OAAO,IAAIrtU,SAAQ,SAACP,EAASC,GACzB,EAAK4rI,KAAK,QAAS,CACfl3B,OAAQ,UACR4+N,QAAAA,EACArzM,SAASmtB,EAAAA,EAAAA,IAASntB,GAClBY,SAAU,IAGdwyM,EAASpzM,GAAS,SAAC5/H,EAAO+kG,GAEtB,GAAI/kG,EASA,OARA,EAAKurI,KAAK,QAAS,CACfl3B,OAAQ,WACR4+N,QAAAA,EACAjzU,MAAAA,EACA4/H,QAAAA,EACAY,SAAU,IAGP7gI,EAAOK,GAWlB,GARA,EAAKurI,KAAK,QAAS,CACfl3B,OAAQ,WACR4+N,QAAAA,EACArzM,QAAAA,EACA76B,SAAAA,EACAy7B,SAAU,IAGVz7B,EAAS/kG,MAAO,CAChB,IAAMA,EAAQ,IAAI4I,MAAMm8F,EAAS/kG,MAAMsuF,SAGvC,OAFMtuF,EAAOihE,KAAO8jC,EAAS/kG,MAAMihE,KAC7BjhE,EAAOyV,KAAOsvF,EAAS/kG,MAAMyV,KAC5B9V,EAAOK,EACjB,CAEDN,EAAQqlG,EAAS15B,OACpB,GACJ,GACJ,CACJ,CAwCM,IAAMsqE,GAAb,0CAII,WAAYnV,EAA+CtC,GAAoB,sBAC3D,MAAZsC,GACA2X,GAAOQ,mBAAmB,mBAAoB,WAAYnY,GAG9D,IAAIppE,EAAe,KACf87Q,EAAqC,KACrCC,EAAgC,KAPuC,MASlD,oBAAd3yM,GACPppE,EAAO,WACP87Q,EAAmB1yM,MAGnBppE,EAAOopE,EAAS68D,MAAQ78D,EAASppE,MAAQ,KAC5BopE,EAAS4yM,aAClBh8Q,EAAO,YAGX+7Q,EAAc3yM,EAEVA,EAASZ,SACI,KAATxoE,IAAeA,EAAO,aAC1B87Q,EAjEhB,SAA6B1yM,GACzB,OAAO,SAASvwC,EAAgB3lC,GAAkB,WAChC,MAAVA,IAAkBA,EAAS,IAE/B,IAAMs1E,EAAU,CAAE3vC,OAAAA,EAAQ3lC,OAAAA,GAS1B,OAPArzD,KAAKs0I,KAAK,QAAS,CACfl3B,OAAQ,UACR4+N,QAAS,iBACTrzM,SAASmtB,EAAAA,EAAAA,IAASntB,GAClBY,SAAUvpI,OAGPupI,EAASZ,QAAQA,GAAS1/H,MAAK,SAAC6kG,GASnC,OARA,EAAKwmC,KAAK,QAAS,CACfl3B,OAAQ,WACR4+N,QAAS,iBACTrzM,QAAAA,EACA76B,SAAAA,EACAy7B,SAAU,IAGPz7B,CAEV,IAAE,SAAC/kG,GASA,MARA,EAAKurI,KAAK,QAAS,CACfl3B,OAAQ,WACR4+N,QAAS,iBACTrzM,QAAAA,EACA5/H,MAAAA,EACAwgI,SAAU,IAGRxgI,CACT,GACJ,CACJ,CA6BkCqzU,CAAoB7yM,IAChCA,EAAS8V,UAChB48L,EAAmBH,GAAuBvyM,EAAUA,EAAS8V,UAAUx1I,KAAK0/H,IACrEA,EAAS0R,KAChBghM,EAAmBH,GAAuBvyM,EAAUA,EAAS0R,KAAKpxI,KAAK0/H,IAEvE2X,GAAOQ,mBAAmB,uBAAwB,WAAYnY,GAG7DppE,IAAQA,EAAO,aAGxB,cAAMA,EAAM8mE,IAEZ+d,EAAAA,EAAAA,KAAe,UAAM,mBAAoBi3L,IACzCj3L,EAAAA,EAAAA,KAAe,UAAM,WAAYk3L,GAtC0C,CAuC9E,CA3CL,mCA6CI,SAAKljP,EAAgB3lC,GACjB,OAAOrzD,KAAKi8U,iBAAiBjjP,EAAQ3lC,EACxC,KA/CL,GAAkCyrF,IC/E5BoC,GAAS,IAAIC,EAAAA,GAAOviI,IAK1B,SAASy9T,GAAmBp1M,EAAsBnnI,GAI9C,GAHe,MAAXmnI,IAAmBA,EAAU,aAGT,kBAAbA,EAAuB,CAI9B,IAAMvkI,EAAQukI,EAAQvkI,MAAM,kBAC5B,GAAIA,EACA,OAAQA,EAAM,GAAG6N,eACb,IAAK,OAAQ,IAAK,QACd,OAAO,IAAIuuI,GAAgB7X,GAC/B,IAAK,KAAM,IAAK,MACZ,OAAO,IAAI6vM,GAAkB7vM,GACjC,QACIia,GAAOQ,mBAAmB,yBAA0B,UAAWza,GAG9E,CAED,IAAMv2H,EAAI+uI,GAAWxY,GAQrB,OAPKv2H,GAAMA,EAAEgyT,kBACTxhL,GAAOM,WAAW,yCAA0CL,EAAAA,GAAAA,OAAAA,cAA6B,CACrFmG,UAAW,qBACXrgB,QAASA,IAIVv2H,EAAEgyT,iBAAiB,CACtBN,iBAAAA,GAEAR,gBAAAA,GACAM,aAAAA,GACAF,mBAAAA,GACAN,kBAAAA,GACAF,eAAAA,GACA1iL,gBAAAA,GACA28L,kBAAAA,GACA3Z,eAAAA,GACApjL,aAAAA,GAEAq8L,YAAAA,IACDj7U,EACN,qDClFKw8U,GAAa,IAAIzmO,OAAO,mBACxB0mO,GAAc,IAAI1mO,OAAO,qBACzB2mO,GAAa,IAAI3mO,OAAO,wBAMxBqrC,GAAS,IAAIC,EAAAA,GChBI,kBDmBvB,SAASs7L,GAAMp1U,EAAc1I,EAAYb,GACrC,OAAOuJ,GACH,IAAK,UACD,OAAIvJ,GAAkBs1J,EAAAA,EAAAA,IAAQz0J,EAAO,KAC9B0+I,EAAAA,EAAAA,IAAS1+I,GACpB,IAAK,SACD,OAAO8lJ,EAAAA,EAAAA,IAAY9lJ,GACvB,IAAK,QACD,OAAO0+I,EAAAA,EAAAA,IAAS1+I,GACpB,IAAK,OAED,OADAA,EAASA,EAAQ,OAAQ,OACrBb,GAAkBs1J,EAAAA,EAAAA,IAAQz0J,EAAO,KAC9B0+I,EAAAA,EAAAA,IAAS1+I,GAGxB,IAAI+D,EAAS2E,EAAK3E,MAAM65U,IACxB,GAAI75U,EAAO,CAEP,IAAI8Z,EAAOF,SAAS5Z,EAAM,IAAM,OAUhC,OARKA,EAAM,IAAM+qC,OAAOjxB,KAAU9Z,EAAM,IAAQ8Z,EAAO,IAAM,GAAe,IAATA,GAAcA,EAAO,MACpF0kI,GAAOQ,mBAAmB,sBAAuB,OAAQr6I,GAGzDvJ,IAAW0e,EAAO,KAEtB7d,EAAQ44I,EAAAA,GAAAA,KAAe54I,GAAO2lJ,OAAO9nI,IAE9B42I,EAAAA,EAAAA,IAAQz0J,EAAO6d,EAAO,EAChC,CAGD,GADA9Z,EAAQ2E,EAAK3E,MAAM45U,IACR,CACP,IAAM9/T,EAAOF,SAAS5Z,EAAM,IAQ5B,OANI+qC,OAAOjxB,KAAU9Z,EAAM,IAAe,IAAT8Z,GAAcA,EAAO,KAClD0kI,GAAOQ,mBAAmB,qBAAsB,OAAQr6I,IAExDg2I,EAAAA,EAAAA,IAAS1+I,GAAO0wG,aAAe7yF,GAC/B0kI,GAAOQ,mBAAP,4BAAgDr6I,GAAS,QAAS1I,GAElEb,GAAkBu/I,EAAAA,EAAAA,KAAU1+I,EAhD1B,oEAgDyCu6G,UAAU,EAAG,KACrDv6G,CACV,CAGD,IADA+D,EAAQ2E,EAAK3E,MAAM85U,MACN3+U,MAAMC,QAAQa,GAAQ,CAC/B,IAAM8jJ,EAAW//I,EAAM,GACT4Z,SAAS5Z,EAAM,IAAM+qC,OAAO9uC,EAAMC,UACnCD,EAAMC,QACfsiJ,GAAOQ,mBAAP,mCAAuDr6I,GAAS,QAAS1I,GAE7E,IAAMy1E,EAA4B,GAIlC,OAHAz1E,EAAM0D,SAAQ,SAAS1D,GACnBy1E,EAAO11E,KAAK+9U,GAAMh6L,EAAU9jJ,GAAO,GACtC,KACMo+I,EAAAA,EAAAA,IAAO3oE,EACjB,CAED,OAAO8sE,GAAOQ,mBAAmB,eAAgB,OAAQr6I,EAC5D,CAIK,SAAU+5I,GAAKxG,EAA8Bl+G,GAC3Ck+G,EAAMh8I,QAAU89B,EAAO99B,QACvBsiJ,GAAOQ,mBAAmB,qDAAsD,SAAUhlH,GAE9F,IAAMggT,EAA2B,GAIjC,OAHA9hM,EAAMv4I,SAAQ,SAASgF,EAAMkI,GACzBmtU,EAAMh+U,KAAK+9U,GAAMp1U,EAAMq1B,EAAOntB,IACjC,KACMi0I,EAAAA,EAAAA,KAAQzG,EAAAA,EAAAA,IAAO2/L,GACzB,CAEK,SAAUtiM,GAAUQ,EAA8Bl+G,GACpD,OAAOigT,EAAAA,EAAAA,GAAcv7L,GAAKxG,EAAOl+G,GACpC,CAEK,SAAUwhR,GAAOtjK,EAA8Bl+G,GACjD,OAAOkgT,GAAWx7L,GAAKxG,EAAOl+G,GACjC,iBE7ED,SAASmgT,GAAYr+T,EAAc48G,GAC1BA,IACDA,EAAO,SAASz8H,GAAiB,MAAO,CAAE2d,SAAS3d,EAAO,IAAQ,GAGtE,IAAIs/J,EAAK,EAEL7pF,EAAgB,CAAC,EAOrB,OANA51D,EAAKmjD,MAAM,KAAKt/D,SAAQ,SAACyvK,GACrB,IAAIxoB,EAAQwoB,EAAKnwG,MAAM,KACvBs8F,GAAM3hJ,SAASgtI,EAAM,GAAI,IACzBl1E,EAAO6pF,GAAM7iC,EAAKkuB,EAAM,GAC3B,IAEMl1E,CACV,CAED,SAAS0oQ,GAAiBt+T,GACtB,IAAIw/I,EAAK,EACT,OAAOx/I,EAAKmjD,MAAM,KAAK/7D,KAAI,SAACkP,GACxB,IAAIw0I,EAAQx0I,EAAE6sD,MAAM,KASpB,OARqB,IAAjB2nF,EAAM1qJ,OACN0qJ,EAAM,GAAK,IACS,KAAbA,EAAM,KACbA,EAAM,GAAK,KAKR,CAAE15I,EAFAouJ,EAAK1hJ,SAASgtI,EAAM,GAAI,IAEjB5wI,EADhBslJ,EAAK1hJ,SAASgtI,EAAM,GAAI,IAE3B,GACJ,CAED,SAASyzL,GAASp+U,EAAeq+U,GAE7B,IADA,IAAI/+K,EAAK,EACArgK,EAAI,EAAGA,EAAIo/U,EAAOp+U,OAAQhB,IAAK,CACpC,IAAIuV,EAAQ6pU,EAAOp/U,GAEnB,GAAIe,IADJs/J,GAAM9qJ,EAAMvD,IACOjR,GAASs/J,EAAK9qJ,EAAMuF,IAAO/Z,EAAQs/J,IAAO9qJ,EAAMoF,GAAK,KAAQ,EAAG,CAC/E,GAAIpF,EAAMnM,IAAsC,IAAjCmM,EAAMnM,EAAElE,QAAQnE,EAAQs/J,GAAc,SACrD,OAAO9qJ,CACV,CACJ,CACD,OAAO,IACV,CAED,IAAM8pU,GAAmBH,GAAiB,g8CAGpCI,GAAkB,sDAAsDv7Q,MAAM,KAAK/7D,KAAI,SAACkP,GAAD,OAAOwH,SAASxH,EAAG,GAAnB,IAEvFqoU,GAAkC,CACpC,CAAEzkU,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,IACnB,CAAE8I,EAAG,GAAIrF,EAAG,GAAIrM,EAAG,CAAE,IAAM4I,EAAG,KAC9B,CAAE8I,EAAG,GAAIrF,EAAG,EAAGrM,EAAG,CAAE,IAAM4I,EAAG,GAAI2I,EAAG,GACpC,CAAEG,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,EAAGrM,EAAG,CAAE,EAAG,EAAG,GAAK4I,EAAG,GAAI2I,EAAG,GACzC,CAAEG,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,EAAGrM,EAAG,CAAE,GAAI,GAAI,IAAM4I,EAAG,GAAI2I,EAAG,GAC5C,CAAEG,EAAG,GAAIrF,EAAG,GAAIrM,EAAG,CAAE,IAAM4I,EAAG,KAC9B,CAAE8I,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,IACnB,CAAE8I,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,IACnB,CAAE8I,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,EAAGrM,EAAG,CAAE,IAAM4I,EAAG,GAAI2I,EAAG,GACpC,CAAEG,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,GAAI2I,EAAG,GACzB,CAAEG,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,IACnB,CAAE8I,EAAG,IAAKrF,EAAG,EAAGzD,EAAG,KAAM2I,EAAG,GAC5B,CAAEG,EAAG,GAAIrF,EAAG,EAAGzD,EAAG,IAAK2I,EAAG,GAC1B,CAAEG,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,KACnB,CAAE8I,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,KACnB,CAAE8I,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,OACnB,CAAE8I,EAAG,GAAIrF,EAAG,GAAIzD,EAAG,MACnB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,OACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAAM4I,EAAG,IAC1D,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,EAAG,EAAG,EAAG,IAAM4I,EAAG,IAC5C,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,EAAG,EAAG,GAAI,GAAI,GAAI,IAAM4I,EAAG,IACrD,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQzD,EAAG,IACxB,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,IAAM4I,EAAG,IACnC,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,IAAM4I,EAAG,IACnC,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,IAAM4I,EAAG,IACnC,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,IAAM4I,EAAG,IACnC,CAAE8I,EAAG,GAAIrF,GAAI,OAAQrM,EAAG,CAAE,IAAM4I,EAAG,KAEjCwtU,GAAoBP,GAAY,yfAChCQ,GAAoBR,GAAY,0dAChCS,GAAoBT,GAAY,03DA1GtC,SAAgBr+T,GACZ,GAAKA,EAAK5f,OAAS,IAAO,EAAK,MAAM,IAAI+S,MAAM,YAE/C,IADA,IAAIyiE,EAAS,GACJx2E,EAAI,EAAGA,EAAI4gB,EAAK5f,OAAQhB,GAAK,EAClCw2E,EAAO11E,KAAK4d,SAASkC,EAAK06F,UAAUt7G,EAAGA,EAAI,GAAI,KAEnD,OAAOw2E,CACV,IAqGKmpQ,GAAiBT,GAAiB,2LAkClC,SAAUU,GAAS7+U,GAKrB,GAAIA,EAAM+D,MAAM,kBAAoB/D,EAAMC,QAAU,GAAM,OAAOD,EAAM4R,cAGvE,IAvCamsB,EAuCTq/L,GAAQ3pD,EAAAA,EAAAA,IAAiBzzK,GAvChB+9B,EAyCGq/L,EAAMn2N,KAAI,SAACokE,GAEvB,GAAIkzQ,GAAgBp6U,QAAQknE,IAAS,EAAK,MAAO,GACjD,GAAIA,GAAQ,OAAUA,GAAQ,MAAU,MAAO,GAG/C,IAAIyzQ,EApCN,SAA2BC,GAC7B,IAAIvqU,EAAQ4pU,GAASW,EAAWP,IAChC,GAAIhqU,EAAS,MAAO,CAAEuqU,EAAYvqU,EAAME,GAExC,IAAI0oN,EAAQqhH,GAAkBM,GAC9B,GAAI3hH,EAAS,OAAOA,EAEpB,IAAI3kI,EAAQimP,GAAkBK,GAC9B,OAAItmP,EAAgB,CAAEsmP,EAAYtmP,EAAM,IAE1BkmP,GAAkBI,IAGzB,IACV,CAsB0BC,CAAiB3zQ,GACpC,OAAIyzQ,GAGG,CAAEzzQ,EACZ,IAXD+xJ,EAxCOr/L,EAAOimH,QAAO,SAACC,EAAOjkJ,GAEzB,OADAA,EAAM0D,SAAQ,SAAC1D,GAAYikJ,EAAMlkJ,KAAKC,EAAS,IACxCikJ,CACV,GAAE,KAmDHm5E,GAAQ3pD,EAAAA,EAAAA,KAAiBF,EAAAA,EAAAA,IAAc6pD,GAAQprD,EAAAA,GAAAA,OAGzCtuK,SAAQ,SAAC2nE,GACX,GA/BK+yQ,GA+Be/yQ,EA/BKuzQ,IAgCrB,MAAM,IAAI5rU,MAAM,iCAEvB,IAGDoqN,EAAM15N,SAAQ,SAAC2nE,GACX,GA1DK+yQ,GA0DgB/yQ,EA1DIizQ,IA2DrB,MAAM,IAAItrU,MAAM,iCAEvB,IAGD,IAAI2I,GAAO43J,EAAAA,EAAAA,IAAc6pD,GAGzB,GAA6B,MAAzBzhN,EAAK4+F,UAAU,EAAG,IAAuC,OAAzB5+F,EAAK4+F,UAAU,EAAG,IAAmD,MAApC5+F,EAAK4+F,UAAU5+F,EAAK1b,OAAS,GAC9F,MAAM,IAAI+S,MAAM,kBAGpB,OAAO2I,CACV,CCrMK,SAAU2sS,GAAoBr3M,GAGhC,IAAMw2C,GAAQ3B,EAAAA,EAAAA,IAAY70C,GAG1B,GAAIw2C,EAAMxnJ,OAAS,GAAM,MAAM,IAAI+S,MAAM,6CAGzC,OAAO6xI,EAAAA,EAAAA,KAAQzG,EAAAA,EAAAA,IAAO,CAAEqJ,EAAO86J,KAAYvxS,MAAM,EAAG,IACvD,CAEK,SAAUu3S,GAAmB9gK,GAC/B,IAAM5nI,GAAO6+H,EAAAA,EAAAA,IAAS+I,GAGtB,GAAoB,KAAhB5nI,EAAK5f,OAAiB,MAAM,IAAI+S,MAAM,uCAC1C,GAAiB,IAAb6M,EAAK,IAAa,MAAM,IAAI7M,MAAM,+CAItC,IADA,IAAI/S,EAAS,GACe,IAArB4f,EAAK5f,EAAS,IAAYA,IAGjC,OAAO8lJ,EAAAA,EAAAA,IAAalmI,EAAK7O,MAAM,EAAG/Q,GACrC,CCjCM,ICODsiJ,GAAS,IAAIC,EAAAA,GDPI,eCSjBi+F,GAAQ,CACV,MACA,OACA,OACA,OACA,QACA,SACA,SAME,SAAUw+F,GAAQj/U,GACpB,IAAM2qJ,EAAQ77G,OAAO9uC,GAAOgjE,MAAM,MAE9B2nF,EAAM1qJ,OAAS,IAAM0qJ,EAAM,GAAG5mJ,MAAM,eAAkB4mJ,EAAM,KAAOA,EAAM,GAAG5mJ,MAAM,aAA0B,MAAV/D,GAA2B,OAAVA,IACnHuiJ,GAAOQ,mBAAmB,gBAAiB,QAAS/iJ,GAIxD,IAAIu3T,EAAQ5sK,EAAM,GAEdqc,EAAW,GAOf,IAN8B,MAA1BuwJ,EAAMh9M,UAAU,EAAG,KACnBysD,EAAW,IACXuwJ,EAAQA,EAAMh9M,UAAU,IAIK,MAA1Bg9M,EAAMh9M,UAAU,EAAG,IAAcg9M,EAAQA,EAAMh9M,UAAU,GAClD,KAAVg9M,IAAgBA,EAAQ,KAE5B,IAAI9yD,EAAS,GAEb,IADqB,IAAjB95G,EAAM1qJ,SAAgBwkQ,EAAS,KAAO95G,EAAM,IAAM,MAC/C85G,EAAOxkQ,OAAS,GAAmC,MAA9BwkQ,EAAOA,EAAOxkQ,OAAS,IAC/CwkQ,EAASA,EAAOlqJ,UAAU,EAAGkqJ,EAAOxkQ,OAAS,GAIjD,IADA,IAAMi/U,EAAY,GACX3nB,EAAMt3T,QAAQ,CACjB,GAAIs3T,EAAMt3T,QAAU,EAAG,CACnBi/U,EAAUx1R,QAAQ6tQ,GAClB,KACH,CACG,IAAM3mT,EAAQ2mT,EAAMt3T,OAAS,EAC7Bi/U,EAAUx1R,QAAQ6tQ,EAAMh9M,UAAU3pG,IAClC2mT,EAAQA,EAAMh9M,UAAU,EAAG3pG,EAElC,CAED,OAAOo2J,EAAWk4K,EAAUh8Q,KAAK,KAAOuhM,CAC3C,CAEK,SAAU06E,GAAYn/U,EAAqBo/U,GAC7C,GAAyB,kBAAdA,EAAwB,CAC/B,IAAMxuU,EAAQ6vO,GAAMt8O,QAAQi7U,IACb,IAAXxuU,IAAgBwuU,EAAW,EAAIxuU,EACtC,CACD,OAAOwmT,EAAYp3T,EAAoB,MAAZo/U,EAAoBA,EAAU,GAC5D,CAEK,SAAUC,GAAWr/U,EAAeo/U,GAItC,GAHsB,kBAAXp/U,GACPuiJ,GAAOQ,mBAAmB,yBAA0B,QAAS/iJ,GAExC,kBAAdo/U,EAAwB,CAC/B,IAAMxuU,EAAQ6vO,GAAMt8O,QAAQi7U,IACb,IAAXxuU,IAAgBwuU,EAAW,EAAIxuU,EACtC,CACD,OAAO4mT,EAAWx3T,EAAoB,MAAZo/U,EAAoBA,EAAU,GAC3D,CAEK,SAAUE,GAAY3nB,GACxB,OAAOwnB,GAAYxnB,EAAK,GAC3B,CAEK,SAAU4nB,GAAWC,GACvB,OAAOH,GAAWG,EAAO,GAC5B,CCxFM,IAAMv/T,GAAU,eCmCjBsiI,GAAS,IAAIC,EAAAA,GAAOviI,IC7B1B,IACI,IAAMs+S,GAAar6T,OAEM,MAArBq6T,GAAUkhB,UACVlhB,GAAUkhB,QAAU/1M,EAET,CAAjB,MAAOt/H,IAAU,4DCVf+iT,EAAgB1yI,EAAQ,OACxB2yI,EAAiB3yI,EAAQ,OAO7B,SAASo1I,EAAU7vT,GACjB,IAAImL,EAAInL,EAER,GAAiB,kBAANmL,EACT,MAAM,IAAI6H,MAAM,iFAAmF7H,EAAI,sBAOzG,OAJIA,EAAElL,OAAS,IACbkL,EAAI,IAAMA,GAGLA,CACR,CAOD,SAASsqT,EAASx2T,GAGhB,MAAO,KAFGA,EAAE0M,SAAS,GAGtB,CA4KD64J,EAAOx3B,QAAU,CACfopL,mBA1IF,SAA4BI,EAAUC,EAAQryG,GAC5C,IAAgC,IAA5BllN,MAAMC,QAAQq3T,GAChB,MAAM,IAAIxjT,MAAM,oGAAyGwjT,EAAW,KAEtI,IAA8B,IAA1Bt3T,MAAMC,QAAQs3T,GAChB,MAAM,IAAIzjT,MAAM,kGAAuGyjT,EAAS,KAGlI,OAAOA,EAAOp+F,QAAQjU,GAAS,OAAU,UAAS,SAAUpkN,GAC1D,OAAOw2T,EAASryT,QAAQnE,IAAU,CACnC,GACF,EAgIC8vT,YAvKF,SAAqB7wT,GACnB,IAAIoe,EAAMo4S,EAASx2T,GAEnB,OAAO,IAAIgvI,EAAO4hL,EAAUxyS,EAAIrM,MAAM,IAAK,MAC5C,EAoKCmlT,cA7JF,SAAuBljJ,GACrB,GAAmB,kBAARA,EACT,MAAM,IAAIjgK,MAAM,oHAAyHigK,EAAM,MAGjJ,OAAOhlC,EAAOv9B,WAAWuiE,EAAK,OAC/B,EAwJCk6I,cAAeA,EACfC,eAAgBA,EAChByC,UAAWA,EACX4F,SAAUA,EACVc,UAzEF,SAAmBG,GAEjB,IADA,IAAIr5S,EAAM,GACDpe,EAAI,EAAGA,EAAIy3T,EAAYz2T,OAAQhB,IAAK,CAE3C,IACI8S,EADO2kT,EAAYxlK,WAAWjyJ,GACrB0M,SAAS,IACtB0R,GAAOtL,EAAE9R,OAAS,EAAI,IAAM8R,EAAIA,CACjC,CAED,MAAO,KAAOsL,CACf,EAgECi5S,SAxFF,SAAkBI,GAGhB,MAAO,KAAO7G,EAFJ,IAAI5hL,EAAOyoL,EAAa,QAEN/qT,SAAS,QAAQq4D,QAAQ,WAAY,GAClE,EAqFCqyP,QAlHF,SAAiBh5S,GACf,IAAI41J,EAAM,GACNh0K,EAAI,EACJgS,EAAIoM,EAAIpd,OAMZ,IAJ4B,OAAxBod,EAAIk9F,UAAU,EAAG,KACnBt7G,EAAI,GAGCA,EAAIgS,EAAGhS,GAAK,EAAG,CACpB,IAAIosE,EAAO1tD,SAASN,EAAI24J,OAAO/2K,EAAG,GAAI,IACtCg0K,GAAOnkI,OAAO2kE,aAAapoC,EAC5B,CAED,OAAO4nG,CACR,EAoGCysK,OAhIF,SAAgBriU,GAGd,OAFkB,IAAI4wH,EAAO4hL,EAAUzC,EAAe/vS,GAAK2mD,QAAQ,WAAY,KAAM,OAElEr4D,SAAS,OAC7B,EA6HCwhP,QAxDF,SAAiBz4L,EAAQpyD,EAAKq0T,GAC5B,IAAKz3T,MAAMC,QAAQu1D,GACjB,MAAM,IAAI1hD,MAAM,mFAAwF0hD,EAAS,KAEnH,GAAmB,kBAARpyD,EACT,MAAM,IAAI0Q,MAAM,iFAAsF1Q,EAAM,MAK9G,IAFA,IAAImzE,EAAS,GAEJx2E,EAAI,EAAGA,EAAIy1D,EAAOz0D,OAAQhB,IAAK,CAEtC,IAAIe,EAAQ00D,EAAOz1D,GAAGqD,GACtB,GAAIq0T,IAAe32T,EACjBA,EAAQ,QACH,GAAqB,kBAAVA,EAChB,MAAM,IAAIgT,MAAM,eAElByiE,EAAO11E,KAAKC,EACb,CAED,OAAOy1E,CACR,EAmCC0oE,YAzBF,SAAqBn+I,EAAOC,GAC1B,QAAqB,kBAAVD,IAAuBA,EAAM+D,MAAM,wBAI1C9D,GAAUD,EAAMC,SAAW,EAAI,EAAIA,EAKxC,mCCpLD,IAOIuoS,EAPAC,EAAuB,kBAAZz9R,QAAuBA,QAAU,KAC5C09R,EAAeD,GAAwB,oBAAZA,EAAEplS,MAC7BolS,EAAEplS,MACF,SAAsBE,EAAQokP,EAAUl9O,GACxC,OAAOY,SAASE,UAAUlI,MAAMzD,KAAK2D,EAAQokP,EAAUl9O,EACxD,EAID+9R,EADEC,GAA0B,oBAAdA,EAAE7lS,QACC6lS,EAAE7lS,QACVL,OAAOS,sBACC,SAAwBO,GACvC,OAAOhB,OAAOm4N,oBAAoBn3N,GAC/B66I,OAAO77I,OAAOS,sBAAsBO,GACxC,EAEgB,SAAwBA,GACvC,OAAOhB,OAAOm4N,oBAAoBn3N,EACnC,EAOH,IAAIolS,EAAc1kS,OAAOwmC,OAAS,SAAqBzqC,GACrD,OAAOA,IAAUA,CAClB,EAED,SAAS07L,IACPA,EAAajrI,KAAK7wD,KAAKyB,KACxB,CACDmjK,EAAOx3B,QAAU0uD,EACjBl3B,EAAOx3B,QAAQurB,KAwYf,SAAcmiH,EAAS/+P,GACrB,OAAO,IAAItR,SAAQ,SAAUP,EAASC,GACpC,SAAS41U,EAAcz/U,GACrBw6Q,EAAQnjH,eAAe57I,EAAMm6I,GAC7B/rJ,EAAO7J,EACR,CAED,SAAS41J,IAC+B,oBAA3B4kH,EAAQnjH,gBACjBmjH,EAAQnjH,eAAe,QAASooL,GAElC71U,EAAQ,GAAGkH,MAAMpR,KAAK4D,WACvB,CAEDolS,EAA+BluB,EAAS/+P,EAAMm6I,EAAU,CAAEyC,MAAM,IACnD,UAAT58I,GAMR,SAAuC++P,EAASxmJ,EAAS6+E,GAC7B,oBAAf2nE,EAAQ9wI,IACjBg/J,EAA+BluB,EAAS,QAASxmJ,EAAS6+E,EAE7D,CATK81F,CAA8BnuB,EAASilE,EAAe,CAAEpnL,MAAM,GAEjE,GACF,EAxZDmjC,EAAaA,aAAeA,EAE5BA,EAAanwL,UAAUo0Q,aAAUj1Q,EACjCgxL,EAAanwL,UAAUu9R,aAAe,EACtCptG,EAAanwL,UAAUw9R,mBAAgBr+R,EAIvC,IAAIs+R,EAAsB,GAE1B,SAASC,EAAcz4R,GACrB,GAAwB,oBAAbA,EACT,MAAM,IAAIpQ,UAAU,0EAA4EoQ,EAEnG,CAoCD,SAAS04R,EAAiBxgB,GACxB,YAA2Bh+Q,IAAvBg+Q,EAAKqgB,cACArtG,EAAastG,oBACftgB,EAAKqgB,aACb,CAkDD,SAASI,EAAa5lS,EAAQmF,EAAM8H,EAAU44R,GAC5C,IAAIp3R,EACAs6I,EACA+8I,EA1HsB1tI,EAgJ1B,GApBAstI,EAAcz4R,QAGC9F,KADf4hJ,EAAS/oJ,EAAOo8Q,UAEdrzH,EAAS/oJ,EAAOo8Q,QAAUp9Q,OAAO2J,OAAO,MACxC3I,EAAOulS,aAAe,SAIKp+R,IAAvB4hJ,EAAOszL,cACTr8U,EAAOoyI,KAAK,cAAejtI,EACf8H,EAASA,SAAWA,EAASA,SAAWA,GAIpD87I,EAAS/oJ,EAAOo8Q,SAElB0pB,EAAW/8I,EAAO5jJ,SAGHgC,IAAb2+R,EAEFA,EAAW/8I,EAAO5jJ,GAAQ8H,IACxBjN,EAAOulS,kBAeT,GAbwB,oBAAbO,EAETA,EAAW/8I,EAAO5jJ,GAChB0gS,EAAU,CAAC54R,EAAU64R,GAAY,CAACA,EAAU74R,GAErC44R,EACTC,EAAS3/O,QAAQl5C,GAEjB64R,EAAStpS,KAAKyQ,IAIhBwB,EAAIk3R,EAAiB3lS,IACb,GAAK8lS,EAASppS,OAAS+R,IAAMq3R,EAASnrE,OAAQ,CACpDmrE,EAASnrE,QAAS,EAGlB,IAAIh7M,EAAI,IAAIlQ,MAAM,+CACEq2R,EAASppS,OAAS,IAAM6uC,OAAOpmC,GADjC,qEAIlBwa,EAAEvH,KAAO,8BACTuH,EAAEw3P,QAAUn3Q,EACZ2f,EAAExa,KAAOA,EACTwa,EAAE2J,MAAQw8Q,EAASppS,OA7KG07J,EA8KHz4I,EA7KnBpN,SAAWA,QAAQC,MAAMD,QAAQC,KAAK4lJ,EA8KvC,CAGH,OAAOp4J,CACR,CAaD,SAASgmS,IACP,IAAKloS,KAAKooS,MAGR,OAFApoS,KAAKkC,OAAOg0J,eAAel2J,KAAKqH,KAAMrH,KAAKqoS,QAC3CroS,KAAKooS,OAAQ,EACY,IAArBjmS,UAAUvD,OACLoB,KAAKmP,SAAS5Q,KAAKyB,KAAKkC,QAC1BlC,KAAKmP,SAASnN,MAAMhC,KAAKkC,OAAQC,UAE3C,CAED,SAASgmS,EAAUjmS,EAAQmF,EAAM8H,GAC/B,IAAIu3C,EAAQ,CAAE0hP,OAAO,EAAOC,YAAQh/R,EAAWnH,OAAQA,EAAQmF,KAAMA,EAAM8H,SAAUA,GACjFmuP,EAAU4qC,EAAYr+R,KAAK68C,GAG/B,OAFA42M,EAAQnuP,SAAWA,EACnBu3C,EAAM2hP,OAAS/qC,EACRA,CACR,CAyHD,SAASluP,EAAWlN,EAAQmF,EAAMihS,GAChC,IAAIr9I,EAAS/oJ,EAAOo8Q,QAEpB,QAAej1Q,IAAX4hJ,EACF,MAAO,GAET,IAAIuzL,EAAavzL,EAAO5jJ,GACxB,YAAmBgC,IAAfm1U,EACK,GAEiB,oBAAfA,EACFl2C,EAAS,CAACk2C,EAAWrvU,UAAYqvU,GAAc,CAACA,GAElDl2C,EAsDT,SAAyB3qS,GAEvB,IADA,IAAIqrN,EAAM,IAAInrN,MAAMF,EAAIiB,QACfhB,EAAI,EAAGA,EAAIorN,EAAIpqN,SAAUhB,EAChCorN,EAAIprN,GAAKD,EAAIC,GAAGuR,UAAYxR,EAAIC,GAElC,OAAOorN,CACR,CA3DGu/E,CAAgBi2C,GAAch2C,EAAWg2C,EAAYA,EAAW5/U,OACnE,CAmBD,SAASu4J,EAAc9vJ,GACrB,IAAI4jJ,EAASjrJ,KAAKs+Q,QAElB,QAAej1Q,IAAX4hJ,EAAsB,CACxB,IAAIuzL,EAAavzL,EAAO5jJ,GAExB,GAA0B,oBAAfm3U,EACT,OAAO,EACF,QAAmBn1U,IAAfm1U,EACT,OAAOA,EAAW5/U,MAErB,CAED,OAAO,CACR,CAMD,SAAS4pS,EAAW7qS,EAAK+S,GAEvB,IADA,IAAIoL,EAAO,IAAIje,MAAM6S,GACZ9S,EAAI,EAAGA,EAAI8S,IAAK9S,EACvBke,EAAKle,GAAKD,EAAIC,GAChB,OAAOke,CACR,CA2CD,SAASyrR,EAA+BluB,EAAS/+P,EAAMnL,EAAUuiM,GAC/D,GAA0B,oBAAf2nE,EAAQ9wI,GACbmpE,EAAMx6C,KACRmiH,EAAQniH,KAAK58I,EAAMnL,GAEnBkqQ,EAAQ9wI,GAAGjuH,EAAMnL,OAEd,IAAwC,oBAA7BkqQ,EAAQ5xQ,iBAYxB,MAAM,IAAI1I,UAAU,6EAA+Es6Q,GATnGA,EAAQ5xQ,iBAAiB6S,GAAM,SAASmkU,EAAa51U,GAG/C6oM,EAAMx6C,MACRmiH,EAAQzxQ,oBAAoB0S,EAAMmkU,GAEpCtvU,EAAStG,EACV,GAGF,CACF,CAraD3H,OAAOC,eAAek5L,EAAc,sBAAuB,CACzDj5L,YAAY,EACZoJ,IAAK,WACH,OAAOm9R,CACR,EACDl9R,IAAK,SAAS5B,GACZ,GAAmB,kBAARA,GAAoBA,EAAM,GAAKy+R,EAAYz+R,GACpD,MAAM,IAAIw7N,WAAW,kGAAoGx7N,EAAM,KAEjI8+R,EAAsB9+R,CACvB,IAGHwxL,EAAajrI,KAAO,gBAEG/lD,IAAjBrJ,KAAKs+Q,SACLt+Q,KAAKs+Q,UAAYp9Q,OAAOyJ,eAAe3K,MAAMs+Q,UAC/Ct+Q,KAAKs+Q,QAAUp9Q,OAAO2J,OAAO,MAC7B7K,KAAKynS,aAAe,GAGtBznS,KAAK0nS,cAAgB1nS,KAAK0nS,oBAAiBr+R,CAC5C,EAIDgxL,EAAanwL,UAAUu+R,gBAAkB,SAAyB/3R,GAChE,GAAiB,kBAANA,GAAkBA,EAAI,GAAK42R,EAAY52R,GAChD,MAAM,IAAI2zN,WAAW,gFAAkF3zN,EAAI,KAG7G,OADA1Q,KAAK0nS,cAAgBh3R,EACd1Q,IACR,EAQDq6L,EAAanwL,UAAUw+R,gBAAkB,WACvC,OAAOb,EAAiB7nS,KACzB,EAEDq6L,EAAanwL,UAAUoqI,KAAO,SAAcjtI,GAE1C,IADA,IAAI+B,EAAO,GACFxL,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAKwL,EAAK1K,KAAKyD,UAAUvE,IAC/D,IAAI+qS,EAAoB,UAATthS,EAEX4jJ,EAASjrJ,KAAKs+Q,QAClB,QAAej1Q,IAAX4hJ,EACF09I,EAAWA,QAA4Bt/R,IAAjB4hJ,EAAOliJ,WAC1B,IAAK4/R,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIltB,EAGJ,GAFIryQ,EAAKxK,OAAS,IAChB68Q,EAAKryQ,EAAK,IACRqyQ,aAAc9pQ,MAGhB,MAAM8pQ,EAGR,IAAI58Q,EAAM,IAAI8S,MAAM,oBAAsB8pQ,EAAK,KAAOA,EAAGpkL,QAAU,IAAM,KAEzE,MADAx4F,EAAIif,QAAU29P,EACR58Q,CACP,CAED,IAAIg0H,EAAUo4B,EAAO5jJ,GAErB,QAAgBgC,IAAZwpH,EACF,OAAO,EAET,GAAuB,oBAAZA,EACTw0K,EAAax0K,EAAS7yH,KAAMoJ,OAE5B,KAAIkf,EAAMuqG,EAAQj0H,OACdyQ,EAAYm5R,EAAW31K,EAASvqG,GACpC,IAAS1qB,EAAI,EAAGA,EAAI0qB,IAAO1qB,EACzBypS,EAAah4R,EAAUzR,GAAIoC,KAAMoJ,EAHnC,CAMF,OAAO,CACR,EAgEDixL,EAAanwL,UAAU0uJ,YAAc,SAAqBvxJ,EAAM8H,GAC9D,OAAO24R,EAAa9nS,KAAMqH,EAAM8H,GAAU,EAC3C,EAEDkrL,EAAanwL,UAAUq+H,GAAK8xD,EAAanwL,UAAU0uJ,YAEnDyhC,EAAanwL,UAAUm0Q,gBACnB,SAAyBh3Q,EAAM8H,GAC7B,OAAO24R,EAAa9nS,KAAMqH,EAAM8H,GAAU,EAC3C,EAoBLkrL,EAAanwL,UAAUgtJ,KAAO,SAAc7vJ,EAAM8H,GAGhD,OAFAy4R,EAAcz4R,GACdnP,KAAKuoI,GAAGlhI,EAAM8gS,EAAUnoS,KAAMqH,EAAM8H,IAC7BnP,IACR,EAEDq6L,EAAanwL,UAAU0+R,oBACnB,SAA6BvhS,EAAM8H,GAGjC,OAFAy4R,EAAcz4R,GACdnP,KAAKq+Q,gBAAgBh3Q,EAAM8gS,EAAUnoS,KAAMqH,EAAM8H,IAC1CnP,IACR,EAGLq6L,EAAanwL,UAAUgsJ,eACnB,SAAwB7uJ,EAAM8H,GAC5B,IAAIm/D,EAAM28E,EAAQrnJ,EAAUhG,EAAGirS,EAK/B,GAHAjB,EAAcz4R,QAGC9F,KADf4hJ,EAASjrJ,KAAKs+Q,SAEZ,OAAOt+Q,KAGT,QAAaqJ,KADbilE,EAAO28E,EAAO5jJ,IAEZ,OAAOrH,KAET,GAAIsuE,IAASn/D,GAAYm/D,EAAKn/D,WAAaA,EACb,MAAtBnP,KAAKynS,aACTznS,KAAKs+Q,QAAUp9Q,OAAO2J,OAAO,cAEtBogJ,EAAO5jJ,GACV4jJ,EAAOiL,gBACTl2J,KAAKs0I,KAAK,iBAAkBjtI,EAAMinE,EAAKn/D,UAAYA,SAElD,GAAoB,oBAATm/D,EAAqB,CAGrC,IAFA1qE,GAAY,EAEPhG,EAAI0wE,EAAK1vE,OAAS,EAAGhB,GAAK,EAAGA,IAChC,GAAI0wE,EAAK1wE,KAAOuR,GAAYm/D,EAAK1wE,GAAGuR,WAAaA,EAAU,CACzD05R,EAAmBv6N,EAAK1wE,GAAGuR,SAC3BvL,EAAWhG,EACX,KACD,CAGH,GAAIgG,EAAW,EACb,OAAO5D,KAEQ,IAAb4D,EACF0qE,EAAK8oB,QAiIf,SAAmB9oB,EAAM/+D,GACvB,KAAOA,EAAQ,EAAI++D,EAAK1vE,OAAQ2Q,IAC9B++D,EAAK/+D,GAAS++D,EAAK/+D,EAAQ,GAC7B++D,EAAKlB,KACN,CAnIS07N,CAAUx6N,EAAM1qE,GAGE,IAAhB0qE,EAAK1vE,SACPqsJ,EAAO5jJ,GAAQinE,EAAK,SAEQjlE,IAA1B4hJ,EAAOiL,gBACTl2J,KAAKs0I,KAAK,iBAAkBjtI,EAAMwhS,GAAoB15R,EACzD,CAED,OAAOnP,IACR,EAELq6L,EAAanwL,UAAUkkJ,IAAMisC,EAAanwL,UAAUgsJ,eAEpDmkC,EAAanwL,UAAUqvJ,mBACnB,SAA4BlyJ,GAC1B,IAAIgI,EAAW47I,EAAQrtJ,EAGvB,QAAeyL,KADf4hJ,EAASjrJ,KAAKs+Q,SAEZ,OAAOt+Q,KAGT,QAA8BqJ,IAA1B4hJ,EAAOiL,eAUT,OATyB,IAArB/zJ,UAAUvD,QACZoB,KAAKs+Q,QAAUp9Q,OAAO2J,OAAO,MAC7B7K,KAAKynS,aAAe,QACMp+R,IAAjB4hJ,EAAO5jJ,KACY,MAAtBrH,KAAKynS,aACTznS,KAAKs+Q,QAAUp9Q,OAAO2J,OAAO,aAEtBogJ,EAAO5jJ,IAEXrH,KAIT,GAAyB,IAArBmC,UAAUvD,OAAc,CAC1B,IACIqC,EADAS,EAAOR,OAAOQ,KAAKupJ,GAEvB,IAAKrtJ,EAAI,EAAGA,EAAI8D,EAAK9C,SAAUhB,EAEjB,oBADZqD,EAAMS,EAAK9D,KAEXoC,KAAKu5J,mBAAmBt4J,GAK1B,OAHAjB,KAAKu5J,mBAAmB,kBACxBv5J,KAAKs+Q,QAAUp9Q,OAAO2J,OAAO,MAC7B7K,KAAKynS,aAAe,EACbznS,IACR,CAID,GAAyB,oBAFzBqP,EAAY47I,EAAO5jJ,IAGjBrH,KAAKk2J,eAAe7uJ,EAAMgI,QACrB,QAAkBhG,IAAdgG,EAET,IAAKzR,EAAIyR,EAAUzQ,OAAS,EAAGhB,GAAK,EAAGA,IACrCoC,KAAKk2J,eAAe7uJ,EAAMgI,EAAUzR,IAIxC,OAAOoC,IACR,EAmBLq6L,EAAanwL,UAAUmF,UAAY,SAAmBhI,GACpD,OAAO+H,EAAWpP,KAAMqH,GAAM,EAC/B,EAEDgzL,EAAanwL,UAAU6+R,aAAe,SAAsB1hS,GAC1D,OAAO+H,EAAWpP,KAAMqH,GAAM,EAC/B,EAEDgzL,EAAaljC,cAAgB,SAASkiH,EAAShyQ,GAC7C,MAAqC,oBAA1BgyQ,EAAQliH,cACVkiH,EAAQliH,cAAc9vJ,GAEtB8vJ,EAAc54J,KAAK86Q,EAAShyQ,EAEtC,EAEDgzL,EAAanwL,UAAUitJ,cAAgBA,EAiBvCkjC,EAAanwL,UAAU8+R,WAAa,WAClC,OAAOhpS,KAAKynS,aAAe,EAAIN,EAAennS,KAAKs+Q,SAAW,EAC/D,yBCzaD,IAAI1xI,EAASwsC,EAAAA,OAAAA,OACT6zH,EAAM7zH,EAAQ,OA2ClBjW,EAAOx3B,QAxCP,SAAyB85D,EAAUlrD,EAAMmkM,EAAShqE,GAEhD,GADK9nI,EAAOk2D,SAAS2C,KAAWA,EAAW74D,EAAOvtH,KAAKomL,EAAU,WAC7DlrD,IACG3N,EAAOk2D,SAASvoD,KAAOA,EAAO3N,EAAOvtH,KAAKk7H,EAAM,WACjC,IAAhBA,EAAK37I,QAAc,MAAM,IAAIylO,WAAW,4CAQ9C,IALA,IAAIowC,EAASiqE,EAAU,EACnBz9U,EAAM2rI,EAAOivD,MAAM44E,GACnBv9F,EAAKtqC,EAAOivD,MAAM64E,GAAS,GAC3B17P,EAAM4zH,EAAOivD,MAAM,GAEhB44E,EAAS,GAAKC,EAAQ,GAAG,CAC9B,IAAIvlM,EAAO,IAAI89N,EACf99N,EAAKrqD,OAAO9L,GACZm2D,EAAKrqD,OAAO2gL,GACRlrD,GAAMprE,EAAKrqD,OAAOy1H,GACtBvhI,EAAMm2D,EAAKw8F,SAEX,IAAI6iE,EAAO,EAEX,GAAIimC,EAAS,EAAG,CACd,IAAIkqE,EAAW19U,EAAIrC,OAAS61Q,EAC5BjmC,EAAOroO,KAAKC,IAAIquQ,EAAQz7P,EAAIpa,QAC5Boa,EAAI8C,KAAK7a,EAAK09U,EAAU,EAAGnwG,GAC3BimC,GAAUjmC,CACX,CAED,GAAIA,EAAOx1N,EAAIpa,QAAU81Q,EAAQ,EAAG,CAClC,IAAIkqE,EAAU1nK,EAAGt4K,OAAS81Q,EACtB91Q,EAASuH,KAAKC,IAAIsuQ,EAAO17P,EAAIpa,OAAS4vO,GAC1Cx1N,EAAI8C,KAAKo7J,EAAI0nK,EAASpwG,EAAMA,EAAO5vO,GACnC81Q,GAAS91Q,CACV,CACF,CAGD,OADAoa,EAAIo7C,KAAK,GACF,CAAEnzD,IAAKA,EAAKi2K,GAAIA,EACxB,kCCxCD,IAAI2nK,EAAS39U,OAAOgJ,UAAU6jK,eAC1BgjI,EAAQ7vS,OAAOgJ,UAAUI,SACzBnJ,EAAiBD,OAAOC,eACxB29U,EAAO59U,OAAOa,yBAEdjE,EAAU,SAAiBH,GAC9B,MAA6B,oBAAlBE,MAAMC,QACTD,MAAMC,QAAQH,GAGK,mBAApBozS,EAAMxyS,KAAKZ,EAClB,EAEG83O,EAAgB,SAAuBz0O,GAC1C,IAAKA,GAA2B,oBAApB+vS,EAAMxyS,KAAKyC,GACtB,OAAO,EAGR,IASIC,EATA89U,EAAoBF,EAAOtgV,KAAKyC,EAAK,eACrCg+U,EAAmBh+U,EAAI4J,aAAe5J,EAAI4J,YAAYV,WAAa20U,EAAOtgV,KAAKyC,EAAI4J,YAAYV,UAAW,iBAE9G,GAAIlJ,EAAI4J,cAAgBm0U,IAAsBC,EAC7C,OAAO,EAMR,IAAK/9U,KAAOD,GAEZ,MAAsB,qBAARC,GAAuB49U,EAAOtgV,KAAKyC,EAAKC,EACtD,EAGGg+U,EAAc,SAAqB/8U,EAAQpC,GAC1CqB,GAAmC,cAAjBrB,EAAQwa,KAC7BnZ,EAAee,EAAQpC,EAAQwa,KAAM,CACpClZ,YAAY,EACZC,cAAc,EACd1C,MAAOmB,EAAQ8hC,SACftgC,UAAU,IAGXY,EAAOpC,EAAQwa,MAAQxa,EAAQ8hC,QAEhC,EAGGymJ,EAAc,SAAqBrnL,EAAKsZ,GAC3C,GAAa,cAATA,EAAsB,CACzB,IAAKukU,EAAOtgV,KAAKyC,EAAKsZ,GACrB,OACM,GAAIwkU,EAGV,OAAOA,EAAK99U,EAAKsZ,GAAM3b,KAExB,CAED,OAAOqC,EAAIsZ,EACX,EAED6oJ,EAAOx3B,QAAU,SAASmmG,IACzB,IAAIhyO,EAASwa,EAAMlb,EAAK0c,EAAMojU,EAAap7T,EACvC5hB,EAASC,UAAU,GACnBvE,EAAI,EACJgB,EAASuD,UAAUvD,OACnBugV,GAAO,EAaX,IAVsB,mBAAXj9U,IACVi9U,EAAOj9U,EACPA,EAASC,UAAU,IAAM,CAAC,EAE1BvE,EAAI,IAES,MAAVsE,GAAqC,kBAAXA,GAAyC,oBAAXA,KAC3DA,EAAS,CAAC,GAGJtE,EAAIgB,IAAUhB,EAGpB,GAAe,OAFfkC,EAAUqC,UAAUvE,IAInB,IAAK0c,KAAQxa,EACZV,EAAMipL,EAAYnmL,EAAQoY,GAItBpY,KAHJ4Z,EAAOusK,EAAYvoL,EAASwa,MAKvB6kU,GAAQrjU,IAAS25N,EAAc35N,KAAUojU,EAAcphV,EAAQge,MAC9DojU,GACHA,GAAc,EACdp7T,EAAQ1kB,GAAOtB,EAAQsB,GAAOA,EAAM,IAEpC0kB,EAAQ1kB,GAAOq2O,EAAcr2O,GAAOA,EAAM,CAAC,EAI5C6/U,EAAY/8U,EAAQ,CAAEoY,KAAMA,EAAMsnB,SAAUkwM,EAAOqtG,EAAMr7T,EAAOhI,MAGtC,qBAATA,GACjBmjU,EAAY/8U,EAAQ,CAAEoY,KAAMA,EAAMsnB,SAAU9lB,KAQjD,OAAO5Z,CACP,uCChHGk9U,EAAahmK,EAAQ,OACrBimK,EAAWjmK,EAAQ,OA2BvB,SAASkmK,EAAUhlJ,GAElB,IAYIoX,EAAO9zL,EAAOsjB,EAAWq+S,EACzBp7U,EAAM40K,EAAKzmJ,EAAMzpB,EAAKnG,EAbtBqqG,EAAQ,CACR,UACA,IACA,iBACA,eACA,oBACA,aACA,8BACFlrC,KAAK,IAEHukJ,EAAK,IAAIvwG,OAAO9I,GAChB3jG,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAW,GAG7C6mN,EAAM,GACNw2H,EAAO,EAIX,IAFAJ,EAAWxhL,MAAM,gBAAkB08B,GAED,QAA1B53L,EAAQ0jN,EAAGhqM,KAAKk+K,KAYvB,GAXA0uB,GAAOtmN,EAAM,GACb43L,EAAMA,EAAIphF,UAAUx2G,EAAM,GAAG9D,QAE7B8yM,EAAQhvM,EAAM,IAAM,GACpBkb,EAAQlb,EAAM,IAAM,EACpBw+B,EAAYx+B,EAAM,IAAM,GAExByB,GAAO,EACPmuB,GAAO,EACPymJ,EAAM,IAEY,MALlBwmK,EAAa78U,EAAM,IAKnB,CAKA,GAAoB,IAAhB0G,EAAKxK,OACR,MAAO,IAAI+S,MAAM,2BAKlB,GAHA9I,EAAMO,EAAKguF,QACXooP,IAEI9tI,EAAMhvM,MAAM,UACf,MAAO,IAAIiP,MACP,sBAAwB+/L,GAE7B,GAAIxwK,EAAUtiC,OAAS,EACtB,MAAO,IAAI+S,MACP,oCAWL,OATI+/L,EAAMhvM,MAAM,OACfyB,GAAO,GAEJutM,EAAMhvM,MAAM,OACfq2K,EAAM,KAEH24B,EAAMhvM,MAAM,QACf4vB,GAAO,GAEAitT,GACR,IAAK,IACJ,QAAYl2U,IAARR,GAA6B,OAARA,EACxB,MAAO,IAAI8I,MAAM,YAAc6tU,EAAd,sDAGlBx2H,GAAOy2H,EAAM1mK,EAAKn7J,EAAOzZ,EAAM0E,EAAIyB,YACnC,MAED,IAAK,IACJzB,EAAM1C,KAAKQ,MAAMkC,GAElB,IAAK,IAEJmgN,IADA12L,EAAOA,GAAQzpB,EAAM,EAAI,IAAM,IACjB42U,EAAM1mK,EAAKn7J,EAAOzZ,EAC5B0E,EAAIyB,YACR,MAED,IAAK,IACJ0+M,GAAOy2H,EAAM1mK,EAAKn7J,EAAOzZ,EAAM0E,EAAIyB,SAAS,KAC5C,MAED,IAAK,IACU,IAAVsT,IACHA,EAAQ,IACTorM,GAAOq2H,EAASx4K,QAAQh+J,GAAK,EAAO+U,GACpC,MAED,IAAK,IACJorM,GAAO02H,EAAc72U,GACrB,MAED,QACC,MAAO,IAAI8I,MAAM,2BACb4tU,GA3DJ,MAFAv2H,GAAO,IAkET,OADAA,GAAO1uB,CAEP,CAQD,SAASqlJ,EAAU1wO,GAClB,IAAI7lG,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAW,GACjD,OAAQ8sG,EAAOyzF,MAAM48I,EAAUt9U,MAAMhC,KAAMoJ,GAC3C,CAED,SAASq2U,EAAMG,EAAKhiU,EAAOzZ,EAAMytK,GAIhC,IAFA,IAAIo3C,EAAMp3C,EAEHo3C,EAAIpqN,OAASgf,GACfzZ,EACH6kN,GAAO42H,EAEP52H,EAAM42H,EAAM52H,EAGd,OAAQA,CACR,CAMD,SAAS02H,EAAcG,GAEtB,IAAI72H,EAEJ,KAAM62H,aAAcluU,OACnB,MAAO,IAAIA,MAAM2tU,EAAU,2BAA4BO,IAKxD,GAFA72H,EAAM,cAAgB62H,EAAGj1U,YAAY0P,KAAO,KAAOulU,EAAG3kJ,MAElD2kJ,EAAG1nF,OAA+B,oBAAd0nF,EAAG1nF,MAAuB,CACjD,IAAI2nF,EAAMD,EAAG1nF,QACT2nF,IACH92H,GAAO,gBAAkB02H,EAAcI,GAExC,CAED,OAAQ92H,CACR,CA5KDr9E,EAAQo0M,QAAUT,EAClB3zM,EAAQq0M,OA4HR,WACC,IAAI52U,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,WACtCiH,EAAKi/C,QAAQonF,EAAQ+tI,QACrBmiE,EAAU39U,MAAM,KAAMoH,EACtB,EA/HDuiI,EAAQs0M,QAAUN,kCCNlBx8K,EAAOx3B,QAAU,SAASiyB,EAAM9zJ,EAAG8J,GACjC,GAAI9J,IAAM8J,EAAG,OAAO,EAEpB,GAAI9J,GAAK8J,GAAiB,iBAAL9J,GAA6B,iBAAL8J,EAAe,CAC1D,GAAI9J,EAAEc,cAAgBgJ,EAAEhJ,YAAa,OAAO,EAE5C,IAAIhM,EAAQhB,EAAG8D,EACf,GAAI7D,MAAMC,QAAQgM,GAAI,CAEpB,IADAlL,EAASkL,EAAElL,SACGgV,EAAEhV,OAAQ,OAAO,EAC/B,IAAKhB,EAAIgB,EAAgB,IAARhB,KACf,IAAKggK,EAAM9zJ,EAAElM,GAAIgW,EAAEhW,IAAK,OAAO,EACjC,OAAO,CACR,CAID,GAAIkM,EAAEc,cAAgBirG,OAAQ,OAAO/rG,EAAE1H,SAAWwR,EAAExR,QAAU0H,EAAE4nM,QAAU99L,EAAE89L,MAC5E,GAAI5nM,EAAEm9N,UAAY/lO,OAAOgJ,UAAU+8N,QAAS,OAAOn9N,EAAEm9N,YAAcrzN,EAAEqzN,UACrE,GAAIn9N,EAAEQ,WAAapJ,OAAOgJ,UAAUI,SAAU,OAAOR,EAAEQ,aAAesJ,EAAEtJ,WAIxE,IADA1L,GADA8C,EAAOR,OAAOQ,KAAKoI,IACLlL,UACCsC,OAAOQ,KAAKkS,GAAGhV,OAAQ,OAAO,EAE7C,IAAKhB,EAAIgB,EAAgB,IAARhB,KACf,IAAKsD,OAAOgJ,UAAU6jK,eAAexvK,KAAKqV,EAAGlS,EAAK9D,IAAK,OAAO,EAEhE,IAAKA,EAAIgB,EAAgB,IAARhB,KAAY,CAC3B,IAAIqD,EAAMS,EAAK9D,GAEf,IAAKggK,EAAM9zJ,EAAE7I,GAAM2S,EAAE3S,IAAO,OAAO,CACpC,CAED,OAAO,CACR,CAGD,OAAO6I,IAAIA,GAAK8J,IAAIA,CACrB,iCC3CDuvJ,EAAOx3B,QAAU,SAAUntH,EAAMm/J,GACxBA,IAAMA,EAAO,CAAC,GACC,oBAATA,IAAqBA,EAAO,CAAEtb,IAAKsb,IAC9C,IAEiCnlK,EAF7B0nU,EAAiC,mBAAhBviK,EAAKuiK,QAAwBviK,EAAKuiK,OAEnD79K,EAAMsb,EAAKtb,MAAkB7pJ,EAQ9BmlK,EAAKtb,IAPG,SAAUrrD,GACb,OAAO,SAAUltG,EAAG8J,GAChB,IAAIusU,EAAO,CAAEl/U,IAAK6I,EAAGnL,MAAOq4G,EAAKltG,IAC7Bs2U,EAAO,CAAEn/U,IAAK2S,EAAGjV,MAAOq4G,EAAKpjG,IACjC,OAAO4E,EAAE2nU,EAAMC,EAClB,CACJ,GAGDC,EAAO,GACX,OAAQ,SAASn/T,EAAW81F,GAKxB,GAJIA,GAAQA,EAAKz1F,QAAiC,oBAAhBy1F,EAAKz1F,SACnCy1F,EAAOA,EAAKz1F,eAGHlY,IAAT2tG,EAAJ,CACA,GAAmB,iBAARA,EAAkB,OAAOpsE,SAASosE,GAAQ,GAAKA,EAAO,OACjE,GAAoB,kBAATA,EAAmB,OAAOh2F,KAAKE,UAAU81F,GAEpD,IAAIp5G,EAAGitL,EACP,GAAIhtL,MAAMC,QAAQk5G,GAAO,CAErB,IADA6zE,EAAM,IACDjtL,EAAI,EAAGA,EAAIo5G,EAAKp4G,OAAQhB,IACrBA,IAAGitL,GAAO,KACdA,GAAO3pK,EAAU81F,EAAKp5G,KAAO,OAEjC,OAAOitL,EAAM,GAChB,CAED,GAAa,OAAT7zE,EAAe,MAAO,OAE1B,IAA4B,IAAxBqpO,EAAKv9U,QAAQk0G,GAAc,CAC3B,GAAIkpO,EAAQ,OAAOl/T,KAAKE,UAAU,aAClC,MAAM,IAAIniB,UAAU,wCACvB,CAED,IAAIuhV,EAAYD,EAAK3hV,KAAKs4G,GAAQ,EAC9Bt1G,EAAOR,OAAOQ,KAAKs1G,GAAMp9C,KAAKyoG,GAAOA,EAAIrrD,IAE7C,IADA6zE,EAAM,GACDjtL,EAAI,EAAGA,EAAI8D,EAAK9C,OAAQhB,IAAK,CAC9B,IAAIqD,EAAMS,EAAK9D,GACXe,EAAQuiB,EAAU81F,EAAK/1G,IAEtBtC,IACDksL,IAAKA,GAAO,KAChBA,GAAO7pK,KAAKE,UAAUjgB,GAAO,IAAMtC,EACtC,CAED,OADA0hV,EAAK7wU,OAAO8wU,EAAW,GAChB,IAAMz1J,EAAM,GAjCW,CAkCjC,CAvCO,CAuCLrsK,EACN,sCCxDD,IAAI+hU,EAAannK,EAAQ,OAErB23H,EAAQ7vS,OAAOgJ,UAAUI,SACzByjK,EAAiB7sK,OAAOgJ,UAAU6jK,eAElCyyK,EAAe,SAAsB9wU,EAAOzR,EAAUqoP,GACtD,IAAK,IAAI1oP,EAAI,EAAG0qB,EAAM5Y,EAAM9Q,OAAQhB,EAAI0qB,EAAK1qB,IACrCmwK,EAAexvK,KAAKmR,EAAO9R,KACX,MAAZ0oP,EACAroP,EAASyR,EAAM9R,GAAIA,EAAG8R,GAEtBzR,EAASM,KAAK+nP,EAAU52O,EAAM9R,GAAIA,EAAG8R,GAIpD,EAEG+wU,EAAgB,SAAuBvkU,EAAQje,EAAUqoP,GACzD,IAAK,IAAI1oP,EAAI,EAAG0qB,EAAMpM,EAAOtd,OAAQhB,EAAI0qB,EAAK1qB,IAE1B,MAAZ0oP,EACAroP,EAASie,EAAOO,OAAO7e,GAAIA,EAAGse,GAE9Bje,EAASM,KAAK+nP,EAAUpqO,EAAOO,OAAO7e,GAAIA,EAAGse,EAGxD,EAEGwkU,EAAgB,SAAuBl/U,EAAQvD,EAAUqoP,GACzD,IAAK,IAAIvxK,KAAKvzE,EACNusK,EAAexvK,KAAKiD,EAAQuzE,KACZ,MAAZuxK,EACAroP,EAASuD,EAAOuzE,GAAIA,EAAGvzE,GAEvBvD,EAASM,KAAK+nP,EAAU9kP,EAAOuzE,GAAIA,EAAGvzE,GAIrD,EAqBD2hK,EAAOx3B,QAnBO,SAAiBr9D,EAAMrwE,EAAUu5O,GAC3C,IAAK+oG,EAAWtiV,GACZ,MAAM,IAAIc,UAAU,+BAGxB,IAAIunP,EACAnkP,UAAUvD,QAAU,IACpB0nP,EAAW9O,GAGU,mBAArBu5D,EAAMxyS,KAAK+vE,GACXkyQ,EAAalyQ,EAAMrwE,EAAUqoP,GACN,kBAATh4K,EACdmyQ,EAAcnyQ,EAAMrwE,EAAUqoP,GAE9Bo6F,EAAcpyQ,EAAMrwE,EAAUqoP,EAErC,yBC3DDnjF,EAAOx3B,QAAUg1M,EACjBA,EAAaC,IAAMC,EAEnB,IAAInnK,EAAON,EAAQ,OACf0nK,EAAQ1nK,EAAAA,OAAAA,MACR2nK,EAAM3nK,EAAQ,MACd4nK,EAAM5nK,EAAQ,OACd6nK,EAAW7nK,EAAAA,OAAAA,MAEf,SAAS8nK,EAAkB96I,EAAME,GAQ/B,MANoB,kBAATF,EACFA,EAAO,IAAME,EAGbF,EAAKA,KAAO,IAAMA,EAAKE,KAAO,KAAOF,EAAK+6I,aAAgB/6I,EAAK+6I,aAAe,IAAO,IAG/F,CAED,SAASR,EAAa7gV,GACpB,IAAIqJ,EAAOnJ,KACXmJ,EAAKrJ,QAAUA,GAAW,CAAC,EAC3BqJ,EAAKi4U,SAAW,CAAC,EACjBj4U,EAAKk4U,QAAU,CAAC,EAChBl4U,EAAKm4U,YAAc,CAAC,EACpBn4U,EAAKo4U,WAAap4U,EAAKrJ,QAAQyhV,YAAcT,EAAMU,kBACnDr4U,EAAKs4U,WAAat4U,EAAKrJ,QAAQ2hV,YAAcd,EAAae,kBAC1Dv4U,EAAKo/H,GAAG,QAAQ,SAASo5M,EAAQv7I,EAAME,GACrC,IAAIhsL,EAAO4mU,EAAkB96I,EAAME,GAEnC,GAAIn9L,EAAKi4U,SAAS9mU,IAASnR,EAAKi4U,SAAS9mU,GAAM1b,OAC7CuK,EAAKi4U,SAAS9mU,GAAM88E,QAAQwqP,SAASD,QAChC,GAAIx4U,EAAKk4U,QAAQ/mU,GAAM1b,OAASuK,EAAKs4U,WAAY,CACjDt4U,EAAKm4U,YAAYhnU,KAAOnR,EAAKm4U,YAAYhnU,GAAQ,IACtDnR,EAAKm4U,YAAYhnU,GAAM5b,KAAKijV,GAG5B,IAAIE,EAAc,WAChBF,EAAOphV,SACR,EACDohV,EAAOG,aAAeD,EACtBF,EAAOp5M,GAAG,QAASs5M,EACpB,MAKCF,EAAOphV,SAEV,GAEF,CAyDD,SAASsgV,EAAiB/gV,GACxB6gV,EAAapiV,KAAKyB,KAAMF,EACzB,CA1DD45K,EAAKxV,SAASy8K,EAAcG,GAE5BH,EAAae,kBAAoB,EAGjCf,EAAaz2U,UAAU63U,iBAAmBhB,EAAIgB,iBAC9CpB,EAAaz2U,UAAU83U,kBAAoBlB,EAAM52U,UAAU+3U,WAC3DtB,EAAaz2U,UAAU+3U,WAAa,SAASh0O,EAAKm4F,EAAME,GACtD,IAAIhsL,EAAO4mU,EAAkB96I,EAAME,GAEnC,GAAoB,kBAATF,EAAmB,CAC5B,IAAItmM,EAAUsmM,EACdE,EAAOxmM,EAAQwmM,KACfF,EAAOtmM,EAAQsmM,IAChB,CAED,GAAIpmM,KAAKshV,YAAYhnU,IAASta,KAAKshV,YAAYhnU,GAAM1b,OAAS,IAAMqvG,EAAIi0O,4BAA6B,CACnG,IAAIC,EAAaniV,KAAKshV,YAAYhnU,GAAM8yD,MACxC+0Q,EAAWjsL,eAAe,QAASisL,EAAWL,qBACvCK,EAAWL,aAClB7zO,EAAIm0O,eAAgB,EACpBn0O,EAAI2zO,SAASO,EACd,MACCniV,KAAKgiV,kBAAkB/zO,EAAKm4F,EAAME,EAErC,EAEDq6I,EAAaz2U,UAAUm4U,aAAe,SAAShvU,EAAGiH,EAAM8rL,EAAME,GAE1D,IAWI/2L,EAZFvP,KAAKqhV,QAAQ/mU,IAEA,KADX/K,EAAQvP,KAAKqhV,QAAQ/mU,GAAMxX,QAAQuQ,KAErCrT,KAAKqhV,QAAQ/mU,GAAM9K,OAAOD,EAAO,GAE1BvP,KAAKqhV,QAAQ/mU,IAAuC,IAA9Bta,KAAKqhV,QAAQ/mU,GAAM1b,gBAE3CoB,KAAKqhV,QAAQ/mU,UACbta,KAAKohV,SAAS9mU,IAGnBta,KAAKshV,YAAYhnU,MAEJ,KADX/K,EAAQvP,KAAKshV,YAAYhnU,GAAMxX,QAAQuQ,MAEzCrT,KAAKshV,YAAYhnU,GAAM9K,OAAOD,EAAO,GACC,IAAlCvP,KAAKshV,YAAYhnU,GAAM1b,eAClBoB,KAAKshV,YAAYhnU,KAK1Bta,KAAKohV,SAAS9mU,IAASta,KAAKohV,SAAS9mU,GAAM1b,QAG7CoB,KAAKsiV,aAAahoU,EAAM8rL,EAAME,GAAMhyD,KAAK,OAE5C,EAKDolC,EAAKxV,SAAS28K,EAAiBF,GAE/BE,EAAgB32U,UAAU63U,iBAG1B,SAA8Bz7I,EAAMF,EAAMtmM,GACpB,kBAATwmM,EACTxmM,EAAUwmM,EACe,kBAATF,EAChBtmM,EAAUsmM,EACkB,kBAAZtmM,IAGhBA,EAAU,CAAC,GAGO,kBAATwmM,IACTxmM,EAAQwmM,KAAOA,GAGG,kBAATF,IACTtmM,EAAQsmM,KAAOA,GAGjB,OAAO46I,EAAI/0M,QAAQnsI,EACpB,EAtBD+gV,EAAgB32U,UAAU83U,kBAAoBf,EAAS/2U,UAAU+3U,2CC/GjE,IAAIM,EAAgB,kDAChB5yU,EAAQ9R,MAAMqM,UAAUyF,MACxBohS,EAAQ7vS,OAAOgJ,UAAUI,SACzBk4U,EAAW,oBAEfr/K,EAAOx3B,QAAU,SAAc07I,GAC3B,IAAInlR,EAASlC,KACb,GAAsB,oBAAXkC,GAAyB6uS,EAAMxyS,KAAK2D,KAAYsgV,EACvD,MAAM,IAAIzjV,UAAUwjV,EAAgBrgV,GAyBxC,IAvBA,IAEIg/O,EAFA93O,EAAOuG,EAAMpR,KAAK4D,UAAW,GAG7BsgV,EAAS,WACT,GAAIziV,gBAAgBkhP,EAAO,CACvB,IAAI9sK,EAASlyE,EAAOF,MAChBhC,KACAoJ,EAAK2zI,OAAOptI,EAAMpR,KAAK4D,aAE3B,OAAIjB,OAAOkzE,KAAYA,EACZA,EAEJp0E,IACV,CACG,OAAOkC,EAAOF,MACVqlR,EACAj+Q,EAAK2zI,OAAOptI,EAAMpR,KAAK4D,YAGlC,EAEGugV,EAAcv8U,KAAKE,IAAI,EAAGnE,EAAOtD,OAASwK,EAAKxK,QAC/C+jV,EAAY,GACP/kV,EAAI,EAAGA,EAAI8kV,EAAa9kV,IAC7B+kV,EAAUjkV,KAAK,IAAMd,GAKzB,GAFAsjP,EAAQl3O,SAAS,SAAU,oBAAsB24U,EAAU9gR,KAAK,KAAO,4CAA/D73D,CAA4Gy4U,GAEhHvgV,EAAOgI,UAAW,CAClB,IAAI04U,EAAQ,WAAmB,EAC/BA,EAAM14U,UAAYhI,EAAOgI,UACzBg3O,EAAMh3O,UAAY,IAAI04U,EACtBA,EAAM14U,UAAY,IACrB,CAED,OAAOg3O,CACV,sCCjDD,IAAI2hG,EAAiBzpK,EAAQ,OAE7BjW,EAAOx3B,QAAU3hI,SAASE,UAAUL,MAAQg5U,sCCF5C,IAAIx5U,EAEAy5U,EAAez+F,YACf0+F,EAAY/4U,SACZg5U,EAAajkV,UAGbkkV,EAAwB,SAAUC,GACrC,IACC,OAAOH,EAAU,yBAA2BG,EAAmB,iBAAxDH,EACM,CAAZ,MAAO/7U,GAAK,CACd,EAEG8qR,EAAQ5wR,OAAOa,yBACnB,GAAI+vR,EACH,IACCA,EAAM,CAAC,EAAG,GAGV,CAFC,MAAO9qR,GACR8qR,EAAQ,IACR,CAGF,IAAIqxD,EAAiB,WACpB,MAAM,IAAIH,CACV,EACGI,EAAiBtxD,EACjB,WACF,IAGC,OAAOqxD,CAQP,CAPC,MAAOE,GACR,IAEC,OAAOvxD,EAAM3vR,UAAW,UAAUqI,GAGlC,CAFC,MAAO84U,GACR,OAAOH,CACP,CACD,CACD,CAbE,GAcDA,EAECryC,EAAa13H,EAAQ,MAARA,GAEbmqK,EAAWriV,OAAOyJ,gBAAkB,SAAU3H,GAAK,OAAOA,EAAEgP,SAAY,EAExEwxU,EAAY,CAAC,EAEb/mN,EAAmC,qBAAfjrH,WAA6BnI,EAAYk6U,EAAS/xU,YAEtEiyU,EAAa,CAChB,mBAA8C,qBAAnBxrF,eAAiC5uP,EAAY4uP,eACxE,UAAWp6P,MACX,gBAAwC,qBAAhBulG,YAA8B/5F,EAAY+5F,YAClE,2BAA4B0tM,EAAayyC,EAAS,GAAGvlV,OAAOC,aAAeoL,EAC3E,mCAAoCA,EACpC,kBAAmBm6U,EACnB,mBAAoBA,EACpB,2BAA4BA,EAC5B,2BAA4BA,EAC5B,YAAgC,qBAAZE,QAA0Br6U,EAAYq6U,QAC1D,WAA8B,qBAAXlxL,OAAyBnpJ,EAAYmpJ,OACxD,YAAawkE,QACb,aAAkC,qBAAb1zH,SAA2Bj6F,EAAYi6F,SAC5D,SAAU9+F,KACV,cAAewpO,UACf,uBAAwB37H,mBACxB,cAAeqiE,UACf,uBAAwBkV,mBACxB,UAAWj4K,MACX,SAAUgyU,KACV,cAAeC,UACf,iBAA0C,qBAAjBtyU,aAA+BjI,EAAYiI,aACpE,iBAA0C,qBAAjB8I,aAA+B/Q,EAAY+Q,aACpE,yBAA0D,qBAAzBypU,qBAAuCx6U,EAAYw6U,qBACpF,aAAcd,EACd,sBAAuBS,EACvB,cAAoC,qBAAd9xU,UAA4BrI,EAAYqI,UAC9D,eAAsC,qBAAfD,WAA6BpI,EAAYoI,WAChE,eAAsC,qBAAfyI,WAA6B7Q,EAAY6Q,WAChE,aAAc0wB,SACd,UAAWxB,MACX,sBAAuB0nQ,EAAayyC,EAASA,EAAS,GAAGvlV,OAAOC,cAAgBoL,EAChF,SAA0B,kBAAT2X,KAAoBA,KAAO3X,EAC5C,QAAwB,qBAARgB,IAAsBhB,EAAYgB,IAClD,yBAAyC,qBAARA,KAAwBymS,EAAyByyC,GAAS,IAAIl5U,KAAMrM,OAAOC,aAAtCoL,EACtE,SAAUlD,KACV,WAAYvD,OACZ,WAAY1B,OACZ,eAAgBib,WAChB,aAAcG,SACd,YAAgC,qBAAZtT,QAA0BK,EAAYL,QAC1D,UAA4B,qBAAV+1I,MAAwB11I,EAAY01I,MACtD,eAAgBslF,WAChB,mBAAoBhE,eACpB,YAAgC,qBAAZ12N,QAA0BN,EAAYM,QAC1D,WAAYksG,OACZ,QAAwB,qBAAR5rC,IAAsB5gE,EAAY4gE,IAClD,yBAAyC,qBAARA,KAAwB6mO,EAAyByyC,GAAS,IAAIt5Q,KAAMjsE,OAAOC,aAAtCoL,EACtE,sBAAoD,qBAAtBshR,kBAAoCthR,EAAYshR,kBAC9E,WAAYl9O,OACZ,4BAA6BqjQ,EAAayyC,EAAS,GAAGvlV,OAAOC,aAAeoL,EAC5E,WAAYynS,EAAa9yS,OAASqL,EAClC,gBAAiBy5U,EACjB,mBAAoBM,EACpB,eAAgB3mN,EAChB,cAAeumN,EACf,eAAsC,qBAAfxxU,WAA6BnI,EAAYmI,WAChE,sBAAoD,qBAAtByI,kBAAoC5Q,EAAY4Q,kBAC9E,gBAAwC,qBAAhB1I,YAA8BlI,EAAYkI,YAClE,gBAAwC,qBAAhB4I,YAA8B9Q,EAAY8Q,YAClE,aAAc2pU,SACd,YAAgC,qBAAZ1rS,QAA0B/uC,EAAY+uC,QAC1D,YAAgC,qBAAZ2rS,QAA0B16U,EAAY06U,QAC1D,YAAgC,qBAAZC,QAA0B36U,EAAY26U,SAGvDC,EAAS,SAASA,EAAO3pU,GAC5B,IAAI3b,EACJ,GAAa,oBAAT2b,EACH3b,EAAQskV,EAAsB,6BACxB,GAAa,wBAAT3oU,EACV3b,EAAQskV,EAAsB,wBACxB,GAAa,6BAAT3oU,EACV3b,EAAQskV,EAAsB,8BACxB,GAAa,qBAAT3oU,EAA6B,CACvC,IAAIpR,EAAK+6U,EAAO,4BACZ/6U,IACHvK,EAAQuK,EAAGgB,UAEZ,MAAM,GAAa,6BAAToQ,EAAqC,CAC/C,IAAI9R,EAAMy7U,EAAO,oBACbz7U,IACH7J,EAAQ4kV,EAAS/6U,EAAI0B,WAEtB,CAID,OAFAu5U,EAAWnpU,GAAQ3b,EAEZA,CACP,EAEGulV,EAAiB,CACpB,yBAA0B,CAAC,cAAe,aAC1C,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,QAAS,YAAa,WAC/C,uBAAwB,CAAC,QAAS,YAAa,WAC/C,oBAAqB,CAAC,QAAS,YAAa,QAC5C,sBAAuB,CAAC,QAAS,YAAa,UAC9C,2BAA4B,CAAC,gBAAiB,aAC9C,mBAAoB,CAAC,yBAA0B,aAC/C,4BAA6B,CAAC,yBAA0B,YAAa,aACrE,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,WAAY,aACpC,kBAAmB,CAAC,OAAQ,aAC5B,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,YAAa,aACtC,0BAA2B,CAAC,eAAgB,aAC5C,0BAA2B,CAAC,eAAgB,aAC5C,sBAAuB,CAAC,WAAY,aACpC,cAAe,CAAC,oBAAqB,aACrC,uBAAwB,CAAC,oBAAqB,YAAa,aAC3D,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,wBAAyB,CAAC,aAAc,aACxC,cAAe,CAAC,OAAQ,SACxB,kBAAmB,CAAC,OAAQ,aAC5B,iBAAkB,CAAC,MAAO,aAC1B,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,sBAAuB,CAAC,SAAU,YAAa,YAC/C,qBAAsB,CAAC,SAAU,YAAa,WAC9C,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,UAAW,YAAa,QAChD,gBAAiB,CAAC,UAAW,OAC7B,mBAAoB,CAAC,UAAW,UAChC,oBAAqB,CAAC,UAAW,WACjC,wBAAyB,CAAC,aAAc,aACxC,4BAA6B,CAAC,iBAAkB,aAChD,oBAAqB,CAAC,SAAU,aAChC,iBAAkB,CAAC,MAAO,aAC1B,+BAAgC,CAAC,oBAAqB,aACtD,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,yBAA0B,CAAC,cAAe,aAC1C,wBAAyB,CAAC,aAAc,aACxC,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,+BAAgC,CAAC,oBAAqB,aACtD,yBAA0B,CAAC,cAAe,aAC1C,yBAA0B,CAAC,cAAe,aAC1C,sBAAuB,CAAC,WAAY,aACpC,qBAAsB,CAAC,UAAW,aAClC,qBAAsB,CAAC,UAAW,cAG/Br6U,EAAOuvK,EAAQ,OACfylK,EAASzlK,EAAQ,OACjB+qK,EAAUt6U,EAAKtL,KAAKyL,SAASzL,KAAMV,MAAMqM,UAAU6yI,QACnDqnM,EAAev6U,EAAKtL,KAAKyL,SAAShI,MAAOnE,MAAMqM,UAAUsF,QACzD60U,EAAWx6U,EAAKtL,KAAKyL,SAASzL,KAAMkvC,OAAOvjC,UAAUy4D,SACrD2hR,EAAYz6U,EAAKtL,KAAKyL,SAASzL,KAAMkvC,OAAOvjC,UAAUyF,OACtD40U,EAAQ16U,EAAKtL,KAAKyL,SAASzL,KAAMs3G,OAAO3rG,UAAUkS,MAGlDooU,EAAa,qGACbC,EAAe,WACfC,EAAe,SAAsBxoU,GACxC,IAAI4pM,EAAQw+H,EAAUpoU,EAAQ,EAAG,GAC7B4/O,EAAOwoF,EAAUpoU,GAAS,GAC9B,GAAc,MAAV4pM,GAA0B,MAATg2C,EACpB,MAAM,IAAIgnF,EAAa,kDACjB,GAAa,MAAThnF,GAA0B,MAAVh2C,EAC1B,MAAM,IAAIg9H,EAAa,kDAExB,IAAI1uQ,EAAS,GAIb,OAHAiwQ,EAASnoU,EAAQsoU,GAAY,SAAU9hV,EAAOm6J,EAAQklF,EAAO4iG,GAC5DvwQ,EAAOA,EAAOx1E,QAAUmjP,EAAQsiG,EAASM,EAAWF,EAAc,MAAQ5nL,GAAUn6J,CACpF,IACM0xE,CACP,EAGGwwQ,EAAmB,SAA0BtqU,EAAMo3Q,GACtD,IACI09B,EADAy1B,EAAgBvqU,EAOpB,GALIukU,EAAOqF,EAAgBW,KAE1BA,EAAgB,KADhBz1B,EAAQ80B,EAAeW,IACK,GAAK,KAG9BhG,EAAO4E,EAAYoB,GAAgB,CACtC,IAAIlmV,EAAQ8kV,EAAWoB,GAIvB,GAHIlmV,IAAU6kV,IACb7kV,EAAQslV,EAAOY,IAEK,qBAAVlmV,IAA0B+yR,EACpC,MAAM,IAAIsxD,EAAW,aAAe1oU,EAAO,wDAG5C,MAAO,CACN80S,MAAOA,EACP90S,KAAMuqU,EACNlmV,MAAOA,EAER,CAED,MAAM,IAAImkV,EAAa,aAAexoU,EAAO,mBAC7C,EAED6oJ,EAAOx3B,QAAU,SAAsBrxH,EAAMo3Q,GAC5C,GAAoB,kBAATp3Q,GAAqC,IAAhBA,EAAK1b,OACpC,MAAM,IAAIokV,EAAW,6CAEtB,GAAI7gV,UAAUvD,OAAS,GAA6B,mBAAjB8yR,EAClC,MAAM,IAAIsxD,EAAW,6CAGtB,GAAmC,OAA/BuB,EAAM,cAAejqU,GACxB,MAAM,IAAIwoU,EAAa,sFAExB,IAAIrgV,EAAQiiV,EAAapqU,GACrBwqU,EAAoBriV,EAAM7D,OAAS,EAAI6D,EAAM,GAAK,GAElD8yJ,EAAYqvL,EAAiB,IAAME,EAAoB,IAAKpzD,GAC5DqzD,EAAoBxvL,EAAUj7I,KAC9B3b,EAAQ42J,EAAU52J,MAClBqmV,GAAqB,EAErB51B,EAAQ75J,EAAU65J,MAClBA,IACH01B,EAAoB11B,EAAM,GAC1Bg1B,EAAa3hV,EAAO0hV,EAAQ,CAAC,EAAG,GAAI/0B,KAGrC,IAAK,IAAIxxT,EAAI,EAAGqnV,GAAQ,EAAMrnV,EAAI6E,EAAM7D,OAAQhB,GAAK,EAAG,CACvD,IAAIgpL,EAAOnkL,EAAM7E,GACbkoN,EAAQw+H,EAAU19J,EAAM,EAAG,GAC3Bk1E,EAAOwoF,EAAU19J,GAAO,GAC5B,IAEa,MAAVk/B,GAA2B,MAAVA,GAA2B,MAAVA,GACtB,MAATg2C,GAAyB,MAATA,GAAyB,MAATA,IAElCh2C,IAAUg2C,EAEb,MAAM,IAAIgnF,EAAa,wDASxB,GAPa,gBAATl8J,GAA2Bq+J,IAC9BD,GAAqB,GAMlBnG,EAAO4E,EAFXsB,EAAoB,KADpBD,GAAqB,IAAMl+J,GACmB,KAG7CjoL,EAAQ8kV,EAAWsB,QACb,GAAa,MAATpmV,EAAe,CACzB,KAAMioL,KAAQjoL,GAAQ,CACrB,IAAK+yR,EACJ,MAAM,IAAIsxD,EAAW,sBAAwB1oU,EAAO,+CAErD,MACA,CACD,GAAIw3Q,GAAUl0R,EAAI,GAAM6E,EAAM7D,OAAQ,CACrC,IAAIk6O,EAAOg5C,EAAMnzR,EAAOioL,GAWvBjoL,GAVDsmV,IAAUnsG,IASG,QAASA,KAAU,kBAAmBA,EAAKtuO,KAC/CsuO,EAAKtuO,IAEL7L,EAAMioL,EAEf,MACAq+J,EAAQpG,EAAOlgV,EAAOioL,GACtBjoL,EAAQA,EAAMioL,GAGXq+J,IAAUD,IACbvB,EAAWsB,GAAqBpmV,EAEjC,CACD,CACD,OAAOA,CACP,sCC3UDwkK,EAAOx3B,QAAU,CACfu5M,aAAc9rK,EAAQ,OACtB+rK,cAAe/rK,EAAQ,OACvBgsK,QAAShsK,EAAQ,KACjB38I,MAAO28I,EAAQ,OACfpsD,QAASosD,EAAQ,OACjBy+D,OAAQz+D,EAAQ,OAChBisK,QAASjsK,EAAQ,OACjB1gH,MAAO0gH,EAAQ,OACfksK,IAAKlsK,EAAQ,OACbrlD,OAAQqlD,EAAQ,OAChBloK,IAAKkoK,EAAQ,OACbmsK,KAAMnsK,EAAQ,OACdosK,YAAapsK,EAAQ,MACrBy/J,SAAUz/J,EAAQ,OAClBwrB,MAAOxrB,EAAQ,OACfzwC,QAASywC,EAAQ,OACjBtrE,SAAUsrE,EAAQ,MAClBqsK,QAASrsK,EAAQ,0BCpBnB,SAASssK,EAAUrkR,GACjB,IAAIg2B,EAAU,oBAEdr3F,KAAKsa,KAAO,WACZta,KAAKq3F,QAAUA,EACfr3F,KAAKqhE,OAASA,EAEyB,oBAA5B1vD,MAAM2yM,kBACf3yM,MAAM2yM,kBAAkBtkN,KAAMA,KAAK4K,aAEnC5K,KAAKk7L,MAAS,IAAIvpL,MAAM0lF,GAAU6jG,KAErC,CAEDwqJ,EAASx7U,UAAYyH,MAAMzH,UAE3Bi5J,EAAOx3B,QAAU+5M,yBChBjB,IAIItlK,EAJAzG,EAAMP,EAAQ,OACdssK,EAAWtsK,EAAQ,MACnBiG,EAAUjG,EAAQ,OActB,SAASzvE,EAAUrvF,EAAMkE,GACvBA,EAAOA,GAAQ,CAAC,EAKhB,IAAImrF,GAFJy2E,EAAMA,GAdR,WACE,IAAIA,EAAM,IAAIzG,EAAI,CAChByR,WAAW,IAKb,OAHAhL,EAAI1F,cAActB,EAAQ,QAC1BgH,EAAIhG,UAAUiF,GAEPe,CACR,CAMculK,IAEM9rK,UAAUv/J,EAAO,SAEpC,OAAO,IAAItR,SAAQ,SAAUP,EAASC,GACxBihG,EAASnrF,GAE4B/V,EAAQ+V,GAAhD9V,EAAO,IAAIg9U,EAAS/7O,EAAStoC,QACvC,GACF,CAEDsqE,EAAQu5M,aAAe,SAAU1mU,GAC/B,OAAOmrF,EAAS,eAAgBnrF,EACjC,EAEDmtH,EAAQw5M,cAAgB,SAAU3mU,GAChC,OAAOmrF,EAAS,gBAAiBnrF,EAClC,EAEDmtH,EAAQy5M,QAAU,SAAU5mU,GAC1B,OAAOmrF,EAAS,UAAWnrF,EAC5B,EAEDmtH,EAAQlvG,MAAQ,SAAUje,GACxB,OAAOmrF,EAAS,QAASnrF,EAC1B,EAEDmtH,EAAQ3e,QAAU,SAAUxuG,GAC1B,OAAOmrF,EAAS,UAAWnrF,EAC5B,EAEDmtH,EAAQksG,OAAS,SAAUr5N,GACzB,OAAOmrF,EAAS,SAAUnrF,EAC3B,EAEDmtH,EAAQ05M,QAAU,SAAU7mU,GAC1B,OAAOmrF,EAAS,UAAWnrF,EAC5B,EAEDmtH,EAAQjzE,MAAQ,SAAUl6C,GACxB,OAAOmrF,EAAS,QAASnrF,EAC1B,EAEDmtH,EAAQ25M,IAAM,SAAU9mU,GACtB,OAAOmrF,EAAS,MAAOnrF,EACxB,EAEDmtH,EAAQ5X,OAAS,SAAUv1G,GACzB,OAAOmrF,EAAS,SAAUnrF,EAC3B,EAEDmtH,EAAQz6H,IAAM,SAAUsN,GACtB,OAAOmrF,EAAS,MAAOnrF,EACxB,EAEDmtH,EAAQ45M,KAAO,SAAU/mU,GACvB,OAAOmrF,EAAS,OAAQnrF,EACzB,EAEDmtH,EAAQ65M,YAAc,SAAUhnU,GAC9B,OAAOmrF,EAAS,cAAenrF,EAChC,EAEDmtH,EAAQktM,SAAW,SAAUr6T,GAC3B,OAAOmrF,EAAS,WAAYnrF,EAC7B,EAEDmtH,EAAQi5D,MAAQ,SAAUpmL,GACxB,OAAOmrF,EAAS,QAASnrF,EAC1B,EAEDmtH,EAAQhD,QAAU,SAAUnqH,GAC1B,OAAOmrF,EAAS,UAAWnrF,EAC5B,EAEDmtH,EAAQ79B,SAAW,SAAUtvF,GAC3B,OAAOmrF,EAAS,WAAYnrF,EAC7B,EAEDmtH,EAAQ85M,QAAU,SAAUjnU,GAC1B,OAAOmrF,EAAS,UAAWnrF,EAC5B,sCCnGD,IAEIuzQ,EAFe34G,EAAQ,MAELm4G,CAAa,2BAA2B,GAE1D0f,EAAyB,WAC5B,GAAIlf,EACH,IAEC,OADAA,EAAgB,CAAC,EAAG,IAAK,CAAEpzR,MAAO,KAC3B,CAIP,CAHC,MAAOqI,GAER,OAAO,CACP,CAEF,OAAO,CACP,EAEDiqS,EAAuB20C,wBAA0B,WAEhD,IAAK30C,IACJ,OAAO,KAER,IACC,OAA8D,IAAvDlf,EAAgB,GAAI,SAAU,CAAEpzR,MAAO,IAAKC,MAInD,CAHC,MAAOoI,GAER,OAAO,CACP,CACD,EAEDm8J,EAAOx3B,QAAUslK,sCC9BjB,IAAI40C,EAA+B,qBAAX7nV,QAA0BA,OAC9C8nV,EAAgB1sK,EAAQ,OAE5BjW,EAAOx3B,QAAU,WAChB,MAA0B,oBAAfk6M,IACW,oBAAX7nV,SACsB,kBAAtB6nV,EAAW,SACO,kBAAlB7nV,OAAO,QAEX8nV,MACP,kCCTD3iL,EAAOx3B,QAAU,WAChB,GAAsB,oBAAX3tI,QAAiE,oBAAjCkD,OAAOS,sBAAwC,OAAO,EACjG,GAA+B,kBAApB3D,OAAOC,SAAyB,OAAO,EAElD,IAAI+C,EAAM,CAAC,EACPc,EAAM9D,OAAO,QACb+nV,EAAS7kV,OAAOY,GACpB,GAAmB,kBAARA,EAAoB,OAAO,EAEtC,GAA4C,oBAAxCZ,OAAOgJ,UAAUI,SAAS/L,KAAKuD,GAA8B,OAAO,EACxE,GAA+C,oBAA3CZ,OAAOgJ,UAAUI,SAAS/L,KAAKwnV,GAAiC,OAAO,EAY3E,IAAKjkV,KADLd,EAAIc,GADS,GAEDd,EAAO,OAAO,EAC1B,GAA2B,oBAAhBE,OAAOQ,MAAmD,IAA5BR,OAAOQ,KAAKV,GAAKpC,OAAgB,OAAO,EAEjF,GAA0C,oBAA/BsC,OAAOm4N,qBAAiF,IAA3Cn4N,OAAOm4N,oBAAoBr4N,GAAKpC,OAAgB,OAAO,EAE/G,IAAIonV,EAAO9kV,OAAOS,sBAAsBX,GACxC,GAAoB,IAAhBglV,EAAKpnV,QAAgBonV,EAAK,KAAOlkV,EAAO,OAAO,EAEnD,IAAKZ,OAAOgJ,UAAU66N,qBAAqBxmO,KAAKyC,EAAKc,GAAQ,OAAO,EAEpE,GAA+C,oBAApCZ,OAAOa,yBAAyC,CAC1D,IAAIm+N,EAAah/N,OAAOa,yBAAyBf,EAAKc,GACtD,GAdY,KAcRo+N,EAAWvhO,QAA8C,IAA1BuhO,EAAW9+N,WAAuB,OAAO,CAC5E,CAED,OAAO,CACP,qCCvCD,IAAI0vS,EAAa13H,EAAQ,OAEzBjW,EAAOx3B,QAAU,WAChB,OAAOmlK,OAAkB9yS,OAAOgkQ,WAChC,sCCJD,IAAIn4P,EAAOuvK,EAAQ,OAEnBjW,EAAOx3B,QAAU9hI,EAAKtL,KAAKyL,SAASzL,KAAM2C,OAAOgJ,UAAU6jK,oDCH3D,IAAInhC,EAASwsC,EAAAA,OAAAA,OACTs2F,EAAYt2F,EAAAA,OAAAA,UAShB,SAAS6sK,EAAUlrR,GACjB20M,EAAUnxQ,KAAKyB,MAEfA,KAAK6rU,OAASj/L,EAAOigI,YAAY9xM,GACjC/6D,KAAKkmV,WAAanrR,EAClB/6D,KAAKmmV,aAAe,EACpBnmV,KAAK+qP,QAAU,CAAC,EAAG,EAAG,EAAG,GAEzB/qP,KAAKomV,YAAa,CACnB,CAjBchtK,EAAQ,MAmBvBlV,CAAS+hL,EAAUv2E,GAEnBu2E,EAAS/7U,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUoH,GACzD,IAAIte,EAAQ,KACZ,IACE/I,KAAK8kB,OAAOuiL,EAAOpnL,EAGpB,CAFC,MAAOphB,GACPkK,EAAQlK,CACT,CAEDwoB,EAASte,EACV,EAEDk9U,EAAS/7U,UAAUo1Q,OAAS,SAAUj4P,GACpC,IAAIte,EAAQ,KACZ,IACE/I,KAAKtB,KAAKsB,KAAK2rK,SAGhB,CAFC,MAAO9sK,GACPkK,EAAQlK,CACT,CAEDwoB,EAASte,EACV,EAEDk9U,EAAS/7U,UAAU4a,OAAS,SAAUtG,EAAMyB,GAE1C,GA3CF,SAAmC09I,EAAK50F,GACtC,IAAK6jE,EAAOk2D,SAASnlC,IAAuB,kBAARA,EAClC,MAAM,IAAI5+J,UAAUgqE,EAAS,gCAEhC,CAsCCs9Q,CAAyB7nU,EAAM,QAC3Bxe,KAAKomV,WAAY,MAAM,IAAIz0U,MAAM,yBAChCi7H,EAAOk2D,SAAStkL,KAAOA,EAAOouH,EAAOvtH,KAAKb,EAAMyB,IAKrD,IAFA,IAAI0tI,EAAQ3tJ,KAAK6rU,OACblsU,EAAS,EACNK,KAAKmmV,aAAe3nU,EAAK5f,OAASe,GAAUK,KAAKkmV,YAAY,CAClE,IAAK,IAAItoV,EAAIoC,KAAKmmV,aAAcvoV,EAAIoC,KAAKkmV,YAAav4L,EAAM/vJ,KAAO4gB,EAAK7e,KACxEK,KAAK0iH,UACL1iH,KAAKmmV,aAAe,CACrB,CACD,KAAOxmV,EAAS6e,EAAK5f,QAAQ+uJ,EAAM3tJ,KAAKmmV,gBAAkB3nU,EAAK7e,KAG/D,IAAK,IAAI+uB,EAAI,EAAG+5L,EAAsB,EAAdjqM,EAAK5f,OAAY6pN,EAAQ,IAAK/5L,EACpD1uB,KAAK+qP,QAAQr8N,IAAM+5L,GACnBA,EAASzoN,KAAK+qP,QAAQr8N,GAAK,WAAgB,GAC/B,IAAG1uB,KAAK+qP,QAAQr8N,IAAM,WAAe+5L,GAGnD,OAAOzoN,IACR,EAEDimV,EAAS/7U,UAAUw4G,QAAU,WAC3B,MAAM,IAAI/wG,MAAM,6BACjB,EAEDs0U,EAAS/7U,UAAUyhK,OAAS,SAAU1rJ,GACpC,GAAIjgB,KAAKomV,WAAY,MAAM,IAAIz0U,MAAM,yBACrC3R,KAAKomV,YAAa,EAElB,IAAIz6K,EAAS3rK,KAAKsmV,eACDj9U,IAAb4W,IAAwB0rJ,EAASA,EAAOrhK,SAAS2V,IAGrDjgB,KAAK6rU,OAAOz3Q,KAAK,GACjBp0D,KAAKmmV,aAAe,EACpB,IAAK,IAAIvoV,EAAI,EAAGA,EAAI,IAAKA,EAAGoC,KAAK+qP,QAAQntP,GAAK,EAE9C,OAAO+tK,CACR,EAEDs6K,EAAS/7U,UAAUo8U,QAAU,WAC3B,MAAM,IAAI30U,MAAM,6BACjB,EAEDwxJ,EAAOx3B,QAAUs6M,kCC1FjB,IAAIlqH,EAAQ,CAAC,EAEb,SAAS4H,EAAgB35J,EAAMqtB,EAASmsE,GACjCA,IACHA,EAAO7xJ,OAWT,IAAIiyN,EAEJ,SAAUC,GAnBZ,IAAwBP,EAAUC,EAsB9B,SAASK,EAAUE,EAAMC,EAAMC,GAC7B,OAAOH,EAAMtlO,KAAKyB,KAdtB,SAAoB8jO,EAAMC,EAAMC,GAC9B,MAAuB,kBAAZ3sI,EACFA,EAEAA,EAAQysI,EAAMC,EAAMC,EAE9B,CAQ2BC,CAAWH,EAAMC,EAAMC,KAAUhkO,IAC1D,CAED,OA1B8BujO,EAoBJM,GApBNP,EAoBLM,GApBsC15N,UAAYhJ,OAAO2J,OAAO04N,EAAWr5N,WAAYo5N,EAASp5N,UAAUU,YAAc04N,EAAUA,EAAStxN,UAAYuxN,EA0B/JK,CACR,CARD,CAQEpgE,GAEFogE,EAAU15N,UAAUoQ,KAAOkpJ,EAAKlpJ,KAChCspN,EAAU15N,UAAU8/D,KAAOA,EAC3B+xJ,EAAM/xJ,GAAQ45J,CACf,CAGD,SAASvyC,EAAM3kC,EAAUw3E,GACvB,GAAIrmO,MAAMC,QAAQ4uJ,GAAW,CAC3B,IAAIpkI,EAAMokI,EAAS9tJ,OAKnB,OAJA8tJ,EAAWA,EAAS9mJ,KAAI,SAAUhI,GAChC,OAAO6vC,OAAO7vC,EACf,IAEG0qB,EAAM,EACD,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS/8I,MAAM,EAAG2Y,EAAM,GAAGu5C,KAAK,MAAO,SAAW6qF,EAASpkI,EAAM,GAC3F,IAARA,EACF,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAAI,QAAQ3P,OAAO2P,EAAS,IAEzE,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAEnD,CACC,MAAO,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAOtvG,OAAOi/G,GAEjD,CA6BDi3E,EAAgB,yBAAyB,SAAUrpN,EAAM3b,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B2b,EAAO,GACrE,GAAEvb,WACH4kO,EAAgB,wBAAwB,SAAUrpN,EAAMoyI,EAAUquE,GAEhE,IAAIoJ,EA/BmB7lG,EAAQl3H,EAwC3BqnI,EAEJ,GATwB,kBAAbie,IAjCYpuB,EAiCkC,OAAVouB,EAhCpCioB,QAAQvtK,GAAOA,EAAM,EAAI,GAAKA,EAAKk3H,EAAO1/H,UAAY0/H,IAiC/D6lG,EAAa,cACbz3E,EAAWA,EAAS/pF,QAAQ,QAAS,KAErCwhK,EAAa,UAhCjB,SAAkBvyD,EAAKtzC,EAAQoiG,GAK7B,YAJiBr3N,IAAbq3N,GAA0BA,EAAW9uD,EAAIhzK,UAC3C8hO,EAAW9uD,EAAIhzK,QAGVgzK,EAAI14D,UAAUwnH,EAAWpiG,EAAO1/H,OAAQ8hO,KAAcpiG,CAC9D,CA+BKmiG,CAASnmN,EAAM,aAEjBm0H,EAAM,OAAOsO,OAAOziI,EAAM,KAAKyiI,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,aACzE,CACL,IAAIrlJ,EAhCR,SAAkBuqK,EAAKtzC,EAAQn2F,GAK7B,MAJqB,kBAAVA,IACTA,EAAQ,KAGNA,EAAQm2F,EAAO1/H,OAASgzK,EAAIhzK,UAGS,IAAhCgzK,EAAI9uK,QAAQw7H,EAAQn2F,EAE9B,CAsBc60G,CAAS1iI,EAAM,KAAO,WAAa,WAC9Cm0H,EAAM,QAASsO,OAAOziI,EAAM,MAAOyiI,OAAO11I,EAAM,KAAK01I,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,QACrG,CAGD,OADAje,GAAO,mBAAmBsO,cAAcg+E,EAEzC,GAAEh8N,WACH4kO,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAUrpN,GACtD,MAAO,OAASA,EAAO,4BACxB,IACDqpN,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAUrpN,GAChD,MAAO,eAAiBA,EAAO,+BAChC,IACDqpN,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC5kO,WACjF4kO,EAAgB,wBAAwB,SAAU96N,GAChD,MAAO,qBAAuBA,CAC/B,GAAE9J,WACH4kO,EAAgB,qCAAsC,oCACtDxgE,EAAOx3B,QAAQ,EAAQowF,oDCnGnBy8C,EAAat3Q,OAAOQ,MAAQ,SAAUV,GACxC,IAAIU,EAAO,GAEX,IAAK,IAAIT,KAAOD,EACdU,EAAKhD,KAAKuC,GAGZ,OAAOS,CACR,EAIDyhK,EAAOx3B,QAAUq7D,EAEjB,IAAIyxE,EAAWr/F,EAAQ,OAEnBi9F,EAAWj9F,EAAQ,OAEvBA,EAAQ,MAARA,CAAoB4tB,EAAQyxE,GAM1B,IAFA,IAAI/2Q,EAAO82Q,EAAWnC,EAASnsQ,WAEtB4K,EAAI,EAAGA,EAAIpT,EAAK9C,OAAQkW,IAAK,CACpC,IAAIkkF,EAASt3F,EAAKoT,GACbkyL,EAAO98L,UAAU8uF,KAASguG,EAAO98L,UAAU8uF,GAAUq9K,EAASnsQ,UAAU8uF,GAC9E,CAGH,SAASguG,EAAOlnM,GACd,KAAME,gBAAgBgnM,GAAS,OAAO,IAAIA,EAAOlnM,GACjD24Q,EAASl6Q,KAAKyB,KAAMF,GACpBu2Q,EAAS93Q,KAAKyB,KAAMF,GACpBE,KAAK04Q,eAAgB,EAEjB54Q,KACuB,IAArBA,EAAQ++M,WAAoB7+M,KAAK6+M,UAAW,IACvB,IAArB/+M,EAAQwB,WAAoBtB,KAAKsB,UAAW,IAElB,IAA1BxB,EAAQ44Q,gBACV14Q,KAAK04Q,eAAgB,EACrB14Q,KAAKk3J,KAAK,MAAOyhH,IAGtB,CA8BD,SAASA,IAEH34Q,KAAK44Q,eAAeC,OAGxBppI,EAAQyuE,SAAS46D,EAAS94Q,KAC3B,CAED,SAAS84Q,EAAQ3vQ,GACfA,EAAKksC,KACN,CAtCDn0C,OAAOC,eAAe6lM,EAAO98L,UAAW,wBAAyB,CAI/D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IAEH3pM,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAEH73Q,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAeHsC,OAAOC,eAAe6lM,EAAO98L,UAAW,YAAa,CAInD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAIvC54Q,KAAKg5Q,eAAeC,WAAaj5Q,KAAK44Q,eAAeK,UAC7D,EACDxuQ,IAAK,SAAa9L,QAGY0K,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAM9C54Q,KAAKg5Q,eAAeC,UAAYt6Q,EAChCqB,KAAK44Q,eAAeK,UAAYt6Q,EACjC,wCChHHwkK,EAAOx3B,QAAUu7D,EAEjB,IAAIwoE,EAAYt2F,EAAQ,OAIxB,SAAS8tB,EAAYpnM,GACnB,KAAME,gBAAgBknM,GAAc,OAAO,IAAIA,EAAYpnM,GAC3D4vQ,EAAUnxQ,KAAKyB,KAAMF,EACtB,CALDs5K,EAAQ,MAARA,CAAoB8tB,EAAawoE,GAOjCxoE,EAAYh9L,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC5DA,EAAG,KAAMg8J,EACV,0CCbGL,YAHJ7jC,EAAOx3B,QAAU8sI,EAMjBA,EAASU,cAAgBA,EAGhB//F,EAAAA,OAAAA,aAAT,IAEIggG,EAAkB,SAAyBC,EAAShyQ,GACtD,OAAOgyQ,EAAQhqQ,UAAUhI,GAAMzI,MAChC,EAMG87N,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAYvD,IAEI22D,EAFAoxM,EAAYngG,EAAQ,OAKtBjxG,EADEoxM,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,WAAmB,EAK7B,IAcIC,EACAC,EACAr6P,EAhBAs6P,EAAavgG,EAAQ,OAErBwgG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC69C,EAA4Bh+C,EAAeg+C,0BAC3CC,EAA6Bj+C,EAAei+C,2BAC5CC,EAAqCl+C,EAAek+C,mCAOxD5gG,EAAQ,MAARA,CAAoBq/F,EAAU/9C,GAE9B,IAAIu/C,EAAiBL,EAAYK,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASf,EAAcr5Q,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQs6Q,oBAG7Dp6Q,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAI9En6Q,KAAKs4C,OAAS,IAAIqhO,EAClB35Q,KAAKpB,OAAS,EACdoB,KAAKq6Q,MAAQ,KACbr6Q,KAAKs6Q,WAAa,EAClBt6Q,KAAKu6Q,QAAU,KACfv6Q,KAAK64Q,OAAQ,EACb74Q,KAAKw6Q,YAAa,EAClBx6Q,KAAKy6Q,SAAU,EAKfz6Q,KAAK06Q,MAAO,EAGZ16Q,KAAK26Q,cAAe,EACpB36Q,KAAK46Q,iBAAkB,EACvB56Q,KAAK66Q,mBAAoB,EACzB76Q,KAAK86Q,iBAAkB,EACvB96Q,KAAK87G,QAAS,EAEd97G,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAKi5Q,WAAY,EAIjBj5Q,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAElDj7Q,KAAKk7Q,WAAa,EAElBl7Q,KAAKm7Q,aAAc,EACnBn7Q,KAAKgwG,QAAU,KACfhwG,KAAKigB,SAAW,KAEZngB,EAAQmgB,WACLw5P,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpCp5K,KAAKgwG,QAAU,IAAIypK,EAAc35Q,EAAQmgB,UACzCjgB,KAAKigB,SAAWngB,EAAQmgB,SAE3B,CAED,SAASw4P,EAAS34Q,GAEhB,GADAknM,EAASA,GAAU5tB,EAAQ,SACrBp5K,gBAAgBy4Q,GAAW,OAAO,IAAIA,EAAS34Q,GAGrD,IAAIq6Q,EAAWn6Q,gBAAgBgnM,EAC/BhnM,KAAKg5Q,eAAiB,IAAIG,EAAcr5Q,EAASE,KAAMm6Q,GAEvDn6Q,KAAK6+M,UAAW,EAEZ/+M,IAC0B,oBAAjBA,EAAQqvG,OAAqBnvG,KAAKo7Q,MAAQt7Q,EAAQqvG,MAC9B,oBAApBrvG,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,UAGrEm6N,EAAOn8N,KAAKyB,KACb,CAgED,SAASs7Q,EAAiBrsK,EAAQo4F,EAAOpnL,EAAUs7P,EAAYC,GAC7DrzM,EAAM,mBAAoBk/H,GAC1B,IAMMo0E,EANF/0N,EAAQuoD,EAAO+pK,eAEnB,GAAc,OAAV3xE,EACF3gJ,EAAM+zN,SAAU,EAyOpB,SAAoBxrK,EAAQvoD,GAE1B,GADAyhB,EAAM,cACFzhB,EAAMmyN,MAAO,OAEjB,GAAInyN,EAAMspD,QAAS,CACjB,IAAIq3F,EAAQ3gJ,EAAMspD,QAAQ36D,MAEtBgyJ,GAASA,EAAMzoM,SACjB8nD,EAAMpO,OAAO55C,KAAK2oM,GAClB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OAEhD,CAED8nD,EAAMmyN,OAAQ,EAEVnyN,EAAMg0N,KAIRgB,EAAazsK,IAGbvoD,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTl0N,EAAMk0N,iBAAkB,EACxBe,EAAc1sK,IAGnB,CArQG2sK,CAAW3sK,EAAQvoD,QAKnB,GAFK80N,IAAgBC,EAmDzB,SAAsB/0N,EAAO2gJ,GAC3B,IAAIo0E,EAhQiBz6Q,EAkQFqmM,EAjQZz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAiQA,kBAAVjyE,QAAgCh+L,IAAVg+L,GAAwB3gJ,EAAMqkJ,aACtF0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAe50B,IAnQ/E,IAAuBrmM,EAsQrB,OAAOy6Q,CACR,CA3D6BI,CAAan1N,EAAO2gJ,IAE1Co0E,EACFxB,EAAehrK,EAAQwsK,QAClB,GAAI/0N,EAAMqkJ,YAAc1D,GAASA,EAAMzoM,OAAS,EAKrD,GAJqB,kBAAVyoM,GAAuB3gJ,EAAMqkJ,YAAc7pM,OAAOyJ,eAAe08L,KAAWz6D,EAAO1iI,YAC5Fm9L,EAtNR,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CAoNey0E,CAAoBz0E,IAG1Bk0E,EACE70N,EAAM8zN,WAAYP,EAAehrK,EAAQ,IAAI+qK,GAA2C+B,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,QACtH,GAAI3gJ,EAAMmyN,MACfoB,EAAehrK,EAAQ,IAAI6qK,OACtB,IAAIpzN,EAAMuyN,UACf,OAAO,EAEPvyN,EAAM+zN,SAAU,EAEZ/zN,EAAMspD,UAAY/vF,GACpBonL,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,GACxB3gJ,EAAMqkJ,YAA+B,IAAjB1D,EAAMzoM,OAAcm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,GAAY20E,EAAc/sK,EAAQvoD,IAE7Gq1N,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,EAElC,MACSk0E,IACV70N,EAAM+zN,SAAU,EAChBuB,EAAc/sK,EAAQvoD,IAO1B,OAAQA,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAkC,IAAjBnkJ,EAAM9nD,OACrE,CAED,SAASm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,EAAOk0E,GAClC70N,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAiB8nD,EAAMg0N,MAChDh0N,EAAMw0N,WAAa,EACnBjsK,EAAOqlC,KAAK,OAAQ+yD,KAGpB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACzC28Q,EAAY70N,EAAMpO,OAAO+P,QAAQg/I,GAAY3gJ,EAAMpO,OAAO55C,KAAK2oM,GAC/D3gJ,EAAMi0N,cAAce,EAAazsK,IAGvC+sK,EAAc/sK,EAAQvoD,EACvB,CAxHDxlD,OAAOC,eAAes3Q,EAASvuQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,gBAIFh5Q,KAAKg5Q,eAAeC,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAKg5Q,iBAMVh5Q,KAAKg5Q,eAAeC,UAAYt6Q,EACjC,IAEH85Q,EAASvuQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzCk4Q,EAASvuQ,UAAU+xQ,WAAarC,EAAYsC,UAE5CzD,EAASvuQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,EAMD45Q,EAASvuQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GACzC,IACIu7P,EADA90N,EAAQ1mD,KAAKg5Q,eAkBjB,OAfKtyN,EAAMqkJ,WAYTywE,GAAiB,EAXI,kBAAVn0E,KACTpnL,EAAWA,GAAYymC,EAAMu0N,mBAEZv0N,EAAMzmC,WACrBonL,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,GAC3BA,EAAW,IAGbu7P,GAAiB,GAMdF,EAAiBt7Q,KAAMqnM,EAAOpnL,GAAU,EAAOu7P,EACvD,EAGD/C,EAASvuQ,UAAUm+C,QAAU,SAAUg/I,GACrC,OAAOi0E,EAAiBt7Q,KAAMqnM,EAAO,MAAM,GAAM,EAClD,EAwEDoxE,EAASvuQ,UAAUiyQ,SAAW,WAC5B,OAAuC,IAAhCn8Q,KAAKg5Q,eAAeuB,OAC5B,EAGD9B,EAASvuQ,UAAUkyQ,YAAc,SAAUr+G,GACpC07G,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpC,IAAIppE,EAAU,IAAIypK,EAAc17G,GAChC/9J,KAAKg5Q,eAAehpK,QAAUA,EAE9BhwG,KAAKg5Q,eAAe/4P,SAAWjgB,KAAKg5Q,eAAehpK,QAAQ/vF,SAK3D,IAHA,IAAIzE,EAAIxb,KAAKg5Q,eAAe1gO,OAAOqqM,KAC/B31H,EAAU,GAED,OAANxxG,GACLwxG,GAAWhd,EAAQ0yF,MAAMlnL,EAAEgD,MAC3BhD,EAAIA,EAAEhd,KAOR,OAJAwB,KAAKg5Q,eAAe1gO,OAAO5D,QAEX,KAAZs4E,GAAgBhtH,KAAKg5Q,eAAe1gO,OAAO55C,KAAKsuH,GACpDhtH,KAAKg5Q,eAAep6Q,OAASouH,EAAQpuH,OAC9BoB,IACR,EAGD,IAAIq8Q,EAAU,WAuBd,SAASC,EAAc5rQ,EAAGg2C,GACxB,OAAIh2C,GAAK,GAAsB,IAAjBg2C,EAAM9nD,QAAgB8nD,EAAMmyN,MAAc,EACpDnyN,EAAMqkJ,WAAmB,EAEzBr6L,IAAMA,EAEJg2C,EAAM6zN,SAAW7zN,EAAM9nD,OAAe8nD,EAAMpO,OAAOqqM,KAAKnkO,KAAK5f,OAAmB8nD,EAAM9nD,QAIxF8R,EAAIg2C,EAAMmkJ,gBAAenkJ,EAAMmkJ,cA/BrC,SAAiCn6L,GAgB/B,OAfIA,GAAK2rQ,EAEP3rQ,EAAI2rQ,GAIJ3rQ,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,CACR,CAcoD6rQ,CAAwB7rQ,IACvEA,GAAKg2C,EAAM9nD,OAAe8R,EAEzBg2C,EAAMmyN,MAKJnyN,EAAM9nD,QAJX8nD,EAAMi0N,cAAe,EACd,GAIV,CAoID,SAASe,EAAazsK,GACpB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,eAAgBzhB,EAAMi0N,aAAcj0N,EAAMk0N,iBAChDl0N,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTzyM,EAAM,eAAgBzhB,EAAM6zN,SAC5B7zN,EAAMk0N,iBAAkB,EACxBnrI,EAAQyuE,SAASy9D,EAAe1sK,GAEnC,CAED,SAAS0sK,EAAc1sK,GACrB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,gBAAiBzhB,EAAMuyN,UAAWvyN,EAAM9nD,OAAQ8nD,EAAMmyN,OAEvDnyN,EAAMuyN,YAAcvyN,EAAM9nD,SAAU8nD,EAAMmyN,QAC7C5pK,EAAOqlC,KAAK,YACZ5tF,EAAMk0N,iBAAkB,GAS1Bl0N,EAAMi0N,cAAgBj0N,EAAM6zN,UAAY7zN,EAAMmyN,OAASnyN,EAAM9nD,QAAU8nD,EAAMmkJ,cAC7E2xE,EAAKvtK,EACN,CAQD,SAAS+sK,EAAc/sK,EAAQvoD,GACxBA,EAAMy0N,cACTz0N,EAAMy0N,aAAc,EACpB1rI,EAAQyuE,SAASu+D,EAAgBxtK,EAAQvoD,GAE5C,CAED,SAAS+1N,EAAextK,EAAQvoD,GAwB9B,MAAQA,EAAM+zN,UAAY/zN,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAiBnkJ,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAe,CACpH,IAAI0pB,EAAMo+B,EAAM9nD,OAGhB,GAFAupE,EAAM,wBACN8mC,EAAOE,KAAK,GACR7mF,IAAQo+B,EAAM9nD,OAChB,KACH,CAED8nD,EAAMy0N,aAAc,CACrB,CA4QD,SAASuB,EAAwBvzQ,GAC/B,IAAIu9C,EAAQv9C,EAAK6vQ,eACjBtyN,EAAMm0N,kBAAoB1xQ,EAAKguJ,cAAc,YAAc,EAEvDzwG,EAAMo0N,kBAAoBp0N,EAAMo1D,OAGlCp1D,EAAM6zN,SAAU,EACPpxQ,EAAKguJ,cAAc,QAAU,GACtChuJ,EAAKwzQ,QAER,CAED,SAASC,EAAiBzzQ,GACxBg/D,EAAM,4BACNh/D,EAAKgmG,KAAK,EACX,CA2BD,SAAS0tK,EAAQ5tK,EAAQvoD,GACvByhB,EAAM,SAAUzhB,EAAM+zN,SAEjB/zN,EAAM+zN,SACTxrK,EAAOE,KAAK,GAGdzoD,EAAMo0N,iBAAkB,EACxB7rK,EAAOqlC,KAAK,UACZkoI,EAAKvtK,GACDvoD,EAAM6zN,UAAY7zN,EAAM+zN,SAASxrK,EAAOE,KAAK,EAClD,CAeD,SAASqtK,EAAKvtK,GACZ,IAAIvoD,EAAQuoD,EAAO+pK,eAGnB,IAFA7wM,EAAM,OAAQzhB,EAAM6zN,SAEb7zN,EAAM6zN,SAA6B,OAAlBtrK,EAAOE,SAGhC,CAyHD,SAAS2tK,EAASpsQ,EAAGg2C,GAEnB,OAAqB,IAAjBA,EAAM9nD,OAAqB,MAE3B8nD,EAAMqkJ,WAAYie,EAAMtiK,EAAMpO,OAAO8+C,SAAkB1mF,GAAKA,GAAKg2C,EAAM9nD,QAEtDoqN,EAAftiK,EAAMspD,QAAetpD,EAAMpO,OAAOupB,KAAK,IAAqC,IAAxBnb,EAAMpO,OAAO15C,OAAoB8nD,EAAMpO,OAAOwtK,QAAmBp/J,EAAMpO,OAAOykG,OAAOr2F,EAAM9nD,QACnJ8nD,EAAMpO,OAAO5D,SAGbs0K,EAAMtiK,EAAMpO,OAAOk2F,QAAQ99H,EAAGg2C,EAAMspD,SAE/Bg5G,GATP,IAAIA,CAUL,CAED,SAAS+zD,EAAY9tK,GACnB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,cAAezhB,EAAM8zN,YAEtB9zN,EAAM8zN,aACT9zN,EAAMmyN,OAAQ,EACdppI,EAAQyuE,SAAS8+D,EAAet2N,EAAOuoD,GAE1C,CAED,SAAS+tK,EAAct2N,EAAOuoD,GAG5B,GAFA9mC,EAAM,gBAAiBzhB,EAAM8zN,WAAY9zN,EAAM9nD,SAE1C8nD,EAAM8zN,YAA+B,IAAjB9zN,EAAM9nD,SAC7B8nD,EAAM8zN,YAAa,EACnBvrK,EAAO4vG,UAAW,EAClB5vG,EAAOqlC,KAAK,OAER5tF,EAAMs0N,aAAa,CAGrB,IAAIiC,EAAShuK,EAAO2pK,iBAEfqE,GAAUA,EAAOjC,aAAeiC,EAAOC,WAC1CjuK,EAAO1uG,SAEV,CAEJ,CAYD,SAASuC,EAAQq6Q,EAAIn6Q,GACnB,IAAK,IAAIpF,EAAI,EAAGgS,EAAIutQ,EAAGv+Q,OAAQhB,EAAIgS,EAAGhS,IACpC,GAAIu/Q,EAAGv/Q,KAAOoF,EAAG,OAAOpF,EAG1B,OAAQ,CACT,CA5tBD66Q,EAASvuQ,UAAUilG,KAAO,SAAUz+F,GAClCy3D,EAAM,OAAQz3D,GACdA,EAAI4L,SAAS5L,EAAG,IAChB,IAAIg2C,EAAQ1mD,KAAKg5Q,eACboE,EAAQ1sQ,EAKZ,GAJU,IAANA,IAASg2C,EAAMk0N,iBAAkB,GAI3B,IAANlqQ,GAAWg2C,EAAMi0N,gBAA0C,IAAxBj0N,EAAMmkJ,cAAsBnkJ,EAAM9nD,QAAU8nD,EAAMmkJ,cAAgBnkJ,EAAM9nD,OAAS,IAAM8nD,EAAMmyN,OAGlI,OAFA1wM,EAAM,qBAAsBzhB,EAAM9nD,OAAQ8nD,EAAMmyN,OAC3B,IAAjBnyN,EAAM9nD,QAAgB8nD,EAAMmyN,MAAOkE,EAAY/8Q,MAAW07Q,EAAa17Q,MACpE,KAKT,GAAU,KAFV0Q,EAAI4rQ,EAAc5rQ,EAAGg2C,KAENA,EAAMmyN,MAEnB,OADqB,IAAjBnyN,EAAM9nD,QAAcm+Q,EAAY/8Q,MAC7B,KAyBT,IA4BIgpN,EA5BAq0D,EAAS32N,EAAMi0N,aAgDnB,OA/CAxyM,EAAM,gBAAiBk1M,IAEF,IAAjB32N,EAAM9nD,QAAgB8nD,EAAM9nD,OAAS8R,EAAIg2C,EAAMmkJ,gBAEjD1iI,EAAM,6BADNk1M,GAAS,GAMP32N,EAAMmyN,OAASnyN,EAAM+zN,QAEvBtyM,EAAM,mBADNk1M,GAAS,GAEAA,IACTl1M,EAAM,WACNzhB,EAAM+zN,SAAU,EAChB/zN,EAAMg0N,MAAO,EAEQ,IAAjBh0N,EAAM9nD,SAAc8nD,EAAMi0N,cAAe,GAE7C36Q,KAAKo7Q,MAAM10N,EAAMmkJ,eAEjBnkJ,EAAMg0N,MAAO,EAGRh0N,EAAM+zN,UAAS/pQ,EAAI4rQ,EAAcc,EAAO12N,KAMnC,QAFDsiK,EAAPt4M,EAAI,EAASosQ,EAASpsQ,EAAGg2C,GAAkB,OAG7CA,EAAMi0N,aAAej0N,EAAM9nD,QAAU8nD,EAAMmkJ,cAC3Cn6L,EAAI,IAEJg2C,EAAM9nD,QAAU8R,EAChBg2C,EAAMw0N,WAAa,GAGA,IAAjBx0N,EAAM9nD,SAGH8nD,EAAMmyN,QAAOnyN,EAAMi0N,cAAe,GAEnCyC,IAAU1sQ,GAAKg2C,EAAMmyN,OAAOkE,EAAY/8Q,OAGlC,OAARgpN,GAAchpN,KAAKs0I,KAAK,OAAQ00E,GAC7BA,CACR,EAuHDyvD,EAASvuQ,UAAUkxQ,MAAQ,SAAU1qQ,GACnCupQ,EAAej6Q,KAAM,IAAI+5Q,EAA2B,WACrD,EAEDtB,EAASvuQ,UAAUovO,KAAO,SAAU9hI,EAAM8lK,GACxC,IAAIl+Q,EAAMY,KACN0mD,EAAQ1mD,KAAKg5Q,eAEjB,OAAQtyN,EAAM4zN,YACZ,KAAK,EACH5zN,EAAM2zN,MAAQ7iK,EACd,MAEF,KAAK,EACH9wD,EAAM2zN,MAAQ,CAAC3zN,EAAM2zN,MAAO7iK,GAC5B,MAEF,QACE9wD,EAAM2zN,MAAM37Q,KAAK84G,GAIrB9wD,EAAM4zN,YAAc,EACpBnyM,EAAM,wBAAyBzhB,EAAM4zN,WAAYgD,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAASjoO,MAAkBmiE,IAASi4B,EAAQ+tI,QAAUhmK,IAASi4B,EAAQ0yF,OAC7Ew2C,EAAQ8E,EAI5B,SAASC,EAAS7+D,EAAU8+D,GAC1Bx1M,EAAM,YAEF02I,IAAaz/M,GACXu+Q,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5Bz1M,EAAM,WAENqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BtmK,EAAK0+C,eAAe,QAAS6nH,GAC7BvmK,EAAK0+C,eAAe,QAAShjC,GAC7B1b,EAAK0+C,eAAe,SAAUwnH,GAC9Bt+Q,EAAI82J,eAAe,MAAOyiH,GAC1Bv5Q,EAAI82J,eAAe,MAAOunH,GAC1Br+Q,EAAI82J,eAAe,OAAQ8nH,GAC3BC,GAAY,GAMRv3N,EAAMw0N,YAAgB1jK,EAAKohK,iBAAkBphK,EAAKohK,eAAesF,WAAYH,IAhClF,CAED,SAASpF,IACPxwM,EAAM,SACNqvC,EAAKniE,KACN,CAjBGqR,EAAM8zN,WAAY/qI,EAAQyuE,SAASq/D,GAAYn+Q,EAAI83J,KAAK,MAAOqmH,GACnE/lK,EAAK+wB,GAAG,SAAUm1I,GAsBlB,IAAIK,EAwFN,SAAqB3+Q,GACnB,OAAO,WACL,IAAIsnD,EAAQtnD,EAAI45Q,eAChB7wM,EAAM,cAAezhB,EAAMw0N,YACvBx0N,EAAMw0N,YAAYx0N,EAAMw0N,aAEH,IAArBx0N,EAAMw0N,YAAoB9B,EAAgBh6Q,EAAK,UACjDsnD,EAAM6zN,SAAU,EAChBiC,EAAKp9Q,GAER,CACF,CAnGe++Q,CAAY/+Q,GAC1Bo4G,EAAK+wB,GAAG,QAASw1I,GACjB,IAAIE,GAAY,EAwBhB,SAASD,EAAO32E,GACdl/H,EAAM,UACN,IAAI6gJ,EAAMxxG,EAAKkrF,MAAM2E,GACrBl/H,EAAM,aAAc6gJ,IAER,IAARA,KAKwB,IAArBtiK,EAAM4zN,YAAoB5zN,EAAM2zN,QAAU7iK,GAAQ9wD,EAAM4zN,WAAa,IAAqC,IAAhCx3Q,EAAQ4jD,EAAM2zN,MAAO7iK,MAAkBymK,IACpH91M,EAAM,8BAA+BzhB,EAAMw0N,YAC3Cx0N,EAAMw0N,cAGR97Q,EAAIg/Q,QAEP,CAID,SAASlrJ,EAAQuoJ,GACftzM,EAAM,UAAWszM,GACjBgC,IACAjmK,EAAK0+C,eAAe,QAAShjC,GACU,IAAnCkmJ,EAAgB5hK,EAAM,UAAgByiK,EAAeziK,EAAMikK,EAChE,CAKD,SAASoC,IACPrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BL,GACD,CAID,SAASK,IACP31M,EAAM,YACNqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BJ,GACD,CAID,SAASA,IACPt1M,EAAM,UACN/oE,EAAIq+Q,OAAOjmK,EACZ,CAUD,OA7DAp4G,EAAImpI,GAAG,OAAQy1I,GAtkBjB,SAAyB3E,EAAS5pQ,EAAOvG,GAGvC,GAAuC,oBAA5BmwQ,EAAQgF,gBAAgC,OAAOhF,EAAQgF,gBAAgB5uQ,EAAOvG,GAKpFmwQ,EAAQiF,SAAYjF,EAAQiF,QAAQ7uQ,GAAuC5R,MAAMC,QAAQu7Q,EAAQiF,QAAQ7uQ,IAAS4pQ,EAAQiF,QAAQ7uQ,GAAO44C,QAAQn/C,GAASmwQ,EAAQiF,QAAQ7uQ,GAAS,CAACvG,EAAImwQ,EAAQiF,QAAQ7uQ,IAA5J4pQ,EAAQ9wI,GAAG94H,EAAOvG,EACpE,CA4lBCm1Q,CAAgB7mK,EAAM,QAAS0b,GAO/B1b,EAAK0/C,KAAK,QAAS2mH,GAQnBrmK,EAAK0/C,KAAK,SAAU4mH,GAQpBtmK,EAAK88B,KAAK,OAAQl1I,GAEbsnD,EAAM6zN,UACTpyM,EAAM,eACN/oE,EAAIu9Q,UAGCnlK,CACR,EAeDihK,EAASvuQ,UAAUuzQ,OAAS,SAAUjmK,GACpC,IAAI9wD,EAAQ1mD,KAAKg5Q,eACb2E,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBl3N,EAAM4zN,WAAkB,OAAOt6Q,KAEnC,GAAyB,IAArB0mD,EAAM4zN,WAER,OAAI9iK,GAAQA,IAAS9wD,EAAM2zN,QACtB7iK,IAAMA,EAAO9wD,EAAM2zN,OAExB3zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EACZ/iK,GAAMA,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IANK39Q,KAW3C,IAAKw3G,EAAM,CAET,IAAI+mK,EAAQ73N,EAAM2zN,MACd/xP,EAAMo+B,EAAM4zN,WAChB5zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EAEhB,IAAK,IAAI38Q,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACvB2gR,EAAM3gR,GAAG02I,KAAK,SAAUt0I,KAAM,CAC5B49Q,YAAY,IAIhB,OAAO59Q,IACR,CAGD,IAAIuP,EAAQzM,EAAQ4jD,EAAM2zN,MAAO7iK,GACjC,OAAe,IAAXjoG,IACJm3C,EAAM2zN,MAAM7qQ,OAAOD,EAAO,GAC1Bm3C,EAAM4zN,YAAc,EACK,IAArB5zN,EAAM4zN,aAAkB5zN,EAAM2zN,MAAQ3zN,EAAM2zN,MAAM,IACtD7iK,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IAJD39Q,IAM1B,EAIDy4Q,EAASvuQ,UAAUq+H,GAAK,SAAUq2D,EAAI11L,GACpC,IAAI0pG,EAAM8nH,EAAOxwN,UAAUq+H,GAAGhqI,KAAKyB,KAAM4+L,EAAI11L,GACzCw9C,EAAQ1mD,KAAKg5Q,eAuBjB,MArBW,SAAPp6E,GAGFl4I,EAAMm0N,kBAAoB76Q,KAAKm3J,cAAc,YAAc,GAErC,IAAlBzwG,EAAM6zN,SAAmBv6Q,KAAK28Q,UAClB,aAAP/9E,IACJl4I,EAAM8zN,YAAe9zN,EAAMm0N,oBAC9Bn0N,EAAMm0N,kBAAoBn0N,EAAMi0N,cAAe,EAC/Cj0N,EAAM6zN,SAAU,EAChB7zN,EAAMk0N,iBAAkB,EACxBzyM,EAAM,cAAezhB,EAAM9nD,OAAQ8nD,EAAM+zN,SAErC/zN,EAAM9nD,OACR88Q,EAAa17Q,MACH0mD,EAAM+zN,SAChBhrI,EAAQyuE,SAAS0+D,EAAkB58Q,QAKlC4yG,CACR,EAED6lK,EAASvuQ,UAAU0uJ,YAAc6/G,EAASvuQ,UAAUq+H,GAEpDkwI,EAASvuQ,UAAUgsJ,eAAiB,SAAU0oC,EAAI11L,GAChD,IAAI0pG,EAAM8nH,EAAOxwN,UAAUgsJ,eAAe33J,KAAKyB,KAAM4+L,EAAI11L,GAYzD,MAVW,aAAP01L,GAOFnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAED6lK,EAASvuQ,UAAUqvJ,mBAAqB,SAAUqlC,GAChD,IAAIhsF,EAAM8nH,EAAOxwN,UAAUqvJ,mBAAmBv3J,MAAMhC,KAAMmC,WAY1D,MAVW,aAAPy8L,QAA4Bv1L,IAAPu1L,GAOvBnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAsBD6lK,EAASvuQ,UAAUyyQ,OAAS,WAC1B,IAAIj2N,EAAQ1mD,KAAKg5Q,eAYjB,OAVKtyN,EAAM6zN,UACTpyM,EAAM,UAINzhB,EAAM6zN,SAAW7zN,EAAMm0N,kBAQ3B,SAAgB5rK,EAAQvoD,GACjBA,EAAMo0N,kBACTp0N,EAAMo0N,iBAAkB,EACxBrrI,EAAQyuE,SAAS2+D,EAAS5tK,EAAQvoD,GAErC,CAZGi2N,CAAO38Q,KAAM0mD,IAGfA,EAAMo1D,QAAS,EACR97G,IACR,EAsBDy4Q,EAASvuQ,UAAUk0Q,MAAQ,WAUzB,OATAj2M,EAAM,wBAAyBnoE,KAAKg5Q,eAAeuB,UAEf,IAAhCv6Q,KAAKg5Q,eAAeuB,UACtBpyM,EAAM,SACNnoE,KAAKg5Q,eAAeuB,SAAU,EAC9Bv6Q,KAAKs0I,KAAK,UAGZt0I,KAAKg5Q,eAAel9J,QAAS,EACtB97G,IACR,EAcDy4Q,EAASvuQ,UAAUsX,KAAO,SAAUytF,GAClC,IAAIla,EAAQ/0F,KAER0mD,EAAQ1mD,KAAKg5Q,eACbl9J,GAAS,EA0Bb,IAAK,IAAIl+G,KAzBTqxG,EAAOs5B,GAAG,OAAO,WAGf,GAFApgE,EAAM,eAEFzhB,EAAMspD,UAAYtpD,EAAMmyN,MAAO,CACjC,IAAIxxE,EAAQ3gJ,EAAMspD,QAAQ36D,MACtBgyJ,GAASA,EAAMzoM,QAAQm2F,EAAMr2F,KAAK2oM,EACvC,CAEDtyG,EAAMr2F,KAAK,KACZ,IACDuwG,EAAOs5B,GAAG,QAAQ,SAAU8+D,IAC1Bl/H,EAAM,gBACFzhB,EAAMspD,UAASq3F,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,KAE3C3gJ,EAAMqkJ,YAAyB,OAAV1D,QAA4Bh+L,IAAVg+L,MAAuC3gJ,EAAMqkJ,YAAgB1D,GAAUA,EAAMzoM,UAE9Gm2F,EAAMr2F,KAAK2oM,KAGnBvrF,GAAS,EACT7M,EAAOmvK,UAEV,IAGanvK,OACI5lG,IAAZrJ,KAAKpC,IAAyC,oBAAdqxG,EAAOrxG,KACzCoC,KAAKpC,GAAK,SAAoBo7F,GAC5B,OAAO,WACL,OAAOiW,EAAOjW,GAAQh3F,MAAMitG,EAAQ9sG,UACrC,CACF,CAJS,CAIRvE,IAKN,IAAK,IAAI8S,EAAI,EAAGA,EAAIwpQ,EAAat7Q,OAAQ8R,IACvCu+F,EAAOs5B,GAAG2xI,EAAaxpQ,GAAI1Q,KAAKs0I,KAAKzqI,KAAK7J,KAAMk6Q,EAAaxpQ,KAc/D,OATA1Q,KAAKo7Q,MAAQ,SAAU1qQ,GACrBy3D,EAAM,gBAAiBz3D,GAEnBorG,IACFA,GAAS,EACT7M,EAAO0tK,SAEV,EAEM38Q,IACR,EAEqB,oBAAXhC,SACTy6Q,EAASvuQ,UAAUlM,OAAOwgR,eAAiB,WAKzC,YAJ0Cn1Q,IAAtCqwQ,IACFA,EAAoCtgG,EAAQ,QAGvCsgG,EAAkC15Q,KAC1C,GAGHkB,OAAOC,eAAes3Q,EAASvuQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAenuE,aAC5B,IAEH3pM,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAe1gO,MACnD,IAEHp3C,OAAOC,eAAes3Q,EAASvuQ,UAAW,kBAAmB,CAI3D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAeuB,OAC5B,EACD9vQ,IAAK,SAAai8C,GACZ1mD,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeuB,QAAU7zN,EAEjC,IAGH+xN,EAASgG,UAAY3B,EACrB57Q,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAep6Q,MAC5B,IAmDmB,oBAAXZ,SACTy6Q,EAASp5P,KAAO,SAAUq/P,EAAU/gG,GAKlC,YAJat0K,IAATgW,IACFA,EAAO+5J,EAAQ,QAGV/5J,EAAKo5P,EAAUiG,EAAU/gG,EACjC,uCC3hCHxa,EAAOx3B,QAAU+jI,EAEjB,IAAI5zC,EAAiB1iD,EAAAA,OAAAA,EACjB2gG,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCC,EAAqC9iD,EAAe8iD,mCACpDC,EAA8B/iD,EAAe+iD,4BAE7C73E,EAAS5tB,EAAQ,OAIrB,SAAS0lG,EAAerD,EAAIj9P,GAC1B,IAAIugQ,EAAK/+Q,KAAKg/Q,gBACdD,EAAGE,cAAe,EAClB,IAAI5zO,EAAK0zO,EAAGG,QAEZ,GAAW,OAAP7zO,EACF,OAAOrrC,KAAKs0I,KAAK,QAAS,IAAIqqI,GAGhCI,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KACD,MAAR1gQ,GACFxe,KAAKtB,KAAK8f,GACZ6sB,EAAGowO,GACH,IAAIjrG,EAAKxwK,KAAKg5Q,eACdxoG,EAAGiqG,SAAU,GAETjqG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBACpC7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cAEjB,CAED,SAAS6kE,EAAU5vQ,GACjB,KAAME,gBAAgB0vQ,GAAY,OAAO,IAAIA,EAAU5vQ,GACvDknM,EAAOzoM,KAAKyB,KAAMF,GAClBE,KAAKg/Q,gBAAkB,CACrBF,eAAgBA,EAAej1Q,KAAK7J,MACpCo/Q,eAAe,EACfH,cAAc,EACdC,QAAS,KACTC,WAAY,KACZE,cAAe,MAGjBr/Q,KAAKg5Q,eAAe2B,cAAe,EAInC36Q,KAAKg5Q,eAAe0B,MAAO,EAEvB56Q,IAC+B,oBAAtBA,EAAQ+H,YAA0B7H,KAAKk5Q,WAAap5Q,EAAQ+H,WAC1C,oBAAlB/H,EAAQ2yQ,QAAsBzyQ,KAAKs/Q,OAASx/Q,EAAQ2yQ,QAIjEzyQ,KAAKuoI,GAAG,YAAag3I,EACtB,CAED,SAASA,IACP,IAAIxqL,EAAQ/0F,KAEe,oBAAhBA,KAAKs/Q,QAA0Bt/Q,KAAKg5Q,eAAeC,UAK5Dx6Q,EAAKuB,KAAM,KAAM,MAJjBA,KAAKs/Q,QAAO,SAAU7D,EAAIj9P,GACxB/f,EAAKs2F,EAAO0mL,EAAIj9P,EACjB,GAIJ,CAwDD,SAAS/f,EAAKwwG,EAAQwsK,EAAIj9P,GACxB,GAAIi9P,EAAI,OAAOxsK,EAAOqlC,KAAK,QAASmnI,GAMpC,GALY,MAARj9P,GACFywF,EAAOvwG,KAAK8f,GAIVywF,EAAO2pK,eAAeh6Q,OAAQ,MAAM,IAAIigR,EAC5C,GAAI5vK,EAAO+vK,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAO3vK,EAAOvwG,KAAK,KACpB,CA/HD06K,EAAQ,MAARA,CAAoBs2F,EAAW1oE,GA+D/B0oE,EAAUxlQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GAE1C,OADAjgB,KAAKg/Q,gBAAgBI,eAAgB,EAC9Bp4E,EAAO98L,UAAUxL,KAAKH,KAAKyB,KAAMqnM,EAAOpnL,EAChD,EAYDyvP,EAAUxlQ,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC1DA,EAAG,IAAI0uO,EAA2B,gBACnC,EAEDrK,EAAUxlQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACtD,IAAI0zO,EAAK/+Q,KAAKg/Q,gBAKd,GAJAD,EAAGG,QAAU7zO,EACb0zO,EAAGI,WAAa93E,EAChB03E,EAAGM,cAAgBp/P,GAEd8+P,EAAGE,aAAc,CACpB,IAAIzuG,EAAKxwK,KAAKg5Q,gBACV+F,EAAGK,eAAiB5uG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBAAe7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cACxF,CACF,EAKD6kE,EAAUxlQ,UAAUkxQ,MAAQ,SAAU1qQ,GACpC,IAAIquQ,EAAK/+Q,KAAKg/Q,gBAEQ,OAAlBD,EAAGI,YAAwBJ,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBj/Q,KAAKk5Q,WAAW6F,EAAGI,WAAYJ,EAAGM,cAAeN,EAAGD,gBAMvD,EAEDpP,EAAUxlQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC5C27J,EAAO98L,UAAUmxQ,SAAS98Q,KAAKyB,KAAMnB,GAAK,SAAU2gR,GAClDn0O,EAAGm0O,EACJ,GACF,0CCxIGx4E,YAfJ,SAASy4E,EAAc/4N,GACrB,IAAIquC,EAAQ/0F,KAEZA,KAAKxB,KAAO,KACZwB,KAAK04D,MAAQ,KAEb14D,KAAKguE,OAAS,YAimBhB,SAAwB0xM,EAASh5N,EAAO7nD,GACtC,IAAI65D,EAAQgnN,EAAQhnN,MACpBgnN,EAAQhnN,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAIrtB,EAAKqtB,EAAMrxC,SACfq/B,EAAMi5N,YACNt0O,EAAGxsC,GACH65D,EAAQA,EAAMl6D,IACf,CAGDkoD,EAAMk5N,mBAAmBphR,KAAOkhR,CACjC,CA7mBGG,CAAe9qL,EAAOruC,EACvB,CACF,CArBDy8G,EAAOx3B,QAAU0qI,EA8BjBA,EAASyJ,cAAgBA,EAGzB,IAAIC,EAAe,CACjBC,UAAW5mG,EAAQ,QAMjBshD,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAUvD,IAkIIyuQ,EAlIArG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC89C,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCuB,EAAyBpkD,EAAeokD,uBACxCC,EAAuBrkD,EAAeqkD,qBACtCC,EAAyBtkD,EAAeskD,uBACxCC,EAA6BvkD,EAAeukD,2BAC5CC,EAAuBxkD,EAAewkD,qBAEtCrG,EAAiBL,EAAYK,eAIjC,SAASsG,IAAQ,CAEjB,SAAST,EAAchgR,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQ0gR,oBAI7DxgR,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAE9En6Q,KAAKygR,aAAc,EAEnBzgR,KAAKk+Q,WAAY,EAEjBl+Q,KAAK0gR,QAAS,EAEd1gR,KAAK64Q,OAAQ,EAEb74Q,KAAKk9Q,UAAW,EAEhBl9Q,KAAKi5Q,WAAY,EAIjB,IAAI0H,GAAqC,IAA1B7gR,EAAQ8gR,cACvB5gR,KAAK4gR,eAAiBD,EAItB3gR,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAIlDj7Q,KAAKpB,OAAS,EAEdoB,KAAK6gR,SAAU,EAEf7gR,KAAK8gR,OAAS,EAKd9gR,KAAK06Q,MAAO,EAIZ16Q,KAAK+gR,kBAAmB,EAExB/gR,KAAKghR,QAAU,SAAUvF,IA6R3B,SAAiBxsK,EAAQwsK,GACvB,IAAI/0N,EAAQuoD,EAAO2pK,eACf8B,EAAOh0N,EAAMg0N,KACbrvO,EAAKqb,EAAMw4N,QACf,GAAkB,oBAAP7zO,EAAmB,MAAM,IAAIszO,EAExC,GAbF,SAA4Bj4N,GAC1BA,EAAMm6N,SAAU,EAChBn6N,EAAMw4N,QAAU,KAChBx4N,EAAM9nD,QAAU8nD,EAAMu6N,SACtBv6N,EAAMu6N,SAAW,CAClB,CAOCC,CAAmBx6N,GACf+0N,GArCN,SAAsBxsK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,KAC3Cqb,EAAMi5N,UAEJjF,GAGFjrI,EAAQyuE,SAAS7yK,EAAIowO,GAGrBhsI,EAAQyuE,SAASijE,EAAalyK,EAAQvoD,GACtCuoD,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,KAIvBpwO,EAAGowO,GACHxsK,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,GAGvB0F,EAAYlyK,EAAQvoD,GAEvB,CAeS26N,CAAapyK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,OAAS,CAErD,IAAI6xO,EAAWoE,EAAW56N,IAAUuoD,EAAOgqK,UAEtCiE,GAAax2N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBACjEC,EAAYvyK,EAAQvoD,GAGlBg0N,EACFjrI,EAAQyuE,SAASujE,EAAYxyK,EAAQvoD,EAAOw2N,EAAU7xO,GAEtDo2O,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,EAEvC,CACF,CAhTG21O,CAAQ/xK,EAAQwsK,EACjB,EAGDz7Q,KAAKk/Q,QAAU,KAEfl/Q,KAAKihR,SAAW,EAChBjhR,KAAKuhR,gBAAkB,KACvBvhR,KAAK0hR,oBAAsB,KAG3B1hR,KAAK2/Q,UAAY,EAGjB3/Q,KAAK2hR,aAAc,EAEnB3hR,KAAKohR,cAAe,EAEpBphR,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAK4hR,qBAAuB,EAG5B5hR,KAAK4/Q,mBAAqB,IAAIH,EAAcz/Q,KAC7C,CA2CD,SAASq2Q,EAASv2Q,GAUhB,IAAIq6Q,EAAWn6Q,gBATfgnM,EAASA,GAAU5tB,EAAQ,QAU3B,IAAK+gG,IAAa8F,EAAgB1hR,KAAK83Q,EAAUr2Q,MAAO,OAAO,IAAIq2Q,EAASv2Q,GAC5EE,KAAK44Q,eAAiB,IAAIkH,EAAchgR,EAASE,KAAMm6Q,GAEvDn6Q,KAAKsB,UAAW,EAEZxB,IAC2B,oBAAlBA,EAAQ4iM,QAAsB1iM,KAAKonM,OAAStnM,EAAQ4iM,OACjC,oBAAnB5iM,EAAQ+hR,SAAuB7hR,KAAK8hR,QAAUhiR,EAAQ+hR,QAClC,oBAApB/hR,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,SACtC,oBAAlBT,EAAQkxQ,QAAsBhxQ,KAAK+wQ,OAASjxQ,EAAQkxQ,QAGjEt2C,EAAOn8N,KAAKyB,KACb,CAuJD,SAAS+hR,EAAQ9yK,EAAQvoD,EAAOm7N,EAAQv5P,EAAK++K,EAAOpnL,EAAUorB,GAC5Dqb,EAAMu6N,SAAW34P,EACjBo+B,EAAMw4N,QAAU7zO,EAChBqb,EAAMm6N,SAAU,EAChBn6N,EAAMg0N,MAAO,EACTh0N,EAAMuyN,UAAWvyN,EAAMs6N,QAAQ,IAAIb,EAAqB,UAAmB0B,EAAQ5yK,EAAO6yK,QAAQz6E,EAAO3gJ,EAAMs6N,SAAc/xK,EAAOm4F,OAAOC,EAAOpnL,EAAUymC,EAAMs6N,SACtKt6N,EAAMg0N,MAAO,CACd,CAuDD,SAAS+G,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,GACtC6xO,GASP,SAAsBjuK,EAAQvoD,GACP,IAAjBA,EAAM9nD,QAAgB8nD,EAAMw3N,YAC9Bx3N,EAAMw3N,WAAY,EAClBjvK,EAAOqlC,KAAK,SAEf,CAdgB0tI,CAAa/yK,EAAQvoD,GACpCA,EAAMi5N,YACNt0O,IACA81O,EAAYlyK,EAAQvoD,EACrB,CAaD,SAAS86N,EAAYvyK,EAAQvoD,GAC3BA,EAAMq6N,kBAAmB,EACzB,IAAIroN,EAAQhS,EAAM66N,gBAElB,GAAItyK,EAAO6yK,SAAWppN,GAASA,EAAMl6D,KAAM,CAEzC,IAAIoR,EAAI82C,EAAMk7N,qBACVtpO,EAAS,IAAIz6C,MAAM+R,GACnBqyQ,EAASv7N,EAAMk5N,mBACnBqC,EAAOvpN,MAAQA,EAIf,IAHA,IAAIltC,EAAQ,EACR02P,GAAa,EAEVxpN,GACLpgB,EAAO9sB,GAASktC,EACXA,EAAMypN,QAAOD,GAAa,GAC/BxpN,EAAQA,EAAMl6D,KACdgtB,GAAS,EAGX8sB,EAAO4pO,WAAaA,EACpBH,EAAQ9yK,EAAQvoD,GAAO,EAAMA,EAAM9nD,OAAQ05C,EAAQ,GAAI2pO,EAAOj0M,QAG9DtnB,EAAMi5N,YACNj5N,EAAMg7N,oBAAsB,KAExBO,EAAOzjR,MACTkoD,EAAMk5N,mBAAqBqC,EAAOzjR,KAClCyjR,EAAOzjR,KAAO,MAEdkoD,EAAMk5N,mBAAqB,IAAIH,EAAc/4N,GAG/CA,EAAMk7N,qBAAuB,CAC9B,KAAM,CAEL,KAAOlpN,GAAO,CACZ,IAAI2uI,EAAQ3uI,EAAM2uI,MACdpnL,EAAWy4C,EAAMz4C,SACjBorB,EAAKqtB,EAAMrxC,SASf,GAPA06P,EAAQ9yK,EAAQvoD,GAAO,EADbA,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACJyoM,EAAOpnL,EAAUorB,GACpDqtB,EAAQA,EAAMl6D,KACdkoD,EAAMk7N,uBAKFl7N,EAAMm6N,QACR,KAEH,CAEa,OAAVnoN,IAAgBhS,EAAMg7N,oBAAsB,KACjD,CAEDh7N,EAAM66N,gBAAkB7oN,EACxBhS,EAAMq6N,kBAAmB,CAC1B,CA0CD,SAASO,EAAW56N,GAClB,OAAOA,EAAMg6N,QAA2B,IAAjBh6N,EAAM9nD,QAA0C,OAA1B8nD,EAAM66N,kBAA6B76N,EAAMw2N,WAAax2N,EAAMm6N,OAC1G,CAED,SAASuB,EAAUnzK,EAAQvoD,GACzBuoD,EAAO8hK,QAAO,SAAUlyQ,GACtB6nD,EAAMi5N,YAEF9gR,GACFo7Q,EAAehrK,EAAQpwG,GAGzB6nD,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,aACZ6sI,EAAYlyK,EAAQvoD,EACrB,GACF,CAeD,SAASy6N,EAAYlyK,EAAQvoD,GAC3B,IAAI27N,EAAOf,EAAW56N,GAEtB,GAAI27N,IAhBN,SAAmBpzK,EAAQvoD,GACpBA,EAAMi7N,aAAgBj7N,EAAM+5N,cACF,oBAAlBxxK,EAAO8hK,QAA0BrqN,EAAMuyN,WAKhDvyN,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,eALZ5tF,EAAMi5N,YACNj5N,EAAM+5N,aAAc,EACpBhxI,EAAQyuE,SAASkkE,EAAWnzK,EAAQvoD,IAMzC,CAMG64N,CAAUtwK,EAAQvoD,GAEM,IAApBA,EAAMi5N,YACRj5N,EAAMw2N,UAAW,EACjBjuK,EAAOqlC,KAAK,UAER5tF,EAAMs0N,cAAa,CAGrB,IAAIsH,EAASrzK,EAAO+pK,iBAEfsJ,GAAUA,EAAOtH,aAAesH,EAAO9H,aAC1CvrK,EAAO1uG,SAEV,CAIL,OAAO8hR,CACR,CA5hBDjpG,EAAQ,MAARA,CAAoBi9F,EAAU37C,GAyF9BolD,EAAc51Q,UAAU6uQ,UAAY,WAIlC,IAHA,IAAIxzQ,EAAUvF,KAAKuhR,gBACf12F,EAAM,GAEHtlL,GACLslL,EAAInsL,KAAK6G,GACTA,EAAUA,EAAQ/G,KAGpB,OAAOqsL,CACR,EAED,WACE,IACE3pL,OAAOC,eAAe2+Q,EAAc51Q,UAAW,SAAU,CACvDM,IAAKu1Q,EAAaC,WAAU,WAC1B,OAAOhgR,KAAK+4Q,WACb,GAAE,6EAAmF,YAE5E,CAAZ,MAAOttH,GAAK,CAPhB,IAcsB,oBAAXztJ,QAAyBA,OAAOukR,aAAiE,oBAA3Cv4Q,SAASE,UAAUlM,OAAOukR,cACzFtC,EAAkBj2Q,SAASE,UAAUlM,OAAOukR,aAC5CrhR,OAAOC,eAAek1Q,EAAUr4Q,OAAOukR,YAAa,CAClD5jR,MAAO,SAAe6C,GACpB,QAAIy+Q,EAAgB1hR,KAAKyB,KAAMwB,IAC3BxB,OAASq2Q,IACN70Q,GAAUA,EAAOo3Q,0BAA0BkH,EACnD,KAGHG,EAAkB,SAAyBz+Q,GACzC,OAAOA,aAAkBxB,IAC1B,EA8BHq2Q,EAASnsQ,UAAUovO,KAAO,WACxB2gC,EAAej6Q,KAAM,IAAIkgR,EAC1B,EA8BD7J,EAASnsQ,UAAUw4L,MAAQ,SAAU2E,EAAOpnL,EAAUorB,GACpD,IAnNqBrqC,EAmNjB0lD,EAAQ1mD,KAAK44Q,eACb5vD,GAAM,EAENm5D,GAASz7N,EAAMqkJ,aAtNE/pM,EAsN0BqmM,EArNxCz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAsO9C,OAfI6I,IAAUv1I,EAAOk2D,SAASuE,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CA2NWy0E,CAAoBz0E,IAGN,oBAAbpnL,IACTorB,EAAKprB,EACLA,EAAW,MAGTkiQ,EAAOliQ,EAAW,SAAmBA,IAAUA,EAAWymC,EAAMu0N,iBAClD,oBAAP5vO,IAAmBA,EAAKk1O,GAC/B75N,EAAMg6N,OA7CZ,SAAuBzxK,EAAQ5jE,GAC7B,IAAIowO,EAAK,IAAI4E,EAEbpG,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,EACtB,CAwCmB+G,CAAcxiR,KAAMqrC,IAAa82O,GAnCrD,SAAoBlzK,EAAQvoD,EAAO2gJ,EAAOh8J,GACxC,IAAIowO,EAQJ,OANc,OAAVp0E,EACFo0E,EAAK,IAAI2E,EACiB,kBAAV/4E,GAAuB3gJ,EAAMqkJ,aAC7C0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,UAAW50B,KAG3Do0E,IACFxB,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,IACd,EAIV,CAmB6DgH,CAAWziR,KAAM0mD,EAAO2gJ,EAAOh8J,MACzFqb,EAAMi5N,YACN32D,EAwDJ,SAAuB/5G,EAAQvoD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,GAC5D,IAAK82O,EAAO,CACV,IAAIO,EAtBR,SAAqBh8N,EAAO2gJ,EAAOpnL,GAC5BymC,EAAMqkJ,aAAsC,IAAxBrkJ,EAAMk6N,eAA4C,kBAAVv5E,IAC/DA,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,IAG7B,OAAOonL,CACR,CAgBkBs7E,CAAYj8N,EAAO2gJ,EAAOpnL,GAErConL,IAAUq7E,IACZP,GAAQ,EACRliQ,EAAW,SACXonL,EAAQq7E,EAEX,CAED,IAAIp6P,EAAMo+B,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACvC8nD,EAAM9nD,QAAU0pB,EAChB,IAAI0gM,EAAMtiK,EAAM9nD,OAAS8nD,EAAMmkJ,cAE1Bme,IAAKtiK,EAAMw3N,WAAY,GAE5B,GAAIx3N,EAAMm6N,SAAWn6N,EAAMo6N,OAAQ,CACjC,IAAIhlB,EAAOp1M,EAAMg7N,oBACjBh7N,EAAMg7N,oBAAsB,CAC1Br6E,MAAOA,EACPpnL,SAAUA,EACVkiQ,MAAOA,EACP96P,SAAUgkB,EACV7sC,KAAM,MAGJs9P,EACFA,EAAKt9P,KAAOkoD,EAAMg7N,oBAElBh7N,EAAM66N,gBAAkB76N,EAAMg7N,oBAGhCh7N,EAAMk7N,sBAAwB,CAC/B,MACCG,EAAQ9yK,EAAQvoD,GAAO,EAAOp+B,EAAK++K,EAAOpnL,EAAUorB,GAGtD,OAAO29K,CACR,CA/FS45D,CAAc5iR,KAAM0mD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,IAEpD29K,CACR,EAEDqtD,EAASnsQ,UAAU24Q,KAAO,WACxB7iR,KAAK44Q,eAAekI,QACrB,EAEDzK,EAASnsQ,UAAU44Q,OAAS,WAC1B,IAAIp8N,EAAQ1mD,KAAK44Q,eAEblyN,EAAMo6N,SACRp6N,EAAMo6N,SACDp6N,EAAMm6N,SAAYn6N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBAAiBC,EAAYxhR,KAAM0mD,GAE9G,EAED2vN,EAASnsQ,UAAU64Q,mBAAqB,SAA4B9iQ,GAGlE,GADwB,kBAAbA,IAAuBA,EAAWA,EAAS1P,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOzN,SAASmd,EAAW,IAAI1P,gBAAkB,GAAI,MAAM,IAAI+vQ,EAAqBrgQ,GAExL,OADAjgB,KAAK44Q,eAAeqC,gBAAkBh7P,EAC/BjgB,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAWH73Q,OAAOC,eAAek1Q,EAASnsQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IA2LHwrE,EAASnsQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACrDA,EAAG,IAAI0uO,EAA2B,YACnC,EAED1D,EAASnsQ,UAAU43Q,QAAU,KAE7BzL,EAASnsQ,UAAUmrC,IAAM,SAAUgyJ,EAAOpnL,EAAUorB,GAClD,IAAIqb,EAAQ1mD,KAAK44Q,eAoBjB,MAlBqB,oBAAVvxE,GACTh8J,EAAKg8J,EACLA,EAAQ,KACRpnL,EAAW,MACkB,oBAAbA,IAChBorB,EAAKprB,EACLA,EAAW,MAGC,OAAVonL,QAA4Bh+L,IAAVg+L,GAAqBrnM,KAAK0iM,MAAM2E,EAAOpnL,GAEzDymC,EAAMo6N,SACRp6N,EAAMo6N,OAAS,EACf9gR,KAAK8iR,UAIFp8N,EAAMg6N,QAsEb,SAAqBzxK,EAAQvoD,EAAOrb,GAClCqb,EAAMg6N,QAAS,EACfS,EAAYlyK,EAAQvoD,GAEhBrb,IACEqb,EAAMw2N,SAAUztI,EAAQyuE,SAAS7yK,GAAS4jE,EAAOioD,KAAK,SAAU7rH,IAGtEqb,EAAMmyN,OAAQ,EACd5pK,EAAO3tG,UAAW,CACnB,CAhFoB0hR,CAAYhjR,KAAM0mD,EAAOrb,GACrCrrC,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAsFHsC,OAAOC,eAAek1Q,EAASnsQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAK44Q,gBAIF54Q,KAAK44Q,eAAeK,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAK44Q,iBAMV54Q,KAAK44Q,eAAeK,UAAYt6Q,EACjC,IAEH03Q,EAASnsQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzC81Q,EAASnsQ,UAAU+xQ,WAAarC,EAAYsC,UAE5C7F,EAASnsQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,0CCtrBGokR,YAEJ,SAASliR,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAEjN,IAAIk8Q,EAAW9jG,EAAQ,OAEnB8pG,EAAellR,OAAO,eACtBmlR,EAAcnlR,OAAO,cACrBolR,EAASplR,OAAO,SAChBqlR,EAASrlR,OAAO,SAChBslR,EAAetlR,OAAO,eACtBulR,EAAiBvlR,OAAO,iBACxBwlR,EAAUxlR,OAAO,UAErB,SAASylR,EAAiB9kR,EAAOF,GAC/B,MAAO,CACLE,MAAOA,EACPF,KAAMA,EAET,CAED,SAASilR,EAAe90G,GACtB,IAAInmK,EAAUmmK,EAAKs0G,GAEnB,GAAgB,OAAZz6Q,EAAkB,CACpB,IAAI+V,EAAOowJ,EAAK40G,GAASr0K,OAIZ,OAAT3wF,IACFowJ,EAAK00G,GAAgB,KACrB10G,EAAKs0G,GAAgB,KACrBt0G,EAAKu0G,GAAe,KACpB16Q,EAAQg7Q,EAAiBjlQ,GAAM,IAElC,CACF,CAED,SAASmlQ,EAAW/0G,GAGlBn/B,EAAQyuE,SAASwlE,EAAgB90G,EAClC,CAeD,IAAIg1G,EAAyB1iR,OAAOyJ,gBAAe,WAAc,IAC7Dk5Q,EAAuC3iR,OAAO+I,gBA4D/ClJ,EA5D+DkiR,EAAwB,CACpFh0K,aACF,OAAOjvG,KAAKwjR,EACb,EAEDhlR,KAAM,WACJ,IAAIu2F,EAAQ/0F,KAIR+I,EAAQ/I,KAAKojR,GAEjB,GAAc,OAAVr6Q,EACF,OAAOC,QAAQN,OAAOK,GAGxB,GAAI/I,KAAKqjR,GACP,OAAOr6Q,QAAQP,QAAQg7Q,OAAiBp6Q,GAAW,IAGrD,GAAIrJ,KAAKwjR,GAASvK,UAKhB,OAAO,IAAIjwQ,SAAQ,SAAUP,EAASC,GACpC+mI,EAAQyuE,UAAS,WACXnpH,EAAMquL,GACR16Q,EAAOqsF,EAAMquL,IAEb36Q,EAAQg7Q,OAAiBp6Q,GAAW,GAEvC,GACF,IAOH,IACIu0H,EADAkmJ,EAAc9jR,KAAKsjR,GAGvB,GAAIQ,EACFlmJ,EAAU,IAAI50H,QA1DpB,SAAqB86Q,EAAal1G,GAChC,OAAO,SAAUnmK,EAASC,GACxBo7Q,EAAY76Q,MAAK,WACX2lK,EAAKy0G,GACP56Q,EAAQg7Q,OAAiBp6Q,GAAW,IAItCulK,EAAK20G,GAAgB96Q,EAASC,EAC/B,GAAEA,EACJ,CACF,CA+C2Bq7Q,CAAYD,EAAa9jR,WAC1C,CAGL,IAAIwe,EAAOxe,KAAKwjR,GAASr0K,OAEzB,GAAa,OAAT3wF,EACF,OAAOxV,QAAQP,QAAQg7Q,EAAiBjlQ,GAAM,IAGhDo/G,EAAU,IAAI50H,QAAQhJ,KAAKujR,GAC5B,CAGD,OADAvjR,KAAKsjR,GAAgB1lJ,EACdA,CACR,GACuC5/H,OAAOwgR,eAAe,WAC9D,OAAOx+Q,IACR,IAAGe,EAAgBkiR,EAAuB,UAAU,WACnD,IAAIe,EAAShkR,KAKb,OAAO,IAAIgJ,SAAQ,SAAUP,EAASC,GACpCs7Q,EAAOR,GAASjjR,QAAQ,MAAM,SAAU1B,GAClCA,EACF6J,EAAO7J,GAIT4J,EAAQg7Q,OAAiBp6Q,GAAW,GACrC,GACF,GACF,IAAG45Q,GAAwBW,GAoE5BzgH,EAAOx3B,QAlEiC,SAA2C18B,GACjF,IAAIg1K,EAEAhmR,EAAWiD,OAAO2J,OAAOg5Q,GAA4D9iR,EAArBkjR,EAAiB,CAAC,EAAmCT,EAAS,CAChI7kR,MAAOswG,EACP3tG,UAAU,IACRP,EAAgBkjR,EAAgBf,EAAc,CAChDvkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBd,EAAa,CAC/CxkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBb,EAAQ,CAC1CzkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBZ,EAAQ,CAC1C1kR,MAAOswG,EAAO+pK,eAAewB,WAC7Bl5Q,UAAU,IACRP,EAAgBkjR,EAAgBV,EAAgB,CAClD5kR,MAAO,SAAe8J,EAASC,GAC7B,IAAI8V,EAAOvgB,EAASulR,GAASr0K,OAEzB3wF,GACFvgB,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,EAAiBjlQ,GAAM,MAE/BvgB,EAASilR,GAAgBz6Q,EACzBxK,EAASklR,GAAez6Q,EAE3B,EACDpH,UAAU,IACR2iR,IA8BJ,OA7BAhmR,EAASqlR,GAAgB,KACzBpG,EAASjuK,GAAQ,SAAUpwG,GACzB,GAAIA,GAAoB,+BAAbA,EAAImrE,KAAuC,CACpD,IAAIthE,EAASzK,EAASklR,GAWtB,OARe,OAAXz6Q,IACFzK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxBz6Q,EAAO7J,SAGTZ,EAASmlR,GAAUvkR,EAEpB,CAED,IAAI4J,EAAUxK,EAASilR,GAEP,OAAZz6Q,IACFxK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,OAAiBp6Q,GAAW,KAGtCpL,EAASolR,IAAU,CACpB,IACDp0K,EAAOs5B,GAAG,WAAYo7I,EAAW95Q,KAAK,KAAM5L,IACrCA,CACR,sCC1MD,SAASsD,EAAQC,EAAQC,GAAkB,IAAIC,EAAOR,OAAOQ,KAAKF,GAAS,GAAIN,OAAOS,sBAAuB,CAAE,IAAIC,EAAUV,OAAOS,sBAAsBH,GAAaC,IAAgBG,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOZ,OAAOa,yBAAyBP,EAAQM,GAAKV,UAAa,KAAGM,EAAKhD,KAAKsD,MAAMN,EAAME,EAAW,CAAC,OAAOF,CAAO,CAIrV,SAASX,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAIjN,SAASi/N,EAAkB/9N,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAI7T,IACItzF,EADWwsC,EAAQ,OACDxsC,OAGlBi6B,EADYuS,EAAQ,OACAvS,QAEpB2gB,EAAS3gB,GAAWA,EAAQ2gB,QAAU,UAM1CrkB,EAAOx3B,QAEP,WACE,SAASguI,KArBX,SAAyB5vQ,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAsBrJk/N,CAAgBj+N,KAAM25Q,GAEtB35Q,KAAK2iP,KAAO,KACZ3iP,KAAK4iP,KAAO,KACZ5iP,KAAKpB,OAAS,CACf,CAvBH,IAAsBq6N,EAAamK,EAAYC,EAoM7C,OApMoBpK,EAyBP0gD,EAzBoBv2C,EAyBR,CAAC,CACxBniO,IAAK,OACLtC,MAAO,SAAcmW,GACnB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAM,MAEJwB,KAAKpB,OAAS,EAAGoB,KAAK4iP,KAAKpkP,KAAOk6D,EAAW14D,KAAK2iP,KAAOjqL,EAC7D14D,KAAK4iP,KAAOlqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,UACLtC,MAAO,SAAiBmW,GACtB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAMwB,KAAK2iP,MAEO,IAAhB3iP,KAAKpB,SAAcoB,KAAK4iP,KAAOlqL,GACnC14D,KAAK2iP,KAAOjqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,QACLtC,MAAO,WACL,GAAoB,IAAhBqB,KAAKpB,OAAT,CACA,IAAIoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAGpB,OAFoB,IAAhBxe,KAAKpB,OAAcoB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KAAU5iP,KAAK2iP,KAAO3iP,KAAK2iP,KAAKnkP,OAC7EwB,KAAKpB,OACAoqN,CAJsB,CAK9B,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACLqB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KACxB5iP,KAAKpB,OAAS,CACf,GACA,CACDqC,IAAK,OACLtC,MAAO,SAAc0U,GACnB,GAAoB,IAAhBrT,KAAKpB,OAAc,MAAO,GAI9B,IAHA,IAAI4c,EAAIxb,KAAK2iP,KACT35B,EAAM,GAAKxtM,EAAEgD,KAEVhD,EAAIA,EAAEhd,MACXwqN,GAAO31M,EAAImI,EAAEgD,KAGf,OAAOwqM,CACR,GACA,CACD/nN,IAAK,SACLtC,MAAO,SAAgB+R,GACrB,GAAoB,IAAhB1Q,KAAKpB,OAAc,OAAOguI,EAAOivD,MAAM,GAK3C,IAJA,IArEcz8L,EAAK8C,EAAQvC,EAqEvBqpN,EAAMp8E,EAAOigI,YAAYn8P,IAAM,GAC/B8K,EAAIxb,KAAK2iP,KACT/kP,EAAI,EAED4d,GAzEOpc,EA0EDoc,EAAEgD,KA1EItc,EA0EE8mN,EA1EMrpN,EA0ED/B,EAzE9BgvI,EAAO1iI,UAAU4R,KAAKvd,KAAKa,EAAK8C,EAAQvC,GA0ElC/B,GAAK4d,EAAEgD,KAAK5f,OACZ4c,EAAIA,EAAEhd,KAGR,OAAOwqN,CACR,GAEA,CACD/nN,IAAK,UACLtC,MAAO,SAAiB+R,EAAGwzQ,GACzB,IAAIl7D,EAcJ,OAZIt4M,EAAI1Q,KAAK2iP,KAAKnkO,KAAK5f,QAErBoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAAK7O,MAAM,EAAGe,GAC9B1Q,KAAK2iP,KAAKnkO,KAAOxe,KAAK2iP,KAAKnkO,KAAK7O,MAAMe,IAGtCs4M,EAFSt4M,IAAM1Q,KAAK2iP,KAAKnkO,KAAK5f,OAExBoB,KAAKo3F,QAGL8sL,EAAalkR,KAAKmkR,WAAWzzQ,GAAK1Q,KAAKokR,WAAW1zQ,GAGnDs4M,CACR,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACL,OAAOqB,KAAK2iP,KAAKnkO,IAClB,GAEA,CACDvd,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAI8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EACJm1M,EAAMxtM,EAAEgD,KAGZ,IAFA9N,GAAKs4M,EAAIpqN,OAEF4c,EAAIA,EAAEhd,MAAM,CACjB,IAAIozK,EAAMp2J,EAAEgD,KACR6lQ,EAAK3zQ,EAAIkhK,EAAIhzK,OAASgzK,EAAIhzK,OAAS8R,EAIvC,GAHI2zQ,IAAOzyG,EAAIhzK,OAAQoqN,GAAOp3C,EAASo3C,GAAOp3C,EAAIjiK,MAAM,EAAGe,GAGjD,KAFVA,GAAK2zQ,GAEQ,CACPA,IAAOzyG,EAAIhzK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAOozJ,EAAIjiK,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAIs4M,EAAMp8E,EAAOigI,YAAYn8P,GACzB8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EAIR,IAHA2H,EAAEgD,KAAK1C,KAAKktM,GACZt4M,GAAK8K,EAAEgD,KAAK5f,OAEL4c,EAAIA,EAAEhd,MAAM,CACjB,IAAI2uK,EAAM3xJ,EAAEgD,KACR6lQ,EAAK3zQ,EAAIy8J,EAAIvuK,OAASuuK,EAAIvuK,OAAS8R,EAIvC,GAHAy8J,EAAIrxJ,KAAKktM,EAAKA,EAAIpqN,OAAS8R,EAAG,EAAG2zQ,GAGvB,KAFV3zQ,GAAK2zQ,GAEQ,CACPA,IAAOl3G,EAAIvuK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAO2uJ,EAAIx9J,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAKumL,EACL7oL,MAAO,SAAe8sJ,EAAG3rJ,GACvB,OAAO+mK,EAAQ7mK,KAnMrB,SAAuBkC,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAAyB,MAAhBD,UAAUvE,GAAauE,UAAUvE,GAAK,CAAC,EAAOA,EAAI,EAAK2D,EAAQL,OAAOkB,IAAS,GAAMC,SAAQ,SAAUpB,GAAOF,EAAgBmB,EAAQjB,EAAKmB,EAAOnB,GAAQ,IAAcC,OAAOoB,0BAA6BpB,OAAOqB,iBAAiBL,EAAQhB,OAAOoB,0BAA0BF,IAAmBb,EAAQL,OAAOkB,IAASC,SAAQ,SAAUpB,GAAOC,OAAOC,eAAee,EAAQjB,EAAKC,OAAOa,yBAAyBK,EAAQnB,GAAQ,GAAM,CAAC,OAAOiB,CAAS,CAmM3fwhO,CAAc,CAAC,EAAG5jO,EAAS,CAE9CsjB,MAAO,EAEPg+M,eAAe,IAElB,IAjM6DgC,GAAYnD,EAAkBhH,EAAY/uN,UAAWk5N,GAAiBC,GAAapD,EAAkBhH,EAAaoK,GAoM3Ks2C,CACR,CArLD,qDC2BA,SAAS2K,EAAoBn7Q,EAAMtK,GACjC0lR,EAAYp7Q,EAAMtK,GAClB2lR,EAAYr7Q,EACb,CAED,SAASq7Q,EAAYr7Q,GACfA,EAAKyvQ,iBAAmBzvQ,EAAKyvQ,eAAemC,WAC5C5xQ,EAAK6vQ,iBAAmB7vQ,EAAK6vQ,eAAe+B,WAChD5xQ,EAAKmrI,KAAK,QACX,CAqBD,SAASiwI,EAAYp7Q,EAAMtK,GACzBsK,EAAKmrI,KAAK,QAASz1I,EACpB,CAaDskK,EAAOx3B,QAAU,CACfprI,QAnGF,SAAiB1B,EAAKwsC,GACpB,IAAI0pD,EAAQ/0F,KAERykR,EAAoBzkR,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAeC,UAC/DyL,EAAoB1kR,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeK,UAEnE,OAAIwL,GAAqBC,GACnBr5O,EACFA,EAAGxsC,GACMA,IACJmB,KAAK44Q,eAEE54Q,KAAK44Q,eAAewI,eAC9BphR,KAAK44Q,eAAewI,cAAe,EACnC3xI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAHpC4wI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAOjCmB,OAKLA,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,GAI9Bj5Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,GAGlCj5Q,KAAKq7Q,SAASx8Q,GAAO,MAAM,SAAUA,IAC9BwsC,GAAMxsC,EACJk2F,EAAM6jL,eAEC7jL,EAAM6jL,eAAewI,aAI/B3xI,EAAQyuE,SAASsmE,EAAazvL,IAH9BA,EAAM6jL,eAAewI,cAAe,EACpC3xI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,IAH7C4wI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,GAOtCwsC,GACTokG,EAAQyuE,SAASsmE,EAAazvL,GAC9B1pD,EAAGxsC,IAEH4wI,EAAQyuE,SAASsmE,EAAazvL,EAEjC,IAEM/0F,KACR,EAiDCk8Q,UApCF,WACMl8Q,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,EAChCj5Q,KAAKg5Q,eAAeyB,SAAU,EAC9Bz6Q,KAAKg5Q,eAAeH,OAAQ,EAC5B74Q,KAAKg5Q,eAAewB,YAAa,GAG/Bx6Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,EAChCj5Q,KAAK44Q,eAAeC,OAAQ,EAC5B74Q,KAAK44Q,eAAe8H,QAAS,EAC7B1gR,KAAK44Q,eAAe6H,aAAc,EAClCzgR,KAAK44Q,eAAe+I,aAAc,EAClC3hR,KAAK44Q,eAAesE,UAAW,EAC/Bl9Q,KAAK44Q,eAAewI,cAAe,EAEtC,EAoBCnH,eAdF,SAAwBhrK,EAAQpwG,GAM9B,IAAIyjR,EAASrzK,EAAO+pK,eAChBiE,EAAShuK,EAAO2pK,eAChB0J,GAAUA,EAAOtH,aAAeiC,GAAUA,EAAOjC,YAAa/rK,EAAO1uG,QAAQ1B,GAAUowG,EAAOqlC,KAAK,QAASz1I,EACjH,uCC9FD,IAAI8lR,EAA6BvrG,EAAAA,OAAAA,EAAAA,2BAgBjC,SAASwE,IAAS,CAmFlBza,EAAOx3B,QA7EP,SAASi5I,EAAI31K,EAAQ0uE,EAAMt2J,GACzB,GAAoB,oBAATs2J,EAAqB,OAAOinG,EAAI31K,EAAQ,KAAM0uE,GACpDA,IAAMA,EAAO,CAAC,GACnBt2J,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAIziC,EAAOn0N,UAAUvD,OAAQwK,EAAO,IAAIvL,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAC/Eh0N,EAAKg0N,GAAQj7N,UAAUi7N,GAGzB/1M,EAASrlB,MAAMhC,KAAMoJ,EAPH,CAQnB,CACF,CAWY8tJ,CAAK7vI,GAAYu2J,GAC5B,IAAIihC,EAAWlhC,EAAKkhC,WAA8B,IAAlBlhC,EAAKkhC,UAAsB5vG,EAAO4vG,SAC9Dv9M,EAAWq8K,EAAKr8K,WAA8B,IAAlBq8K,EAAKr8K,UAAsB2tG,EAAO3tG,SAE9DujR,EAAiB,WACd51K,EAAO3tG,UAAUw8Q,GACvB,EAEGgH,EAAgB71K,EAAO2pK,gBAAkB3pK,EAAO2pK,eAAesE,SAE/DY,EAAW,WACbx8Q,GAAW,EACXwjR,GAAgB,EACXjmE,GAAUx3L,EAAS9oB,KAAK0wG,EAC9B,EAEG81K,EAAgB91K,EAAO+pK,gBAAkB/pK,EAAO+pK,eAAewB,WAE/D7B,EAAQ,WACV95D,GAAW,EACXkmE,GAAgB,EACXzjR,GAAU+lB,EAAS9oB,KAAK0wG,EAC9B,EAEGikB,EAAU,SAAiBr0H,GAC7BwoB,EAAS9oB,KAAK0wG,EAAQpwG,EACvB,EAEGg/Q,EAAU,WACZ,IAAIh/Q,EAEJ,OAAIggN,IAAakmE,GACV91K,EAAO+pK,gBAAmB/pK,EAAO+pK,eAAeH,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,IAG3ByC,IAAawjR,GACV71K,EAAO2pK,gBAAmB3pK,EAAO2pK,eAAeC,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,SAF/B,CAID,EAEGmmR,EAAY,WACd/1K,EAAOhB,IAAIs6B,GAAG,SAAUu1I,EACzB,EAgBD,OAnEF,SAAmB7uK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAmDK4zC,CAAUj2K,GAIH3tG,IAAa2tG,EAAO2pK,iBAE7B3pK,EAAOs5B,GAAG,MAAOs8I,GACjB51K,EAAOs5B,GAAG,QAASs8I,KANnB51K,EAAOs5B,GAAG,WAAYu1I,GACtB7uK,EAAOs5B,GAAG,QAASs1I,GACf5uK,EAAOhB,IAAK+2K,IAAiB/1K,EAAOs5B,GAAG,UAAWy8I,IAOxD/1K,EAAOs5B,GAAG,MAAOowI,GACjB1pK,EAAOs5B,GAAG,SAAUu1I,IACD,IAAfngG,EAAK50K,OAAiBkmG,EAAOs5B,GAAG,QAASrV,GAC7CjkB,EAAOs5B,GAAG,QAASs1I,GACZ,WACL5uK,EAAOinD,eAAe,WAAY4nH,GAClC7uK,EAAOinD,eAAe,QAAS2nH,GAC/B5uK,EAAOinD,eAAe,UAAW8uH,GAC7B/1K,EAAOhB,KAAKgB,EAAOhB,IAAIioD,eAAe,SAAU4nH,GACpD7uK,EAAOinD,eAAe,MAAO2uH,GAC7B51K,EAAOinD,eAAe,QAAS2uH,GAC/B51K,EAAOinD,eAAe,SAAU4nH,GAChC7uK,EAAOinD,eAAe,MAAOyiH,GAC7B1pK,EAAOinD,eAAe,QAAShjC,GAC/BjkB,EAAOinD,eAAe,QAAS2nH,EAChC,CACF,qBCrGD16G,EAAOx3B,QAAU,WACf,MAAM,IAAIh6H,MAAM,gDACjB,sCCED,IAAIizQ,EAWJ,IAAI9oD,EAAiB1iD,EAAAA,OAAAA,EACjBgjD,EAAmBN,EAAeM,iBAClC+jD,EAAuBrkD,EAAeqkD,qBAE1C,SAASviG,EAAK/+K,GAEZ,GAAIA,EAAK,MAAMA,CAChB,CAMD,SAASsmR,EAAUl2K,EAAQwrK,EAASoG,EAASx5P,GAC3CA,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACDA,IACJA,GAAS,EACT1xO,EAASrlB,WAAM,EAAQG,WACxB,CACF,CAgBY+0J,CAAK7vI,GAChB,IAAI+9P,GAAS,EACbn2K,EAAOs5B,GAAG,SAAS,WACjB68I,GAAS,CACV,SACW/7Q,IAARu7Q,IAAmBA,EAAMxrG,EAAQ,QACrCwrG,EAAI31K,EAAQ,CACV4vG,SAAU47D,EACVn5Q,SAAUu/Q,IACT,SAAUhiR,GACX,GAAIA,EAAK,OAAOwoB,EAASxoB,GACzBumR,GAAS,EACT/9P,GACD,IACD,IAAI4xP,GAAY,EAChB,OAAO,SAAUp6Q,GACf,IAAIumR,IACAnM,EAGJ,OAFAA,GAAY,EAvBhB,SAAmBhqK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAuBO4zC,CAAUj2K,GAAgBA,EAAOqiI,QACP,oBAAnBriI,EAAO1uG,QAA+B0uG,EAAO1uG,eACxD8mB,EAASxoB,GAAO,IAAIshR,EAAqB,QAC1C,CACF,CAED,SAAS5hR,EAAK2K,GACZA,GACD,CAED,SAASowO,EAAKj6N,EAAM7f,GAClB,OAAO6f,EAAKi6N,KAAK95O,EAClB,CAED,SAAS6lR,EAAY1mE,GACnB,OAAKA,EAAQ//M,OAC8B,oBAAhC+/M,EAAQA,EAAQ//M,OAAS,GAA0Bg/K,EACvD+gC,EAAQvxI,MAFawwG,CAG7B,CA6BDza,EAAOx3B,QA3BP,WACE,IAAK,IAAI2qF,EAAOn0N,UAAUvD,OAAQ+/M,EAAU,IAAI9gN,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAClFze,EAAQye,GAAQj7N,UAAUi7N,GAG5B,IAOIr0N,EAPAse,EAAWg+P,EAAY1mE,GAG3B,GAFI9gN,MAAMC,QAAQ6gN,EAAQ,MAAKA,EAAUA,EAAQ,IAE7CA,EAAQ//M,OAAS,EACnB,MAAM,IAAIw9N,EAAiB,WAI7B,IAAIkpD,EAAW3mE,EAAQ/4M,KAAI,SAAUqpG,EAAQrxG,GAC3C,IAAI68Q,EAAU78Q,EAAI+gN,EAAQ//M,OAAS,EAEnC,OAAOumR,EAAUl2K,EAAQwrK,EADX78Q,EAAI,GACyB,SAAUiB,GAC9CkK,IAAOA,EAAQlK,GAChBA,GAAKymR,EAASjjR,QAAQ9D,GACtBk8Q,IACJ6K,EAASjjR,QAAQ9D,GACjB8oB,EAASte,GACV,GACF,IACD,OAAO41M,EAAQh8D,OAAO22F,EACvB,sCC5FD,IAAIisC,EAAwBnsG,EAAAA,OAAAA,EAAAA,sBAsB5BjW,EAAOx3B,QAAU,CACfkuI,iBAjBF,SAA0BnzN,EAAO5mD,EAAS0lR,EAAWrL,GACnD,IAAIvvE,EALN,SAA2B9qM,EAASq6Q,EAAUqL,GAC5C,OAAgC,MAAzB1lR,EAAQ+qM,cAAwB/qM,EAAQ+qM,cAAgBsvE,EAAWr6Q,EAAQ0lR,GAAa,IAChG,CAGWC,CAAkB3lR,EAASq6Q,EAAUqL,GAE/C,GAAW,MAAP56E,EAAa,CACf,IAAMhgK,SAASggK,IAAQzkM,KAAKQ,MAAMikM,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI26E,EADCpL,EAAWqL,EAAY,gBACI56E,GAGxC,OAAOzkM,KAAKQ,MAAMikM,EACnB,CAGD,OAAOlkJ,EAAMqkJ,WAAa,GAAK,KAChC,0BCtBD5nC,EAAOx3B,QAAU,EAAjBw3B,OAAAA,qCCAAx3B,EAAUw3B,EAAOx3B,QAAU,EAAjBw3B,QACFu3D,OAAS/uF,EACjBA,EAAQ8sI,SAAW9sI,EACnBA,EAAQ0qI,SAAW,EAAnB1qI,OACAA,EAAQq7D,OAAS,EAAjBr7D,OACAA,EAAQ+jI,UAAY,EAApB/jI,OACAA,EAAQu7D,YAAc,EAAtBv7D,OACAA,EAAQuxI,SAAW,EAAnBvxI,OACAA,EAAQ+5I,SAAW,EAAnB/5I,8BCNA,IAAIrzF,EAAS8gI,EAAQ,OACjBxsC,EAASt0F,EAAOs0F,OAGpB,SAAS+4I,EAAWvmR,EAAKkoB,GACvB,IAAK,IAAIrmB,KAAO7B,EACdkoB,EAAIrmB,GAAO7B,EAAI6B,EAElB,CASD,SAAS2kR,EAAY/8Q,EAAKg9Q,EAAkBjnR,GAC1C,OAAOguI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,CAVGguI,EAAOvtH,MAAQutH,EAAOivD,OAASjvD,EAAOigI,aAAejgI,EAAOk5I,gBAC9D3iH,EAAOx3B,QAAUrzF,GAGjBqtO,EAAUrtO,EAAQqzF,GAClBA,EAAQiB,OAASg5I,GAOnBA,EAAW17Q,UAAYhJ,OAAO2J,OAAO+hI,EAAO1iI,WAG5Cy7Q,EAAU/4I,EAAQg5I,GAElBA,EAAWvmQ,KAAO,SAAUxW,EAAKg9Q,EAAkBjnR,GACjD,GAAmB,kBAARiK,EACT,MAAM,IAAI9J,UAAU,iCAEtB,OAAO6tI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,EAEDgnR,EAAW/pF,MAAQ,SAAUr/K,EAAM43C,EAAMn0C,GACvC,GAAoB,kBAATzD,EACT,MAAM,IAAIzd,UAAU,6BAEtB,IAAIouK,EAAMvgC,EAAOpwH,GAUjB,YATanT,IAAT+qD,EACsB,kBAAbn0C,EACTktJ,EAAI/4G,KAAKA,EAAMn0C,GAEfktJ,EAAI/4G,KAAKA,GAGX+4G,EAAI/4G,KAAK,GAEJ+4G,CACR,EAEDy4G,EAAW/Y,YAAc,SAAUrwP,GACjC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAO6tI,EAAOpwH,EACf,EAEDopQ,EAAWE,gBAAkB,SAAUtpQ,GACrC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAOu5C,EAAOytO,WAAWvpQ,EAC1B,sCCvCD,IAAIowH,EAASwsC,EAAAA,OAAAA,OAGT4sG,EAAap5I,EAAOo5I,YAAc,SAAU/lQ,GAE9C,QADAA,EAAW,GAAKA,IACIA,EAAS1P,eAC3B,IAAK,MAAM,IAAK,OAAO,IAAK,QAAQ,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,OAAO,IAAK,QAAQ,IAAK,UAAU,IAAK,WAAW,IAAK,MACxI,OAAO,EACT,QACE,OAAO,EAEZ,EA0CD,SAASkpQ,EAAcx5P,GAErB,IAAIokQ,EACJ,OAFArkR,KAAKigB,SAXP,SAA2B89I,GACzB,IAAIkoH,EA/BN,SAA4BloH,GAC1B,IAAKA,EAAK,MAAO,OAEjB,IADA,IAAImoH,IAEF,OAAQnoH,GACN,IAAK,OACL,IAAK,QACH,MAAO,OACT,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,UACT,IAAK,SACL,IAAK,SACH,MAAO,SACT,IAAK,SACL,IAAK,QACL,IAAK,MACH,OAAOA,EACT,QACE,GAAImoH,EAAS,OACbnoH,GAAO,GAAKA,GAAKxtJ,cACjB21Q,GAAU,EAGjB,CAKYC,CAAmBpoH,GAC9B,GAAoB,kBAATkoH,IAAsBr5I,EAAOo5I,aAAeA,IAAeA,EAAWjoH,IAAO,MAAM,IAAIpsJ,MAAM,qBAAuBosJ,GAC/H,OAAOkoH,GAAQloH,CAChB,CAOiBqoH,CAAkBnmQ,GAE1BjgB,KAAKigB,UACX,IAAK,UACHjgB,KAAK4vG,KAAOy2K,EACZrmR,KAAKq1C,IAAMixO,EACXjC,EAAK,EACL,MACF,IAAK,OACHrkR,KAAKumR,SAAWC,EAChBnC,EAAK,EACL,MACF,IAAK,SACHrkR,KAAK4vG,KAAO62K,EACZzmR,KAAKq1C,IAAMqxO,EACXrC,EAAK,EACL,MACF,QAGE,OAFArkR,KAAK0iM,MAAQikF,OACb3mR,KAAKq1C,IAAMuxO,GAGf5mR,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAWn6I,EAAOigI,YAAYwX,EACpC,CAmCD,SAAS2C,EAAcxvD,GACrB,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,IAAM,EAAa,EAAWA,GAAQ,IAAM,GAAa,EAAWA,GAAQ,IAAM,GAAa,EACpIA,GAAQ,IAAM,GAAQ,GAAK,CACnC,CA0DD,SAASgvD,EAAar5G,GACpB,IAAI3xJ,EAAIxb,KAAK8mR,UAAY9mR,KAAK6mR,SAC1BxtQ,EAtBN,SAA6BlQ,EAAMgkK,EAAK3xJ,GACtC,GAAwB,OAAV,IAAT2xJ,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,EAAG,CACvC,GAAwB,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,GACZ,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,QAGZ,CACF,CAKSI,CAAoBjnR,KAAMmtK,GAClC,YAAU9jK,IAANgQ,EAAwBA,EACxBrZ,KAAK6mR,UAAY15G,EAAIvuK,QACvBuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAGxb,KAAK6mR,UAC5B7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,aAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAG2xJ,EAAIvuK,aAClCoB,KAAK6mR,UAAY15G,EAAIvuK,QACtB,CA0BD,SAASynR,EAAUl5G,EAAKvvK,GACtB,IAAKuvK,EAAIvuK,OAAShB,GAAK,IAAM,EAAG,CAC9B,IAAIyb,EAAI8zJ,EAAI7iK,SAAS,UAAW1M,GAChC,GAAIyb,EAAG,CACL,IAAIxF,EAAIwF,EAAEw2I,WAAWx2I,EAAEza,OAAS,GAChC,GAAIiV,GAAK,OAAUA,GAAK,MAKtB,OAJA7T,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7Bya,EAAE1J,MAAM,GAAI,EAEtB,CACD,OAAO0J,CACR,CAID,OAHArZ,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7BuuK,EAAI7iK,SAAS,UAAW1M,EAAGuvK,EAAIvuK,OAAS,EAChD,CAID,SAAS0nR,EAASn5G,GAChB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,GAAIntK,KAAK6mR,SAAU,CACjB,IAAIxxO,EAAMr1C,KAAK8mR,UAAY9mR,KAAK6mR,SAChC,OAAOxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,UAAW,EAAG+qC,EACjD,CACD,OAAOh8B,CACR,CAED,SAASotQ,EAAWt5G,EAAKvvK,GACvB,IAAI8S,GAAKy8J,EAAIvuK,OAAShB,GAAK,EAC3B,OAAU,IAAN8S,EAAgBy8J,EAAI7iK,SAAS,SAAU1M,IAC3CoC,KAAK6mR,SAAW,EAAIn2Q,EACpB1Q,KAAK8mR,UAAY,EACP,IAANp2Q,EACF1Q,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAEpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAE/BuuK,EAAI7iK,SAAS,SAAU1M,EAAGuvK,EAAIvuK,OAAS8R,GAC/C,CAED,SAASg2Q,EAAUv5G,GACjB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,SAAU,EAAG,EAAItK,KAAK6mR,UACpExtQ,CACR,CAGD,SAASstQ,EAAYx5G,GACnB,OAAOA,EAAI7iK,SAAStK,KAAKigB,SAC1B,CAED,SAAS2mQ,EAAUz5G,GACjB,OAAOA,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,EAC9C,CA1NDxhC,EAAQ,EAAgB8tI,EA6BxBA,EAAcvvQ,UAAUw4L,MAAQ,SAAUv1B,GACxC,GAAmB,IAAfA,EAAIvuK,OAAc,MAAO,GAC7B,IAAIya,EACAzb,EACJ,GAAIoC,KAAK6mR,SAAU,CAEjB,QAAUx9Q,KADVgQ,EAAIrZ,KAAKumR,SAASp5G,IACG,MAAO,GAC5BvvK,EAAIoC,KAAK6mR,SACT7mR,KAAK6mR,SAAW,CACjB,MACCjpR,EAAI,EAEN,OAAIA,EAAIuvK,EAAIvuK,OAAeya,EAAIA,EAAIrZ,KAAK4vG,KAAKu9D,EAAKvvK,GAAKoC,KAAK4vG,KAAKu9D,EAAKvvK,GAC/Dyb,GAAK,EACb,EAEDogQ,EAAcvvQ,UAAUmrC,IAwGxB,SAAiB83H,GACf,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAI,SACvBA,CACR,EAzGDogQ,EAAcvvQ,UAAU0lG,KA0FxB,SAAkBu9D,EAAKvvK,GACrB,IAAImxG,EArEN,SAA6B5lG,EAAMgkK,EAAKvvK,GACtC,IAAI8wB,EAAIy+I,EAAIvuK,OAAS,EACrB,GAAI8vB,EAAI9wB,EAAG,OAAO,EAClB,IAAIymR,EAAK2C,EAAc75G,EAAIz+I,IAC3B,GAAI21P,GAAM,EAER,OADIA,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAER,OADI21P,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAIR,OAHI21P,EAAK,IACI,IAAPA,EAAUA,EAAK,EAAOl7Q,EAAK09Q,SAAWxC,EAAK,GAE1CA,EAET,OAAO,CACR,CA8Ca6C,CAAoBlnR,KAAMmtK,EAAKvvK,GAC3C,IAAKoC,KAAK6mR,SAAU,OAAO15G,EAAI7iK,SAAS,OAAQ1M,GAChDoC,KAAK8mR,UAAY/3K,EACjB,IAAI15D,EAAM83H,EAAIvuK,QAAUmwG,EAAQ/uG,KAAK6mR,UAErC,OADA15G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU,EAAG1xO,GACpB83H,EAAI7iK,SAAS,OAAQ1M,EAAGy3C,EAChC,EA9FDokO,EAAcvvQ,UAAUq8Q,SAAW,SAAUp5G,GAC3C,GAAIntK,KAAK6mR,UAAY15G,EAAIvuK,OAEvB,OADAuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG7mR,KAAK6mR,UACzD7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,WAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG15G,EAAIvuK,QAC/DoB,KAAK6mR,UAAY15G,EAAIvuK,MACtB,yBCvID,IAAIuwE,EAAOw8D,EAEXx8D,EAAK2N,MAAQs8F,EAAQ,OACrBjqG,EAAKt0B,OAASu+H,EAAQ,OACtBjqG,EAAKg+N,IAAM/zH,EAAQ,OACnBjqG,EAAKo3Q,OAASntK,EAAQ,OACtBjqG,EAAKu7J,KAAOtxD,EAAQ,OAGpBjqG,EAAKq3Q,KAAOr3Q,EAAKg+N,IAAIq5C,KACrBr3Q,EAAK+uO,OAAS/uO,EAAKg+N,IAAI+Q,OACvB/uO,EAAKs3Q,OAASt3Q,EAAKg+N,IAAIs5C,OACvBt3Q,EAAKgvO,OAAShvO,EAAKg+N,IAAIgR,OACvBhvO,EAAKivO,OAASjvO,EAAKg+N,IAAIiR,OACvBjvO,EAAKs+O,UAAYt+O,EAAKo3Q,OAAO94B,8CCZ7B,IAAI3wO,EAAQs8F,EAAQ,OAChB1b,EAAS0b,EAAQ,OAErB,SAASstK,IACP1mV,KAAK2+G,QAAU,KACf3+G,KAAK2mV,aAAe,EACpB3mV,KAAK+6D,UAAY/6D,KAAK4K,YAAYmwD,UAClC/6D,KAAK2qK,QAAU3qK,KAAK4K,YAAY+/J,QAChC3qK,KAAK6qK,aAAe7qK,KAAK4K,YAAYigK,aACrC7qK,KAAK4mV,UAAY5mV,KAAK4K,YAAYg8U,UAAY,EAC9C5mV,KAAKqnN,OAAS,MAEdrnN,KAAK6mV,QAAU7mV,KAAK+6D,UAAY,EAChC/6D,KAAK8mV,SAAW9mV,KAAK+6D,UAAY,EAClC,CACD4wE,EAAQ+6M,UAAYA,EAEpBA,EAAUx8U,UAAU4a,OAAS,SAAgB2pH,EAAKsvB,GAUhD,GARAtvB,EAAM3xD,EAAMxhD,QAAQmzG,EAAKsvB,GACpB/9J,KAAK2+G,QAGR3+G,KAAK2+G,QAAU3+G,KAAK2+G,QAAQo+B,OAAOtO,GAFnCzuI,KAAK2+G,QAAU8vB,EAGjBzuI,KAAK2mV,cAAgBl4M,EAAI7vI,OAGrBoB,KAAK2+G,QAAQ//G,QAAUoB,KAAK6mV,QAAS,CAIvC,IAAIxtU,GAHJo1H,EAAMzuI,KAAK2+G,SAGC//G,OAASoB,KAAK6mV,QAC1B7mV,KAAK2+G,QAAU8vB,EAAI9+H,MAAM8+H,EAAI7vI,OAASya,EAAGo1H,EAAI7vI,QACjB,IAAxBoB,KAAK2+G,QAAQ//G,SACfoB,KAAK2+G,QAAU,MAEjB8vB,EAAM3xD,EAAMiqQ,OAAOt4M,EAAK,EAAGA,EAAI7vI,OAASya,EAAGrZ,KAAKqnN,QAChD,IAAK,IAAIzpN,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,GAAKoC,KAAK8mV,SACxC9mV,KAAK0iH,QAAQ+rB,EAAK7wI,EAAGA,EAAIoC,KAAK8mV,SACjC,CAED,OAAO9mV,IACR,EAED0mV,EAAUx8U,UAAUyhK,OAAS,SAAgB5N,GAI3C,OAHA/9J,KAAK8kB,OAAO9kB,KAAK4yS,QACjBl1I,EAAwB,OAAjB19J,KAAK2+G,SAEL3+G,KAAKsmV,QAAQvoL,EACrB,EAED2oL,EAAUx8U,UAAU0oS,KAAO,WACzB,IAAItqR,EAAMtoB,KAAK2mV,aACXvgM,EAAQpmJ,KAAK6mV,QACb9xQ,EAAIqxE,GAAU99H,EAAMtoB,KAAK4mV,WAAaxgM,EACtCxzC,EAAM,IAAI/0G,MAAMk3E,EAAI/0E,KAAK4mV,WAC7Bh0O,EAAI,GAAK,IACT,IAAK,IAAIh1G,EAAI,EAAGA,EAAIm3E,EAAGn3E,IACrBg1G,EAAIh1G,GAAK,EAIX,GADA0qB,IAAQ,EACY,QAAhBtoB,KAAKqnN,OAAkB,CACzB,IAAK,IAAIx2M,EAAI,EAAGA,EAAI7Q,KAAK4mV,UAAW/1U,IAClC+hG,EAAIh1G,KAAO,EAEbg1G,EAAIh1G,KAAO,EACXg1G,EAAIh1G,KAAO,EACXg1G,EAAIh1G,KAAO,EACXg1G,EAAIh1G,KAAO,EACXg1G,EAAIh1G,KAAQ0qB,IAAQ,GAAM,IAC1BsqF,EAAIh1G,KAAQ0qB,IAAQ,GAAM,IAC1BsqF,EAAIh1G,KAAQ0qB,IAAQ,EAAK,IACzBsqF,EAAIh1G,KAAa,IAAN0qB,CACZ,MAUC,IATAsqF,EAAIh1G,KAAa,IAAN0qB,EACXsqF,EAAIh1G,KAAQ0qB,IAAQ,EAAK,IACzBsqF,EAAIh1G,KAAQ0qB,IAAQ,GAAM,IAC1BsqF,EAAIh1G,KAAQ0qB,IAAQ,GAAM,IAC1BsqF,EAAIh1G,KAAO,EACXg1G,EAAIh1G,KAAO,EACXg1G,EAAIh1G,KAAO,EACXg1G,EAAIh1G,KAAO,EAENiT,EAAI,EAAGA,EAAI7Q,KAAK4mV,UAAW/1U,IAC9B+hG,EAAIh1G,KAAO,EAGf,OAAOg1G,CACR,sCCzFD,IAAI91B,EAAQs8F,EAAQ,OAChB1b,EAAS0b,EAAQ,OAErB,SAASo0H,EAAKr+N,EAAMluE,EAAK88J,GACvB,KAAM/9J,gBAAgBwtS,GACpB,OAAO,IAAIA,EAAKr+N,EAAMluE,EAAK88J,GAC7B/9J,KAAKotS,KAAOj+N,EACZnvE,KAAK+6D,UAAYoU,EAAKpU,UAAY,EAClC/6D,KAAK2qK,QAAUx7F,EAAKw7F,QAAU,EAC9B3qK,KAAKgnV,MAAQ,KACbhnV,KAAKinV,MAAQ,KAEbjnV,KAAKurK,MAAMzuF,EAAMxhD,QAAQr6B,EAAK88J,GAC/B,CACDoF,EAAOx3B,QAAU6hK,EAEjBA,EAAKtjS,UAAUqhK,MAAQ,SAActqK,GAE/BA,EAAIrC,OAASoB,KAAK+6D,YACpB95D,GAAM,IAAIjB,KAAKotS,MAAOtoR,OAAO7jB,GAAK0qK,UACpCjO,EAAOz8J,EAAIrC,QAAUoB,KAAK+6D,WAG1B,IAAK,IAAIn9D,EAAIqD,EAAIrC,OAAQhB,EAAIoC,KAAK+6D,UAAWn9D,IAC3CqD,EAAIvC,KAAK,GAEX,IAAKd,EAAI,EAAGA,EAAIqD,EAAIrC,OAAQhB,IAC1BqD,EAAIrD,IAAM,GAIZ,IAHAoC,KAAKgnV,OAAQ,IAAIhnV,KAAKotS,MAAOtoR,OAAO7jB,GAG/BrD,EAAI,EAAGA,EAAIqD,EAAIrC,OAAQhB,IAC1BqD,EAAIrD,IAAM,IACZoC,KAAKinV,OAAQ,IAAIjnV,KAAKotS,MAAOtoR,OAAO7jB,EACrC,EAEDusS,EAAKtjS,UAAU4a,OAAS,SAAgB2pH,EAAKsvB,GAE3C,OADA/9J,KAAKgnV,MAAMliU,OAAO2pH,EAAKsvB,GAChB/9J,IACR,EAEDwtS,EAAKtjS,UAAUyhK,OAAS,SAAgB5N,GAEtC,OADA/9J,KAAKinV,MAAMniU,OAAO9kB,KAAKgnV,MAAMr7K,UACtB3rK,KAAKinV,MAAMt7K,OAAO5N,EAC1B,sCC5CD,IAAIjhF,EAAQs8F,EAAQ,OAChBv+H,EAASu+H,EAAQ,OAEjB8tK,EAASpqQ,EAAMoqQ,OACfC,EAAQrqQ,EAAMqqQ,MACdC,EAAUtqQ,EAAMsqQ,QAChBC,EAAUvqQ,EAAMuqQ,QAChBX,EAAY7rS,EAAO6rS,UAEvB,SAASx5C,IACP,KAAMltS,gBAAgBktS,GACpB,OAAO,IAAIA,EAEbw5C,EAAUnoV,KAAKyB,MAEfA,KAAK0Y,EAAI,CAAE,WAAY,WAAY,WAAY,UAAY,YAC3D1Y,KAAKqnN,OAAS,QACf,CAyDD,SAAS7uM,EAAEkW,EAAG1rB,EAAGC,EAAGI,GAClB,OAAIqrB,GAAK,GACA1rB,EAAIC,EAAII,EACRqrB,GAAK,GACJ1rB,EAAIC,GAAQD,EAAKK,EAClBqrB,GAAK,IACJ1rB,GAAMC,GAAMI,EACbqrB,GAAK,GACJ1rB,EAAIK,EAAMJ,GAAMI,EAEjBL,GAAKC,GAAMI,EACrB,CAED,SAAS2nK,EAAEt8I,GACT,OAAIA,GAAK,GACA,EACAA,GAAK,GACL,WACAA,GAAK,GACL,WACAA,GAAK,GACL,WAEA,UACV,CAED,SAAS44T,EAAG54T,GACV,OAAIA,GAAK,GACA,WACAA,GAAK,GACL,WACAA,GAAK,GACL,WACAA,GAAK,GACL,WAEA,CACV,CA7FDouD,EAAMonF,SAASgpI,EAAWw5C,GAC1B/6M,EAAQ8hL,UAAYvgB,EAEpBA,EAAUnyO,UAAY,IACtBmyO,EAAUviI,QAAU,IACpBuiI,EAAUriI,aAAe,IACzBqiI,EAAU05C,UAAY,GAEtB15C,EAAUhjS,UAAUw4G,QAAU,SAAgB+rB,EAAKtmG,GAWjD,IAVA,IAAI2qL,EAAI9yN,KAAK0Y,EAAE,GACXq6M,EAAI/yN,KAAK0Y,EAAE,GACXsiL,EAAIh7L,KAAK0Y,EAAE,GACXs6M,EAAIhzN,KAAK0Y,EAAE,GACXg4Q,EAAI1wR,KAAK0Y,EAAE,GACX6uU,EAAKz0H,EACL00H,EAAKz0H,EACL00H,EAAKzsJ,EACL0sJ,EAAK10H,EACL20H,EAAKj3D,EACAhiQ,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAIu8O,EAAIk8E,EACND,EACEG,EAAQv0H,EAAGt6M,EAAEkW,EAAGqkM,EAAG/3B,EAAGg4B,GAAIvkF,EAAIp1H,EAAEqV,GAAKyZ,GAAQ6iI,EAAEt8I,IAC/Crb,EAAEqb,IACJgiQ,GACF59D,EAAI49D,EACJA,EAAI19D,EACJA,EAAIk0H,EAAOlsJ,EAAG,IACdA,EAAI+3B,EACJA,EAAIk4C,EACJA,EAAIk8E,EACFD,EACEG,EAAQE,EAAI/uU,EAAE,GAAKkW,EAAG84T,EAAIC,EAAIC,GAAKj5M,EAAIm5M,EAAGl5T,GAAKyZ,GAAQm/S,EAAG54T,IAC1DiiD,EAAGjiD,IACLi5T,GACFJ,EAAKI,EACLA,EAAKD,EACLA,EAAKR,EAAOO,EAAI,IAChBA,EAAKD,EACLA,EAAKv8E,CACN,CACDA,EAAIm8E,EAAQpnV,KAAK0Y,EAAE,GAAIsiL,EAAG0sJ,GAC1B1nV,KAAK0Y,EAAE,GAAK0uU,EAAQpnV,KAAK0Y,EAAE,GAAIs6M,EAAG20H,GAClC3nV,KAAK0Y,EAAE,GAAK0uU,EAAQpnV,KAAK0Y,EAAE,GAAIg4Q,EAAG62D,GAClCvnV,KAAK0Y,EAAE,GAAK0uU,EAAQpnV,KAAK0Y,EAAE,GAAIo6M,EAAG00H,GAClCxnV,KAAK0Y,EAAE,GAAK0uU,EAAQpnV,KAAK0Y,EAAE,GAAIq6M,EAAG00H,GAClCznV,KAAK0Y,EAAE,GAAKuyP,CACb,EAEDiiC,EAAUhjS,UAAUo8U,QAAU,SAAgBvoL,GAC5C,MAAY,QAARA,EACKjhF,EAAM+qQ,QAAQ7nV,KAAK0Y,EAAG,UAEtBokE,EAAMgrQ,QAAQ9nV,KAAK0Y,EAAG,SAChC,EAyCD,IAAIW,EAAI,CACN,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAClD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACnD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAClD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACnD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,IAGhDuuU,EAAK,CACP,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAClD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EACnD,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAClD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAClD,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,IAGhDv0U,EAAI,CACN,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EACrD,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GACpD,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GACpD,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAGnDs9D,EAAK,CACP,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GACpD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EACrD,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,wCC9ItDg7D,EAAQ66M,KAAO,EAAf76M,OACAA,EAAQ86M,OAAS,EAAjB96M,OACAA,EAAQuyK,OAAS,EAAjBvyK,OACAA,EAAQwyK,OAAS,EAAjBxyK,OACAA,EAAQyyK,OAAS,EAAjBzyK,2CCJA,IAAI7uD,EAAQs8F,EAAQ,OAChBv+H,EAASu+H,EAAQ,OACjB2uK,EAAY3uK,EAAQ,OAEpB8tK,EAASpqQ,EAAMoqQ,OACfC,EAAQrqQ,EAAMqqQ,MACda,EAAUlrQ,EAAMkrQ,QAChBC,EAAOF,EAAUE,KACjBvB,EAAY7rS,EAAO6rS,UAEnBwB,EAAS,CACX,WAAY,WACZ,WAAY,YAGd,SAASC,IACP,KAAMnoV,gBAAgBmoV,GACpB,OAAO,IAAIA,EAEbzB,EAAUnoV,KAAKyB,MACfA,KAAK0Y,EAAI,CACP,WAAY,WAAY,WACxB,UAAY,YACd1Y,KAAKooV,EAAI,IAAIvqV,MAAM,GACpB,CAEDi/E,EAAMonF,SAASikL,EAAMzB,GACrBvjL,EAAOx3B,QAAUw8M,EAEjBA,EAAKptR,UAAY,IACjBotR,EAAKx9K,QAAU,IACfw9K,EAAKt9K,aAAe,GACpBs9K,EAAKvB,UAAY,GAEjBuB,EAAKj+U,UAAUw4G,QAAU,SAAiB+rB,EAAKtmG,GAG7C,IAFA,IAAIigT,EAAIpoV,KAAKooV,EAEJxqV,EAAI,EAAGA,EAAI,GAAIA,IACtBwqV,EAAExqV,GAAK6wI,EAAItmG,EAAQvqC,GAErB,KAAMA,EAAIwqV,EAAExpV,OAAQhB,IAClBwqV,EAAExqV,GAAKspV,EAAOkB,EAAExqV,EAAI,GAAKwqV,EAAExqV,EAAI,GAAKwqV,EAAExqV,EAAI,IAAMwqV,EAAExqV,EAAI,IAAK,GAE7D,IAAIkM,EAAI9J,KAAK0Y,EAAE,GACX9E,EAAI5T,KAAK0Y,EAAE,GACX7E,EAAI7T,KAAK0Y,EAAE,GACXH,EAAIvY,KAAK0Y,EAAE,GACX1R,EAAIhH,KAAK0Y,EAAE,GAEf,IAAK9a,EAAI,EAAGA,EAAIwqV,EAAExpV,OAAQhB,IAAK,CAC7B,IAAIyV,KAAOzV,EAAI,IACXiT,EAAIm3U,EAAQd,EAAOp9U,EAAG,GAAIm+U,EAAK50U,EAAGO,EAAGC,EAAG0E,GAAIvR,EAAGohV,EAAExqV,GAAIsqV,EAAO70U,IAChErM,EAAIuR,EACJA,EAAI1E,EACJA,EAAIqzU,EAAOtzU,EAAG,IACdA,EAAI9J,EACJA,EAAI+G,CACL,CAED7Q,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI5O,GAC7B9J,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI9E,GAC7B5T,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI7E,GAC7B7T,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAIH,GAC7BvY,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI1R,EAC9B,EAEDmhV,EAAKj+U,UAAUo8U,QAAU,SAAgBvoL,GACvC,MAAY,QAARA,EACKjhF,EAAM+qQ,QAAQ7nV,KAAK0Y,EAAG,OAEtBokE,EAAMgrQ,QAAQ9nV,KAAK0Y,EAAG,MAChC,sCCvED,IAAIokE,EAAQs8F,EAAQ,OAChBivK,EAASjvK,EAAQ,OAErB,SAASkvK,IACP,KAAMtoV,gBAAgBsoV,GACpB,OAAO,IAAIA,EAEbD,EAAO9pV,KAAKyB,MACZA,KAAK0Y,EAAI,CACP,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACvC,CACDokE,EAAMonF,SAASokL,EAAQD,GACvBllL,EAAOx3B,QAAU28M,EAEjBA,EAAOvtR,UAAY,IACnButR,EAAO39K,QAAU,IACjB29K,EAAOz9K,aAAe,IACtBy9K,EAAO1B,UAAY,GAEnB0B,EAAOp+U,UAAUo8U,QAAU,SAAgBvoL,GAEzC,MAAY,QAARA,EACKjhF,EAAM+qQ,QAAQ7nV,KAAK0Y,EAAE/I,MAAM,EAAG,GAAI,OAElCmtE,EAAMgrQ,QAAQ9nV,KAAK0Y,EAAE/I,MAAM,EAAG,GAAI,MAC5C,sCC1BD,IAAImtE,EAAQs8F,EAAQ,OAChBv+H,EAASu+H,EAAQ,OACjB2uK,EAAY3uK,EAAQ,OACpB1b,EAAS0b,EAAQ,OAEjB+tK,EAAQrqQ,EAAMqqQ,MACdE,EAAUvqQ,EAAMuqQ,QAChBW,EAAUlrQ,EAAMkrQ,QAChBO,EAAOR,EAAUQ,KACjBC,EAAQT,EAAUS,MAClBC,EAASV,EAAUU,OACnBC,EAASX,EAAUW,OACnBC,EAASZ,EAAUY,OACnBC,EAASb,EAAUa,OAEnBlC,EAAY7rS,EAAO6rS,UAEnBmC,EAAW,CACb,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGtC,SAASR,IACP,KAAMroV,gBAAgBqoV,GACpB,OAAO,IAAIA,EAEb3B,EAAUnoV,KAAKyB,MACfA,KAAK0Y,EAAI,CACP,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,YAEtC1Y,KAAK+0E,EAAI8zQ,EACT7oV,KAAKooV,EAAI,IAAIvqV,MAAM,GACpB,CACDi/E,EAAMonF,SAASmkL,EAAQ3B,GACvBvjL,EAAOx3B,QAAU08M,EAEjBA,EAAOttR,UAAY,IACnBstR,EAAO19K,QAAU,IACjB09K,EAAOx9K,aAAe,IACtBw9K,EAAOzB,UAAY,GAEnByB,EAAOn+U,UAAUw4G,QAAU,SAAiB+rB,EAAKtmG,GAG/C,IAFA,IAAIigT,EAAIpoV,KAAKooV,EAEJxqV,EAAI,EAAGA,EAAI,GAAIA,IACtBwqV,EAAExqV,GAAK6wI,EAAItmG,EAAQvqC,GACrB,KAAOA,EAAIwqV,EAAExpV,OAAQhB,IACnBwqV,EAAExqV,GAAKypV,EAAQuB,EAAOR,EAAExqV,EAAI,IAAKwqV,EAAExqV,EAAI,GAAI+qV,EAAOP,EAAExqV,EAAI,KAAMwqV,EAAExqV,EAAI,KAEtE,IAAIkM,EAAI9J,KAAK0Y,EAAE,GACX9E,EAAI5T,KAAK0Y,EAAE,GACX7E,EAAI7T,KAAK0Y,EAAE,GACXH,EAAIvY,KAAK0Y,EAAE,GACX1R,EAAIhH,KAAK0Y,EAAE,GACXF,EAAIxY,KAAK0Y,EAAE,GACXD,EAAIzY,KAAK0Y,EAAE,GACXA,EAAI1Y,KAAK0Y,EAAE,GAGf,IADAglJ,EAAO19J,KAAK+0E,EAAEn2E,SAAWwpV,EAAExpV,QACtBhB,EAAI,EAAGA,EAAIwqV,EAAExpV,OAAQhB,IAAK,CAC7B,IAAIu3K,EAAK6yK,EAAQtvU,EAAGgwU,EAAO1hV,GAAIuhV,EAAKvhV,EAAGwR,EAAGC,GAAIzY,KAAK+0E,EAAEn3E,GAAIwqV,EAAExqV,IACvDw3K,EAAK+xK,EAAMsB,EAAO3+U,GAAI0+U,EAAM1+U,EAAG8J,EAAGC,IACtC6E,EAAID,EACJA,EAAID,EACJA,EAAIxR,EACJA,EAAImgV,EAAM5uU,EAAG48J,GACb58J,EAAI1E,EACJA,EAAID,EACJA,EAAI9J,EACJA,EAAIq9U,EAAMhyK,EAAIC,EACf,CAEDp1K,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI5O,GAC7B9J,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI9E,GAC7B5T,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI7E,GAC7B7T,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAIH,GAC7BvY,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAI1R,GAC7BhH,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAIF,GAC7BxY,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAID,GAC7BzY,KAAK0Y,EAAE,GAAKyuU,EAAMnnV,KAAK0Y,EAAE,GAAIA,EAC9B,EAED2vU,EAAOn+U,UAAUo8U,QAAU,SAAgBvoL,GACzC,MAAY,QAARA,EACKjhF,EAAM+qQ,QAAQ7nV,KAAK0Y,EAAG,OAEtBokE,EAAMgrQ,QAAQ9nV,KAAK0Y,EAAG,MAChC,sCCtGD,IAAIokE,EAAQs8F,EAAQ,OAEhB0vK,EAAS1vK,EAAQ,OAErB,SAAS2vK,IACP,KAAM/oV,gBAAgB+oV,GACpB,OAAO,IAAIA,EAEbD,EAAOvqV,KAAKyB,MACZA,KAAK0Y,EAAI,CACP,WAAY,WACZ,WAAY,UACZ,WAAY,UACZ,UAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACf,CACDokE,EAAMonF,SAAS6kL,EAAQD,GACvB3lL,EAAOx3B,QAAUo9M,EAEjBA,EAAOhuR,UAAY,KACnBguR,EAAOp+K,QAAU,IACjBo+K,EAAOl+K,aAAe,IACtBk+K,EAAOnC,UAAY,IAEnBmC,EAAO7+U,UAAUo8U,QAAU,SAAgBvoL,GACzC,MAAY,QAARA,EACKjhF,EAAM+qQ,QAAQ7nV,KAAK0Y,EAAE/I,MAAM,EAAG,IAAK,OAEnCmtE,EAAMgrQ,QAAQ9nV,KAAK0Y,EAAE/I,MAAM,EAAG,IAAK,MAC7C,sCChCD,IAAImtE,EAAQs8F,EAAQ,OAChBv+H,EAASu+H,EAAQ,OACjB1b,EAAS0b,EAAQ,OAEjB4vK,EAAYlsQ,EAAMksQ,UAClBC,EAAYnsQ,EAAMmsQ,UAClBC,EAAWpsQ,EAAMosQ,SACjBC,EAAWrsQ,EAAMqsQ,SACjBC,EAAQtsQ,EAAMssQ,MACdC,EAAWvsQ,EAAMusQ,SACjBC,EAAWxsQ,EAAMwsQ,SACjBC,EAAazsQ,EAAMysQ,WACnBC,EAAa1sQ,EAAM0sQ,WACnBC,EAAa3sQ,EAAM2sQ,WACnBC,EAAa5sQ,EAAM4sQ,WAEnBhD,EAAY7rS,EAAO6rS,UAEnBiD,EAAW,CACb,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGtC,SAASb,IACP,KAAM9oV,gBAAgB8oV,GACpB,OAAO,IAAIA,EAEbpC,EAAUnoV,KAAKyB,MACfA,KAAK0Y,EAAI,CACP,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,UACZ,UAAY,WACZ,WAAY,WACd1Y,KAAK+0E,EAAI40Q,EACT3pV,KAAKooV,EAAI,IAAIvqV,MAAM,IACpB,CAwID,SAAS+rV,EAAQC,EAAIC,EAAIC,EAAIC,EAAIC,GAC/B,IAAI5wU,EAAKwwU,EAAKE,GAASF,EAAMI,EAG7B,OAFI5wU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAAS6wU,EAAQL,EAAIC,EAAIC,EAAIC,EAAIC,EAAIE,GACnC,IAAI9wU,EAAKywU,EAAKE,GAASF,EAAMK,EAG7B,OAFI9wU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAAS+wU,EAASP,EAAIC,EAAIC,EAAIC,EAAIC,GAChC,IAAI5wU,EAAKwwU,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EAGtC,OAFI5wU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASgxU,EAASR,EAAIC,EAAIC,EAAIC,EAAIC,EAAIE,GACpC,IAAI9wU,EAAKywU,EAAKE,EAAOF,EAAKK,EAAOH,EAAKG,EAGtC,OAFI9wU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASixU,EAAUT,EAAIC,GACrB,IAIIzwU,EAJQ2vU,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,GAClBb,EAAUc,EAAID,EAAI,GAK9B,OAFIxwU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASkxU,EAAUV,EAAIC,GACrB,IAIIzwU,EAJQ4vU,EAAUY,EAAIC,EAAI,IAClBb,EAAUa,EAAID,EAAI,GAClBZ,EAAUa,EAAID,EAAI,GAK9B,OAFIxwU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASmxU,EAAUX,EAAIC,GACrB,IAIIzwU,EAJQ2vU,EAAUa,EAAIC,EAAI,IAClBd,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,GAK9B,OAFIxwU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASoxU,EAAUZ,EAAIC,GACrB,IAIIzwU,EAJQ4vU,EAAUY,EAAIC,EAAI,IAClBb,EAAUY,EAAIC,EAAI,IAClBb,EAAUa,EAAID,EAAI,GAK9B,OAFIxwU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASqxU,EAAUb,EAAIC,GACrB,IAIIzwU,EAJQ2vU,EAAUa,EAAIC,EAAI,GAClBd,EAAUa,EAAIC,EAAI,GAClBZ,EAASW,EAAIC,EAAI,GAK7B,OAFIzwU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASsxU,EAAUd,EAAIC,GACrB,IAIIzwU,EAJQ4vU,EAAUY,EAAIC,EAAI,GAClBb,EAAUY,EAAIC,EAAI,GAClBX,EAASU,EAAIC,EAAI,GAK7B,OAFIzwU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASuxU,EAAUf,EAAIC,GACrB,IAIIzwU,EAJQ2vU,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,IAClBX,EAASW,EAAIC,EAAI,GAK7B,OAFIzwU,EAAI,IACNA,GAAK,YACAA,CACR,CAED,SAASwxU,EAAUhB,EAAIC,GACrB,IAIIzwU,EAJQ4vU,EAAUY,EAAIC,EAAI,IAClBb,EAAUa,EAAID,EAAI,IAClBV,EAASU,EAAIC,EAAI,GAK7B,OAFIzwU,EAAI,IACNA,GAAK,YACAA,CACR,CAzPDyjE,EAAMonF,SAAS4kL,EAAQpC,GACvBvjL,EAAOx3B,QAAUm9M,EAEjBA,EAAO/tR,UAAY,KACnB+tR,EAAOn+K,QAAU,IACjBm+K,EAAOj+K,aAAe,IACtBi+K,EAAOlC,UAAY,IAEnBkC,EAAO5+U,UAAU4gV,cAAgB,SAAuBr8M,EAAKtmG,GAI3D,IAHA,IAAIigT,EAAIpoV,KAAKooV,EAGJxqV,EAAI,EAAGA,EAAI,GAAIA,IACtBwqV,EAAExqV,GAAK6wI,EAAItmG,EAAQvqC,GACrB,KAAOA,EAAIwqV,EAAExpV,OAAQhB,GAAK,EAAG,CAC3B,IAAImtV,EAAQH,EAAUxC,EAAExqV,EAAI,GAAIwqV,EAAExqV,EAAI,IAClCotV,EAAQH,EAAUzC,EAAExqV,EAAI,GAAIwqV,EAAExqV,EAAI,IAClCqtV,EAAQ7C,EAAExqV,EAAI,IACdstV,EAAQ9C,EAAExqV,EAAI,IACdutV,EAAQT,EAAUtC,EAAExqV,EAAI,IAAKwqV,EAAExqV,EAAI,KACnCwtV,EAAQT,EAAUvC,EAAExqV,EAAI,IAAKwqV,EAAExqV,EAAI,KACnCytV,EAAQjD,EAAExqV,EAAI,IACd0tV,EAAQlD,EAAExqV,EAAI,IAElBwqV,EAAExqV,GAAK2rV,EACLwB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GACTlD,EAAExqV,EAAI,GAAK4rV,EACTuB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACV,CACF,EAEDxC,EAAO5+U,UAAUw4G,QAAU,SAAiB+rB,EAAKtmG,GAC/CnoC,KAAK8qV,cAAcr8M,EAAKtmG,GAExB,IAAIigT,EAAIpoV,KAAKooV,EAETmD,EAAKvrV,KAAK0Y,EAAE,GACZ8yU,EAAKxrV,KAAK0Y,EAAE,GACZ+yU,EAAKzrV,KAAK0Y,EAAE,GACZ66P,EAAKvzQ,KAAK0Y,EAAE,GACZ0iL,EAAKp7L,KAAK0Y,EAAE,GACZgzU,EAAK1rV,KAAK0Y,EAAE,GACZ81R,EAAKxuS,KAAK0Y,EAAE,GACZizU,EAAK3rV,KAAK0Y,EAAE,GACZkzU,EAAK5rV,KAAK0Y,EAAE,GACZpY,EAAKN,KAAK0Y,EAAE,GACZ0kM,EAAKp9M,KAAK0Y,EAAE,IACZmzU,EAAK7rV,KAAK0Y,EAAE,IACZozU,EAAK9rV,KAAK0Y,EAAE,IACZs/B,EAAKh4C,KAAK0Y,EAAE,IACZqzU,EAAK/rV,KAAK0Y,EAAE,IACZszU,EAAKhsV,KAAK0Y,EAAE,IAEhBglJ,EAAO19J,KAAK+0E,EAAEn2E,SAAWwpV,EAAExpV,QAC3B,IAAK,IAAIhB,EAAI,EAAGA,EAAIwqV,EAAExpV,OAAQhB,GAAK,EAAG,CACpC,IAAImtV,EAAQgB,EACRf,EAAQgB,EACRf,EAAQT,EAAUoB,EAAItrV,GACtB4qV,EAAQT,EAAUmB,EAAItrV,GACtB6qV,EAAQvB,EAAQgC,EAAItrV,EAAI88M,EAAIyuI,EAAIC,GAChCV,EAAQlB,EAAQ0B,EAAItrV,EAAI88M,EAAIyuI,EAAIC,EAAI9zS,GACpCqzS,EAAQrrV,KAAK+0E,EAAEn3E,GACf0tV,EAAQtrV,KAAK+0E,EAAEn3E,EAAI,GACnBquV,EAAQ7D,EAAExqV,GACVsuV,EAAQ9D,EAAExqV,EAAI,GAEduuV,EAAQ1C,EACVsB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPW,EAAOC,GACLE,EAAQ1C,EACVqB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPW,EAAOC,GAETnB,EAAQT,EAAUiB,EAAIC,GACtBR,EAAQT,EAAUgB,EAAIC,GACtBP,EAAQb,EAASmB,EAAIC,EAAIC,EAAIl4E,EAAIn4E,GACjC8vJ,EAAQb,EAASkB,EAAIC,EAAIC,EAAIl4E,EAAIn4E,EAAIswJ,GAErC,IAAIW,EAAQhD,EAAS0B,EAAOC,EAAOC,EAAOC,GACtCoB,EAAQhD,EAASyB,EAAOC,EAAOC,EAAOC,GAE1Ca,EAAKD,EACLE,EAAKh0S,EAEL8zS,EAAK1uI,EACLplK,EAAK6zS,EAELzuI,EAAKwuI,EACLC,EAAKvrV,EAELsrV,EAAKvC,EAAS76C,EAAIm9C,EAAIQ,EAAOC,GAC7B9rV,EAAKgpV,EAASqC,EAAIA,EAAIQ,EAAOC,GAE7B59C,EAAKpzG,EACLuwJ,EAAKD,EAELtwJ,EAAKqwJ,EACLC,EAAKn4E,EAELk4E,EAAKF,EACLh4E,EAAKi4E,EAELD,EAAKlC,EAAS8C,EAAOC,EAAOC,EAAOC,GACnCd,EAAKlC,EAAS6C,EAAOC,EAAOC,EAAOC,EACpC,CAEDlD,EAAMppV,KAAK0Y,EAAG,EAAG6yU,EAAIC,GACrBpC,EAAMppV,KAAK0Y,EAAG,EAAG+yU,EAAIl4E,GACrB61E,EAAMppV,KAAK0Y,EAAG,EAAG0iL,EAAIswJ,GACrBtC,EAAMppV,KAAK0Y,EAAG,EAAG81R,EAAIm9C,GACrBvC,EAAMppV,KAAK0Y,EAAG,EAAGkzU,EAAItrV,GACrB8oV,EAAMppV,KAAK0Y,EAAG,GAAI0kM,EAAIyuI,GACtBzC,EAAMppV,KAAK0Y,EAAG,GAAIozU,EAAI9zS,GACtBoxS,EAAMppV,KAAK0Y,EAAG,GAAIqzU,EAAIC,EACvB,EAEDlD,EAAO5+U,UAAUo8U,QAAU,SAAgBvoL,GACzC,MAAY,QAARA,EACKjhF,EAAM+qQ,QAAQ7nV,KAAK0Y,EAAG,OAEtBokE,EAAMgrQ,QAAQ9nV,KAAK0Y,EAAG,MAChC,sCCnND,IACI6zU,EADQnzK,EAAQ,OACDmzK,OAYnB,SAAShE,EAAKvlV,EAAGC,EAAGI,GAClB,OAAQL,EAAIC,GAAQD,EAAKK,CAC1B,CAGD,SAASmlV,EAAMxlV,EAAGC,EAAGI,GACnB,OAAQL,EAAIC,EAAMD,EAAIK,EAAMJ,EAAII,CACjC,CAGD,SAASmpV,EAAIxpV,EAAGC,EAAGI,GACjB,OAAOL,EAAIC,EAAII,CAChB,CAdDsoI,EAAQs8M,KARR,SAAc50U,EAAGrQ,EAAGC,EAAGI,GACrB,OAAU,IAANgQ,EACKk1U,EAAKvlV,EAAGC,EAAGI,GACV,IAANgQ,GAAiB,IAANA,EACNm5U,EAAIxpV,EAAGC,EAAGI,GACT,IAANgQ,EACKm1U,EAAMxlV,EAAGC,EAAGI,QADrB,CAED,EAMDsoI,EAAQ48M,KAAOA,EAKf58M,EAAQ68M,MAAQA,EAKhB78M,EAAQ6gN,IAAMA,EAKd7gN,EAAQ88M,OAHR,SAAgBzlV,GACd,OAAOupV,EAAOvpV,EAAG,GAAKupV,EAAOvpV,EAAG,IAAMupV,EAAOvpV,EAAG,GACjD,EAMD2oI,EAAQ+8M,OAHR,SAAgB1lV,GACd,OAAOupV,EAAOvpV,EAAG,GAAKupV,EAAOvpV,EAAG,IAAMupV,EAAOvpV,EAAG,GACjD,EAMD2oI,EAAQg9M,OAHR,SAAgB3lV,GACd,OAAOupV,EAAOvpV,EAAG,GAAKupV,EAAOvpV,EAAG,IAAOA,IAAM,CAC9C,EAMD2oI,EAAQi9M,OAHR,SAAgB5lV,GACd,OAAOupV,EAAOvpV,EAAG,IAAMupV,EAAOvpV,EAAG,IAAOA,IAAM,EAC/C,sCC7CD,IAAI06J,EAAS0b,EAAQ,OACjBlV,EAAWkV,EAAQ,OAIvB,SAASqzK,EAAgBh+M,EAAK7wI,GAC5B,OAAqC,SAAZ,MAApB6wI,EAAIohB,WAAWjyJ,QAGhBA,EAAI,GAAKA,EAAI,GAAK6wI,EAAI7vI,SAGkB,SAAZ,MAAxB6vI,EAAIohB,WAAWjyJ,EAAI,IAC5B,CAyDD,SAAS8uV,EAAM7qU,GAKb,OAJWA,IAAM,GACLA,IAAM,EAAK,MACXA,GAAK,EAAK,UACN,IAAJA,IAAa,MACV,CAChB,CAeD,SAASg8I,EAAMC,GACb,OAAoB,IAAhBA,EAAKl/J,OACA,IAAMk/J,EAENA,CACV,CAGD,SAAS6uL,EAAM7uL,GACb,OAAoB,IAAhBA,EAAKl/J,OACA,IAAMk/J,EACU,IAAhBA,EAAKl/J,OACL,KAAOk/J,EACS,IAAhBA,EAAKl/J,OACL,MAAQk/J,EACQ,IAAhBA,EAAKl/J,OACL,OAASk/J,EACO,IAAhBA,EAAKl/J,OACL,QAAUk/J,EACM,IAAhBA,EAAKl/J,OACL,SAAWk/J,EACK,IAAhBA,EAAKl/J,OACL,UAAYk/J,EAEZA,CACV,CAjHDnyB,EAAQu4B,SAAWA,EAyDnBv4B,EAAQrwG,QA7CR,SAAiBmzG,EAAKsvB,GACpB,GAAIlgK,MAAMC,QAAQ2wI,GAChB,OAAOA,EAAI9+H,QACb,IAAK8+H,EACH,MAAO,GACT,IAAI77B,EAAM,GACV,GAAmB,kBAAR67B,EACT,GAAKsvB,GAyBE,GAAY,QAARA,EAIT,KAHAtvB,EAAMA,EAAI9rE,QAAQ,eAAgB,KAC1B/jE,OAAS,IAAM,IACrB6vI,EAAM,IAAMA,GACT7wI,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,GAAK,EAC/Bg1G,EAAIl0G,KAAK4d,SAASmyH,EAAI7wI,GAAK6wI,EAAI7wI,EAAI,GAAI,UAxBzC,IADA,IAAI4d,EAAI,EACC5d,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAAK,CACnC,IAAIiW,EAAI46H,EAAIohB,WAAWjyJ,GACnBiW,EAAI,IACN++F,EAAIp3F,KAAO3H,EACFA,EAAI,MACb++F,EAAIp3F,KAAQ3H,GAAK,EAAK,IACtB++F,EAAIp3F,KAAY,GAAJ3H,EAAU,KACb44U,EAAgBh+M,EAAK7wI,IAC9BiW,EAAI,QAAgB,KAAJA,IAAe,KAA6B,KAAtB46H,EAAIohB,aAAajyJ,IACvDg1G,EAAIp3F,KAAQ3H,GAAK,GAAM,IACvB++F,EAAIp3F,KAAS3H,GAAK,GAAM,GAAM,IAC9B++F,EAAIp3F,KAAS3H,GAAK,EAAK,GAAM,IAC7B++F,EAAIp3F,KAAY,GAAJ3H,EAAU,MAEtB++F,EAAIp3F,KAAQ3H,GAAK,GAAM,IACvB++F,EAAIp3F,KAAS3H,GAAK,EAAK,GAAM,IAC7B++F,EAAIp3F,KAAY,GAAJ3H,EAAU,IAEzB,MASH,IAAKjW,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAC1Bg1G,EAAIh1G,GAAc,EAAT6wI,EAAI7wI,GAEjB,OAAOg1G,CACR,EASD+4B,EAAQ8mB,MANR,SAAehkB,GAEb,IADA,IAAI77B,EAAM,GACDh1G,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAC9Bg1G,GAAOirD,EAAMpvB,EAAI7wI,GAAG0M,SAAS,KAC/B,OAAOsoG,CACR,EAUD+4B,EAAQ+gN,MAAQA,EAYhB/gN,EAAQk8M,QAVR,SAAiBp5M,EAAK44E,GAEpB,IADA,IAAIz0G,EAAM,GACDh1G,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAAK,CACnC,IAAIikB,EAAI4sH,EAAI7wI,GACG,WAAXypN,IACFxlM,EAAI6qU,EAAM7qU,IACZ+wF,GAAO+5O,EAAM9qU,EAAEvX,SAAS,IACzB,CACD,OAAOsoG,CACR,EASD+4B,EAAQkyB,MAAQA,EAoBhBlyB,EAAQghN,MAAQA,EAgBhBhhN,EAAQo7M,OAdR,SAAgBt4M,EAAKtmG,EAAOkN,EAAKgyK,GAC/B,IAAI/+L,EAAM+sB,EAAMlN,EAChBu1H,EAAOp1I,EAAM,IAAM,GAEnB,IADA,IAAIsqF,EAAM,IAAI/0G,MAAMyqB,EAAM,GACjB1qB,EAAI,EAAGm3E,EAAI5sC,EAAOvqC,EAAIg1G,EAAIh0G,OAAQhB,IAAKm3E,GAAK,EAAG,CACtD,IAAIlzD,EAEFA,EADa,QAAXwlM,EACG54E,EAAI15D,IAAM,GAAO05D,EAAI15D,EAAI,IAAM,GAAO05D,EAAI15D,EAAI,IAAM,EAAK05D,EAAI15D,EAAI,GAEjE05D,EAAI15D,EAAI,IAAM,GAAO05D,EAAI15D,EAAI,IAAM,GAAO05D,EAAI15D,EAAI,IAAM,EAAK05D,EAAI15D,GACxE69B,EAAIh1G,GAAKikB,IAAM,CAChB,CACD,OAAO+wF,CACR,EAqBD+4B,EAAQm8M,QAlBR,SAAiBr5M,EAAK44E,GAEpB,IADA,IAAIz0G,EAAM,IAAI/0G,MAAmB,EAAb4wI,EAAI7vI,QACfhB,EAAI,EAAGm3E,EAAI,EAAGn3E,EAAI6wI,EAAI7vI,OAAQhB,IAAKm3E,GAAK,EAAG,CAClD,IAAIpkE,EAAI89H,EAAI7wI,GACG,QAAXypN,GACFz0G,EAAI79B,GAAKpkE,IAAM,GACfiiG,EAAI79B,EAAI,GAAMpkE,IAAM,GAAM,IAC1BiiG,EAAI79B,EAAI,GAAMpkE,IAAM,EAAK,IACzBiiG,EAAI79B,EAAI,GAAS,IAAJpkE,IAEbiiG,EAAI79B,EAAI,GAAKpkE,IAAM,GACnBiiG,EAAI79B,EAAI,GAAMpkE,IAAM,GAAM,IAC1BiiG,EAAI79B,EAAI,GAAMpkE,IAAM,EAAK,IACzBiiG,EAAI79B,GAAS,IAAJpkE,EAEZ,CACD,OAAOiiG,CACR,EAMD+4B,EAAQ4gN,OAHR,SAAgB1qU,EAAGjO,GACjB,OAAQiO,IAAMjO,EAAMiO,GAAM,GAAKjO,CAChC,EAMD+3H,EAAQu7M,OAHR,SAAgBrlU,EAAGjO,GACjB,OAAQiO,GAAKjO,EAAMiO,IAAO,GAAKjO,CAChC,EAMD+3H,EAAQw7M,MAHR,SAAer9U,EAAG8J,GAChB,OAAQ9J,EAAI8J,IAAO,CACpB,EAMD+3H,EAAQy7M,QAHR,SAAiBt9U,EAAG8J,EAAGC,GACrB,OAAQ/J,EAAI8J,EAAIC,IAAO,CACxB,EAMD83H,EAAQ07M,QAHR,SAAiBv9U,EAAG8J,EAAGC,EAAG0E,GACxB,OAAQzO,EAAI8J,EAAIC,EAAI0E,IAAO,CAC5B,EAMDozH,EAAQq8M,QAHR,SAAiBl+U,EAAG8J,EAAGC,EAAG0E,EAAGvR,GAC3B,OAAQ8C,EAAI8J,EAAIC,EAAI0E,EAAIvR,IAAO,CAChC,EAYD2kI,EAAQy9M,MATR,SAAej8K,EAAK/lK,EAAKmkV,EAAIC,GAC3B,IAAIC,EAAKt+K,EAAI/lK,GAGT62J,EAAMutL,EAFDr+K,EAAI/lK,EAAM,KAEI,EACnB42J,GAAMC,EAAKutL,EAAK,EAAI,GAAKD,EAAKE,EAClCt+K,EAAI/lK,GAAO42J,IAAO,EAClBmP,EAAI/lK,EAAM,GAAK62J,CAChB,EAQDtyB,EAAQ09M,SALR,SAAkBkC,EAAIC,EAAIC,EAAIl4E,GAG5B,OAFUi4E,EAAKj4E,IAAQ,EACRi4E,EAAK,EAAI,GAAKD,EAAKE,IACpB,CACf,EAOD9/M,EAAQ29M,SAJR,SAAkBiC,EAAIC,EAAIC,EAAIl4E,GAE5B,OADSi4E,EAAKj4E,IACA,CACf,EAgBD5nI,EAAQ49M,WAbR,SAAoBgC,EAAIC,EAAIC,EAAIl4E,EAAIn4E,EAAIswJ,EAAIl9C,EAAIm9C,GAC9C,IAAIljI,EAAQ,EACRxqD,EAAKutL,EAST,OAPA/iI,IADAxqD,EAAMA,EAAKs1G,IAAQ,GACLi4E,EAAK,EAAI,EAEvB/iI,IADAxqD,EAAMA,EAAKytL,IAAQ,GACLA,EAAK,EAAI,EAIdH,EAAKE,EAAKrwJ,EAAKozG,GAFxB/lF,IADAxqD,EAAMA,EAAK0tL,IAAQ,GACLA,EAAK,EAAI,KAGT,CACf,EAODhgN,EAAQ69M,WAJR,SAAoB+B,EAAIC,EAAIC,EAAIl4E,EAAIn4E,EAAIswJ,EAAIl9C,EAAIm9C,GAE9C,OADSH,EAAKj4E,EAAKm4E,EAAKC,IACV,CACf,EAkBDhgN,EAAQ89M,WAfR,SAAoB8B,EAAIC,EAAIC,EAAIl4E,EAAIn4E,EAAIswJ,EAAIl9C,EAAIm9C,EAAIC,EAAItrV,GACtD,IAAImoN,EAAQ,EACRxqD,EAAKutL,EAWT,OATA/iI,IADAxqD,EAAMA,EAAKs1G,IAAQ,GACLi4E,EAAK,EAAI,EAEvB/iI,IADAxqD,EAAMA,EAAKytL,IAAQ,GACLA,EAAK,EAAI,EAEvBjjI,IADAxqD,EAAMA,EAAK0tL,IAAQ,GACLA,EAAK,EAAI,EAIdJ,EAAKE,EAAKrwJ,EAAKozG,EAAKo9C,GAF7BnjI,IADAxqD,EAAMA,EAAK39J,IAAQ,GACLA,EAAK,EAAI,KAGT,CACf,EAQDqrI,EAAQ+9M,WALR,SAAoB6B,EAAIC,EAAIC,EAAIl4E,EAAIn4E,EAAIswJ,EAAIl9C,EAAIm9C,EAAIC,EAAItrV,GAGtD,OAFSkrV,EAAKj4E,EAAKm4E,EAAKC,EAAKrrV,IAEf,CACf,EAODqrI,EAAQq9M,UAJR,SAAmBuC,EAAIC,EAAIntL,GAEzB,OADSmtL,GAAO,GAAKntL,EAASktL,IAAOltL,KACxB,CACd,EAOD1yB,EAAQs9M,UAJR,SAAmBsC,EAAIC,EAAIntL,GAEzB,OADSktL,GAAO,GAAKltL,EAASmtL,IAAOntL,KACxB,CACd,EAMD1yB,EAAQu9M,SAHR,SAAkBqC,EAAIC,EAAIntL,GACxB,OAAOktL,IAAOltL,CACf,EAOD1yB,EAAQw9M,SAJR,SAAkBoC,EAAIC,EAAIntL,GAExB,OADSktL,GAAO,GAAKltL,EAASmtL,IAAOntL,KACxB,CACd,sCClRD,IAAIlvF,EAAOiqG,EAAQ,OACft8F,EAAQs8F,EAAQ,OAChB1b,EAAS0b,EAAQ,OAErB,SAAS5O,EAAS1qK,GAChB,KAAME,gBAAgBwqK,GACpB,OAAO,IAAIA,EAAS1qK,GACtBE,KAAKmvE,KAAOrvE,EAAQqvE,KACpBnvE,KAAKyqK,aAAe3qK,EAAQ2qK,WAE5BzqK,KAAK0qK,OAAS1qK,KAAKmvE,KAAKw7F,QACxB3qK,KAAK4qK,WAAa9qK,EAAQ8qK,YAAc5qK,KAAKmvE,KAAK07F,aAElD7qK,KAAK8qK,QAAU,KACf9qK,KAAK+qK,eAAiB,KACtB/qK,KAAKgrK,EAAI,KACThrK,KAAKirK,EAAI,KAET,IAAIC,EAAUpuF,EAAMxhD,QAAQx7B,EAAQorK,QAASprK,EAAQqrK,YAAc,OAC/D1wB,EAAQ39D,EAAMxhD,QAAQx7B,EAAQ26I,MAAO36I,EAAQsrK,UAAY,OACzDC,EAAOvuF,EAAMxhD,QAAQx7B,EAAQurK,KAAMvrK,EAAQwrK,SAAW,OAC1D5N,EAAOwN,EAAQtsK,QAAWoB,KAAK4qK,WAAa,EACrC,mCAAqC5qK,KAAK4qK,WAAa,SAC9D5qK,KAAKurK,MAAML,EAASzwB,EAAO4wB,EAC5B,CACDlI,EAAOx3B,QAAU6+B,EAEjBA,EAAStgK,UAAUqhK,MAAQ,SAAcL,EAASzwB,EAAO4wB,GACvD,IAAIG,EAAON,EAAQnuB,OAAOtC,GAAOsC,OAAOsuB,GAExCrrK,KAAKgrK,EAAI,IAAIntK,MAAMmC,KAAK0qK,OAAS,GACjC1qK,KAAKirK,EAAI,IAAIptK,MAAMmC,KAAK0qK,OAAS,GACjC,IAAK,IAAI9sK,EAAI,EAAGA,EAAIoC,KAAKirK,EAAErsK,OAAQhB,IACjCoC,KAAKgrK,EAAEptK,GAAK,EACZoC,KAAKirK,EAAErtK,GAAK,EAGdoC,KAAK0iH,QAAQ8oD,GACbxrK,KAAK8qK,QAAU,EACf9qK,KAAK+qK,eAAiB,eACvB,EAEDP,EAAStgK,UAAUuhK,MAAQ,WACzB,OAAO,IAAIt8F,EAAKu7J,KAAK1qO,KAAKmvE,KAAMnvE,KAAKgrK,EACtC,EAEDR,EAAStgK,UAAUw4G,QAAU,SAAgB8oD,GAC3C,IAAIE,EAAO1rK,KAAKyrK,QACA3mJ,OAAO9kB,KAAKirK,GACZnmJ,OAAO,CAAE,IACrB0mJ,IACFE,EAAOA,EAAK5mJ,OAAO0mJ,IACrBxrK,KAAKgrK,EAAIU,EAAKC,SACd3rK,KAAKirK,EAAIjrK,KAAKyrK,QAAQ3mJ,OAAO9kB,KAAKirK,GAAGU,SAChCH,IAGLxrK,KAAKgrK,EAAIhrK,KAAKyrK,QACA3mJ,OAAO9kB,KAAKirK,GACZnmJ,OAAO,CAAE,IACTA,OAAO0mJ,GACPG,SACd3rK,KAAKirK,EAAIjrK,KAAKyrK,QAAQ3mJ,OAAO9kB,KAAKirK,GAAGU,SACtC,EAEDnB,EAAStgK,UAAU0hK,OAAS,SAAgBV,EAASC,EAAYp/I,EAAK8/I,GAE1C,kBAAfV,IACTU,EAAS9/I,EACTA,EAAMo/I,EACNA,EAAa,MAGfD,EAAUpuF,EAAMxhD,QAAQ4vI,EAASC,GACjCp/I,EAAM+wD,EAAMxhD,QAAQvP,EAAK8/I,GAEzBnO,EAAOwN,EAAQtsK,QAAWoB,KAAK4qK,WAAa,EACrC,mCAAqC5qK,KAAK4qK,WAAa,SAE9D5qK,KAAK0iH,QAAQwoD,EAAQnuB,OAAOhxH,GAAO,KACnC/rB,KAAK8qK,QAAU,CAChB,EAEDN,EAAStgK,UAAU4hK,SAAW,SAAkBxjJ,EAAKy1I,EAAKhyI,EAAK8/I,GAC7D,GAAI7rK,KAAK8qK,QAAU9qK,KAAK+qK,eACtB,MAAM,IAAIp5J,MAAM,sBAGC,kBAARosJ,IACT8N,EAAS9/I,EACTA,EAAMgyI,EACNA,EAAM,MAIJhyI,IACFA,EAAM+wD,EAAMxhD,QAAQvP,EAAK8/I,GAAU,OACnC7rK,KAAK0iH,QAAQ32F,IAIf,IADA,IAAIggJ,EAAO,GACJA,EAAKntK,OAAS0pB,GACnBtoB,KAAKirK,EAAIjrK,KAAKyrK,QAAQ3mJ,OAAO9kB,KAAKirK,GAAGU,SACrCI,EAAOA,EAAKhvB,OAAO/8I,KAAKirK,GAG1B,IAAIr4D,EAAMm5D,EAAKp8J,MAAM,EAAG2Y,GAGxB,OAFAtoB,KAAK0iH,QAAQ32F,GACb/rB,KAAK8qK,UACEhuF,EAAMw9D,OAAO1nC,EAAKmrD,EAC1B,yBC9GD,IAAIlyC,EAASutD,EAAQ,OACjBh+B,EAASg+B,EAAQ,OACjBvM,EAASuM,EAAQ,OACjBt8F,EAAQs8F,EAAQ,OAMpBjW,EAAOx3B,QAAU,CAEf1qH,MAAO4qG,EAAO+gO,aACdA,aAAc/gO,EAAO+gO,aAErBt6T,KAAM8oH,EAAOyxM,YACbA,YAAazxM,EAAOyxM,YACpBC,aAAc1xM,EAAO0xM,aACrBC,SAAU3xM,EAAO2xM,SAEjBC,YAAalwQ,EAAMkwQ,YACnBC,kBAAmBnwQ,EAAMs/O,YACzB8wB,eAAgBpwQ,EAAMowQ,eAEtBrgL,OAAQA,EAAOsgL,gBACfA,gBAAiBtgL,EAAOsgL,gBACxBC,WAAYvgL,EAAOugL,mCCzBrB,IAAI1vL,EAAS0b,EAAQ,OACjBM,EAAON,EAAQ,OACft8F,EAAQs8F,EAAQ,OAQhBi0K,GAFavwQ,EAAMwwQ,WACRxwQ,EAAMywQ,SACIzwQ,EAAMuwQ,oBAC3BG,EAAwB1wQ,EAAM0wQ,sBAC9BC,EAAoB3wQ,EAAM2wQ,kBAE1BC,EACG,EADHA,EAEM,EAGNC,EACI,EADJA,EAEK,EAFLA,EAGK,EAHLA,EAIK,EAOT,SAASC,EAAoBv2P,GAC3Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAASu2P,EACxC,CAID,SAASC,EAAmBx2P,GAC1Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAASw2P,EACxC,CAID,SAASC,EAAmBz2P,GAC1Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAASy2P,EACxC,CAID,SAASC,EAAmB12P,GAC1Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAAS02P,EACxC,CAGD,SAASC,EAAmB32P,GAC1Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAAS22P,EACxC,CAtBDt0K,EAAKxV,SAAS0pL,EAAqBP,GAMnC3zK,EAAKxV,SAAS2pL,EAAoBR,GAMlC3zK,EAAKxV,SAAS4pL,EAAoBT,GAMlC3zK,EAAKxV,SAAS6pL,EAAoBV,GAKlC3zK,EAAKxV,SAAS8pL,EAAoBX,GAIlClqL,EAAOx3B,QAAU,CA6CfihN,aAAc,SAAsBjkN,EAAS7oI,GAC3C49J,EAAOl8J,OAAOmnI,EAAS,WACvB+0B,EAAOl8J,OAAOmnI,EAAQx6B,QAAS,wBACf9kG,IAAZvJ,IACFA,EAAU,CAAC,QAEWuJ,IAApBvJ,EAAQquG,UACVruG,EAAQquG,QAAU,CAACw6B,EAAQx6B,QAAQ,UAAY,SAAW,SAE5DuvD,EAAOl8J,OAAO1B,EAAS,WACvB49J,EAAOuwL,cAAcnuV,EAAQquG,QAAS,mBACtCuvD,EAAOwwL,eAAepuV,EAAQquV,UAAW,qBAEzC,IAAIC,EAAkBtuV,EAAQuuV,yBAA2B,gBAEzD,IAAK1lN,EAAQx6B,QAAQigP,GACnB,MAAM,IAAIL,EAAmB,MAAQK,EAAR,kCAI/BtuV,EAAQquV,UAAYruV,EAAQquV,WAAa,IAGzC,IAoJIntK,EApJApjL,EAAI,EACJ8oD,EAAQgnS,EACRY,EAAWX,EACXY,EAAU,GACVC,EAAW,GAEXz4L,EAAS,CACX04K,OAAQ,GACRp7Q,OAAQ,CAAC,EACTo7R,cAAe,IAGbC,EAAQ/lN,EAAQx6B,QAAQigP,GAC5B,IAAKxwV,EAAI,EAAGA,EAAI8wV,EAAM9vV,OAAQhB,IAAK,CACjC,IAAIiW,EAAI66U,EAAMjyU,OAAO7e,GAErB,OAAQgF,OAAO8jD,IAEf,KAAKgnS,EACO,MAAN75U,EAAWkiJ,EAAO04K,QAAU56T,EAC3B6yC,EAAQgnS,EACb,MAEF,KAAKA,EACH,OAAQ9qV,OAAO0rV,IAEf,KAAKX,EACH,IAAI3jR,EAAOn2D,EAAEg8I,WAAW,GAExB,GAAK7lF,GAAQ,IAAQA,GAAQ,IACxBA,GAAQ,IAAQA,GAAQ,IAC3BukR,GAAW16U,MACN,IAAU,MAANA,EAKT,MAAM,IAAIg6U,EAAmB,oBAJ7B,GAAuB,IAAnBU,EAAQ3vV,OACV,MAAM,IAAIivV,EAAmB,oBAC/BS,EAAWX,CAGZ,CACD,MAEF,KAAKA,EACH,GAAU,MAAN95U,EAIF,MAAM,IAAIg6U,EAAmB,oBAH7BW,EAAW,GACXF,EAAWX,EAIb,MAEF,KAAKA,EACO,MAAN95U,GACFkiJ,EAAO1iG,OAAOk7R,GAAWC,EACzBF,EAAWX,GAEXa,GAAY36U,EAEd,MAEF,KAAK85U,EACH,GAAU,MAAN95U,EAIF,MAAM,IAAIg6U,EAAmB,oBAH7BU,EAAU,GACVD,EAAWX,EAIb,MAEF,QACE,MAAM,IAAIh8U,MAAM,oBAElB,MAEF,QACE,MAAM,IAAIA,MAAM,oBAGnB,CAaD,GAXKokJ,EAAO1iG,OAAO86C,SAAqC,KAA1B4nD,EAAO1iG,OAAO86C,QAO1C4nD,EAAO1iG,OAAO86C,QAAU4nD,EAAO1iG,OAAO86C,QAAQxsC,MAAM,KANhDgnE,EAAQx6B,QAAQ,UAClB4nD,EAAO1iG,OAAO86C,QAAU,CAAC,UAEzB4nD,EAAO1iG,OAAO86C,QAAU,CAAC,SAOxB4nD,EAAO04K,QAA4B,cAAlB14K,EAAO04K,OAC3B,MAAM,IAAIof,EAAmB,8BAE/B,IAAK93L,EAAO1iG,OAAOs7R,MACjB,MAAM,IAAId,EAAmB,2BAE/B,IAAK93L,EAAO1iG,OAAO+iN,UACjB,MAAM,IAAIy3E,EAAmB,+BAE/B,IAAK93L,EAAO1iG,OAAOglF,UACjB,MAAM,IAAIw1M,EAAmB,+BAG/B93L,EAAO1iG,OAAO+iN,UAAYrgH,EAAO1iG,OAAO+iN,UAAU7lQ,cAClD,IACEk9U,EAAkB13L,EAAO1iG,OAAO+iN,UAOjC,CANC,MAAOpvQ,GACP,MAAIA,aAAawmV,EACR,IAAIM,EAAmB/3L,EAAO1iG,OAAO+iN,UAAdrgH,qBAGvB/uJ,CACV,CAGD,IAAKpJ,EAAI,EAAGA,EAAIm4J,EAAO1iG,OAAO86C,QAAQvvG,OAAQhB,IAAK,CACjD,IAAI8a,EAAIq9I,EAAO1iG,OAAO86C,QAAQvwG,GAAG2S,cAGjC,GAFAwlJ,EAAO1iG,OAAO86C,QAAQvwG,GAAK8a,EAEjB,iBAANA,EAAsB,CACxB,GAAK5Y,EAAQg/N,OASX,MAAO,IAAIkvH,EAAmB,mEAJ9Bj4L,EAAO04L,eACL9lN,EAAQ3vC,OAAS,IAAM2vC,EAAQ1pH,IAAM,SAAW0pH,EAAQimN,WAM7D,MAAM,GAAU,qBAANl2U,EACTq9I,EAAO04L,eACL,qBAAuB9lN,EAAQ3vC,OAAOzoF,cAAgB,IACtDo4H,EAAQ1pH,QACL,CACL,IAAItgB,EAAQgqI,EAAQx6B,QAAQz1F,GAC5B,QAAcrP,IAAV1K,EACF,MAAM,IAAIovV,EAAmBr1U,EAAI,2BACnCq9I,EAAO04L,eAAiB/1U,EAAI,KAAO/Z,CACpC,CAEIf,EAAI,EAAKm4J,EAAO1iG,OAAO86C,QAAQvvG,SAClCm3J,EAAO04L,eAAiB,KAC3B,CAID,GAAI9lN,EAAQx6B,QAAQ6yE,MAAQr4C,EAAQx6B,QAAQ,UAAW,CAEjD6yE,EADEr4C,EAAQx6B,QAAQ,UACX,IAAI3pG,KAAKmkI,EAAQx6B,QAAQ,WAEzB,IAAI3pG,KAAKmkI,EAAQx6B,QAAQ6yE,MAEpC,IAAIv8K,EAAM,IAAID,KACVouC,EAAOzsC,KAAKG,IAAI7B,EAAImiO,UAAY5lD,EAAK4lD,WAEzC,GAAIh0L,EAA2B,IAApB9yC,EAAQquV,UACjB,MAAM,IAAIP,EAAoB,iBACCh7S,EAAO,IACR,sBACA9yC,EAAQquV,UAAY,IAErD,CASD,GAPAruV,EAAQquG,QAAQ9rG,SAAQ,SAAUwsV,GAGhC,GAAI94L,EAAO1iG,OAAO86C,QAAQrrG,QAAQ+rV,EAAIt+U,eAAiB,EACrD,MAAM,IAAIw9U,EAAmBc,EAAM,2BACtC,IAEG/uV,EAAQo2Q,aACmD,IAAzDp2Q,EAAQo2Q,WAAWpzQ,QAAQizJ,EAAO1iG,OAAO+iN,WAC3C,MAAM,IAAI03E,EAAmB/3L,EAAO1iG,OAAO+iN,UACd,iCAKjC,OAFArgH,EAAOqgH,UAAYrgH,EAAO1iG,OAAO+iN,UAAU10M,cAC3Cq0F,EAAO44L,MAAQ54L,EAAO1iG,OAAOs7R,MACtB54L,CACR,gDCtTC2H,EAAS0b,EAAQ,OACjBkwD,EAASlwD,EAAQ,OAEjBM,GADON,EAAQ,OACRA,EAAQ,QACf01K,EAAQ11K,EAAQ,OAChB21K,EAAS31K,EAAQ,OACjBt8F,EAAQs8F,EAAQ,OAEhB2mK,EAAU3mK,EAAAA,OAAAA,OAEVk0K,EAAaxwQ,EAAMwwQ,WACnBC,EAAWzwQ,EAAMywQ,SACjBC,EAAwB1wQ,EAAM0wQ,sBAC9BH,EAAqBvwQ,EAAMuwQ,mBAC3BI,EAAoB3wQ,EAAM2wQ,kBAI1BuB,EACF,kEAIF,SAASjB,EAAmB12P,GAC1Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAAS02P,EACxC,CAGD,SAASC,EAAmB32P,GAC1Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAAS22P,EACxC,CAID,SAAShjH,EAAclrO,GACrB49J,EAAOl8J,OAAO1B,EAAS,WAEvB,IAAIutS,EAAM,GAiBV,QAhB0BhkS,IAAtBvJ,EAAQs2Q,YACV14G,EAAOxhJ,OAAOpc,EAAQs2Q,UAAW,qBACjCi3B,EAAMogD,EAAkB3tV,EAAQs2Q,YAElCp2Q,KAAKivV,OAAS5hD,OAYOhkS,IAAjBvJ,EAAQwyB,KACVorI,EAAOtiC,KAAKt7H,EAAQwyB,KAAM,gBAC1BtyB,KAAKkvV,YAAcpvV,EAAQwyB,UAEtB,GAAe,SAAX+6Q,EAAI,SAAiChkS,IAAhBvJ,EAAQmB,IAAmB,CAIzD,GAHAy8J,EAAOxhJ,OAAOpc,EAAQ6uV,MAAO,iBAC7B3uV,KAAKmvV,SAAWrvV,EAAQ6uV,MAEK,kBAAjB7uV,EAAQmB,MAAsB2rI,EAAOk2D,SAAShjM,EAAQmB,KAChE,MAAO,IAAIlC,UAAU,mDAOvBiB,KAAKovV,UAAY9lH,EAAOG,WAAW4jE,EAAI,GAAG3rO,cAAe5hE,EAAQmB,KACjEjB,KAAKovV,UAAU98T,KAAO,WACpB,IAAIq5I,EAAS3rK,KAAK2rK,OAAO,UACzB,MAAQ,CACNsuJ,cAAe5sB,EAAI,GACnB/iS,SAAU,WAAc,OAAQqhK,CAAU,EAE7C,CAEF,KAAM,SAAoBtiK,IAAhBvJ,EAAQmB,IA0BjB,MAAO,IAAIlC,UAAU,kDAzBrB,IAAIkC,EAAMnB,EAAQmB,IAWlB,IAVqB,kBAATA,GAAqB2rI,EAAOk2D,SAAS7hM,MAC/CA,EAAM6tV,EAAMO,gBAAgBpuV,IAE9By8J,EAAO6jC,GAAGutJ,EAAM33C,WAAWm4C,aAAaruV,EAAK,CAAC,EAAG,IAC/C,0CACFjB,KAAKuvV,OAAStuV,EAEdy8J,EAAOxhJ,OAAOpc,EAAQ6uV,MAAO,iBAC7B3uV,KAAKmvV,SAAWrvV,EAAQ6uV,OAEnBpB,EAAStsV,EAAIoG,MAChB,MAAO,IAAImmV,EAAsBvsV,EAAIoG,KAAKq6D,cAATzgE,gCAInC,QAAeoI,IAAXgkS,EAAI,IAAoBpsS,EAAIoG,OAASgmS,EAAI,GAC3C,MAAO,IAAImgD,EAAsB,yBAC/BngD,EAAI,GAAG3rO,cAAgB,qBACvBzgE,EAAIoG,KAAKq6D,cAAgB,gBAG7B1hE,KAAKovV,UAAYnuV,EAAI01Q,WAAW02B,EAAI,GAIrC,CAEDrtS,KAAKwvV,WAAa,GAClBxvV,KAAKyvV,SAAW,EACjB,CApFD/1K,EAAKxV,SAAS6pL,EAAoBV,GAKlC3zK,EAAKxV,SAAS8pL,EAAoBX,GAwFlCriH,EAAc9gO,UAAUwlV,YAAc,SAAU37N,EAAQp1H,GAOtD,GANA++J,EAAOxhJ,OAAO63G,EAAQ,UACtBA,EAASA,EAAOxjH,cAChBmtJ,EAAOxhJ,OAAOvd,EAAO,SAErBqB,KAAKwvV,WAAW9wV,KAAKq1H,GAEjB/zH,KAAKkvV,YACPlvV,KAAKyvV,SAAS/wV,KAAKq1H,EAAS,KAAOp1H,OAE9B,CACL,IAAIu2C,EAAO6+E,EAAS,KAAOp1H,EACvBqB,KAAKwvV,WAAW5wV,OAAS,IAC3Bs2C,EAAO,KAAOA,GAChBl1C,KAAKovV,UAAUtqU,OAAOowB,EACvB,CAED,OAAQv2C,CACT,EAODqsO,EAAc9gO,UAAUylV,gBAAkB,WACxC,OAAQ3vV,KAAK0vV,YAAY,OAAQX,EAAOa,QAAQ,IAAIprV,MACrD,EAQDwmO,EAAc9gO,UAAU2lV,YAAc,SAAU72P,EAAQ74B,GACtDu9F,EAAOxhJ,OAAO88E,EAAQ,UACtB0kE,EAAOxhJ,OAAOikD,EAAM,QACpB64B,EAASA,EAAOzoF,cAChBvQ,KAAK0vV,YAAY,mBAAoB12P,EAAS,IAAM74B,EACrD,EAQD6qK,EAAc9gO,UAAUooB,KAAO,SAAU+Y,GAGvC,GAFAqyH,EAAOtiC,KAAK/vF,EAAI,YAEZrrC,KAAKwvV,WAAW5wV,OAAS,EAC3B,MAAO,IAAI+S,MAAM,sCAEnB,IAAI07R,EAAKqhD,EACT,GAAI1uV,KAAKkvV,YAAa,CACpB,IAAI1wU,EAAOxe,KAAKyvV,SAAS5tR,KAAK,MAC1B14D,EAAOnJ,KACXA,KAAKkvV,YAAY1wU,GAAM,SAAU3f,EAAKmrJ,GACpC,GAAInrJ,EACFwsC,EAAGxsC,OADL,CAIA,IACE6+J,EAAOl8J,OAAOwoJ,EAAK,aACnB0T,EAAOxhJ,OAAO8tI,EAAI2kM,MAAO,mBACzBjxL,EAAOxhJ,OAAO8tI,EAAIosH,UAAW,uBAC7B14G,EAAOxhJ,OAAO8tI,EAAI3R,UAAW,uBAC7Bg1J,EAAMogD,EAAkBzjM,EAAIosH,WAE5Bs4E,EAAQ3O,EAAQiP,EACdhlM,EAAI2kM,MACJ3kM,EAAIosH,UACJjtQ,EAAKqmV,WAAW3tR,KAAK,KACrBmoF,EAAI3R,UAIP,CAHC,MAAOrxI,GAEP,YADAqkC,EAAGrkC,EAEJ,CACDqkC,EAAG,KAAMqjT,EAjBR,CAkBF,GAEF,KAAM,CACL,IACE,IAAIr+B,EAASrwT,KAAKovV,UAAU98T,MAI7B,CAHC,MAAOtrB,GAEP,YADAqkC,EAAGrkC,EAEJ,CACDqmS,GAAOrtS,KAAKivV,OAAO,IAAMjvV,KAAKuvV,OAAOloV,MAAQ,IAAMgpT,EAAO4J,cAC1D,IAAI5hL,EAAYg4K,EAAO/lT,WACvBokV,EAAQ3O,EAAQiP,EACdhvV,KAAKmvV,SACL9hD,EACArtS,KAAKwvV,WAAW3tR,KAAK,KACrBw2E,GACFhtG,EAAG,KAAMqjT,EACV,CACF,EAIDvrL,EAAOx3B,QAAU,CAOfohN,SAAU,SAAU/rV,GAClB,MAAqB,kBAATA,GAAqBA,aAAegqO,CAGjD,EAcD8hH,aAAc,SAAsBhtV,GAClC,OAAQ,IAAIkrO,EAAclrO,EAC3B,EAmCD+sV,YAAa,SAAqBlkN,EAAS7oI,GACzC49J,EAAOl8J,OAAOmnI,EAAS,WACvB+0B,EAAOl8J,OAAO1B,EAAS,WACvB49J,EAAOoyL,eAAehwV,EAAQs2Q,UAAW,qBACzC14G,EAAOxhJ,OAAOpc,EAAQ6uV,MAAO,iBAC7BjxL,EAAOqyL,sBAAsBjwV,EAAQquG,QAAS,mBAC9CuvD,EAAOoyL,eAAehwV,EAAQ8uV,YAAa,uBAEtCjmN,EAAQ8pJ,UAAU,SACrB9pJ,EAAQs8I,UAAU,OAAQ8pE,EAAOa,QAAQ,IAAIprV,OAC1C1E,EAAQquG,UACXruG,EAAQquG,QAAU,CAAC,SAChBruG,EAAQ8uV,cACX9uV,EAAQ8uV,YAAc,OAExB,IAMIhxV,EANAyvS,EAAM,GACNvtS,EAAQs2Q,YACVt2Q,EAAQs2Q,UAAYt2Q,EAAQs2Q,UAAU7lQ,cACtC88R,EAAMogD,EAAkB3tV,EAAQs2Q,YAIlC,IA0CI/9H,EA1CAsxF,EAAe,GACnB,IAAK/rO,EAAI,EAAGA,EAAIkC,EAAQquG,QAAQvvG,OAAQhB,IAAK,CAC3C,GAAoC,kBAAxBkC,EAAQquG,QAAQvwG,GAC1B,MAAM,IAAImB,UAAU,+CAEtB,IAAI2Z,EAAI5Y,EAAQquG,QAAQvwG,GAAG2S,cAE3B,GAAU,iBAANmI,EAAsB,CACxB,GAAK5Y,EAAQg/N,OAUX,MAAO,IAAIkvH,EAAmB,mEAL9BrkH,GACEhhG,EAAQ3vC,OAAS,IAAM2vC,EAAQxoE,KAAO,SACtCrgE,EAAQ8uV,WAMb,MAAM,GAAU,qBAANl2U,EACTixN,GACE,qBAAuBhhG,EAAQ3vC,OAAOzoF,cAAgB,IACtDo4H,EAAQxoE,SACL,CACL,IAAIxhE,EAAQgqI,EAAQ8pJ,UAAU/5Q,GAC9B,QAAcrP,IAAV1K,GAAiC,KAAVA,EACzB,MAAM,IAAIovV,EAAmBr1U,EAAI,2BAEnCixN,GAAgBjxN,EAAI,KAAO/Z,CAC5B,CAEIf,EAAI,EAAKkC,EAAQquG,QAAQvvG,SAC5B+qO,GAAgB,KACnB,CAQD,GALIhhG,EAAQolC,eAAe,mBACzBplC,EAAQqnN,cAAgBrmH,GAIX,SAAX0jE,EAAI,GAAe,CACrB,GAA6B,kBAAjBvtS,EAAQmB,MAAsB2rI,EAAOk2D,SAAShjM,EAAQmB,KAChE,MAAO,IAAIlC,UAAU,0CAEvB,IAAI2rO,EAAOpB,EAAOG,WAAW4jE,EAAI,GAAG3rO,cAAe5hE,EAAQmB,KAC3DypO,EAAK5lN,OAAO6kN,GACZtxF,EAAYqyF,EAAK/+D,OAAO,SAEzB,KAAM,CACL,IAAI1qK,EAAMnB,EAAQmB,IAOlB,IANqB,kBAATA,GAAqB2rI,EAAOk2D,SAAS7hM,MAC/CA,EAAM6tV,EAAMO,gBAAgBvvV,EAAQmB,MAEtCy8J,EAAO6jC,GAAGutJ,EAAM33C,WAAWm4C,aAAaruV,EAAK,CAAC,EAAG,IAC/C,2CAEGssV,EAAStsV,EAAIoG,MAChB,MAAO,IAAImmV,EAAsBvsV,EAAIoG,KAAKq6D,cAATzgE,gCAInC,QAAeoI,IAAXgkS,EAAI,IAAoBpsS,EAAIoG,OAASgmS,EAAI,GAC3C,MAAO,IAAImgD,EAAsB,yBAC/BngD,EAAI,GAAG3rO,cAAgB,qBACvBzgE,EAAIoG,KAAKq6D,cAAgB,gBAG7B,IAAI05E,EAASn6I,EAAI01Q,WAAW02B,EAAI,IAChCjyJ,EAAOt2H,OAAO6kN,GACd,IAAI0mF,EAASj1K,EAAO9oH,OACpB,IAAKg7T,EAAWj9B,EAAO4J,eACrB,MAAO,IAAIuzB,EAAsBn9B,EAAO4J,cAAcv4P,cACpD,sCAEJ5hE,EAAQs2Q,UAAYn1Q,EAAIoG,KAAO,IAAMgpT,EAAO4J,cAC5C5hL,EAAYg4K,EAAO/lT,WACnBozJ,EAAOqgE,eAAe1lF,EAAW,GAAI,2BACtC,CAED,IAAI+1M,EAAkBtuV,EAAQuuV,yBAA2B,gBAQzD,OANA1lN,EAAQs8I,UAAUmpE,EAAiBrO,EAAQiP,EACAlvV,EAAQ6uV,MACR7uV,EAAQs2Q,UACRt2Q,EAAQquG,QAAQtsC,KAAK,KACrBw2E,KAEpC,CACR,0BC5YH,IAAIqlB,EAAS0b,EAAQ,OACjB01K,EAAQ11K,EAAQ,OAChBM,EAAON,EAAQ,OAEfk0K,EAAa,CACf,MAAQ,EACR,QAAU,EACV,QAAU,GAGRC,EAAW,CACb,KAAO,EACP,KAAO,EACP,OAAS,GAGX,SAASF,EAAmBh2P,EAAS8jI,GAC/BxpN,MAAM2yM,mBACR3yM,MAAM2yM,kBAAkBtkN,KAAMm7N,GAAUkyH,GAE1CrtV,KAAKq3F,QAAUA,EACfr3F,KAAKsa,KAAO6gN,EAAO7gN,IACpB,CAGD,SAASkzU,EAAsBn2P,GAC7Bg2P,EAAmB9uV,KAAKyB,KAAMq3F,EAASm2P,EACxC,CAJD9zK,EAAKxV,SAASmpL,EAAoB17U,OAKlC+nK,EAAKxV,SAASspL,EAAuBH,GAyBrClqL,EAAOx3B,QAAU,CAEf2hN,WAAYA,EACZC,SAAUA,EAEVF,mBAAoBA,EACpBG,sBAAuBA,EAEvBC,kBA/BF,SAA2Br3E,GACzB,IAAIi3B,EAAMj3B,EAAU7lQ,cAAcoxD,MAAM,KAExC,GAAmB,IAAf0rO,EAAIzuS,OACN,MAAO,IAAI4uV,EAAsBngD,EAAI,GAAG3rO,cAAP2rO,6BAInC,GAAe,SAAXA,EAAI,KAAkBkgD,EAASlgD,EAAI,IACrC,MAAO,IAAImgD,EAAsBngD,EAAI,GAAG3rO,cAAP2rO,gCAInC,IAAKigD,EAAWjgD,EAAI,IAClB,MAAO,IAAImgD,EAAsBngD,EAAI,GAAG3rO,cAAP2rO,sCAInC,OAAQA,CACT,EAyBC2/C,YAAa,SAAqB/rV,GAIhC,OAHAy8J,EAAOxhJ,OAAOjb,EAAK,WAEX6tV,EAAMmB,SAAShvV,EAAK,OAClBqJ,SAAS,MACpB,EAWD8xT,YAAa,SAAqBn7T,GAIhC,OAHAy8J,EAAOxhJ,OAAOjb,EAAK,WAEX6tV,EAAMmB,SAAShvV,EAAK,OAClBm7T,YAAY,OAAO9xT,SAAS,MACvC,EAOD4iV,eAAgB,SAAwBhnI,EAAKgqI,GAC3CxyL,EAAOE,MAAM,gBAAkBsoD,EAAM,cAErC,IAAInxI,EAAI+5Q,EAAMmB,SAAS/pI,EAAK,OAE5B,OADAnxI,EAAEm7Q,QAAUA,EACJn7Q,EAAEzqE,SAAS,MACpB,gDC5GCozJ,EAAS0b,EAAQ,OACjBkwD,EAASlwD,EAAQ,OACjB01K,EAAQ11K,EAAQ,OAChBt8F,EAAQs8F,EAAQ,OAMhBq0K,GAJa3wQ,EAAMwwQ,WACRxwQ,EAAMywQ,SACOzwQ,EAAM0wQ,sBACT1wQ,EAAMuwQ,mBACPvwQ,EAAM2wQ,mBAI9BtqL,EAAOx3B,QAAU,CAWfwhN,gBAAiB,SAAyBgD,EAAiBn4E,GACzDt6G,EAAOl8J,OAAO2uV,EAAiB,oBACP,kBAAZn4E,GAAwBprI,EAAOk2D,SAASk1E,MAClDA,EAAS82E,EAAMmB,SAASj4E,IAC1Bt6G,EAAO6jC,GAAGutJ,EAAMsB,IAAIC,MAAMr4E,EAAQ,CAAC,EAAG,IAAK,8BAE3C,IAAIq1B,EAAMogD,EAAkB0C,EAAgB/5E,WAC5C,GAAe,SAAXi3B,EAAI,IAAiBA,EAAI,KAAOr1B,EAAO3wQ,KACzC,OAAQ,EAEV,IAAIyN,EAAIkjQ,EAAOpB,aAAay2B,EAAI,IAEhC,OADAv4R,EAAEgQ,OAAOqrU,EAAgB1B,eACjB35U,EAAE+3J,OAAOsjL,EAAgB98R,OAAOglF,UAAW,SACpD,EAYD+0M,WAAY,SAAoB+C,EAAiBzmH,GAC/ChsE,EAAOl8J,OAAO2uV,EAAiB,cAC/BzyL,EAAOxhJ,OAAOwtN,EAAQ,UAEtB,IAAI2jE,EAAMogD,EAAkB0C,EAAgB/5E,WAC5C,GAAe,SAAXi3B,EAAI,GACN,OAAQ,EAEV,IAAIijD,EAAUjjD,EAAI,GAAG3rO,cAEjBgpK,EAAOpB,EAAOG,WAAW6mH,EAAS5mH,GACtCgB,EAAK5lN,OAAOqrU,EAAgB1B,eAS5B,IAAI3qG,EAAKxa,EAAOG,WAAW6mH,EAAS5mH,GACpCoa,EAAGh/N,OAAO4lN,EAAK/+D,UACfm4E,EAAKA,EAAGn4E,SACR,IAAIlE,EAAK6hE,EAAOG,WAAW6mH,EAAS5mH,GAKpC,OAJAjiE,EAAG3iJ,OAAO,IAAI8nH,EAAOujN,EAAgB98R,OAAOglF,UAAW,WACvDovB,EAAKA,EAAGkE,SAGY,kBAARm4E,EACFA,IAAOr8E,EAEb76B,EAAOk2D,SAASghD,KAAQA,EAAGx1N,OACrBw1N,EAAGx5O,SAAS,YAAcm9J,EAAGn9J,SAAS,UAExCw5O,EAAGx1N,OAAOm5I,EACnB,0BCtFH,IAAI8oL,EAAOn3K,EAAQ,OACfn6J,EAAMm6J,EAAQ,OAEdo3K,EAAQrtL,EAAOx3B,QAEnB,IAAK,IAAI1qI,KAAOsvV,EACVA,EAAKxiL,eAAe9sK,KAAMuvV,EAAMvvV,GAAOsvV,EAAKtvV,IAalD,SAASwvV,EAAgBp9R,GAOvB,GANsB,kBAAXA,IACTA,EAASp0C,EAAIgC,MAAMoyC,IAEhBA,EAAOyyI,WACVzyI,EAAOyyI,SAAW,UAEI,WAApBzyI,EAAOyyI,SACT,MAAM,IAAIn0L,MAAM,aAAe0hD,EAAOyyI,SAAW,sCAEnD,OAAOzyI,CACR,CArBDm9R,EAAM7nN,QAAU,SAAUt1E,EAAQhoB,GAEhC,OADAgoB,EAASo9R,EAAep9R,GACjBk9R,EAAK5nN,QAAQpqI,KAAKyB,KAAMqzD,EAAQhoB,EACxC,EAEDmlT,EAAMhmV,IAAM,SAAU6oD,EAAQhoB,GAE5B,OADAgoB,EAASo9R,EAAep9R,GACjBk9R,EAAK/lV,IAAIjM,KAAKyB,KAAMqzD,EAAQhoB,EACpC,uBChBDsgG,EAAQx8B,KAAO,SAAU72D,EAAQ34C,EAAQ+wV,EAAMC,EAAMC,GACnD,IAAI5pV,EAAG2J,EACHkgV,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACTpzV,EAAI8yV,EAAQE,EAAS,EAAK,EAC1Br4U,EAAIm4U,GAAQ,EAAI,EAChBr9U,EAAIilC,EAAO34C,EAAS/B,GAOxB,IALAA,GAAK2a,EAELvR,EAAIqM,GAAM,IAAO29U,GAAU,EAC3B39U,KAAQ29U,EACRA,GAASH,EACFG,EAAQ,EAAGhqV,EAAS,IAAJA,EAAWsxC,EAAO34C,EAAS/B,GAAIA,GAAK2a,EAAGy4U,GAAS,GAKvE,IAHArgV,EAAI3J,GAAM,IAAOgqV,GAAU,EAC3BhqV,KAAQgqV,EACRA,GAASL,EACFK,EAAQ,EAAGrgV,EAAS,IAAJA,EAAW2nC,EAAO34C,EAAS/B,GAAIA,GAAK2a,EAAGy4U,GAAS,GAEvE,GAAU,IAANhqV,EACFA,EAAI,EAAI+pV,MACH,IAAI/pV,IAAM8pV,EACf,OAAOngV,EAAIsgV,IAAsB7lU,KAAd/X,GAAK,EAAI,GAE5B1C,GAAQxK,KAAK6K,IAAI,EAAG2/U,GACpB3pV,GAAQ+pV,CACT,CACD,OAAQ19U,GAAK,EAAI,GAAK1C,EAAIxK,KAAK6K,IAAI,EAAGhK,EAAI2pV,EAC3C,EAEDhlN,EAAQ+2D,MAAQ,SAAUpqJ,EAAQ35C,EAAOgB,EAAQ+wV,EAAMC,EAAMC,GAC3D,IAAI5pV,EAAG2J,EAAGkD,EACNg9U,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBI,EAAe,KAATP,EAAcxqV,KAAK6K,IAAI,GAAI,IAAM7K,KAAK6K,IAAI,GAAI,IAAM,EAC1DpT,EAAI8yV,EAAO,EAAKE,EAAS,EACzBr4U,EAAIm4U,EAAO,GAAK,EAChBr9U,EAAI1U,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQwH,KAAKG,IAAI3H,GAEbyqC,MAAMzqC,IAAUA,IAAUysB,KAC5Bza,EAAIy4B,MAAMzqC,GAAS,EAAI,EACvBqI,EAAI8pV,IAEJ9pV,EAAIb,KAAKQ,MAAMR,KAAK+K,IAAIvS,GAASwH,KAAKgL,KAClCxS,GAASkV,EAAI1N,KAAK6K,IAAI,GAAIhK,IAAM,IAClCA,IACA6M,GAAK,IAGLlV,GADEqI,EAAI+pV,GAAS,EACNG,EAAKr9U,EAELq9U,EAAK/qV,KAAK6K,IAAI,EAAG,EAAI+/U,IAEpBl9U,GAAK,IACf7M,IACA6M,GAAK,GAGH7M,EAAI+pV,GAASD,GACfngV,EAAI,EACJ3J,EAAI8pV,GACK9pV,EAAI+pV,GAAS,GACtBpgV,GAAMhS,EAAQkV,EAAK,GAAK1N,KAAK6K,IAAI,EAAG2/U,GACpC3pV,GAAQ+pV,IAERpgV,EAAIhS,EAAQwH,KAAK6K,IAAI,EAAG+/U,EAAQ,GAAK5qV,KAAK6K,IAAI,EAAG2/U,GACjD3pV,EAAI,IAID2pV,GAAQ,EAAGr4S,EAAO34C,EAAS/B,GAAS,IAAJ+S,EAAU/S,GAAK2a,EAAG5H,GAAK,IAAKggV,GAAQ,GAI3E,IAFA3pV,EAAKA,GAAK2pV,EAAQhgV,EAClBkgV,GAAQF,EACDE,EAAO,EAAGv4S,EAAO34C,EAAS/B,GAAS,IAAJoJ,EAAUpJ,GAAK2a,EAAGvR,GAAK,IAAK6pV,GAAQ,GAE1Ev4S,EAAO34C,EAAS/B,EAAI2a,IAAU,IAAJlF,CAC3B,qBCpF4B,oBAAlBnS,OAAO2J,OAEhBs4J,EAAOx3B,QAAU,SAAkB8wB,EAAM2G,GACnCA,IACF3G,EAAK4G,OAASD,EACd3G,EAAKvyJ,UAAYhJ,OAAO2J,OAAOu4J,EAAUl5J,UAAW,CAClDU,YAAa,CACXjM,MAAO89J,EACPr7J,YAAY,EACZE,UAAU,EACVD,cAAc,KAIrB,EAGD8hK,EAAOx3B,QAAU,SAAkB8wB,EAAM2G,GACvC,GAAIA,EAAW,CACb3G,EAAK4G,OAASD,EACd,IAAIE,EAAW,WAAc,EAC7BA,EAASp5J,UAAYk5J,EAAUl5J,UAC/BuyJ,EAAKvyJ,UAAY,IAAIo5J,EACrB7G,EAAKvyJ,UAAUU,YAAc6xJ,CAC9B,CACF,sCCvBH,IAAI00L,EAAiB/3K,EAAQ,KAARA,GAGjBg4K,EAFYh4K,EAAQ,MAERi4K,CAAU,6BAEtBC,EAAsB,SAAqB3yV,GAC9C,QAAIwyV,GAAkBxyV,GAA0B,kBAAVA,GAAsBX,OAAOgkQ,eAAerjQ,IAGtD,uBAArByyV,EAAUzyV,EACjB,EAEG4yV,EAAoB,SAAqB5yV,GAC5C,QAAI2yV,EAAoB3yV,IAGP,OAAVA,GACW,kBAAVA,GACiB,kBAAjBA,EAAMC,QACbD,EAAMC,QAAU,GACK,mBAArBwyV,EAAUzyV,IACkB,sBAA5ByyV,EAAUzyV,EAAM6yV,OACjB,EAEGC,EAA6B,WAChC,OAAOH,EAAoBnvV,UAC3B,CAFgC,GAIjCmvV,EAAoBC,kBAAoBA,EAExCpuL,EAAOx3B,QAAU8lN,EAA4BH,EAAsBC,kCC9BnE,IAEIG,EACAC,EAHAC,EAAU5nV,SAASE,UAAUI,SAC7BunV,EAAkC,kBAAZloV,SAAoC,OAAZA,SAAoBA,QAAQ3H,MAG9E,GAA4B,oBAAjB6vV,GAAgE,oBAA1B3wV,OAAOC,eACvD,IACCuwV,EAAexwV,OAAOC,eAAe,CAAC,EAAG,SAAU,CAClDqJ,IAAK,WACJ,MAAMmnV,CACN,IAEFA,EAAmB,CAAC,EAEpBE,GAAa,WAAc,MAAM,EAAK,GAAE,KAAMH,EAK9C,CAJC,MAAOjmM,GACJA,IAAMkmM,IACTE,EAAe,KAEhB,MAEDA,EAAe,KAGhB,IAAIC,EAAmB,cACnBC,EAAe,SAA4BpzV,GAC9C,IACC,IAAIqzV,EAAQJ,EAAQrzV,KAAKI,GACzB,OAAOmzV,EAAiBr0U,KAAKu0U,EAG7B,CAFC,MAAOhrV,GACR,OAAO,CACP,CACD,EAEGirV,EAAoB,SAA0BtzV,GACjD,IACC,OAAIozV,EAAapzV,KACjBizV,EAAQrzV,KAAKI,IACN,EAGP,CAFC,MAAOqI,GACR,OAAO,CACP,CACD,EACG+pS,EAAQ7vS,OAAOgJ,UAAUI,SAOzB6mV,EAAmC,oBAAXnzV,UAA2BA,OAAOgkQ,YAE1DkwF,IAAW,IAAK,CAAC,IAEjBC,EAAQ,WAA8B,OAAO,CAAQ,EACzD,GAAwB,kBAAb1uV,SAAuB,CAEjC,IAAIstH,EAAMttH,SAASstH,IACfggL,EAAMxyS,KAAKwyH,KAASggL,EAAMxyS,KAAKkF,SAASstH,OAC3CohO,EAAQ,SAA0BxzV,GAGjC,IAAKuzV,IAAWvzV,KAA4B,qBAAVA,GAA0C,kBAAVA,GACjE,IACC,IAAIizK,EAAMm/H,EAAMxyS,KAAKI,GACrB,OAlBU,+BAmBTizK,GAlBU,qCAmBPA,GAlBO,4BAmBPA,GAxBS,oBAyBTA,IACc,MAAbjzK,EAAM,GACQ,CAAlB,MAAOqI,GAAW,CAErB,OAAO,CACP,EAEF,CAEDm8J,EAAOx3B,QAAUkmN,EACd,SAAoBlzV,GACrB,GAAIwzV,EAAMxzV,GAAU,OAAO,EAC3B,IAAKA,EAAS,OAAO,EACrB,GAAqB,oBAAVA,GAAyC,kBAAVA,EAAsB,OAAO,EACvE,IACCkzV,EAAalzV,EAAO,KAAM+yV,EAG1B,CAFC,MAAO1qV,GACR,GAAIA,IAAM2qV,EAAoB,OAAO,CACrC,CACD,OAAQI,EAAapzV,IAAUszV,EAAkBtzV,EACjD,EACC,SAAoBA,GACrB,GAAIwzV,EAAMxzV,GAAU,OAAO,EAC3B,IAAKA,EAAS,OAAO,EACrB,GAAqB,oBAAVA,GAAyC,kBAAVA,EAAsB,OAAO,EACvE,GAAIwyV,EAAkB,OAAOc,EAAkBtzV,GAC/C,GAAIozV,EAAapzV,GAAU,OAAO,EAClC,IAAIyzV,EAAWrhD,EAAMxyS,KAAKI,GAC1B,QApDY,sBAoDRyzV,GAnDS,+BAmDeA,IAA2B,iBAAkB30U,KAAK20U,KACvEH,EAAkBtzV,EACzB,sCClGF,IAcI0zV,EAdAthD,EAAQ7vS,OAAOgJ,UAAUI,SACzBsnV,EAAU5nV,SAASE,UAAUI,SAC7BgoV,EAAY,sBACZnB,EAAiB/3K,EAAQ,KAARA,GACjBmqK,EAAWriV,OAAOyJ,eAYtBw4J,EAAOx3B,QAAU,SAA6BziI,GAC7C,GAAkB,oBAAPA,EACV,OAAO,EAER,GAAIopV,EAAU70U,KAAKm0U,EAAQrzV,KAAK2K,IAC/B,OAAO,EAER,IAAKioV,EAEJ,MAAe,+BADLpgD,EAAMxyS,KAAK2K,GAGtB,IAAKq6U,EACJ,OAAO,EAER,GAAiC,qBAAtB8O,EAAmC,CAC7C,IAAIE,EA1BiB,WACtB,IAAKpB,EACJ,OAAO,EAER,IACC,OAAOnnV,SAAS,wBAATA,EAEP,CADC,MAAOhD,GACR,CACD,CAkBqBwrV,GACpBH,IAAoBE,GAAgBhP,EAASgP,EAC7C,CACD,OAAOhP,EAASr6U,KAAQmpV,CACxB,qBC/BDlvL,EAAOx3B,QAAU,SAAuBimC,GACtC,GAAmB,kBAARA,EACT,MAAM,IAAIjgK,MAAM,2EAA8EigK,EAAO,mCAGvG,MAA2B,OAApBA,EAAIjiK,MAAM,EAAG,EACrB,iCCRDwzJ,EAAOx3B,QAAU,SAAehtI,GAC/B,OAAOA,IAAUA,CACjB,qCCJD,IAAI6yR,EAAWp4G,EAAQ,OACnB+lC,EAAS/lC,EAAQ,MAEjBypK,EAAiBzpK,EAAQ,MACzBq5K,EAAcr5K,EAAQ,OACtBs5K,EAAOt5K,EAAQ,MAEfknI,EAAW9uB,EAASihE,IAAe7vV,QAIvCu8M,EAAOmhG,EAAU,CAChBmyC,YAAaA,EACb5P,eAAgBA,EAChB6P,KAAMA,IAGPvvL,EAAOx3B,QAAU20K,sCCjBjB,IAAIuiC,EAAiBzpK,EAAQ,MAE7BjW,EAAOx3B,QAAU,WAChB,OAAI/oI,OAAOwmC,OAASxmC,OAAOwmC,MAAM6nT,OAASruV,OAAOwmC,MAAM,KAC/CxmC,OAAOwmC,MAERy5S,CACP,qCCPD,IAAI1jI,EAAS/lC,EAAQ,MACjBq5K,EAAcr5K,EAAQ,OAI1BjW,EAAOx3B,QAAU,WAChB,IAAI20K,EAAWmyC,IAMf,OALAtzI,EAAOv8M,OAAQ,CAAEwmC,MAAOk3Q,GAAY,CACnCl3Q,MAAO,WACN,OAAOxmC,OAAOwmC,QAAUk3Q,CACxB,IAEKA,CACP,sCCbD,IAAIj+S,EAAU+2K,EAAQ,OAClBu5K,EAAuBv5K,EAAQ,OAC/Bi4K,EAAYj4K,EAAQ,OAEpBg4K,EAAYC,EAAU,6BACtBF,EAAiB/3K,EAAQ,KAARA,GAEjB3gK,EAA0B,qBAAfm6U,WAA6BzlP,EAAAA,EAASylP,WACjDC,EAAcF,IAEdlhE,EAAW4/D,EAAU,2BAA2B,IAAS,SAAiB3hV,EAAO/Q,GACpF,IAAK,IAAIf,EAAI,EAAGA,EAAI8R,EAAM9Q,OAAQhB,GAAK,EACtC,GAAI8R,EAAM9R,KAAOe,EAChB,OAAOf,EAGT,OAAQ,CACR,EACGk1V,EAASzB,EAAU,0BACnB0B,EAAY,CAAC,EACbjU,EAAO1lK,EAAQ,OACfzuK,EAAiBzJ,OAAOyJ,eACxBwmV,GAAkBrS,GAAQn0U,GAC7BtI,EAAQwwV,GAAa,SAAUG,GAC9B,IAAIr1V,EAAM,IAAI8a,EAAEu6U,GAChB,GAAIh1V,OAAOgkQ,eAAerkQ,EAAK,CAC9B,IAAI+6P,EAAQ/tP,EAAehN,GACvBuiO,EAAa4+G,EAAKpmF,EAAO16P,OAAOgkQ,aACpC,IAAK9hC,EAAY,CAChB,IAAIgyE,EAAavnS,EAAe+tP,GAChCx4B,EAAa4+G,EAAK5sC,EAAYl0S,OAAOgkQ,YACrC,CACD+wF,EAAUC,GAAc9yH,EAAW11N,GACnC,CACD,IAeF24J,EAAOx3B,QAAU,SAAsBhtI,GACtC,IAAKA,GAA0B,kBAAVA,EAAsB,OAAO,EAClD,IAAKwyV,KAAoBnzV,OAAOgkQ,eAAerjQ,GAAQ,CACtD,IAAIs4J,EAAM67L,EAAO1B,EAAUzyV,GAAQ,GAAI,GACvC,OAAO8yR,EAASohE,EAAa57L,IAAQ,CACrC,CACD,QAAK6nL,GAlBe,SAA2BngV,GAC/C,IAAIs0V,GAAU,EAQd,OAPA5wV,EAAQ0wV,GAAW,SAAUzpG,EAAQ0pG,GACpC,IAAKC,EACJ,IACCA,EAAU3pG,EAAO/qP,KAAKI,KAAWq0V,CACd,CAAlB,MAAOhsV,GAAW,CAErB,IACMisV,CACP,CASOC,CAAev0V,EACtB,qBC3DDwkK,EAAOx3B,QAAe1oC,EACtBA,EAAa67H,OAASq0H,EACtBlwP,EAAa0iD,MAASytM,EAEtB,IAAI9oV,EAAWpJ,OAAOgJ,UAAUI,SAC5B80O,EAAQ,CACR,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAG7B,SAASn8I,EAAatlG,GACpB,OACKw1V,EAAmBx1V,IACnBy1V,EAAkBz1V,EAExB,CAED,SAASw1V,EAAmBx1V,GAC1B,OACKA,aAAe+T,WACf/T,aAAe8T,YACf9T,aAAeuc,YACfvc,aAAe6T,YACf7T,aAAesc,mBACftc,aAAe4T,aACf5T,aAAewc,aACfxc,aAAe2T,cACf3T,aAAeyc,YAErB,CAED,SAASg5U,EAAkBz1V,GACzB,OAAOyhP,EAAM90O,EAAS/L,KAAKZ,GAC5B,qBCxCDwlK,EAAOx3B,QAAU9tI,MAAMC,SAAW,SAAUH,GAC1C,MAA8C,kBAAvCuD,OAAOgJ,UAAUI,SAAS/L,KAAKZ,EACvC,6CCAD,IAAI6gK,EAAK,KAEgB,qBAAd+6H,UACT/6H,EAAK+6H,UAC4B,qBAAjB85D,aAChB70L,EAAK60L,aACsB,qBAAXlmP,EAAAA,EAChBqxD,EAAKrxD,EAAAA,EAAOosL,WAAapsL,EAAAA,EAAOkmP,aACL,qBAAXxwV,OAChB27J,EAAK37J,OAAO02R,WAAa12R,OAAOwwV,aACP,qBAATlqV,OAChBq1J,EAAKr1J,KAAKowR,WAAapwR,KAAKkqV,cAG9B,mCChBA,IAAIpkP,EAASmqE,EAAQ,OAGrB,SAASo9D,EAAUx1O,GACjB,OAAOA,aAAeiuG,EAAOyrH,MAC9B,CAGD,SAAS44H,EAAYtyV,GACnB,OAAOw1O,EAASx1O,IAA4B,mBAAbA,EAAIo6Q,OAAoD,iBAAtBp6Q,EAAIg4Q,cACtE,CAGD,SAASu6E,EAAYvyV,GACnB,OAAOw1O,EAASx1O,IAA6B,mBAAdA,EAAIomM,QAAqD,iBAAtBpmM,EAAI43Q,cACvE,CAQDz1G,EAAOx3B,QAAqB6qG,EAC5BrzE,EAAOx3B,QAAQ2nN,WAAaA,EAC5BnwL,EAAOx3B,QAAQ4nN,WAAaA,EAC5BpwL,EAAOx3B,QAAQwuI,SARf,SAAmBn5Q,GACjB,OAAOsyV,EAAWtyV,IAAQuyV,EAAWvyV,EACtC,6BCpBD,aASA,WACE,aAEA,IAAIwyV,EAAc,wBAEdC,EAA2B,kBAAX5wV,OAChBg2G,EAAO46O,EAAS5wV,OAAS,CAAC,EAC1Bg2G,EAAK66O,oBACPD,GAAS,GAEX,IAAIE,GAAcF,GAA0B,kBAATtqV,MACpB0vG,EAAKsuM,oBAAyC,kBAAZ13K,GAAwBA,EAAQ88H,UAAY98H,EAAQ88H,SAASv1J,KAE5G6B,EAAO1L,EAAAA,EACEwmP,IACT96O,EAAO1vG,MAET,IAAIi+S,GAAavuM,EAAKwuM,sBAAsDlkJ,EAAOx3B,QAC/EioN,EAAsCz0I,EAAAA,KACtC00I,GAAgBh7O,EAAKi7O,yBAAkD,qBAAhB1wP,YACvDkkN,EAAY,mBAAmB3lP,MAAM,IAErCoyR,EAAiB,CAAC,EAAG,KAAM,OAAQ,UAGnCxsC,EAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,EAAK,CAAC,EAAG,EAAG,MAAO,EAAG,MAAO,WAAY,WAAY,WAAY,MAAO,EAAG,WAC7E,EAAG,WAAY,WAAY,MAAO,WAAY,IAAK,EAAG,IAAK,EAAG,WAAY,EAC1E,WAAY,EAAG,WAAY,EAAG,IAAK,WAAY,MAAO,WAAY,MAClE,WAAY,MAAO,WAAY,IAAK,WAAY,MAAO,EAAG,WAAY,WACtE,WAAY,WAAY,MAAO,WAAY,WAAY,EAAG,WAAY,YACpEC,EAAO,CAAC,IAAK,IAAK,IAAK,KACvBusC,EAAa,CAAC,IAAK,KACnBtsC,EAAe,CAAC,MAAO,SAAU,cAAe,QAAS,UACzDusC,EAAiB,CACnB,IAAO,IACP,IAAO,MAGLp7O,EAAKsuM,oBAAuBtpT,MAAMC,UACpCD,MAAMC,QAAU,SAAUkD,GACxB,MAA+C,mBAAxCE,OAAOgJ,UAAUI,SAAS/L,KAAKyC,EACvC,IAGC6yV,IAAiBh7O,EAAKq7O,iCAAoC9wP,YAAYC,SACxED,YAAYC,OAAS,SAAUriG,GAC7B,MAAsB,kBAARA,GAAoBA,EAAIs3C,QAAUt3C,EAAIs3C,OAAO1tC,cAAgBw4F,WAC5E,GA+FH,IA5FA,IAAIukN,EAAqB,SAAUzuN,EAAM2/E,EAAS+uI,GAChD,OAAO,SAAUvwN,GACf,OAAO,IAAIwwN,EAAO3uN,EAAM2/E,EAAS3/E,GAAMp0E,OAAOuyE,GAASuwN,IACxD,CACF,EAEGE,EAA0B,SAAU5uN,EAAM2/E,EAAS+uI,GACrD,OAAO,SAAUvwN,EAAS0wN,GACxB,OAAO,IAAIF,EAAO3uN,EAAM2/E,EAASkvI,GAAYjjS,OAAOuyE,GAASuwN,IAC9D,CACF,EAEGusC,EAA2B,SAAUj7P,EAAM2/E,EAAS+uI,GACtD,OAAO,SAAUvwN,EAAS0wN,EAAYr3S,EAAG2C,GACvC,OAAOotM,EAAQ,SAAWvnH,GAAMp0E,OAAOuyE,EAAS0wN,EAAYr3S,EAAG2C,GAAGu0S,IACnE,CACF,EAEGwsC,EAAyB,SAAUl7P,EAAM2/E,EAAS+uI,GACpD,OAAO,SAAU3mT,EAAKo2F,EAAS0wN,EAAY10S,GACzC,OAAOotM,EAAQ,OAASvnH,GAAMp0E,OAAO7jB,EAAKo2F,EAAS0wN,EAAY10S,GAAGu0S,IACnE,CACF,EAEGysC,EAAsB,SAAUr7P,EAAQgvN,EAAc9uN,EAAM2/E,GAC9D,IAAK,IAAIj7K,EAAI,EAAGA,EAAI8pT,EAAa9oT,SAAUhB,EAAG,CAC5C,IAAIyJ,EAAOqgT,EAAa9pT,GACxBo7F,EAAO3xF,GAAQ2gT,EAAa9uN,EAAM2/E,EAASxxK,EAC5C,CACD,OAAO2xF,CACR,EAEGgvN,EAAe,SAAU9uN,EAAM2/E,GACjC,IAAI7/E,EAAS2uN,EAAmBzuN,EAAM2/E,EAAS,OAO/C,OANA7/E,EAAOnuF,OAAS,WACd,OAAO,IAAIg9S,EAAO3uN,EAAM2/E,EAAS3/E,EAClC,EACDF,EAAOl0E,OAAS,SAAUuyE,GACxB,OAAO2B,EAAOnuF,SAASia,OAAOuyE,EAC/B,EACMg9P,EAAoBr7P,EAAQ2uN,EAAoBzuN,EAAM2/E,EAC9D,EAyCGq9F,EAAa,CACf,CAAE57P,KAAM,SAAUu+J,QA/GC,CAAC,EAAG,IAAK,MAAO,UA+GQ3/E,KAAMuuN,EAAMO,aAAcA,GACrE,CAAE1tS,KAAM,OAAQu+J,QA/GJ,CAAC,EAAG,KAAM,OAAQ,WA+GI3/E,KAAMuuN,EAAMO,aAAcA,GAC5D,CAAE1tS,KAAM,QAASu+J,QAnHC,CAAC,GAAI,KAAM,QAAS,WAmHG3/E,KAAM86P,EAAYhsC,aA1CrC,SAAU9uN,EAAM2/E,GACtC,IAAI7/E,EAAS8uN,EAAwB5uN,EAAM2/E,EAAS,OAOpD,OANA7/E,EAAOnuF,OAAS,SAAUk9S,GACxB,OAAO,IAAIF,EAAO3uN,EAAM2/E,EAASkvI,EAClC,EACD/uN,EAAOl0E,OAAS,SAAUuyE,EAAS0wN,GACjC,OAAO/uN,EAAOnuF,OAAOk9S,GAAYjjS,OAAOuyE,EACzC,EACMg9P,EAAoBr7P,EAAQ8uN,EAAyB5uN,EAAM2/E,EACnE,GAkCC,CAAEv+J,KAAM,SAAUu+J,QAASk7K,EAAgB76P,KAAM86P,EAAYhsC,aAhCtC,SAAU9uN,EAAM2/E,GACvC,IAAIh3J,EAAIoyU,EAAe/6P,GACnBF,EAASm7P,EAAyBj7P,EAAM2/E,EAAS,OAWrD,OAVA7/E,EAAOnuF,OAAS,SAAUk9S,EAAYr3S,EAAG2C,GACvC,OAAK3C,GAAM2C,EAGF,IAAIw0S,EAAO3uN,EAAM2/E,EAASkvI,GAAYusC,QAAQ,CAAC5jV,EAAG2C,GAAIwO,GAFtD4+L,EAAQ,QAAUvnH,GAAMruF,OAAOk9S,EAIzC,EACD/uN,EAAOl0E,OAAS,SAAUuyE,EAAS0wN,EAAYr3S,EAAG2C,GAChD,OAAO2lF,EAAOnuF,OAAOk9S,EAAYr3S,EAAG2C,GAAGyR,OAAOuyE,EAC/C,EACMg9P,EAAoBr7P,EAAQm7P,EAA0Bj7P,EAAM2/E,EACpE,GAmBC,CAAEv+J,KAAM,OAAQu+J,QAASk7K,EAAgB76P,KAAM86P,EAAYhsC,aAjBtC,SAAU9uN,EAAM2/E,GACrC,IAAIh3J,EAAIoyU,EAAe/6P,GACnBF,EAASo7P,EAAuBl7P,EAAM2/E,EAAS,OAOnD,OANA7/E,EAAOnuF,OAAS,SAAU5J,EAAK8mT,EAAY10S,GACzC,OAAO,IAAIkhV,EAAKr7P,EAAM2/E,EAASkvI,GAAYusC,QAAQ,CAAC,OAAQjhV,GAAIwO,GAAGyyU,QAAQ,CAACrzV,GAAM4gB,EACnF,EACDm3E,EAAOl0E,OAAS,SAAU7jB,EAAKo2F,EAAS0wN,EAAY10S,GAClD,OAAO2lF,EAAOnuF,OAAO5J,EAAK8mT,EAAY10S,GAAGyR,OAAOuyE,EACjD,EACMg9P,EAAoBr7P,EAAQo7P,EAAwBl7P,EAAM2/E,EAClE,IAUG4nC,EAAU,CAAC,EAAGwnG,EAAc,GAEvBrqT,EAAI,EAAGA,EAAIs4Q,EAAWt3Q,SAAUhB,EAGvC,IAFA,IAAIw4Q,EAAYF,EAAWt4Q,GACvBs7F,EAAOk9K,EAAUl9K,KACZxqE,EAAI,EAAGA,EAAIwqE,EAAKt6F,SAAU8vB,EAAG,CACpC,IAAIk+B,EAAawpN,EAAU97P,KAAO,IAAM4+E,EAAKxqE,GAG7C,GAFAu5R,EAAYvpT,KAAKkuD,GACjB6zJ,EAAQ7zJ,GAAcwpN,EAAU4xC,aAAa9uN,EAAKxqE,GAAI0nP,EAAUv9F,SACzC,SAAnBu9F,EAAU97P,KAAiB,CAC7B,IAAIk6U,EAAgBp+E,EAAU97P,KAAO4+E,EAAKxqE,GAC1Cu5R,EAAYvpT,KAAK81V,GACjB/zI,EAAQ+zI,GAAiB/zI,EAAQ7zJ,EAClC,CACF,CAGH,SAASi7P,EAAO3uN,EAAM2/E,EAASkvI,GAC7B/nT,KAAK67O,OAAS,GACd77O,KAAKqT,EAAI,GACTrT,KAAK64K,QAAUA,EACf74K,KAAK+nT,WAAaA,EAClB/nT,KAAKoqD,OAAQ,EACbpqD,KAAKy0V,WAAY,EACjBz0V,KAAK2tJ,MAAQ,EACb3tJ,KAAKmoC,MAAQ,EACbnoC,KAAKkoT,WAAc,MAAQhvN,GAAQ,IAAO,EAC1Cl5F,KAAKmoT,UAAYnoT,KAAKkoT,YAAc,EACpCloT,KAAKooT,aAAeL,GAAc,EAClC/nT,KAAK06O,YAA2B,GAAbqtE,IAAoB,EAEvC,IAAK,IAAInqT,EAAI,EAAGA,EAAI,KAAMA,EACxBoC,KAAKqT,EAAEzV,GAAK,CAEf,CAuQD,SAAS22V,EAAKr7P,EAAM2/E,EAASkvI,GAC3BF,EAAOtpT,KAAKyB,KAAMk5F,EAAM2/E,EAASkvI,EAClC,CAvQDF,EAAO39S,UAAU4a,OAAS,SAAUuyE,GAClC,GAAIr3F,KAAKy0V,UACP,MAAM,IAAI9iV,MA/KO,2BAiLnB,IAAI02S,EAAWhhT,SAAcgwF,EAC7B,GAAa,WAAThwF,EAAmB,CACrB,GAAa,WAATA,EAWF,MAAM,IAAIsK,MAAM6hV,GAVhB,GAAgB,OAAZn8P,EACF,MAAM,IAAI1lF,MAAM6hV,GACX,GAAIK,GAAgBx8P,EAAQzsF,cAAgBw4F,YACjD/L,EAAU,IAAI7lF,WAAW6lF,QACpB,IAAKx5F,MAAMC,QAAQu5F,MACnBw8P,IAAiBzwP,YAAYC,OAAOhM,IACvC,MAAM,IAAI1lF,MAAM6hV,GAMtBnrC,GAAY,CACb,CAID,IAHA,IACuDzqT,EAAGosE,EADtD6xK,EAAS77O,KAAK67O,OAAQssE,EAAYnoT,KAAKmoT,UAAWvpT,EAASy4F,EAAQz4F,OACrEspT,EAAaloT,KAAKkoT,WAAY34S,EAAQ,EAAG8D,EAAIrT,KAAKqT,EAE7C9D,EAAQ3Q,GAAQ,CACrB,GAAIoB,KAAKoqD,MAGP,IAFApqD,KAAKoqD,OAAQ,EACbyxL,EAAO,GAAK77O,KAAK2tJ,MACZ/vJ,EAAI,EAAGA,EAAIsqT,EAAa,IAAKtqT,EAChCi+O,EAAOj+O,GAAK,EAGhB,GAAIyqT,EACF,IAAKzqT,EAAIoC,KAAKmoC,MAAO54B,EAAQ3Q,GAAUhB,EAAIuqT,IAAa54S,EACtDssO,EAAOj+O,GAAK,IAAMy5F,EAAQ9nF,IAAUg4S,EAAY,EAAN3pT,UAG5C,IAAKA,EAAIoC,KAAKmoC,MAAO54B,EAAQ3Q,GAAUhB,EAAIuqT,IAAa54S,GACtDy6D,EAAOqtB,EAAQw4D,WAAWtgJ,IACf,IACTssO,EAAOj+O,GAAK,IAAMosE,GAAQu9O,EAAY,EAAN3pT,KACvBosE,EAAO,MAChB6xK,EAAOj+O,GAAK,KAAO,IAAQosE,GAAQ,IAAOu9O,EAAY,EAAN3pT,KAChDi+O,EAAOj+O,GAAK,KAAO,IAAe,GAAPosE,IAAiBu9O,EAAY,EAAN3pT,MACzCosE,EAAO,OAAUA,GAAQ,OAClC6xK,EAAOj+O,GAAK,KAAO,IAAQosE,GAAQ,KAAQu9O,EAAY,EAAN3pT,KACjDi+O,EAAOj+O,GAAK,KAAO,IAASosE,GAAQ,EAAK,KAAUu9O,EAAY,EAAN3pT,KACzDi+O,EAAOj+O,GAAK,KAAO,IAAe,GAAPosE,IAAiBu9O,EAAY,EAAN3pT,OAElDosE,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BqtB,EAAQw4D,aAAatgJ,IACjEssO,EAAOj+O,GAAK,KAAO,IAAQosE,GAAQ,KAAQu9O,EAAY,EAAN3pT,KACjDi+O,EAAOj+O,GAAK,KAAO,IAASosE,GAAQ,GAAM,KAAUu9O,EAAY,EAAN3pT,KAC1Di+O,EAAOj+O,GAAK,KAAO,IAASosE,GAAQ,EAAK,KAAUu9O,EAAY,EAAN3pT,KACzDi+O,EAAOj+O,GAAK,KAAO,IAAe,GAAPosE,IAAiBu9O,EAAY,EAAN3pT,MAKxD,GADAoC,KAAKsoT,cAAgB1qT,EACjBA,GAAKuqT,EAAW,CAGlB,IAFAnoT,KAAKmoC,MAAQvqC,EAAIuqT,EACjBnoT,KAAK2tJ,MAAQkuF,EAAOqsE,GACftqT,EAAI,EAAGA,EAAIsqT,IAActqT,EAC5ByV,EAAEzV,IAAMi+O,EAAOj+O,GAEjB4a,EAAEnF,GACFrT,KAAKoqD,OAAQ,CACd,MACCpqD,KAAKmoC,MAAQvqC,CAEhB,CACD,OAAOoC,IACR,EAED6nT,EAAO39S,UAAUowI,OAAS,SAAUt3I,EAAGuD,GACrC,IAAIikG,EAAQ,IAAJxnG,EAAS0N,EAAI,EACjB01I,EAAQ,CAAC57C,GAGb,IADAA,EAAQ,KADRxnG,IAAS,GAEFwnG,EAAI,GACT47C,EAAM/9F,QAAQmiD,GAEdA,EAAQ,KADRxnG,IAAS,KAEP0N,EAQJ,OANInK,EACF6/I,EAAM1nJ,KAAKgS,GAEX01I,EAAM/9F,QAAQ33C,GAEhB1Q,KAAK8kB,OAAOshI,GACLA,EAAMxnJ,MACd,EAEDipT,EAAO39S,UAAUwqV,aAAe,SAAU9iL,GACxC,IAAIy2I,EAAWhhT,SAAcuqK,EAC7B,GAAa,WAATvqK,EAAmB,CACrB,GAAa,WAATA,EAWF,MAAM,IAAIsK,MAAM6hV,GAVhB,GAAY,OAAR5hL,EACF,MAAM,IAAIjgK,MAAM6hV,GACX,GAAIK,GAAgBjiL,EAAIhnK,cAAgBw4F,YAC7CwuE,EAAM,IAAIpgK,WAAWogK,QAChB,IAAK/zK,MAAMC,QAAQ8zK,MACnBiiL,IAAiBzwP,YAAYC,OAAOuuE,IACvC,MAAM,IAAIjgK,MAAM6hV,GAMtBnrC,GAAY,CACb,CACD,IAAIjiK,EAAQ,EAAGxnJ,EAASgzK,EAAIhzK,OAC5B,GAAIypT,EACFjiK,EAAQxnJ,OAER,IAAK,IAAIhB,EAAI,EAAGA,EAAIg0K,EAAIhzK,SAAUhB,EAAG,CACnC,IAAIosE,EAAO4nG,EAAI/hB,WAAWjyJ,GACtBosE,EAAO,IACTo8E,GAAS,EACAp8E,EAAO,KAChBo8E,GAAS,EACAp8E,EAAO,OAAUA,GAAQ,MAClCo8E,GAAS,GAETp8E,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtB4nG,EAAI/hB,aAAajyJ,IAC7DwoJ,GAAS,EAEZ,CAIH,OAFAA,GAASpmJ,KAAKs6I,OAAe,EAAR8L,GACrBpmJ,KAAK8kB,OAAO8sJ,GACLxrB,CACR,EAEDyhK,EAAO39S,UAAUoqV,QAAU,SAAUK,EAAM9yU,GAEzC,IADA,IAAIukI,EAAQpmJ,KAAKs6I,OAAOz4H,GACfjkB,EAAI,EAAGA,EAAI+2V,EAAK/1V,SAAUhB,EACjCwoJ,GAASpmJ,KAAK00V,aAAaC,EAAK/2V,IAElC,IAAIg3V,EAAe/yU,EAAIukI,EAAQvkI,EAC3BwmM,EAAQ,GAGZ,OAFAA,EAAMzpN,OAASg2V,EACf50V,KAAK8kB,OAAOujM,GACLroN,IACR,EAED6nT,EAAO39S,UAAUq+S,SAAW,WAC1B,IAAIvoT,KAAKy0V,UAAT,CAGAz0V,KAAKy0V,WAAY,EACjB,IAAI54G,EAAS77O,KAAK67O,OAAQj+O,EAAIoC,KAAKsoT,cAAeJ,EAAaloT,KAAKkoT,WAAY70S,EAAIrT,KAAKqT,EAEzF,GADAwoO,EAAOj+O,GAAK,IAAMoC,KAAK64K,QAAY,EAAJj7K,GAC3BoC,KAAKsoT,gBAAkBtoT,KAAKmoT,UAE9B,IADAtsE,EAAO,GAAKA,EAAOqsE,GACdtqT,EAAI,EAAGA,EAAIsqT,EAAa,IAAKtqT,EAChCi+O,EAAOj+O,GAAK,EAIhB,IADAi+O,EAAOqsE,EAAa,IAAM,WACrBtqT,EAAI,EAAGA,EAAIsqT,IAActqT,EAC5ByV,EAAEzV,IAAMi+O,EAAOj+O,GAEjB4a,EAAEnF,EAdD,CAeF,EAEDw0S,EAAO39S,UAAUI,SAAWu9S,EAAO39S,UAAU8R,IAAM,WACjDhc,KAAKuoT,WAKL,IAHA,IAEc56J,EAFVu6J,EAAaloT,KAAKkoT,WAAY70S,EAAIrT,KAAKqT,EAAG+0S,EAAepoT,KAAKooT,aAChE1tE,EAAa16O,KAAK06O,WAAY98O,EAAI,EAAG8wB,EAAI,EACvC1S,EAAM,GACH0S,EAAI05R,GAAc,CACvB,IAAKxqT,EAAI,EAAGA,EAAIsqT,GAAcx5R,EAAI05R,IAAgBxqT,IAAK8wB,EACrDi/H,EAAQt6I,EAAEzV,GACVoe,GAAOsrS,EAAW35J,GAAS,EAAK,IAAQ25J,EAAkB,GAAR35J,GAChD25J,EAAW35J,GAAS,GAAM,IAAQ25J,EAAW35J,GAAS,EAAK,IAC3D25J,EAAW35J,GAAS,GAAM,IAAQ25J,EAAW35J,GAAS,GAAM,IAC5D25J,EAAW35J,GAAS,GAAM,IAAQ25J,EAAW35J,GAAS,GAAM,IAE5Dj/H,EAAIw5R,IAAe,IACrB1vS,EAAEnF,GACFzV,EAAI,EAEP,CAWD,OAVI88O,IACF/sF,EAAQt6I,EAAEzV,GACVoe,GAAOsrS,EAAW35J,GAAS,EAAK,IAAQ25J,EAAkB,GAAR35J,GAC9C+sF,EAAa,IACf1+N,GAAOsrS,EAAW35J,GAAS,GAAM,IAAQ25J,EAAW35J,GAAS,EAAK,KAEhE+sF,EAAa,IACf1+N,GAAOsrS,EAAW35J,GAAS,GAAM,IAAQ25J,EAAW35J,GAAS,GAAM,MAGhE3xI,CACR,EAED6rS,EAAO39S,UAAUwlG,YAAc,WAC7B1vG,KAAKuoT,WAEL,IAGIjwQ,EAHA4vQ,EAAaloT,KAAKkoT,WAAY70S,EAAIrT,KAAKqT,EAAG+0S,EAAepoT,KAAKooT,aAChE1tE,EAAa16O,KAAK06O,WAAY98O,EAAI,EAAG8wB,EAAI,EACvC03H,EAAQpmJ,KAAK+nT,YAAc,EAG7BzvQ,EADEoiM,EACO,IAAIt3I,YAAaglN,EAAe,GAAM,GAEtC,IAAIhlN,YAAYgjD,GAG3B,IADA,IAAI12I,EAAQ,IAAIyK,YAAYm+B,GACrB5pB,EAAI05R,GAAc,CACvB,IAAKxqT,EAAI,EAAGA,EAAIsqT,GAAcx5R,EAAI05R,IAAgBxqT,IAAK8wB,EACrDhf,EAAMgf,GAAKrb,EAAEzV,GAEX8wB,EAAIw5R,IAAe,GACrB1vS,EAAEnF,EAEL,CAKD,OAJIqnO,IACFhrO,EAAM9R,GAAKyV,EAAEzV,GACb06C,EAASA,EAAO3oC,MAAM,EAAGy2I,IAEpB9tG,CACR,EAEDuvQ,EAAO39S,UAAUouC,OAASuvQ,EAAO39S,UAAUwlG,YAE3Cm4M,EAAO39S,UAAUyhK,OAASk8I,EAAO39S,UAAUwF,MAAQ,WACjD1P,KAAKuoT,WAKL,IAHA,IAEgB5oT,EAAQguJ,EAFpBu6J,EAAaloT,KAAKkoT,WAAY70S,EAAIrT,KAAKqT,EAAG+0S,EAAepoT,KAAKooT,aAChE1tE,EAAa16O,KAAK06O,WAAY98O,EAAI,EAAG8wB,EAAI,EACvChf,EAAQ,GACLgf,EAAI05R,GAAc,CACvB,IAAKxqT,EAAI,EAAGA,EAAIsqT,GAAcx5R,EAAI05R,IAAgBxqT,IAAK8wB,EACrD/uB,EAAS+uB,GAAK,EACdi/H,EAAQt6I,EAAEzV,GACV8R,EAAM/P,GAAkB,IAARguJ,EAChBj+I,EAAM/P,EAAS,GAAMguJ,GAAS,EAAK,IACnCj+I,EAAM/P,EAAS,GAAMguJ,GAAS,GAAM,IACpCj+I,EAAM/P,EAAS,GAAMguJ,GAAS,GAAM,IAElCj/H,EAAIw5R,IAAe,GACrB1vS,EAAEnF,EAEL,CAYD,OAXIqnO,IACF/6O,EAAS+uB,GAAK,EACdi/H,EAAQt6I,EAAEzV,GACV8R,EAAM/P,GAAkB,IAARguJ,EACZ+sF,EAAa,IACfhrO,EAAM/P,EAAS,GAAMguJ,GAAS,EAAK,KAEjC+sF,EAAa,IACfhrO,EAAM/P,EAAS,GAAMguJ,GAAS,GAAM,MAGjCj+I,CACR,EAMD6kV,EAAKrqV,UAAY,IAAI29S,EAErB0sC,EAAKrqV,UAAUq+S,SAAW,WAExB,OADAvoT,KAAKs6I,OAAOt6I,KAAK+nT,YAAY,GACtBF,EAAO39S,UAAUq+S,SAAShqT,KAAKyB,KACvC,EAED,IAAIwY,EAAI,SAAUnF,GAChB,IAAIqF,EAAG9I,EAAGc,EAAG83S,EAAIxjS,EAAI/Q,EAAIgR,EAAIwjS,EAAIC,EAAIC,EAAIC,EAAIjgJ,EAAIkgJ,EAC/C33R,EAAI9e,EAAIC,EAAIs6M,EAAIG,EAAIG,EAAIG,EAAIG,EAAIG,EAAIG,EAAIi7F,EAAKhxS,EAAKC,EAAKC,EAAKgd,EAAK+zR,EAAKC,EAAKC,EAC3EC,EAAKC,EAAKC,EAAKnxS,EAAKC,EAAKC,EAAK8c,EAAKo0R,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKtxS,EAAKC,EAAKC,EAC3E4c,EAAKy0R,EAAKC,EAAKC,EAAKC,EAAKC,GAAKC,GAAK70R,GAAKC,GAAKC,GAAKC,GAAK20R,GAAKC,GAAKC,GAAKC,GAAKC,GAC7E,IAAK35S,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB83S,EAAKn1S,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC2R,EAAK3R,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCY,EAAKZ,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC4R,EAAK5R,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCo1S,EAAKp1S,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCq1S,EAAKr1S,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCs1S,EAAKt1S,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCu1S,EAAKv1S,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAItCqF,GAHAiwJ,EAAKt1J,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3BY,GAAM,EAAMgR,IAAO,IAC9BrV,GAHAi5S,EAAKx1S,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3B4R,GAAM,EAAMhR,IAAO,IAC9BZ,EAAE,IAAMqF,EACRrF,EAAE,IAAMzD,EACRyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACT8I,EAAI8vS,GAAOC,GAAM,EAAMC,IAAO,IAC9B94S,EAAIoV,GAAO0jS,GAAM,EAAMD,IAAO,IAC9Bp1S,EAAE,IAAMqF,EACRrF,EAAE,IAAMzD,EACRyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACT8I,EAAIzE,GAAO00S,GAAM,EAAMC,IAAO,IAC9Bh5S,EAAIqV,GAAO2jS,GAAM,EAAMD,IAAO,IAC9Bt1S,EAAE,IAAMqF,EACRrF,EAAE,IAAMzD,EACRyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACT8I,EAAI+vS,GAAO9/I,GAAM,EAAMkgJ,IAAO,IAC9Bj5S,EAAI84S,GAAOG,GAAM,EAAMlgJ,IAAO,IAC9Bt1J,EAAE,IAAMqF,EACRrF,EAAE,IAAMzD,EACRyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACT8I,EAAIiwS,GAAOH,GAAM,EAAMxjS,IAAO,IAC9BpV,EAAIg5S,GAAO5jS,GAAM,EAAMwjS,IAAO,IAC9Bn1S,EAAE,IAAMqF,EACRrF,EAAE,IAAMzD,EACRyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EACTyD,EAAE,KAAOqF,EACTrF,EAAE,KAAOzD,EAETshB,EAAK7d,EAAE,GACPjB,EAAKiB,EAAE,GACPgF,EAAOhF,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCiF,EAAOjF,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC2hB,EAAO3hB,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC01S,EAAO11S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC62S,GAAO72S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC82S,GAAO92S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCm2S,EAAOn2S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCo2S,EAAOp2S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC+1S,EAAO/1S,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9B4E,EAAO5E,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9BhB,EAAMgB,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCs5M,EAAMt5M,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC6hB,EAAO7hB,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCs2S,EAAOt2S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC21S,EAAO31S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC41S,EAAO51S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC+2S,GAAO/2S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCg3S,GAAOh3S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC22S,GAAO32S,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B8hB,GAAO9hB,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B6E,EAAO7E,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC8E,EAAO9E,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCy5M,EAAMz5M,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC45M,EAAM55M,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCu2S,EAAOv2S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCw2S,EAAOx2S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC61S,EAAO71S,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC81S,EAAO91S,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCy1S,EAAOz1S,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/ByE,EAAOzE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B+hB,GAAO/hB,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCgiB,GAAOhiB,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC4hB,EAAO5hB,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCg2S,EAAOh2S,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC+5M,EAAM/5M,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCk6M,EAAMl6M,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCy2S,EAAOz2S,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC02S,GAAO12S,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCq2S,EAAOr2S,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B+E,EAAO/E,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B0E,EAAO1E,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC2E,EAAO3E,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCiiB,GAAOjiB,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC42S,GAAO52S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCi2S,EAAOj2S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCk2S,EAAOl2S,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCq6M,EAAMr6M,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCw6M,EAAMx6M,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAEhCA,EAAE,GAAK6d,GAAO7e,EAAKy6M,EACnBz5M,EAAE,GAAKjB,GAAOu6M,EAAKM,EACnB55M,EAAE,IAAMy1S,GAAQ/wS,EAAMid,EACtB3hB,EAAE,IAAMyE,GAAQE,EAAM+wS,EACtB11S,EAAE,IAAM+1S,GAAQlxS,EAAM+c,EACtB5hB,EAAE,IAAM4E,GAAQE,EAAMkxS,EACtBh2S,EAAE,IAAMq2S,GAAQrxS,EAAM6c,EACtB7hB,EAAE,IAAM+E,GAAQE,EAAMqxS,EACtBt2S,EAAE,IAAM22S,IAAQ50R,GAAME,GACtBjiB,EAAE,IAAM8hB,IAAQE,GAAM40R,GACtB52S,EAAE,GAAKhB,GAAOy6M,EAAKM,EACnB/5M,EAAE,GAAKs5M,GAAOM,EAAKM,EACnBl6M,EAAE,IAAM0E,GAAQid,EAAMg0R,EACtB31S,EAAE,IAAM2E,GAAQ+wS,EAAME,EACtB51S,EAAE,IAAM6E,GAAQ+c,EAAMq0R,EACtBj2S,EAAE,IAAM8E,GAAQkxS,EAAME,EACtBl2S,EAAE,IAAMgF,GAAQ6c,EAAM00R,EACtBv2S,EAAE,IAAMiF,GAAQqxS,EAAME,EACtBx2S,EAAE,IAAM+hB,IAAQE,GAAM40R,GACtB72S,EAAE,IAAMgiB,IAAQ40R,GAAME,GACtB92S,EAAE,GAAKy5M,GAAOM,EAAKM,EACnBr6M,EAAE,GAAK45M,GAAOM,EAAKM,EACnBx6M,EAAE,IAAM2hB,GAAQg0R,EAAME,EACtB71S,EAAE,IAAM01S,GAAQE,EAAME,EACtB91S,EAAE,IAAM4hB,GAAQq0R,EAAME,EACtBn2S,EAAE,IAAMg2S,GAAQE,EAAME,EACtBp2S,EAAE,IAAM6hB,GAAQ00R,EAAME,EACtBz2S,EAAE,IAAMs2S,GAAQE,EAAME,GACtB12S,EAAE,IAAMiiB,IAAQ40R,GAAME,GACtB/2S,EAAE,IAAM42S,IAAQE,GAAME,GACtBh3S,EAAE,GAAK+5M,GAAOM,EAAKx8L,EACnB7d,EAAE,GAAKk6M,GAAOM,EAAKz7M,EACnBiB,EAAE,IAAM21S,GAAQE,EAAMJ,EACtBz1S,EAAE,IAAM41S,GAAQE,EAAMrxS,EACtBzE,EAAE,IAAMi2S,GAAQE,EAAMJ,EACtB/1S,EAAE,IAAMk2S,GAAQE,EAAMxxS,EACtB5E,EAAE,IAAMu2S,GAAQE,EAAMJ,EACtBr2S,EAAE,IAAMw2S,GAAQE,GAAM3xS,EACtB/E,EAAE,IAAM62S,IAAQE,GAAMJ,GACtB32S,EAAE,IAAM82S,IAAQE,GAAMl1R,GACtB9hB,EAAE,GAAKq6M,GAAOx8L,EAAK7e,EACnBgB,EAAE,GAAKw6M,GAAOz7M,EAAKu6M,EACnBt5M,EAAE,IAAM61S,GAAQJ,EAAM/wS,EACtB1E,EAAE,IAAM81S,GAAQrxS,EAAME,EACtB3E,EAAE,IAAMm2S,GAAQJ,EAAMlxS,EACtB7E,EAAE,IAAMo2S,GAAQxxS,EAAME,EACtB9E,EAAE,IAAMy2S,GAAQJ,EAAMrxS,EACtBhF,EAAE,IAAM02S,IAAQ3xS,EAAME,EACtBjF,EAAE,IAAM+2S,IAAQJ,GAAM50R,GACtB/hB,EAAE,IAAMg3S,IAAQl1R,GAAME,GAEtBhiB,EAAE,IAAMm0S,EAAG92S,GACX2C,EAAE,IAAMm0S,EAAG92S,EAAI,EAElB,EAED,GAAI02S,EACFjkJ,EAAOx3B,QAAU80E,MACZ,CACL,IAAK7iN,EAAI,EAAGA,EAAIqqT,EAAYrpT,SAAUhB,EACpCi7G,EAAKovM,EAAYrqT,IAAM6iN,EAAQwnG,EAAYrqT,IAEzCg2V,SACI,KAANz0I,EAAAA,WACE,OAAOsB,CADH,gCAIT,CAroBH,0BCTA,WASI,IAAIo0I,EAOJ,SAASt+C,EAAWzsS,EAAE8J,EAAEC,GACd,MAAL/J,IACE,iBAAmBA,EAAG9J,KAAK80V,WAAWhrV,EAAE8J,EAAEC,GAChC,MAALD,GAAa,iBAAmB9J,EAAG9J,KAAK2nJ,WAAW79I,EAAE,KACxD9J,KAAK2nJ,WAAW79I,EAAE8J,GAC1B,CAGD,SAASmhV,IAAQ,OAAO,IAAIx+C,EAAW,KAAQ,CA+C/C,IAAIy+C,EAAiC,qBAAd/3Q,UACpB+3Q,GAA2C,+BAArB/3Q,UAAUg4Q,SACjC1+C,EAAWrsS,UAAUgrV,GA5BvB,SAAat3V,EAAEoF,EAAE6e,EAAE6M,EAAE7a,EAAEnD,GAErB,IADA,IAAIo5U,EAAO,MAAF9mV,EAAU6mV,EAAK7mV,GAAG,KACnB0N,GAAK,GAAG,CACd,IAAId,EAAY,MAAR5P,KAAKpC,GACT8a,EAAI1Y,KAAKpC,MAAM,GACf+S,EAAIk5U,EAAGj6U,EAAE8I,EAAEoxU,EAEfj2U,IADAjE,EAAIk6U,EAAGl6U,IAAM,MAAFe,IAAW,IAAIkR,EAAE6M,IAAM,WAAF7a,MACvB,KAAKlD,IAAI,IAAIk5U,EAAGnxU,GAAG7E,IAAI,IAChCgO,EAAE6M,KAAS,WAAF9e,CACV,CACD,OAAOiE,CACR,EAkBCghV,EAAQ,IAEFG,GAA2C,YAArB/3Q,UAAUg4Q,SACtC1+C,EAAWrsS,UAAUgrV,GA3CvB,SAAat3V,EAAEoF,EAAE6e,EAAE6M,EAAE7a,EAAEnD,GACrB,OAAQA,GAAK,GAAG,CACd,IAAIoE,EAAI9R,EAAEhD,KAAKpC,KAAKikB,EAAE6M,GAAG7a,EACzBA,EAAI1N,KAAKQ,MAAMmO,EAAE,UACjB+M,EAAE6M,KAAS,SAAF5Z,CACV,CACD,OAAOjB,CACR,EAqCCghV,EAAQ,KAGRt+C,EAAWrsS,UAAUgrV,GAtBvB,SAAat3V,EAAEoF,EAAE6e,EAAE6M,EAAE7a,EAAEnD,GAErB,IADA,IAAIo5U,EAAO,MAAF9mV,EAAU6mV,EAAK7mV,GAAG,KACnB0N,GAAK,GAAG,CACd,IAAId,EAAY,MAAR5P,KAAKpC,GACT8a,EAAI1Y,KAAKpC,MAAM,GACf+S,EAAIk5U,EAAGj6U,EAAE8I,EAAEoxU,EAEfj2U,IADAjE,EAAIk6U,EAAGl6U,IAAM,MAAFe,IAAW,IAAIkR,EAAE6M,GAAG7a,IACvB,KAAKlD,GAAG,IAAIk5U,EAAGnxU,EACvBmJ,EAAE6M,KAAS,UAAF9e,CACV,CACD,OAAOiE,CACR,EAYCghV,EAAQ,IAGVt+C,EAAWrsS,UAAUirV,GAAKN,EAC1Bt+C,EAAWrsS,UAAUkrV,IAAO,GAAGP,GAAO,EACtCt+C,EAAWrsS,UAAUmrV,GAAM,GAAGR,EAG9Bt+C,EAAWrsS,UAAUorV,GAAKnvV,KAAK6K,IAAI,EADvB,IAEZulS,EAAWrsS,UAAUqrV,GAFT,GAEoBV,EAChCt+C,EAAWrsS,UAAUsrV,GAAK,EAAEX,EAHhB,GAMZ,IAEIY,EAAGC,EADHC,EAAQ,IAAI93V,MAGhB,IADA43V,EAAK,IAAI5lM,WAAW,GAChB6lM,EAAK,EAAGA,GAAM,IAAKA,EAAIC,EAAMF,KAAQC,EAEzC,IADAD,EAAK,IAAI5lM,WAAW,GAChB6lM,EAAK,GAAIA,EAAK,KAAMA,EAAIC,EAAMF,KAAQC,EAE1C,IADAD,EAAK,IAAI5lM,WAAW,GAChB6lM,EAAK,GAAIA,EAAK,KAAMA,EAAIC,EAAMF,KAAQC,EAE1C,SAASE,EAASllV,GAAK,MAVX,uCAUwB+L,OAAO/L,EAAK,CAChD,SAASmlV,EAAMxiV,EAAEzV,GACf,IAAIiW,EAAI8hV,EAAMtiV,EAAEw8I,WAAWjyJ,IAC3B,OAAW,MAAHiW,GAAU,EAAEA,CACrB,CAmBD,SAASiiV,EAAIl4V,GAAK,IAAIyb,EAAI07U,IAAqB,OAAd17U,EAAE08U,QAAQn4V,GAAWyb,CAAI,CA+F1D,SAAS28U,EAAMhzV,GACb,IAAW6N,EAAPwI,EAAI,EAMR,OALiB,IAAbxI,EAAE7N,IAAI,MAAYA,EAAI6N,EAAGwI,GAAK,IACnB,IAAXxI,EAAE7N,GAAG,KAAWA,EAAI6N,EAAGwI,GAAK,GACjB,IAAXxI,EAAE7N,GAAG,KAAWA,EAAI6N,EAAGwI,GAAK,GACjB,IAAXxI,EAAE7N,GAAG,KAAWA,EAAI6N,EAAGwI,GAAK,GACjB,IAAXxI,EAAE7N,GAAG,KAAWA,EAAI6N,EAAGwI,GAAK,GACzBA,CACR,CAoLD,SAAS48U,EAAQtlV,GAAK3Q,KAAK2Q,EAAIA,CAAI,CA0CnC,SAASulV,EAAWvlV,GAClB3Q,KAAK2Q,EAAIA,EACT3Q,KAAKm2V,GAAKxlV,EAAEylV,WACZp2V,KAAKq2V,IAAc,MAARr2V,KAAKm2V,GAChBn2V,KAAKs2V,IAAMt2V,KAAKm2V,IAAI,GACpBn2V,KAAKu2V,IAAM,GAAI5lV,EAAEwkV,GAAG,IAAK,EACzBn1V,KAAKw2V,IAAM,EAAE7lV,EAAEE,CAChB,CAmQD,SAAS4lV,EAAOzzV,EAAEC,GAAK,OAAOD,EAAEC,CAAI,CAIpC,SAASyzV,EAAM1zV,EAAEC,GAAK,OAAOD,EAAEC,CAAI,CAInC,SAAS0zV,EAAO3zV,EAAEC,GAAK,OAAOD,EAAEC,CAAI,CAIpC,SAAS2zV,EAAU5zV,EAAEC,GAAK,OAAOD,GAAGC,CAAI,CA2BxC,SAAS4zV,EAAK7zV,GACZ,GAAQ,GAALA,EAAQ,OAAQ,EACnB,IAAIqW,EAAI,EAMR,OALiB,IAAX,MAAFrW,KAAkBA,IAAM,GAAIqW,GAAK,IACtB,IAAT,IAAFrW,KAAgBA,IAAM,EAAGqW,GAAK,GACpB,IAAR,GAAFrW,KAAeA,IAAM,EAAGqW,GAAK,GACrB,IAAN,EAAFrW,KAAaA,IAAM,EAAGqW,GAAK,GACnB,IAAN,EAAFrW,MAAaqW,EACVA,CACR,CAWD,SAASy9U,EAAK9zV,GAEZ,IADA,IAAIqW,EAAI,EACG,GAALrW,GAAUA,GAAKA,EAAE,IAAKqW,EAC5B,OAAOA,CACR,CA8GD,SAAS09U,IAAY,CACrB,SAASC,EAAKh0V,GAAK,OAAOA,CAAI,CAuC9B,SAASs0S,EAAQ3mS,GAEf3Q,KAAK4yN,GAAKmiI,IACV/0V,KAAKi3V,GAAKlC,IACVx+C,EAAWnxL,IAAI8xO,UAAU,EAAEvmV,EAAEE,EAAE7Q,KAAK4yN,IACpC5yN,KAAKm3V,GAAKn3V,KAAK4yN,GAAGklF,OAAOnnS,GACzB3Q,KAAK2Q,EAAIA,CACV,CAtgBDslV,EAAQ/rV,UAAU4Q,QATlB,SAAkB9X,GAChB,OAAGA,EAAEqQ,EAAI,GAAKrQ,EAAE82S,UAAU95S,KAAK2Q,IAAM,EAAU3N,EAAEy7J,IAAIz+J,KAAK2Q,GAC9C3N,CACb,EAODizV,EAAQ/rV,UAAUktV,OANlB,SAAiBp0V,GAAK,OAAOA,CAAI,EAOjCizV,EAAQ/rV,UAAUy4I,OANlB,SAAiB3/I,GAAKA,EAAEq0V,SAASr3V,KAAK2Q,EAAE,KAAK3N,EAAK,EAOlDizV,EAAQ/rV,UAAUklN,MANlB,SAAgBpsN,EAAEC,EAAEoW,GAAKrW,EAAEs0V,WAAWr0V,EAAEoW,GAAIrZ,KAAK2iJ,OAAOtpI,EAAK,EAO7D48U,EAAQ/rV,UAAUqtV,MANlB,SAAgBv0V,EAAEqW,GAAKrW,EAAEw0V,SAASn+U,GAAIrZ,KAAK2iJ,OAAOtpI,EAAK,EAqFvD68U,EAAWhsV,UAAU4Q,QAzCrB,SAAqB9X,GACnB,IAAIqW,EAAI07U,IAIR,OAHA/xV,EAAEsD,MAAM4wV,UAAUl3V,KAAK2Q,EAAEE,EAAEwI,GAC3BA,EAAEg+U,SAASr3V,KAAK2Q,EAAE,KAAK0I,GACpBrW,EAAEqQ,EAAI,GAAKgG,EAAEygS,UAAUvD,EAAWyB,MAAQ,GAAGh4S,KAAK2Q,EAAE8mV,MAAMp+U,EAAEA,GACxDA,CACR,EAoCD68U,EAAWhsV,UAAUktV,OAjCrB,SAAoBp0V,GAClB,IAAIqW,EAAI07U,IAGR,OAFA/xV,EAAE00V,OAAOr+U,GACTrZ,KAAK2iJ,OAAOtpI,GACLA,CACR,EA6BD68U,EAAWhsV,UAAUy4I,OA1BrB,SAAoB3/I,GAClB,KAAMA,EAAE6N,GAAK7Q,KAAKw2V,KAChBxzV,EAAEA,EAAE6N,KAAO,EACb,IAAI,IAAIjT,EAAI,EAAGA,EAAIoC,KAAK2Q,EAAEE,IAAKjT,EAAG,CAEhC,IAAI8wB,EAAS,MAAL1rB,EAAEpF,GACN+5V,EAAMjpU,EAAE1uB,KAAKq2V,MAAO3nU,EAAE1uB,KAAKs2V,KAAKtzV,EAAEpF,IAAI,IAAIoC,KAAKq2V,IAAKr2V,KAAKu2V,KAAK,IAAKvzV,EAAEoyV,GAKzE,IAFApyV,EADA0rB,EAAI9wB,EAAEoC,KAAK2Q,EAAEE,IACL7Q,KAAK2Q,EAAEukV,GAAG,EAAEyC,EAAG30V,EAAEpF,EAAE,EAAEoC,KAAK2Q,EAAEE,GAE9B7N,EAAE0rB,IAAM1rB,EAAEqyV,IAAMryV,EAAE0rB,IAAM1rB,EAAEqyV,GAAIryV,IAAI0rB,IACzC,CACD1rB,EAAEwN,QACFxN,EAAE40V,UAAU53V,KAAK2Q,EAAEE,EAAE7N,GAClBA,EAAE82S,UAAU95S,KAAK2Q,IAAM,GAAG3N,EAAEy0V,MAAMz3V,KAAK2Q,EAAE3N,EAC7C,EAWDkzV,EAAWhsV,UAAUklN,MALrB,SAAmBpsN,EAAEC,EAAEoW,GAAKrW,EAAEs0V,WAAWr0V,EAAEoW,GAAIrZ,KAAK2iJ,OAAOtpI,EAAK,EAMhE68U,EAAWhsV,UAAUqtV,MATrB,SAAmBv0V,EAAEqW,GAAKrW,EAAEw0V,SAASn+U,GAAIrZ,KAAK2iJ,OAAOtpI,EAAK,EAmC1Dk9R,EAAWrsS,UAAUwtV,OAtarB,SAAmBr+U,GACjB,IAAI,IAAIzb,EAAIoC,KAAK6Q,EAAE,EAAGjT,GAAK,IAAKA,EAAGyb,EAAEzb,GAAKoC,KAAKpC,GAC/Cyb,EAAExI,EAAI7Q,KAAK6Q,EACXwI,EAAEhG,EAAIrT,KAAKqT,CACZ,EAmaDkjS,EAAWrsS,UAAU6rV,QAharB,SAAoB/yV,GAClBhD,KAAK6Q,EAAI,EACT7Q,KAAKqT,EAAKrQ,EAAE,GAAI,EAAE,EACfA,EAAI,EAAGhD,KAAK,GAAKgD,EACZA,GAAK,EAAGhD,KAAK,GAAKgD,EAAEhD,KAAKq1V,GAC5Br1V,KAAK6Q,EAAI,CACf,EA2ZD0lS,EAAWrsS,UAAUy9I,WArZrB,SAAuBt0I,EAAEO,GACvB,IAAImhE,EACJ,GAAQ,IAALnhE,EAASmhE,EAAI,OACX,GAAQ,GAALnhE,EAAQmhE,EAAI,OACf,GAAQ,KAALnhE,EAAUmhE,EAAI,OACjB,GAAQ,GAALnhE,EAAQmhE,EAAI,OACf,GAAQ,IAALnhE,EAASmhE,EAAI,MAChB,IAAQ,GAALnhE,EACoB,YAArB5T,KAAK63V,UAAUxkV,EAAEO,GADRmhE,EAAI,CACiB,CACrC/0E,KAAK6Q,EAAI,EACT7Q,KAAKqT,EAAI,EAET,IADA,IAAIzV,EAAIyV,EAAEzU,OAAQk5V,GAAK,EAAOnnR,EAAK,IAC3B/yE,GAAK,GAAG,CACd,IAAIoF,EAAQ,GAAH+xE,EAAW,IAAL1hE,EAAEzV,GAAQi4V,EAAMxiV,EAAEzV,GAC9BoF,EAAI,EACa,KAAfqQ,EAAEoJ,OAAO7e,KAAWk6V,GAAK,IAG9BA,GAAK,EACI,GAANnnR,EACD3wE,KAAKA,KAAK6Q,KAAO7N,EACX2tE,EAAGoE,EAAI/0E,KAAKm1V,IAClBn1V,KAAKA,KAAK6Q,EAAE,KAAO7N,GAAI,GAAIhD,KAAKm1V,GAAGxkR,GAAK,IAAKA,EAC7C3wE,KAAKA,KAAK6Q,KAAQ7N,GAAIhD,KAAKm1V,GAAGxkR,GAG9B3wE,KAAKA,KAAK6Q,EAAE,IAAM7N,GAAG2tE,GACvBA,GAAMoE,IACG/0E,KAAKm1V,KAAIxkR,GAAM3wE,KAAKm1V,IAC9B,CACO,GAALpgR,GAAyB,IAAT,IAAL1hE,EAAE,MACdrT,KAAKqT,GAAK,EACPs9D,EAAK,IAAG3wE,KAAKA,KAAK6Q,EAAE,KAAQ,GAAI7Q,KAAKm1V,GAAGxkR,GAAK,GAAIA,IAEtD3wE,KAAKwQ,QACFsnV,GAAIvhD,EAAWyB,KAAKy/C,MAAMz3V,KAAKA,KACnC,EAkXDu2S,EAAWrsS,UAAUsG,MA/WrB,WAEE,IADA,IAAIqD,EAAI7T,KAAKqT,EAAErT,KAAKo1V,GACdp1V,KAAK6Q,EAAI,GAAK7Q,KAAKA,KAAK6Q,EAAE,IAAMgD,KAAK7T,KAAK6Q,CACjD,EA6WD0lS,EAAWrsS,UAAUgtV,UA1SrB,SAAsBxmV,EAAE2I,GACtB,IAAIzb,EACJ,IAAIA,EAAIoC,KAAK6Q,EAAE,EAAGjT,GAAK,IAAKA,EAAGyb,EAAEzb,EAAE8S,GAAK1Q,KAAKpC,GAC7C,IAAIA,EAAI8S,EAAE,EAAG9S,GAAK,IAAKA,EAAGyb,EAAEzb,GAAK,EACjCyb,EAAExI,EAAI7Q,KAAK6Q,EAAEH,EACb2I,EAAEhG,EAAIrT,KAAKqT,CACZ,EAqSDkjS,EAAWrsS,UAAU0tV,UAlSrB,SAAsBlnV,EAAE2I,GACtB,IAAI,IAAIzb,EAAI8S,EAAG9S,EAAIoC,KAAK6Q,IAAKjT,EAAGyb,EAAEzb,EAAE8S,GAAK1Q,KAAKpC,GAC9Cyb,EAAExI,EAAI1K,KAAKE,IAAIrG,KAAK6Q,EAAEH,EAAE,GACxB2I,EAAEhG,EAAIrT,KAAKqT,CACZ,EA+RDkjS,EAAWrsS,UAAU6tV,SA5RrB,SAAqBrnV,EAAE2I,GACrB,IAG0Dzb,EAHtDo6V,EAAKtnV,EAAE1Q,KAAKm1V,GACZ8C,EAAMj4V,KAAKm1V,GAAG6C,EACdE,GAAM,GAAGD,GAAK,EACdE,EAAKhyV,KAAKQ,MAAM+J,EAAE1Q,KAAKm1V,IAAKthV,EAAK7T,KAAKqT,GAAG2kV,EAAIh4V,KAAKo1V,GACtD,IAAIx3V,EAAIoC,KAAK6Q,EAAE,EAAGjT,GAAK,IAAKA,EAC1Byb,EAAEzb,EAAEu6V,EAAG,GAAMn4V,KAAKpC,IAAIq6V,EAAKpkV,EAC3BA,GAAK7T,KAAKpC,GAAGs6V,IAAKF,EAEpB,IAAIp6V,EAAIu6V,EAAG,EAAGv6V,GAAK,IAAKA,EAAGyb,EAAEzb,GAAK,EAClCyb,EAAE8+U,GAAMtkV,EACRwF,EAAExI,EAAI7Q,KAAK6Q,EAAEsnV,EAAG,EAChB9+U,EAAEhG,EAAIrT,KAAKqT,EACXgG,EAAE7I,OACH,EA+QD+lS,EAAWrsS,UAAUkuV,SA5QrB,SAAqB1nV,EAAE2I,GACrBA,EAAEhG,EAAIrT,KAAKqT,EACX,IAAI8kV,EAAKhyV,KAAKQ,MAAM+J,EAAE1Q,KAAKm1V,IAC3B,GAAGgD,GAAMn4V,KAAK6Q,EAAKwI,EAAExI,EAAI,MAAzB,CACA,IAAImnV,EAAKtnV,EAAE1Q,KAAKm1V,GACZ8C,EAAMj4V,KAAKm1V,GAAG6C,EACdE,GAAM,GAAGF,GAAI,EACjB3+U,EAAE,GAAKrZ,KAAKm4V,IAAKH,EACjB,IAAI,IAAIp6V,EAAIu6V,EAAG,EAAGv6V,EAAIoC,KAAK6Q,IAAKjT,EAC9Byb,EAAEzb,EAAEu6V,EAAG,KAAOn4V,KAAKpC,GAAGs6V,IAAKD,EAC3B5+U,EAAEzb,EAAEu6V,GAAMn4V,KAAKpC,IAAIo6V,EAElBA,EAAK,IAAG3+U,EAAErZ,KAAK6Q,EAAEsnV,EAAG,KAAOn4V,KAAKqT,EAAE6kV,IAAKD,GAC1C5+U,EAAExI,EAAI7Q,KAAK6Q,EAAEsnV,EACb9+U,EAAE7I,OAXmC,CAYtC,EA8PD+lS,EAAWrsS,UAAUutV,MA3PrB,SAAkB3tV,EAAEuP,GAElB,IADA,IAAIzb,EAAI,EAAGiW,EAAI,EAAGlD,EAAIxK,KAAKC,IAAI0D,EAAE+G,EAAE7Q,KAAK6Q,GAClCjT,EAAI+S,GACRkD,GAAK7T,KAAKpC,GAAGkM,EAAElM,GACfyb,EAAEzb,KAAOiW,EAAE7T,KAAKo1V,GAChBvhV,IAAM7T,KAAKm1V,GAEb,GAAGrrV,EAAE+G,EAAI7Q,KAAK6Q,EAAG,CAEf,IADAgD,GAAK/J,EAAEuJ,EACDzV,EAAIoC,KAAK6Q,GACbgD,GAAK7T,KAAKpC,GACVyb,EAAEzb,KAAOiW,EAAE7T,KAAKo1V,GAChBvhV,IAAM7T,KAAKm1V,GAEbthV,GAAK7T,KAAKqT,CACX,KACI,CAEH,IADAQ,GAAK7T,KAAKqT,EACJzV,EAAIkM,EAAE+G,GACVgD,GAAK/J,EAAElM,GACPyb,EAAEzb,KAAOiW,EAAE7T,KAAKo1V,GAChBvhV,IAAM7T,KAAKm1V,GAEbthV,GAAK/J,EAAEuJ,CACR,CACDgG,EAAEhG,EAAKQ,EAAE,GAAI,EAAE,EACZA,GAAK,EAAGwF,EAAEzb,KAAOoC,KAAKq1V,GAAGxhV,EACpBA,EAAI,IAAGwF,EAAEzb,KAAOiW,GACxBwF,EAAExI,EAAIjT,EACNyb,EAAE7I,OACH,EA8ND+lS,EAAWrsS,UAAUotV,WA1NrB,SAAuBxtV,EAAEuP,GACvB,IAAIrW,EAAIhD,KAAKsG,MAAOrD,EAAI6G,EAAExD,MACtB1I,EAAIoF,EAAE6N,EAEV,IADAwI,EAAExI,EAAIjT,EAAEqF,EAAE4N,IACFjT,GAAK,GAAGyb,EAAEzb,GAAK,EACvB,IAAIA,EAAI,EAAGA,EAAIqF,EAAE4N,IAAKjT,EAAGyb,EAAEzb,EAAEoF,EAAE6N,GAAK7N,EAAEkyV,GAAG,EAAEjyV,EAAErF,GAAGyb,EAAEzb,EAAE,EAAEoF,EAAE6N,GACxDwI,EAAEhG,EAAI,EACNgG,EAAE7I,QACCxQ,KAAKqT,GAAKvJ,EAAEuJ,GAAGkjS,EAAWyB,KAAKy/C,MAAMp+U,EAAEA,EAC3C,EAkNDk9R,EAAWrsS,UAAUstV,SA/MrB,SAAqBn+U,GAGnB,IAFA,IAAIrW,EAAIhD,KAAKsG,MACT1I,EAAIyb,EAAExI,EAAI,EAAE7N,EAAE6N,IACVjT,GAAK,GAAGyb,EAAEzb,GAAK,EACvB,IAAIA,EAAI,EAAGA,EAAIoF,EAAE6N,EAAE,IAAKjT,EAAG,CACzB,IAAIiW,EAAI7Q,EAAEkyV,GAAGt3V,EAAEoF,EAAEpF,GAAGyb,EAAE,EAAEzb,EAAE,EAAE,IACxByb,EAAEzb,EAAEoF,EAAE6N,IAAI7N,EAAEkyV,GAAGt3V,EAAE,EAAE,EAAEoF,EAAEpF,GAAGyb,EAAE,EAAEzb,EAAE,EAAEiW,EAAE7Q,EAAE6N,EAAEjT,EAAE,KAAOoF,EAAEqyV,KACrDh8U,EAAEzb,EAAEoF,EAAE6N,IAAM7N,EAAEqyV,GACdh8U,EAAEzb,EAAEoF,EAAE6N,EAAE,GAAK,EAEhB,CACEwI,EAAExI,EAAI,IAAGwI,EAAEA,EAAExI,EAAE,IAAM7N,EAAEkyV,GAAGt3V,EAAEoF,EAAEpF,GAAGyb,EAAE,EAAEzb,EAAE,EAAE,IAC5Cyb,EAAEhG,EAAI,EACNgG,EAAE7I,OACH,EAkMD+lS,EAAWrsS,UAAUmtV,SA9LrB,SAAqB1mV,EAAEhO,EAAE0W,GACvB,IAAIg/U,EAAK1nV,EAAErK,MACX,KAAG+xV,EAAGxnV,GAAK,GAAX,CACA,IAAIynV,EAAKt4V,KAAKsG,MACd,GAAGgyV,EAAGznV,EAAIwnV,EAAGxnV,EAGX,OAFQ,MAALlO,GAAWA,EAAEozV,QAAQ,QAChB,MAAL18U,GAAWrZ,KAAK03V,OAAOr+U,IAGpB,MAALA,IAAWA,EAAI07U,KAClB,IAAI9xV,EAAI8xV,IAAOh2E,EAAK/+Q,KAAKqT,EAAG81P,EAAKx4P,EAAE0C,EAC/BklV,EAAMv4V,KAAKm1V,GAAGa,EAAMqC,EAAGA,EAAGxnV,EAAE,IAC7B0nV,EAAM,GAAKF,EAAGN,SAASQ,EAAIt1V,GAAIq1V,EAAGP,SAASQ,EAAIl/U,KAC3Cg/U,EAAGX,OAAOz0V,GAAIq1V,EAAGZ,OAAOr+U,IAC/B,IAAIwsT,EAAK5iU,EAAE4N,EACPgX,EAAK5kB,EAAE4iU,EAAG,GACd,GAAS,GAANh+S,EAAH,CACA,IAAI2wU,EAAK3wU,GAAI,GAAG7nB,KAAKu1V,KAAM1vB,EAAG,EAAG5iU,EAAE4iU,EAAG,IAAI7lU,KAAKw1V,GAAG,GAC9CplV,EAAKpQ,KAAKs1V,GAAGkD,EAAInoV,GAAM,GAAGrQ,KAAKu1V,IAAIiD,EAAIxxV,EAAI,GAAGhH,KAAKw1V,GACnD53V,EAAIyb,EAAExI,EAAG6d,EAAI9wB,EAAEioU,EAAIh1T,EAAQ,MAAHlO,EAASoyV,IAAMpyV,EAQ3C,IAPAM,EAAEi0V,UAAUxoU,EAAE7d,GACXwI,EAAEygS,UAAUjpS,IAAM,IACnBwI,EAAEA,EAAExI,KAAO,EACXwI,EAAEo+U,MAAM5mV,EAAEwI,IAEZk9R,EAAWnxL,IAAI8xO,UAAUrxB,EAAGh1T,GAC5BA,EAAE4mV,MAAMx0V,EAAEA,GACJA,EAAE4N,EAAIg1T,GAAI5iU,EAAEA,EAAE4N,KAAO,EAC3B,OAAQ6d,GAAK,GAAG,CAEd,IAAI+pU,EAAMp/U,IAAIzb,IAAIiqB,EAAI7nB,KAAKo1V,GAAGjvV,KAAKQ,MAAM0S,EAAEzb,GAAGwS,GAAIiJ,EAAEzb,EAAE,GAAGoJ,GAAGqJ,GAC5D,IAAIgJ,EAAEzb,IAAIqF,EAAEiyV,GAAG,EAAEuD,EAAGp/U,EAAEqV,EAAE,EAAEm3S,IAAO4yB,EAG/B,IAFAx1V,EAAEi0V,UAAUxoU,EAAE7d,GACdwI,EAAEo+U,MAAM5mV,EAAEwI,GACJA,EAAEzb,KAAO66V,GAAIp/U,EAAEo+U,MAAM5mV,EAAEwI,EAEhC,CACO,MAAL1W,IACD0W,EAAEu+U,UAAU/xB,EAAGljU,GACZo8Q,GAAM5V,GAAIotC,EAAWyB,KAAKy/C,MAAM90V,EAAEA,IAEvC0W,EAAExI,EAAIg1T,EACNxsT,EAAE7I,QACC+nV,EAAM,GAAGl/U,EAAE++U,SAASG,EAAIl/U,GACxB0lQ,EAAK,GAAGw3B,EAAWyB,KAAKy/C,MAAMp+U,EAAEA,EA5BjB,CAdE,CA2CrB,EAkJDk9R,EAAWrsS,UAAUksV,SA7GrB,WACE,GAAGp2V,KAAK6Q,EAAI,EAAG,OAAO,EACtB,IAAI7N,EAAIhD,KAAK,GACb,GAAY,IAAN,EAAFgD,GAAW,OAAO,EACtB,IAAIC,EAAM,EAAFD,EAQR,OAFAC,GAHAA,GADAA,GADAA,EAAKA,GAAG,GAAK,GAAFD,GAAOC,GAAI,KACd,GAAK,IAAFD,GAAQC,GAAI,MACf,IAAO,MAAFD,GAAUC,EAAG,QAAU,QAG5B,EAAED,EAAEC,EAAEjD,KAAKq1V,IAAKr1V,KAAKq1V,IAEnB,EAAGr1V,KAAKq1V,GAAGpyV,GAAGA,CACzB,EAiGDszS,EAAWrsS,UAAU24J,OApCrB,WAAuB,OAA0C,IAAjC7iK,KAAK6Q,EAAE,EAAY,EAAR7Q,KAAK,GAAMA,KAAKqT,EAAU,EAqCrEkjS,EAAWrsS,UAAUwI,IAlCrB,SAAgB1L,EAAE3D,GAChB,GAAG2D,EAAI,YAAcA,EAAI,EAAG,OAAOuvS,EAAWnxL,IAC9C,IAAI/rG,EAAI07U,IAAOniI,EAAKmiI,IAAOt8U,EAAIpV,EAAEyX,QAAQ9a,MAAOpC,EAAIo4V,EAAMhvV,GAAG,EAE7D,IADAyR,EAAEi/U,OAAOr+U,KACDzb,GAAK,GAEX,GADAyF,EAAEk0V,MAAMl+U,EAAEu5M,IACN5rN,EAAG,GAAGpJ,GAAM,EAAGyF,EAAE+rN,MAAMwD,EAAGn6M,EAAEY,OAC3B,CAAE,IAAIxI,EAAIwI,EAAGA,EAAIu5M,EAAIA,EAAK/hN,CAAI,CAErC,OAAOxN,EAAE+zV,OAAO/9U,EACjB,EA2BDk9R,EAAWrsS,UAAUI,SAvXrB,SAAoBsJ,GAClB,GAAG5T,KAAKqT,EAAI,EAAG,MAAO,IAAIrT,KAAK6oC,SAASv+B,SAASsJ,GACjD,IAAImhE,EACJ,GAAQ,IAALnhE,EAASmhE,EAAI,OACX,GAAQ,GAALnhE,EAAQmhE,EAAI,OACf,GAAQ,GAALnhE,EAAQmhE,EAAI,OACf,GAAQ,IAALnhE,EAASmhE,EAAI,MAChB,IAAQ,GAALnhE,EACH,OAAO5T,KAAK04V,QAAQ9kV,GADTmhE,EAAI,CACf,CACL,IAAmBx8D,EAAfogV,GAAM,GAAG5jR,GAAG,EAAMpkE,GAAI,EAAO0I,EAAI,GAAIzb,EAAIoC,KAAK6Q,EAC9C2K,EAAIxb,KAAKm1V,GAAIv3V,EAAEoC,KAAKm1V,GAAIpgR,EAC5B,GAAGn3E,KAAM,EAEP,IADG4d,EAAIxb,KAAKm1V,KAAO58U,EAAIvY,KAAKpC,IAAI4d,GAAK,IAAK7K,GAAI,EAAM0I,EAAIu8U,EAASr9U,IAC3D3a,GAAK,GACN4d,EAAIu5D,GACLx8D,GAAKvY,KAAKpC,IAAK,GAAG4d,GAAG,IAAMu5D,EAAEv5D,EAC7BjD,GAAKvY,OAAOpC,KAAK4d,GAAGxb,KAAKm1V,GAAGpgR,KAG5Bx8D,EAAKvY,KAAKpC,KAAK4d,GAAGu5D,GAAI4jR,EACnBn9U,GAAK,IAAKA,GAAKxb,KAAKm1V,KAAMv3V,IAE5B2a,EAAI,IAAG5H,GAAI,GACXA,IAAG0I,GAAKu8U,EAASr9U,IAGxB,OAAO5H,EAAE0I,EAAE,GACZ,EA6VDk9R,EAAWrsS,UAAU2+B,OA1VrB,WAAsB,IAAIxvB,EAAI07U,IAAsC,OAA/Bx+C,EAAWyB,KAAKy/C,MAAMz3V,KAAKqZ,GAAWA,CAAI,EA2V/Ek9R,EAAWrsS,UAAU5D,IAxVrB,WAAmB,OAAQtG,KAAKqT,EAAE,EAAGrT,KAAK6oC,SAAS7oC,IAAO,EAyV1Du2S,EAAWrsS,UAAU4vS,UAtVrB,SAAqBhwS,GACnB,IAAIuP,EAAIrZ,KAAKqT,EAAEvJ,EAAEuJ,EACjB,GAAQ,GAALgG,EAAQ,OAAOA,EAClB,IAAIzb,EAAIoC,KAAK6Q,EAEb,GAAQ,IADRwI,EAAIzb,EAAEkM,EAAE+G,GACG,OAAQ7Q,KAAKqT,EAAE,GAAIgG,EAAEA,EAChC,OAAQzb,GAAK,GAAG,GAAuB,IAAnByb,EAAErZ,KAAKpC,GAAGkM,EAAElM,IAAU,OAAOyb,EACjD,OAAO,CACR,EA+UDk9R,EAAWrsS,UAAUq0J,UAjUrB,WACE,OAAGv+J,KAAK6Q,GAAK,EAAU,EAChB7Q,KAAKm1V,IAAIn1V,KAAK6Q,EAAE,GAAGmlV,EAAMh2V,KAAKA,KAAK6Q,EAAE,GAAI7Q,KAAKqT,EAAErT,KAAKo1V,GAC7D,EA+TD7+C,EAAWrsS,UAAUu0J,IAzJrB,SAAe30J,GACb,IAAIuP,EAAI07U,IAGR,OAFA/0V,KAAKsG,MAAM+wV,SAASvtV,EAAE,KAAKuP,GACxBrZ,KAAKqT,EAAI,GAAKgG,EAAEygS,UAAUvD,EAAWyB,MAAQ,GAAGluS,EAAE2tV,MAAMp+U,EAAEA,GACtDA,CACR,EAqJDk9R,EAAWrsS,UAAU0uV,UA9BrB,SAAqB5xV,EAAE2J,GACrB,IAAItN,EAEJ,OAD0BA,EAAvB2D,EAAI,KAAO2J,EAAEkyJ,SAAc,IAAIozL,EAAQtlV,GAAa,IAAIulV,EAAWvlV,GAC/D3Q,KAAK0S,IAAI1L,EAAE3D,EACnB,EA6BDkzS,EAAWyB,KAAO89C,EAAI,GACtBv/C,EAAWnxL,IAAM0wO,EAAI,GAgVrBiB,EAAQ7sV,UAAU4Q,QAAUk8U,EAC5BD,EAAQ7sV,UAAUktV,OAASJ,EAC3BD,EAAQ7sV,UAAUklN,MALlB,SAAgBpsN,EAAEC,EAAEoW,GAAKrW,EAAEs0V,WAAWr0V,EAAEoW,EAAK,EAM7C09U,EAAQ7sV,UAAUqtV,MALlB,SAAgBv0V,EAAEqW,GAAKrW,EAAEw0V,SAASn+U,EAAK,EAuEvCi+R,EAAQptS,UAAU4Q,QAzBlB,SAAwB9X,GACtB,GAAGA,EAAEqQ,EAAI,GAAKrQ,EAAE6N,EAAI,EAAE7Q,KAAK2Q,EAAEE,EAAG,OAAO7N,EAAEy7J,IAAIz+J,KAAK2Q,GAC7C,GAAG3N,EAAE82S,UAAU95S,KAAK2Q,GAAK,EAAG,OAAO3N,EACjC,IAAIqW,EAAI07U,IAAoC,OAA7B/xV,EAAE00V,OAAOr+U,GAAIrZ,KAAK2iJ,OAAOtpI,GAAWA,CAC3D,EAsBDi+R,EAAQptS,UAAUktV,OApBlB,SAAuBp0V,GAAK,OAAOA,CAAI,EAqBvCs0S,EAAQptS,UAAUy4I,OAlBlB,SAAuB3/I,GAKrB,IAJAA,EAAE40V,UAAU53V,KAAK2Q,EAAEE,EAAE,EAAE7Q,KAAK4yN,IACzB5vN,EAAE6N,EAAI7Q,KAAK2Q,EAAEE,EAAE,IAAK7N,EAAE6N,EAAI7Q,KAAK2Q,EAAEE,EAAE,EAAG7N,EAAEwN,SAC3CxQ,KAAKm3V,GAAG0B,gBAAgB74V,KAAK4yN,GAAG5yN,KAAK2Q,EAAEE,EAAE,EAAE7Q,KAAKi3V,IAChDj3V,KAAK2Q,EAAEmoV,gBAAgB94V,KAAKi3V,GAAGj3V,KAAK2Q,EAAEE,EAAE,EAAE7Q,KAAK4yN,IACzC5vN,EAAE82S,UAAU95S,KAAK4yN,IAAM,GAAG5vN,EAAE+1V,WAAW,EAAE/4V,KAAK2Q,EAAEE,EAAE,GAExD,IADA7N,EAAEy0V,MAAMz3V,KAAK4yN,GAAG5vN,GACVA,EAAE82S,UAAU95S,KAAK2Q,IAAM,GAAG3N,EAAEy0V,MAAMz3V,KAAK2Q,EAAE3N,EAChD,EAWDs0S,EAAQptS,UAAUklN,MALlB,SAAsBpsN,EAAEC,EAAEoW,GAAKrW,EAAEs0V,WAAWr0V,EAAEoW,GAAIrZ,KAAK2iJ,OAAOtpI,EAAK,EAMnEi+R,EAAQptS,UAAUqtV,MATlB,SAAsBv0V,EAAEqW,GAAKrW,EAAEw0V,SAASn+U,GAAIrZ,KAAK2iJ,OAAOtpI,EAAK,EAsJ7D,IAsHC2/U,EACAC,EACAC,EAxHGC,EAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAC5oBC,GAAS,GAAG,IAAID,EAAUA,EAAUv6V,OAAO,GAmIlD,SAASy6V,IATT,IAAsBr2V,KAUP,IAAIwB,MAAOoiO,UATxBqyH,EAASC,MAAmB,IAAJl2V,EACxBi2V,EAASC,MAAgBl2V,GAAK,EAAK,IACnCi2V,EAASC,MAAgBl2V,GAAK,GAAM,IACpCi2V,EAASC,MAAgBl2V,GAAK,GAAM,IACjCk2V,GAAYI,IAAWJ,GAAYI,EAMvC,CAGD,GAzFG/iD,EAAWrsS,UAAU0oF,UArjBrB,SAAsBv5E,GAAK,OAAOlT,KAAKQ,MAAMR,KAAKgL,IAAInR,KAAKm1V,GAAGhvV,KAAK+K,IAAImI,GAAM,EAsjB7Ek9R,EAAWrsS,UAAUwuV,QA5iBrB,SAAoB9kV,GAElB,GADQ,MAALA,IAAWA,EAAI,IACE,GAAjB5T,KAAKy4S,UAAiB7kS,EAAI,GAAKA,EAAI,GAAI,MAAO,IACjD,IAAI2lV,EAAKv5V,KAAK4yF,UAAUh/E,GACpB9J,EAAI3D,KAAK6K,IAAI4C,EAAE2lV,GACfhhV,EAAIu9U,EAAIhsV,GAAI7G,EAAI8xV,IAAO1xV,EAAI0xV,IAAO17U,EAAI,GAE1C,IADArZ,KAAKq3V,SAAS9+U,EAAEtV,EAAEI,GACZJ,EAAEw1S,SAAW,GACjBp/R,GAAKvP,EAAEzG,EAAEq2S,YAAYpvS,SAASsJ,GAAG+gK,OAAO,GAAKt7J,EAC7CpW,EAAEo0V,SAAS9+U,EAAEtV,EAAEI,GAEjB,OAAOA,EAAEq2S,WAAWpvS,SAASsJ,GAAKyF,CACnC,EAiiBDk9R,EAAWrsS,UAAU2tV,UA9hBrB,SAAsBxkV,EAAEO,GACtB5T,KAAK+1V,QAAQ,GACL,MAALniV,IAAWA,EAAI,IAGlB,IAFA,IAAI2lV,EAAKv5V,KAAK4yF,UAAUh/E,GACpB2E,EAAIpS,KAAK6K,IAAI4C,EAAE2lV,GAAKzB,GAAK,EAAOppU,EAAI,EAAG7M,EAAI,EACvCjkB,EAAI,EAAGA,EAAIyV,EAAEzU,SAAUhB,EAAG,CAChC,IAAIoF,EAAI6yV,EAAMxiV,EAAEzV,GACboF,EAAI,EACa,KAAfqQ,EAAEoJ,OAAO7e,IAA8B,GAAjBoC,KAAKy4S,WAAeq/C,GAAK,IAGpDj2U,EAAIjO,EAAEiO,EAAE7e,IACH0rB,GAAK6qU,IACRv5V,KAAKw5V,UAAUjhV,GACfvY,KAAK+4V,WAAWl3U,EAAE,GAClB6M,EAAI,EACJ7M,EAAI,GAEP,CACE6M,EAAI,IACL1uB,KAAKw5V,UAAUrzV,KAAK6K,IAAI4C,EAAE8a,IAC1B1uB,KAAK+4V,WAAWl3U,EAAE,IAEjBi2U,GAAIvhD,EAAWyB,KAAKy/C,MAAMz3V,KAAKA,KACnC,EAugBDu2S,EAAWrsS,UAAU4qV,WApgBrB,SAAuBhrV,EAAE8J,EAAEC,GACzB,GAAG,iBAAmBD,EAEpB,GAAG9J,EAAI,EAAG9J,KAAK+1V,QAAQ,QAMrB,IAJA/1V,KAAK80V,WAAWhrV,EAAE+J,GACd7T,KAAK64S,QAAQ/uS,EAAE,IACjB9J,KAAKy5V,UAAUljD,EAAWnxL,IAAImzL,UAAUzuS,EAAE,GAAG4sV,EAAM12V,MAClDA,KAAK6iK,UAAU7iK,KAAK+4V,WAAW,EAAE,IAC7B/4V,KAAK05V,gBAAgB9lV,IAC1B5T,KAAK+4V,WAAW,EAAE,GACf/4V,KAAKu+J,YAAcz0J,GAAG9J,KAAKy3V,MAAMlhD,EAAWnxL,IAAImzL,UAAUzuS,EAAE,GAAG9J,UAInE,CAEH,IAAIgD,EAAI,IAAInF,MAASgT,EAAM,EAAF/G,EACzB9G,EAAEpE,OAAgB,GAANkL,GAAG,GACf8J,EAAE+lV,UAAU32V,GACT6N,EAAI,EAAG7N,EAAE,KAAQ,GAAG6N,GAAG,EAAS7N,EAAE,GAAK,EAC1ChD,KAAK2nJ,WAAW3kJ,EAAE,IACnB,CACF,EA8eDuzS,EAAWrsS,UAAUuvV,UA9crB,SAAsB3vV,EAAE8vV,EAAGvgV,GACzB,IAAIzb,EAAG4a,EAAG7H,EAAIxK,KAAKC,IAAI0D,EAAE+G,EAAE7Q,KAAK6Q,GAChC,IAAIjT,EAAI,EAAGA,EAAI+S,IAAK/S,EAAGyb,EAAEzb,GAAKg8V,EAAG55V,KAAKpC,GAAGkM,EAAElM,IAC3C,GAAGkM,EAAE+G,EAAI7Q,KAAK6Q,EAAG,CAEf,IADA2H,EAAI1O,EAAEuJ,EAAErT,KAAKo1V,GACTx3V,EAAI+S,EAAG/S,EAAIoC,KAAK6Q,IAAKjT,EAAGyb,EAAEzb,GAAKg8V,EAAG55V,KAAKpC,GAAG4a,GAC9Ca,EAAExI,EAAI7Q,KAAK6Q,CACZ,KACI,CAEH,IADA2H,EAAIxY,KAAKqT,EAAErT,KAAKo1V,GACZx3V,EAAI+S,EAAG/S,EAAIkM,EAAE+G,IAAKjT,EAAGyb,EAAEzb,GAAKg8V,EAAGphV,EAAE1O,EAAElM,IACvCyb,EAAExI,EAAI/G,EAAE+G,CACT,CACDwI,EAAEhG,EAAIumV,EAAG55V,KAAKqT,EAAEvJ,EAAEuJ,GAClBgG,EAAE7I,OACH,EAgcD+lS,EAAWrsS,UAAU2vV,UA7WrB,SAAsBnpV,EAAEkpV,GACtB,IAAIvgV,EAAIk9R,EAAWnxL,IAAImzL,UAAU7nS,GAEjC,OADA1Q,KAAKy5V,UAAUpgV,EAAEugV,EAAGvgV,GACbA,CACR,EA0WDk9R,EAAWrsS,UAAU4vV,MA9VrB,SAAkBhwV,EAAEuP,GAElB,IADA,IAAIzb,EAAI,EAAGiW,EAAI,EAAGlD,EAAIxK,KAAKC,IAAI0D,EAAE+G,EAAE7Q,KAAK6Q,GAClCjT,EAAI+S,GACRkD,GAAK7T,KAAKpC,GAAGkM,EAAElM,GACfyb,EAAEzb,KAAOiW,EAAE7T,KAAKo1V,GAChBvhV,IAAM7T,KAAKm1V,GAEb,GAAGrrV,EAAE+G,EAAI7Q,KAAK6Q,EAAG,CAEf,IADAgD,GAAK/J,EAAEuJ,EACDzV,EAAIoC,KAAK6Q,GACbgD,GAAK7T,KAAKpC,GACVyb,EAAEzb,KAAOiW,EAAE7T,KAAKo1V,GAChBvhV,IAAM7T,KAAKm1V,GAEbthV,GAAK7T,KAAKqT,CACX,KACI,CAEH,IADAQ,GAAK7T,KAAKqT,EACJzV,EAAIkM,EAAE+G,GACVgD,GAAK/J,EAAElM,GACPyb,EAAEzb,KAAOiW,EAAE7T,KAAKo1V,GAChBvhV,IAAM7T,KAAKm1V,GAEbthV,GAAK/J,EAAEuJ,CACR,CACDgG,EAAEhG,EAAKQ,EAAE,GAAI,EAAE,EACZA,EAAI,EAAGwF,EAAEzb,KAAOiW,EACXA,GAAK,IAAGwF,EAAEzb,KAAOoC,KAAKq1V,GAAGxhV,GACjCwF,EAAExI,EAAIjT,EACNyb,EAAE7I,OACH,EAiUD+lS,EAAWrsS,UAAUsvV,UArSrB,SAAsB9oV,GACpB1Q,KAAKA,KAAK6Q,GAAK7Q,KAAKk1V,GAAG,EAAExkV,EAAE,EAAE1Q,KAAK,EAAE,EAAEA,KAAK6Q,KACzC7Q,KAAK6Q,EACP7Q,KAAKwQ,OACN,EAkSD+lS,EAAWrsS,UAAU6uV,WA/RrB,SAAuBroV,EAAEmR,GACvB,GAAQ,GAALnR,EAAH,CACA,KAAM1Q,KAAK6Q,GAAKgR,GAAG7hB,KAAKA,KAAK6Q,KAAO,EAEpC,IADA7Q,KAAK6hB,IAAMnR,EACL1Q,KAAK6hB,IAAM7hB,KAAKq1V,IACpBr1V,KAAK6hB,IAAM7hB,KAAKq1V,KACXxzU,GAAK7hB,KAAK6Q,IAAG7Q,KAAKA,KAAK6Q,KAAO,KACjC7Q,KAAK6hB,EANQ,CAQlB,EAuRD00R,EAAWrsS,UAAU4uV,gBArQrB,SAA4BhvV,EAAE4G,EAAE2I,GAC9B,IAIIqV,EAJA9wB,EAAIuI,KAAKC,IAAIpG,KAAK6Q,EAAE/G,EAAE+G,EAAEH,GAG5B,IAFA2I,EAAEhG,EAAI,EACNgG,EAAExI,EAAIjT,EACAA,EAAI,GAAGyb,IAAIzb,GAAK,EAEtB,IAAI8wB,EAAIrV,EAAExI,EAAE7Q,KAAK6Q,EAAGjT,EAAI8wB,IAAK9wB,EAAGyb,EAAEzb,EAAEoC,KAAK6Q,GAAK7Q,KAAKk1V,GAAG,EAAEprV,EAAElM,GAAGyb,EAAEzb,EAAE,EAAEoC,KAAK6Q,GACxE,IAAI6d,EAAIvoB,KAAKC,IAAI0D,EAAE+G,EAAEH,GAAI9S,EAAI8wB,IAAK9wB,EAAGoC,KAAKk1V,GAAG,EAAEprV,EAAElM,GAAGyb,EAAEzb,EAAE,EAAE8S,EAAE9S,GAC5Dyb,EAAE7I,OACH,EA6PD+lS,EAAWrsS,UAAU2uV,gBAzPrB,SAA4B/uV,EAAE4G,EAAE2I,KAC5B3I,EACF,IAAI9S,EAAIyb,EAAExI,EAAI7Q,KAAK6Q,EAAE/G,EAAE+G,EAAEH,EAEzB,IADA2I,EAAEhG,EAAI,IACEzV,GAAK,GAAGyb,EAAEzb,GAAK,EACvB,IAAIA,EAAIuI,KAAKE,IAAIqK,EAAE1Q,KAAK6Q,EAAE,GAAIjT,EAAIkM,EAAE+G,IAAKjT,EACvCyb,EAAErZ,KAAK6Q,EAAEjT,EAAE8S,GAAK1Q,KAAKk1V,GAAGxkV,EAAE9S,EAAEkM,EAAElM,GAAGyb,EAAE,EAAE,EAAErZ,KAAK6Q,EAAEjT,EAAE8S,GAClD2I,EAAE7I,QACF6I,EAAEu+U,UAAU,EAAEv+U,EACf,EAiPDk9R,EAAWrsS,UAAU6vV,OA9GrB,SAAmBrpV,GACjB,GAAGA,GAAK,EAAG,OAAO,EAClB,IAAI6H,EAAIvY,KAAKq1V,GAAG3kV,EAAG2I,EAAKrZ,KAAKqT,EAAE,EAAG3C,EAAE,EAAE,EACtC,GAAG1Q,KAAK6Q,EAAI,EACV,GAAQ,GAAL0H,EAAQc,EAAIrZ,KAAK,GAAG0Q,OAClB,IAAI,IAAI9S,EAAIoC,KAAK6Q,EAAE,EAAGjT,GAAK,IAAKA,EAAGyb,GAAKd,EAAEc,EAAErZ,KAAKpC,IAAI8S,EAC5D,OAAO2I,CACR,EAwGDk9R,EAAWrsS,UAAU6qS,YArCrB,SAAwBlkS,GACtB,IAAIimS,EAAK92S,KAAK+2S,SAASR,EAAWnxL,KAC9BrwC,EAAI+hO,EAAGyD,kBACX,GAAGxlO,GAAK,EAAG,OAAO,EAClB,IAAI17D,EAAIy9R,EAAG2C,WAAW1kO,IACtBlkE,EAAKA,EAAE,GAAI,GACJsoV,EAAUv6V,SAAQiS,EAAIsoV,EAAUv6V,QAEvC,IADA,IAAIkL,EAAIirV,IACAn3V,EAAI,EAAGA,EAAIiT,IAAKjT,EAAG,CAEzBkM,EAAEisV,QAAQoD,EAAUhzV,KAAKQ,MAAMR,KAAKS,SAASuyV,EAAUv6V,UACvD,IAAIqE,EAAI6G,EAAEiwS,OAAO1gS,EAAErZ,MACnB,GAAkC,GAA/BiD,EAAE62S,UAAUvD,EAAWnxL,MAAgC,GAAnBniH,EAAE62S,UAAUhD,GAAU,CAE3D,IADA,IAAIpoR,EAAI,EACFA,IAAMqmD,GAAwB,GAAnB9xE,EAAE62S,UAAUhD,IAE3B,GAAkC,IADlC7zS,EAAIA,EAAE21V,UAAU,EAAE54V,OACb85S,UAAUvD,EAAWnxL,KAAW,OAAO,EAE9C,GAAsB,GAAnBniH,EAAE62S,UAAUhD,GAAU,OAAO,CACjC,CACF,CACD,OAAO,CACR,EAkBDP,EAAWrsS,UAAU4Z,MAzlBrB,WAAqB,IAAIzK,EAAI07U,IAAuB,OAAhB/0V,KAAK03V,OAAOr+U,GAAWA,CAAI,EA0lB/Dk9R,EAAWrsS,UAAUwvS,SAvlBrB,WACE,GAAG15S,KAAKqT,EAAI,EAAG,CACb,GAAa,GAAVrT,KAAK6Q,EAAQ,OAAO7Q,KAAK,GAAGA,KAAKq1V,GAC/B,GAAa,GAAVr1V,KAAK6Q,EAAQ,OAAQ,CAC9B,KACI,IAAa,GAAV7Q,KAAK6Q,EAAQ,OAAO7Q,KAAK,GAC5B,GAAa,GAAVA,KAAK6Q,EAAQ,OAAO,CAAP,CAErB,OAAS7Q,KAAK,IAAK,GAAI,GAAGA,KAAKm1V,IAAK,IAAKn1V,KAAKm1V,GAAIn1V,KAAK,EACxD,EA+kBDu2S,EAAWrsS,UAAU8vV,UA5kBrB,WAAyB,OAAgB,GAARh6V,KAAK6Q,EAAM7Q,KAAKqT,EAAGrT,KAAK,IAAI,IAAK,EAAK,EA6kBvEu2S,EAAWrsS,UAAU+vV,WA1kBrB,WAA0B,OAAgB,GAARj6V,KAAK6Q,EAAM7Q,KAAKqT,EAAGrT,KAAK,IAAI,IAAK,EAAK,EA2kBxEu2S,EAAWrsS,UAAUuuS,OArkBrB,WACE,OAAGz4S,KAAKqT,EAAI,GAAW,EACfrT,KAAK6Q,GAAK,GAAgB,GAAV7Q,KAAK6Q,GAAU7Q,KAAK,IAAM,EAAW,EACjD,CACb,EAkkBDu2S,EAAWrsS,UAAUiwO,YA3frB,WACE,IAAIv8O,EAAIoC,KAAK6Q,EAAGwI,EAAI,IAAIxb,MACxBwb,EAAE,GAAKrZ,KAAKqT,EACZ,IAA+BkF,EAA3BiD,EAAIxb,KAAKm1V,GAAIv3V,EAAEoC,KAAKm1V,GAAI,EAAMpgR,EAAI,EACtC,GAAGn3E,KAAM,EAGP,IAFG4d,EAAIxb,KAAKm1V,KAAO58U,EAAIvY,KAAKpC,IAAI4d,KAAOxb,KAAKqT,EAAErT,KAAKo1V,KAAK55U,IACtDnC,EAAE07D,KAAOx8D,EAAGvY,KAAKqT,GAAIrT,KAAKm1V,GAAG35U,GACzB5d,GAAK,GACN4d,EAAI,GACLjD,GAAKvY,KAAKpC,IAAK,GAAG4d,GAAG,IAAM,EAAEA,EAC7BjD,GAAKvY,OAAOpC,KAAK4d,GAAGxb,KAAKm1V,GAAG,KAG5B58U,EAAKvY,KAAKpC,KAAK4d,GAAG,GAAI,IACnBA,GAAK,IAAKA,GAAKxb,KAAKm1V,KAAMv3V,IAEhB,IAAT,IAAF2a,KAAcA,IAAM,KAChB,GAALw8D,IAAkB,IAAP/0E,KAAKqT,KAAc,IAAFkF,MAAWw8D,GACvCA,EAAI,GAAKx8D,GAAKvY,KAAKqT,KAAGgG,EAAE07D,KAAOx8D,GAGtC,OAAOc,CACR,EAseDk9R,EAAWrsS,UAAUokB,OAperB,SAAkBxkB,GAAK,OAA0B,GAAnB9J,KAAK85S,UAAUhwS,EAAS,EAqetDysS,EAAWrsS,UAAU9D,IAperB,SAAe0D,GAAK,OAAO9J,KAAK85S,UAAUhwS,GAAG,EAAG9J,KAAK8J,CAAI,EAqezDysS,EAAWrsS,UAAU7D,IAperB,SAAeyD,GAAK,OAAO9J,KAAK85S,UAAUhwS,GAAG,EAAG9J,KAAK8J,CAAI,EAqezDysS,EAAWrsS,UAAU6nJ,IA/crB,SAAejoJ,GAAK,IAAIuP,EAAI07U,IAAmC,OAA5B/0V,KAAKy5V,UAAU3vV,EAAE2sV,EAAOp9U,GAAWA,CAAI,EAgd1Ek9R,EAAWrsS,UAAU8nJ,GA5crB,SAAcloJ,GAAK,IAAIuP,EAAI07U,IAAkC,OAA3B/0V,KAAKy5V,UAAU3vV,EAAE4sV,EAAMr9U,GAAWA,CAAI,EA6cxEk9R,EAAWrsS,UAAU+nJ,IAzcrB,SAAenoJ,GAAK,IAAIuP,EAAI07U,IAAmC,OAA5B/0V,KAAKy5V,UAAU3vV,EAAE6sV,EAAOt9U,GAAWA,CAAI,EA0c1Ek9R,EAAWrsS,UAAUgwV,OAtcrB,SAAkBpwV,GAAK,IAAIuP,EAAI07U,IAAsC,OAA/B/0V,KAAKy5V,UAAU3vV,EAAE8sV,EAAUv9U,GAAWA,CAAI,EAuchFk9R,EAAWrsS,UAAUmgL,IApcrB,WAEE,IADA,IAAIhxK,EAAI07U,IACAn3V,EAAI,EAAGA,EAAIoC,KAAK6Q,IAAKjT,EAAGyb,EAAEzb,GAAKoC,KAAKo1V,IAAIp1V,KAAKpC,GAGrD,OAFAyb,EAAExI,EAAI7Q,KAAK6Q,EACXwI,EAAEhG,GAAKrT,KAAKqT,EACLgG,CACR,EA+bDk9R,EAAWrsS,UAAUquS,UA5brB,SAAqB7nS,GACnB,IAAI2I,EAAI07U,IAER,OADGrkV,EAAI,EAAG1Q,KAAKo4V,UAAU1nV,EAAE2I,GAASrZ,KAAK+3V,SAASrnV,EAAE2I,GAC7CA,CACR,EAybDk9R,EAAWrsS,UAAUuvS,WAtbrB,SAAsB/oS,GACpB,IAAI2I,EAAI07U,IAER,OADGrkV,EAAI,EAAG1Q,KAAK+3V,UAAUrnV,EAAE2I,GAASrZ,KAAKo4V,SAAS1nV,EAAE2I,GAC7CA,CACR,EAmbDk9R,EAAWrsS,UAAUqwS,gBAparB,WACE,IAAI,IAAI38S,EAAI,EAAGA,EAAIoC,KAAK6Q,IAAKjT,EAC3B,GAAc,GAAXoC,KAAKpC,GAAS,OAAOA,EAAEoC,KAAKm1V,GAAG0B,EAAK72V,KAAKpC,IAC9C,OAAGoC,KAAKqT,EAAI,EAAUrT,KAAK6Q,EAAE7Q,KAAKm1V,IAC1B,CACT,EAgaD5+C,EAAWrsS,UAAUiwV,SAtZrB,WAEE,IADA,IAAI9gV,EAAI,EAAGrW,EAAIhD,KAAKqT,EAAErT,KAAKo1V,GACnBx3V,EAAI,EAAGA,EAAIoC,KAAK6Q,IAAKjT,EAAGyb,GAAKy9U,EAAK92V,KAAKpC,GAAGoF,GAClD,OAAOqW,CACR,EAmZDk9R,EAAWrsS,UAAU2uS,QAhZrB,SAAmBnoS,GACjB,IAAIge,EAAIvoB,KAAKQ,MAAM+J,EAAE1Q,KAAKm1V,IAC1B,OAAGzmU,GAAK1uB,KAAK6Q,EAAkB,GAAR7Q,KAAKqT,EACO,IAA3BrT,KAAK0uB,GAAI,GAAIhe,EAAE1Q,KAAKm1V,GAC7B,EA6YD5+C,EAAWrsS,UAAUkwV,OAnYrB,SAAkB1pV,GAAK,OAAO1Q,KAAK65V,UAAUnpV,EAAEgmV,EAAS,EAoYxDngD,EAAWrsS,UAAUmwV,SAjYrB,SAAoB3pV,GAAK,OAAO1Q,KAAK65V,UAAUnpV,EAAEkmV,EAAa,EAkY9DrgD,EAAWrsS,UAAUowV,QA/XrB,SAAmB5pV,GAAK,OAAO1Q,KAAK65V,UAAUnpV,EAAEimV,EAAU,EAgY1DpgD,EAAWrsS,UAAU6hB,IA5VrB,SAAejiB,GAAK,IAAIuP,EAAI07U,IAAwB,OAAjB/0V,KAAK85V,MAAMhwV,EAAEuP,GAAWA,CAAI,EA6V/Dk9R,EAAWrsS,UAAU6sS,SA1VrB,SAAoBjtS,GAAK,IAAIuP,EAAI07U,IAAwB,OAAjB/0V,KAAKy3V,MAAM3tV,EAAEuP,GAAWA,CAAI,EA2VpEk9R,EAAWrsS,UAAU0vB,SAxVrB,SAAoB9vB,GAAK,IAAIuP,EAAI07U,IAA6B,OAAtB/0V,KAAKs3V,WAAWxtV,EAAEuP,GAAWA,CAAI,EAyVzEk9R,EAAWrsS,UAAU4tS,OAnVrB,SAAkBhuS,GAAK,IAAIuP,EAAI07U,IAAgC,OAAzB/0V,KAAKq3V,SAASvtV,EAAEuP,EAAE,MAAcA,CAAI,EAoV1Ek9R,EAAWrsS,UAAUqwV,UAjVrB,SAAqBzwV,GAAK,IAAIuP,EAAI07U,IAAgC,OAAzB/0V,KAAKq3V,SAASvtV,EAAE,KAAKuP,GAAWA,CAAI,EAkV7Ek9R,EAAWrsS,UAAUswV,mBA/UrB,SAA8B1wV,GAC5B,IAAInH,EAAIoyV,IAAO17U,EAAI07U,IAEnB,OADA/0V,KAAKq3V,SAASvtV,EAAEnH,EAAE0W,GACX,IAAIxb,MAAM8E,EAAE0W,EACpB,EA4UDk9R,EAAWrsS,UAAU6vS,OArOrB,SAAkB/yS,EAAE2J,GAClB,IAAuBokE,EAAe1xE,EAAlCzF,EAAIoJ,EAAEu3J,YAAgBllJ,EAAIy8U,EAAI,GAClC,GAAGl4V,GAAK,EAAG,OAAOyb,EACF07D,EAARn3E,EAAI,GAAQ,EACZA,EAAI,GAAQ,EACZA,EAAI,IAAS,EACbA,EAAI,IAAS,EACZ,EAEPyF,EADCzF,EAAI,EACD,IAAIq4V,EAAQtlV,GACVA,EAAEkyJ,SACJ,IAAIy0I,EAAQ3mS,GAEZ,IAAIulV,EAAWvlV,GAGrB,IAAI8H,EAAI,IAAI5a,MAAS6S,EAAI,EAAGquJ,EAAKhqF,EAAE,EAAG4jR,GAAM,GAAG5jR,GAAG,EAElD,GADAt8D,EAAE,GAAKpV,EAAEyX,QAAQ9a,MACd+0E,EAAI,EAAG,CACR,IAAI0lR,EAAK1F,IAET,IADA1xV,EAAEk0V,MAAM9+U,EAAE,GAAGgiV,GACP/pV,GAAKioV,GACTlgV,EAAE/H,GAAKqkV,IACP1xV,EAAE+rN,MAAMqrI,EAAGhiV,EAAE/H,EAAE,GAAG+H,EAAE/H,IACpBA,GAAK,CAER,CAED,IAAemR,EAA2BhR,EAAtC6d,EAAI1nB,EAAE6J,EAAE,EAAM6pV,GAAM,EAAM9nI,EAAKmiI,IAEnC,IADAn3V,EAAIo4V,EAAMhvV,EAAE0nB,IAAI,EACVA,GAAK,GAAG,CAQZ,IAPG9wB,GAAKmhK,EAAIl9I,EAAK7a,EAAE0nB,IAAK9wB,EAAEmhK,EAAK45L,GAE7B92U,GAAK7a,EAAE0nB,IAAK,GAAI9wB,EAAE,GAAI,IAAMmhK,EAAGnhK,EAC5B8wB,EAAI,IAAG7M,GAAK7a,EAAE0nB,EAAE,IAAK1uB,KAAKm1V,GAAGv3V,EAAEmhK,IAGpCruJ,EAAIqkE,EACW,IAAN,EAAFlzD,IAAaA,IAAM,IAAKnR,EAE/B,IADI9S,GAAK8S,GAAK,IAAK9S,GAAKoC,KAAKm1V,KAAMzmU,GAChCgsU,EACDjiV,EAAEoJ,GAAG61U,OAAOr+U,GACZqhV,GAAM,MAEH,CACH,KAAMhqV,EAAI,GAAKrN,EAAEk0V,MAAMl+U,EAAEu5M,GAAKvvN,EAAEk0V,MAAM3kI,EAAGv5M,GAAI3I,GAAK,EAC/CA,EAAI,EAAGrN,EAAEk0V,MAAMl+U,EAAEu5M,IAAY/hN,EAAIwI,EAAGA,EAAIu5M,EAAIA,EAAK/hN,GACpDxN,EAAE+rN,MAAMwD,EAAGn6M,EAAEoJ,GAAGxI,EACjB,CAED,KAAMqV,GAAK,GAAsB,IAAhB1nB,EAAE0nB,GAAI,GAAG9wB,IACxByF,EAAEk0V,MAAMl+U,EAAEu5M,GAAK/hN,EAAIwI,EAAGA,EAAIu5M,EAAIA,EAAK/hN,IAC9BjT,EAAI,IAAKA,EAAIoC,KAAKm1V,GAAG,IAAKzmU,EAElC,CACD,OAAOrrB,EAAE+zV,OAAO/9U,EACjB,EA8KDk9R,EAAWrsS,UAAU6tS,WArIrB,SAAsBpnS,GACpB,IAAIqjB,EAAKrjB,EAAEkyJ,SACX,GAAI7iK,KAAK6iK,UAAY7uI,GAAqB,GAAdrjB,EAAE8nS,SAAe,OAAOlC,EAAWyB,KAG/D,IAFA,IAAI9sR,EAAIva,EAAEmT,QAAShP,EAAI9U,KAAK8jB,QACxBha,EAAIgsV,EAAI,GAAIliV,EAAIkiV,EAAI,GAAIjiV,EAAIiiV,EAAI,GAAIv9U,EAAIu9U,EAAI,GAC5B,GAAd5qU,EAAEutR,UAAe,CACrB,KAAMvtR,EAAE23I,UACN33I,EAAEktU,SAAS,EAAEltU,GACV8I,GACGlqB,EAAE+4J,UAAajvJ,EAAEivJ,WAAY/4J,EAAEgwV,MAAM95V,KAAK8J,GAAI8J,EAAE6jV,MAAM9mV,EAAEiD,IAC5D9J,EAAEsuV,SAAS,EAAEtuV,IAEN8J,EAAEivJ,UAAUjvJ,EAAE6jV,MAAM9mV,EAAEiD,GAC/BA,EAAEwkV,SAAS,EAAExkV,GAEf,KAAMkB,EAAE+tJ,UACN/tJ,EAAEsjV,SAAS,EAAEtjV,GACVkf,GACGngB,EAAEgvJ,UAAatqJ,EAAEsqJ,WAAYhvJ,EAAEimV,MAAM95V,KAAK6T,GAAI0E,EAAEk/U,MAAM9mV,EAAE4H,IAC5D1E,EAAEukV,SAAS,EAAEvkV,IAEN0E,EAAEsqJ,UAAUtqJ,EAAEk/U,MAAM9mV,EAAE4H,GAC/BA,EAAE6/U,SAAS,EAAE7/U,GAEZ2S,EAAE4uR,UAAUhlS,IAAM,GACnBoW,EAAEusU,MAAM3iV,EAAEoW,GACP8I,GAAIlqB,EAAE2tV,MAAM5jV,EAAE/J,GACjB8J,EAAE6jV,MAAMl/U,EAAE3E,KAGVkB,EAAE2iV,MAAMvsU,EAAEpW,GACPkf,GAAIngB,EAAE4jV,MAAM3tV,EAAE+J,GACjB0E,EAAEk/U,MAAM7jV,EAAE2E,GAEb,CACD,OAAkC,GAA/BzD,EAAEglS,UAAUvD,EAAWnxL,KAAkBmxL,EAAWyB,KACpDz/R,EAAEuhS,UAAUnpS,IAAM,EAAU4H,EAAEw+R,SAASpmS,GACvC4H,EAAEkgS,SAAW,GAAGlgS,EAAEuhV,MAAMnpV,EAAE4H,GAC1BA,EAAEkgS,SAAW,EAAUlgS,EAAEwT,IAAIpb,GAAgB4H,GADHA,CAE9C,EA+FDg+R,EAAWrsS,UAAU8G,IA7SrB,SAAehK,GAAK,OAAOhH,KAAK0S,IAAI1L,EAAE,IAAI+vV,EAAa,EA8SvDxgD,EAAWrsS,UAAUmpN,IA7KrB,SAAevpN,GACb,IAAI9G,EAAKhD,KAAKqT,EAAE,EAAGrT,KAAK6oC,SAAS7oC,KAAK8jB,QAClC7gB,EAAK6G,EAAEuJ,EAAE,EAAGvJ,EAAE++B,SAAS/+B,EAAEga,QAC7B,GAAG9gB,EAAE82S,UAAU72S,GAAK,EAAG,CAAE,IAAI4N,EAAI7N,EAAGA,EAAIC,EAAGA,EAAI4N,CAAI,CACnD,IAAIjT,EAAIoF,EAAEu3S,kBAAmB9hS,EAAIxV,EAAEs3S,kBACnC,GAAG9hS,EAAI,EAAG,OAAOzV,EAMjB,IALGpF,EAAI6a,IAAGA,EAAI7a,GACX6a,EAAI,IACLzV,EAAEo1V,SAAS3/U,EAAEzV,GACbC,EAAEm1V,SAAS3/U,EAAExV,IAETD,EAAEy1S,SAAW,IACb76S,EAAIoF,EAAEu3S,mBAAqB,GAAGv3S,EAAEo1V,SAASx6V,EAAEoF,IAC3CpF,EAAIqF,EAAEs3S,mBAAqB,GAAGt3S,EAAEm1V,SAASx6V,EAAEqF,GAC5CD,EAAE82S,UAAU72S,IAAM,GACnBD,EAAEy0V,MAAMx0V,EAAED,GACVA,EAAEo1V,SAAS,EAAEp1V,KAGbC,EAAEw0V,MAAMz0V,EAAEC,GACVA,EAAEm1V,SAAS,EAAEn1V,IAIjB,OADGwV,EAAI,GAAGxV,EAAE80V,SAASt/U,EAAExV,GAChBA,CACR,EAqJDszS,EAAWrsS,UAAUwvV,gBA3FrB,SAA2B7oV,GACzB,IAAIjT,EAAGoF,EAAIhD,KAAKsG,MAChB,GAAU,GAAPtD,EAAE6N,GAAU7N,EAAE,IAAMm2V,EAAUA,EAAUv6V,OAAO,GAAI,CACpD,IAAIhB,EAAI,EAAGA,EAAIu7V,EAAUv6V,SAAUhB,EACjC,GAAGoF,EAAE,IAAMm2V,EAAUv7V,GAAI,OAAO,EAClC,OAAO,CACR,CACD,GAAGoF,EAAE6/J,SAAU,OAAO,EAEtB,IADAjlK,EAAI,EACEA,EAAIu7V,EAAUv6V,QAAQ,CAE1B,IADA,IAAI+R,EAAIwoV,EAAUv7V,GAAI8wB,EAAI9wB,EAAE,EACtB8wB,EAAIyqU,EAAUv6V,QAAU+R,EAAIyoV,GAAOzoV,GAAKwoV,EAAUzqU,KAExD,IADA/d,EAAI3N,EAAE+2V,OAAOppV,GACP/S,EAAI8wB,GAAG,GAAG/d,EAAEwoV,EAAUv7V,MAAQ,EAAG,OAAO,CAC/C,CACD,OAAOoF,EAAE+xS,YAAYlkS,EACtB,EA8ED0lS,EAAWrsS,UAAU2tS,OAhWrB,WAAsB,IAAIx+R,EAAI07U,IAAyB,OAAlB/0V,KAAKw3V,SAASn+U,GAAWA,CAAI,EAmWlEk9R,EAAWrsS,UAAUotS,QAAUA,EAoCnB,MAAZ2hD,EAAkB,CAGnB,IAAIpoV,EACJ,GAHAooV,EAAW,IAAIp7V,MACfq7V,EAAW,EAEU,qBAAXr2V,QAA0BA,OAAOymO,OAC5C,GAAIzmO,OAAOymO,OAAO+jC,gBAAiB,CAEjC,IAAIstF,EAAK,IAAInpV,WAAW,IAExB,IADA3O,OAAOymO,OAAO+jC,gBAAgBstF,GAC1B9pV,EAAI,EAAGA,EAAI,KAAMA,EACtBooV,EAASC,KAAcyB,EAAG9pV,EAC1B,MACI,GAAwB,YAArBosE,UAAUg4Q,SAAyBh4Q,UAAU29Q,WAAa,IAAK,CAErE,IAAIv3V,EAAIR,OAAOymO,OAAO1iO,OAAO,IAC7B,IAAIiK,EAAI,EAAGA,EAAIxN,EAAEzE,SAAUiS,EAC5BooV,EAASC,KAAgC,IAAlB71V,EAAEwsJ,WAAWh/I,EACpC,CAEA,KAAMqoV,EAAWI,GAClBzoV,EAAI1K,KAAKQ,MAAM,MAAQR,KAAKS,UAC5BqyV,EAASC,KAAcroV,IAAM,EAC7BooV,EAASC,KAAkB,IAAJroV,EAEtBqoV,EAAW,EACXG,GAGD,CAED,SAASwB,IACP,GAAgB,MAAb7B,EAAmB,CAIvB,IAHAK,KACAL,EA2DQ,IAAI8B,GA1DF1rS,KAAK6pS,GACXC,EAAW,EAAGA,EAAWD,EAASr6V,SAAUs6V,EAC9CD,EAASC,GAAY,EACvBA,EAAW,CAET,CAED,OAAOF,EAAUx6V,MAClB,CAOD,SAAS67S,IAAiB,CAM1B,SAASygD,IACP96V,KAAKpC,EAAI,EACToC,KAAK0uB,EAAI,EACT1uB,KAAKi1K,EAAI,IAAIp3K,KACd,CARDw8S,EAAanwS,UAAUyvV,UAPvB,SAAuBjrC,GACrB,IAAI9wT,EACJ,IAAIA,EAAI,EAAGA,EAAI8wT,EAAG9vT,SAAUhB,EAAG8wT,EAAG9wT,GAAKi9V,GACxC,EAwCDC,EAAQ5wV,UAAUklD,KAzBlB,SAAkBnuD,GAChB,IAAIrD,EAAG8wB,EAAG7d,EACV,IAAIjT,EAAI,EAAGA,EAAI,MAAOA,EACvBoC,KAAKi1K,EAAEr3K,GAAKA,EAEX,IADA8wB,EAAI,EACA9wB,EAAI,EAAGA,EAAI,MAAOA,EACvB8wB,EAAKA,EAAI1uB,KAAKi1K,EAAEr3K,GAAKqD,EAAIrD,EAAIqD,EAAIrC,QAAW,IAC5CiS,EAAI7Q,KAAKi1K,EAAEr3K,GACXoC,KAAKi1K,EAAEr3K,GAAKoC,KAAKi1K,EAAEvmJ,GACnB1uB,KAAKi1K,EAAEvmJ,GAAK7d,EAEX7Q,KAAKpC,EAAI,EACToC,KAAK0uB,EAAI,CACV,EAaDosU,EAAQ5wV,UAAU1L,KAXlB,WACE,IAAIqS,EAMJ,OALA7Q,KAAKpC,EAAKoC,KAAKpC,EAAI,EAAK,IACxBoC,KAAK0uB,EAAK1uB,KAAK0uB,EAAI1uB,KAAKi1K,EAAEj1K,KAAKpC,GAAM,IACrCiT,EAAI7Q,KAAKi1K,EAAEj1K,KAAKpC,GAChBoC,KAAKi1K,EAAEj1K,KAAKpC,GAAKoC,KAAKi1K,EAAEj1K,KAAK0uB,GAC7B1uB,KAAKi1K,EAAEj1K,KAAK0uB,GAAK7d,EACV7Q,KAAKi1K,EAAGpkK,EAAI7Q,KAAKi1K,EAAEj1K,KAAKpC,GAAM,IACtC,EAYD,IAAI07V,EAAY,IAEf/iD,EAAW8D,aAAeA,EAC1B9D,EAAWA,WAAaA,EAEZpzI,EAAOx3B,QAAU4qK,CAt0C/B,GA40CGh4S,KAAKyB,sCC10CR,IAAIu6B,EAAW4oI,EAAOx3B,QAAU,SAAUuuC,EAAQyD,EAAMtyI,GAEnC,mBAARsyI,IACTtyI,EAAKsyI,EACLA,EAAO,CAAC,GAOVo9K,EAAUp9K,EAHc,mBADxBtyI,EAAKsyI,EAAKtyI,IAAMA,GACsBA,EAAKA,EAAGq7H,KAAO,WAAa,EACvDr7H,EAAGgxG,MAAQ,WAAa,EAER69B,EAAQ,GAAIA,EACxC,EAgDD,SAAS6gL,EAAUp9K,EAAMjX,EAAKrqB,EAAM69B,EAAQkM,EAASC,EAAYC,EAAeC,EAAepB,EAAcqB,GAC3G,GAAItM,GAA2B,iBAAVA,IAAuBr8K,MAAMC,QAAQo8K,GAAS,CAEjE,IAAK,IAAIj5K,KADTylK,EAAIwT,EAAQkM,EAASC,EAAYC,EAAeC,EAAepB,EAAcqB,GAC7DtM,EAAQ,CACtB,IAAIwF,EAAMxF,EAAOj5K,GACjB,GAAIpD,MAAMC,QAAQ4hL,IAChB,GAAIz+K,KAAOs5B,EAASygU,cAClB,IAAK,IAAIp9V,EAAE,EAAGA,EAAE8hL,EAAI9gL,OAAQhB,IAC1Bm9V,EAAUp9K,EAAMjX,EAAKrqB,EAAMqjC,EAAI9hL,GAAIwoL,EAAU,IAAMnlL,EAAM,IAAMrD,EAAGyoL,EAAYD,EAASnlL,EAAKi5K,EAAQt8K,QAEnG,GAAIqD,KAAOs5B,EAAS0gU,eACzB,GAAIv7K,GAAqB,iBAAPA,EAChB,IAAK,IAAIxhC,KAAQwhC,EACfq7K,EAAUp9K,EAAMjX,EAAKrqB,EAAMqjC,EAAIxhC,GAAOkoC,EAAU,IAAMnlL,EAAM,IAAoBi9I,EAY/Ev7E,QAAQ,KAAM,MAAMA,QAAQ,MAAO,MAZmD0jH,EAAYD,EAASnlL,EAAKi5K,EAAQh8B,QAEpHj9I,KAAOs5B,EAASokJ,UAAahB,EAAKwI,WAAallL,KAAOs5B,EAAS2gU,gBACxEH,EAAUp9K,EAAMjX,EAAKrqB,EAAMqjC,EAAK0G,EAAU,IAAMnlL,EAAKolL,EAAYD,EAASnlL,EAAKi5K,EAElF,CACD79B,EAAK69B,EAAQkM,EAASC,EAAYC,EAAeC,EAAepB,EAAcqB,EAC/E,CACF,CAlEDjsJ,EAASokJ,SAAW,CAClB8S,iBAAiB,EACjBt+B,OAAO,EACPy9B,UAAU,EACV2B,sBAAsB,EACtBjB,eAAe,EACfjH,KAAK,GAGP9vJ,EAASygU,cAAgB,CACvB7nM,OAAO,EACPw9B,OAAO,EACP1G,OAAO,EACPoH,OAAO,GAGT92J,EAAS0gU,cAAgB,CACvB/wK,aAAa,EACbtmI,YAAY,EACZwuI,mBAAmB,EACnB73D,cAAc,GAGhBhgG,EAAS2gU,aAAe,CACtB1nK,SAAS,EACT2nK,MAAM,EACN1wK,OAAO,EACPH,UAAU,EACVuG,SAAS,EACTC,SAAS,EACTsqK,kBAAkB,EAClBC,kBAAkB,EAClBjqK,YAAY,EACZ3e,WAAW,EACXwe,WAAW,EACXvmF,SAAS,EACT3qF,QAAQ,EACRgxK,UAAU,EACVC,UAAU,EACVO,aAAa,EACbL,eAAe,EACfC,eAAe,wBC1DjB,MAgBc,aACF,OAWJ,WACR,IAAIxlD,EAAUhiC,EACdgiC,EAAQmrF,QAAU,CAACzvN,KAAK,WACxB,IAAIi0V,EAAwB,CAC3B7tT,OAAQA,OACRupL,QAASA,QACTp0N,OAAQA,OACR1B,OAAQA,OACRrD,MAAOA,MACP2G,KAAMA,MAGP,SAASmlG,EAAgB5/F,EAAmBmwK,GAa1C,OAAOvwE,EAAS5/F,EAAUmwK,EAAQ,CAACqhL,UAAU,GAC7C,CAfF5vN,EAAQhiC,SAAWA,EAgBnBgiC,EAAQ6vN,oBAAsB,SAAgB78V,EAAgBu7K,EAAkBnqI,GAQ9E,OAAO45D,EAAShrG,EAAOu7K,EAAQ,CAACqhL,SAAUxrT,GAAY,YACtD,EACF,IAAI45D,EAAWgiC,EAAQkxC,UAAY,SAAgB9yK,EAAmBmwK,EAAiBp6K,GAEjFA,IAASA,EAAU,CAAC,GACzB,IAAI27V,EAAY37V,EAAQy7V,SAExB,SAASG,EAAQxhL,GAChB,OAAOA,EAAO7yK,MAASi0V,EAAsBphL,EAAO5/J,OAAS4/J,GAAUA,EAAO5/J,KAAK/J,aACnF,CACD,IAAI8wD,EAAS,GAEb,SAASs6R,EAAUh9V,EAAOu7K,EAAQ/5G,EAAKviE,GAEtC,IAAIgS,EAEJ,SAASgsV,EAASvkQ,GACjBh2B,EAAO3iE,KAAK,CAACqxC,SAASowB,EAAKk3B,QAAQA,GACnC,CAED,GALAl3B,GAAQA,EAAmB,iBAALviE,EAAgB,IAAMA,EAAI,IAAkB,oBAALA,EAAmB,GAAK,IAAMA,EAAIA,GAK1E,iBAAVs8K,GAAsBA,aAAkBr8K,SAAWsiE,GAAyB,mBAAV+5G,MAA2BA,IAAUwhL,EAAQxhL,IAQzH,MAPoB,mBAAVA,EACJv7K,aAAiBu7K,GACrB0hL,EAAS,+CAAiD1hL,EAAO5/J,MAE1D4/J,GACR0hL,EAAS,sCAAwC1hL,GAE3C,KASR,SAAS2hL,EAAUx0V,EAAK1I,GACvB,GAAG0I,EAAK,CACP,GAAkB,iBAARA,GAA4B,OAARA,IACnB,QAARA,EAA2B,OAAV1I,SAAwBA,GAAS0I,MACjD1I,aAAiBd,OAAiB,SAARwJ,MAC1B1I,aAAiB6F,MAAgB,QAAR6C,KACjB,WAARA,GAAqB1I,EAAM,IAAI,GAClC,MAAO,CAAC,CAACoxC,SAASowB,EAAKk3B,QAAQ14F,EAAQ,aAAgBA,EAAS,uBAAyB0I,EAAO,iBAEjG,GAAGA,aAAgBxJ,MAAM,CAExB,IADA,IAAIi+V,EAAY,GACRptU,EAAI,EAAGA,EAAIrnB,EAAKzI,SAClBk9V,EAAYD,EAAUx0V,EAAKqnB,GAAG/vB,IAAQC,OADZ8vB,KAKhC,GAAGotU,EAAYl9V,OACd,OAAOk9V,CAER,MAAK,GAAkB,iBAARz0V,EAAiB,CAChC,IAAI00V,EAAc16R,EAClBA,EAAS,GACTs6R,EAAUh9V,EAAM0I,EAAK84D,GACrB,IAAI67R,EAAc36R,EAElB,OADAA,EAAS06R,EACFC,CACP,CACD,CACD,MAAO,EACP,CACD,GArCGP,GAAavhL,EAAO+hL,UACtBL,EAAS,8CAEP1hL,EAAM,SACRyhL,EAAUh9V,EAAMu7K,EAAM,QAAY/5G,EAAKviE,QAiC3ByL,IAAV1K,EACCu7K,EAAOoQ,UACTsxK,EAAS,sCAOV,GAJAv6R,EAASA,EAAO07E,OAAO8+M,EAAUH,EAAQxhL,GAAQv7K,IAC9Cu7K,EAAOgiL,WAAaL,EAAU3hL,EAAOgiL,SAASv9V,GAAOC,QACvDg9V,EAAS,iCAEG,OAAVj9V,EAAe,CACjB,GAAGA,aAAiBd,MAAM,CACzB,GAAGq8K,EAAO/mB,MAAM,CACf,IAAIgpM,EAAejiL,EAAO/mB,iBAAiBt1J,MACvCu+V,EAAUliL,EAAO/mB,MACrB,IAAKv1J,EAAI,EAAGgS,EAAIjR,EAAMC,OAAQhB,EAAIgS,EAAGhS,GAAK,EACrCu+V,IACHC,EAAUliL,EAAO/mB,MAAMv1J,IACpBkC,EAAQmjJ,SACXtkJ,EAAMf,GAAKkC,EAAQmjJ,OAAOtkJ,EAAMf,GAAIw+V,IACrC/6R,EAAO07E,OAAO4+M,EAAUh9V,EAAMf,GAAGw+V,EAAQj8R,EAAKviE,GAE/C,CACEs8K,EAAO8W,UAAYryL,EAAMC,OAASs7K,EAAO8W,UAC3C4qK,EAAS,8BAAgC1hL,EAAO8W,SAAW,iBAEzD9W,EAAO6W,UAAYpyL,EAAMC,OAASs7K,EAAO6W,UAC3C6qK,EAAS,8BAAgC1hL,EAAO6W,SAAW,gBAE5D,MAAQ7W,EAAOt2H,YAAcs2H,EAAOqY,uBACpClxH,EAAO07E,OAAOs/M,EAAS19V,EAAOu7K,EAAOt2H,WAAYuc,EAAM+5G,EAAOqY,uBAmB/D,GAjBGrY,EAAOxvE,SAA2B,iBAAT/rG,IAAsBA,EAAM+D,MAAMw3K,EAAOxvE,UACpEkxP,EAAS,oCAAsC1hL,EAAOxvE,SAEpDwvE,EAAOzH,WAA6B,iBAAT9zK,GAAqBA,EAAMC,OAASs7K,EAAOzH,WACxEmpL,EAAS,eAAiB1hL,EAAOzH,UAAY,oBAE3CyH,EAAO+W,WAA6B,iBAATtyL,GAAqBA,EAAMC,OAASs7K,EAAO+W,WACxE2qK,EAAS,oBAAsB1hL,EAAO+W,UAAY,oBAEtB,qBAAnB/W,EAAO4W,gBAAkCnyL,UAAgBu7K,EAAO4W,SACxE5W,EAAO4W,QAAUnyL,GAClBi9V,EAAS,gCAAkC1hL,EAAO4W,SAEtB,qBAAnB5W,EAAO2W,gBAAkClyL,UAAgBu7K,EAAO2W,SACxE3W,EAAO2W,QAAUlyL,GAClBi9V,EAAS,gCAAkC1hL,EAAO2W,SAEhD3W,EAAM,KAAS,CACjB,IAEI8pE,EAFAs4G,EAASpiL,EAAM,KACnBtqK,EAAI0sV,EAAO19V,OAEX,IAAI,IAAI8vB,EAAI,EAAGA,EAAI9e,EAAG8e,IACrB,GAAG4tU,EAAO5tU,KAAK/vB,EAAM,CACpBqlP,EAAM,EACN,KACA,CAEEA,GACH43G,EAAS,4CAA8CU,EAAOz6R,KAAK,MAEpE,CAC8B,iBAArBq4G,EAAOqiL,YACf59V,EAAM2L,WAAW5H,MAAM,IAAImzG,OAAO,aAAeqkE,EAAOqiL,WAAa,GAAK,QAC3EX,EAAS,iBAAmB1hL,EAAOqiL,WAAa,4BAEjD,CAEF,OAAO,IACP,CAED,SAASF,EAAStyV,EAASyyV,EAAWr8R,EAAKs8R,GAE1C,GAAuB,iBAAbD,EAKT,IAAI,IAAI5+V,KAJc,iBAAZmM,GAAwBA,aAAoBlM,QACrDwjE,EAAO3iE,KAAK,CAACqxC,SAASowB,EAAKk3B,QAAQ,0BAGvBmlQ,EACZ,GAAGA,EAAWzuL,eAAenwK,IAAW,aAALA,GAAyB,eAALA,EAAmB,CACzE,IAAIe,EAAQoL,EAASgkK,eAAenwK,GAAKmM,EAASnM,QAAKyL,EAEvD,QAAcA,IAAV1K,GAAuBmB,EAAQ48V,aAAc,SACjD,IAAIN,EAAUI,EAAW5+V,QAEZyL,IAAV1K,GAAuBy9V,EAAO,UAChCz9V,EAAQoL,EAASnM,GAAKw+V,EAAO,SAE3Bt8V,EAAQmjJ,QAAUrlJ,KAAKmM,IACzBpL,EAAQoL,EAASnM,GAAKkC,EAAQmjJ,OAAOtkJ,EAAOy9V,IAE7CT,EAAUh9V,EAAMy9V,EAAQj8R,EAAKviE,EAC7B,CAGH,IAAIA,KAAKmM,EAAS,CACjB,GAAGA,EAASgkK,eAAenwK,KAAuB,KAAfA,EAAE6e,OAAO,IAA4B,KAAf7e,EAAE6e,OAAO,KAAc+/U,IAAeA,EAAW5+V,KAAuB,IAAjB6+V,EAAuB,CACtI,GAAI38V,EAAQ+B,OAAQ,QACZkI,EAASnM,GAChB,QACA,CACAyjE,EAAO3iE,KAAK,CAACqxC,SAASowB,EAAKk3B,QAAQ,gBAAkBz5F,EACpD,qFAEF,CACD,IAAI++V,EAAWH,GAAcA,EAAW5+V,IAAM4+V,EAAW5+V,GAAG++V,SACzDA,KAAcA,KAAY5yV,IAC5Bs3D,EAAO3iE,KAAK,CAACqxC,SAASowB,EAAKk3B,QAAQ,gCAAkCz5F,EAAI,kBAAoB++V,EAAW,qBAEzGh+V,EAAQoL,EAASnM,IACd6+V,GAAqBD,GAAmC,iBAAdA,GAA6B5+V,KAAK4+V,IAC3E18V,EAAQmjJ,SACVtkJ,EAAQoL,EAASnM,GAAKkC,EAAQmjJ,OAAOtkJ,EAAO89V,IAE7Cd,EAAUh9V,EAAM89V,EAAet8R,EAAKviE,KAEjC69V,GAAa98V,GAASA,EAAMm8K,UAC/Bz5G,EAASA,EAAO07E,OAAO4+M,EAAUh9V,EAAMA,EAAMm8K,QAAQ36G,EAAKviE,IAE3D,CACD,OAAOyjE,CACP,CAOD,OANG64G,GACFyhL,EAAU5xV,EAASmwK,EAAO,GAAGuhL,GAAa,KAEvCA,GAAa1xV,GAAYA,EAAS+wK,SACrC6gL,EAAU5xV,EAASA,EAAS+wK,QAAQ,GAAG,IAEjC,CAAC7yE,OAAO5mC,EAAOziE,OAAOyiE,OAAOA,EACpC,EAUD,OATAsqE,EAAQixN,YAAc,SAASxoR,GAI9B,IAAIA,EAAO6zB,MACV,MAAM,IAAIlpG,UAAUq1E,EAAO/S,OAAOz7D,KAAI,SAASmD,GAAO,MAAO,gBAAkBA,EAAMgnC,SAAW,KAAOhnC,EAAMsuF,OAAS,IAAEx1B,KAAK,QAE9H,EAEM8pE,CACN,CA7PkB6oJ,EADL,UAAC,SAAD,0CCTd,SAASqoE,EAAWC,EAAUC,GAC5B,IAAI7hK,EAAQ,GAAIx5L,EAAO,GAOvB,OALqB,MAAjBq7V,IAAuBA,EAAgB,SAAS97V,EAAKtC,GACvD,OAAIu8L,EAAM,KAAOv8L,EAAc,eACxB,eAAiB+C,EAAKiO,MAAM,EAAGurL,EAAMp4L,QAAQnE,IAAQkjE,KAAK,KAAO,GACzE,GAEM,SAAS5gE,EAAKtC,GACnB,GAAIu8L,EAAMt8L,OAAS,EAAG,CACpB,IAAIo+V,EAAU9hK,EAAMp4L,QAAQ9C,OAC3Bg9V,EAAU9hK,EAAM1rL,OAAOwtV,EAAU,GAAK9hK,EAAMx8L,KAAKsB,OACjDg9V,EAAUt7V,EAAK8N,OAAOwtV,EAAS5xU,IAAUnqB,GAAOS,EAAKhD,KAAKuC,IACtDi6L,EAAMp4L,QAAQnE,KAAQA,EAAQo+V,EAAcx+V,KAAKyB,KAAMiB,EAAKtC,GAClE,MACIu8L,EAAMx8L,KAAKC,GAEhB,OAAmB,MAAZm+V,EAAmBn+V,EAAQm+V,EAASv+V,KAAKyB,KAAMiB,EAAKtC,EAC5D,CACF,EA1BSwkK,EAAOx3B,QAGjB,SAAmB3qI,EAAK87V,EAAUG,EAAQF,GACxC,OAAO/7U,KAAKE,UAAUlgB,EAAK67V,EAAWC,EAAUC,GAAgBE,EACjE,GAJOC,aAAeL,yBCDvB,IAAIM,EAAM/jL,EAAQ,OAElBjW,EAAOx3B,QAAU,SAAUyxN,EAAKt9V,GAC9BA,EAAUA,GAAW,CAAC,EACtB,IAAIw9J,EAAU6/L,EAAIjtP,OAAOktP,EAAKt9V,GAC9B,IAAKw9J,EAAW,OAAO,KACvB,IAAIte,EAAUse,EAAQte,QAGtB,GAAsB,kBAAZA,EACR,IACE,IAAIh+I,EAAMggB,KAAKC,MAAM+9H,GACV,OAARh+I,GAA+B,kBAARA,IACxBg+I,EAAUh+I,EAEC,CAAb,MAAOgG,GAAM,CAMjB,OAAyB,IAArBlH,EAAQggF,SACH,CACLi0C,OAAQupC,EAAQvpC,OAChBirB,QAASA,EACT3G,UAAWilB,EAAQjlB,WAGhB2G,CACR,yBC7BDmkB,EAAOx3B,QAAU,CACfz7B,OAAQkpE,EAAQ,OAChBvM,OAAQuM,EAAQ,OAChB9mJ,KAAM8mJ,EAAQ,OACdikL,kBAAmBjkL,EAAQ,OAC3BkkL,eAAgBlkL,EAAQ,OACxBmkL,kBAAmBnkL,EAAQ,2BCN7B,IAAIikL,EAAoB,SAAUhmQ,EAAStuF,GACzC4I,MAAMpT,KAAKyB,KAAMq3F,GACd1lF,MAAM2yM,mBACP3yM,MAAM2yM,kBAAkBtkN,KAAMA,KAAK4K,aAErC5K,KAAKsa,KAAO,oBACZta,KAAKq3F,QAAUA,EACXtuF,IAAO/I,KAAKgnV,MAAQj+U,EACzB,GAEDs0V,EAAkBnzV,UAAYhJ,OAAO2J,OAAO8G,MAAMzH,YACtBU,YAAcyyV,EAE1Cl6L,EAAOx3B,QAAU0xN,yBCbjB,IAAIA,EAAoBjkL,EAAQ,OAE5BkkL,EAAiB,SAAUjmQ,EAAS2pF,GACtCq8K,EAAkB9+V,KAAKyB,KAAMq3F,GAC7Br3F,KAAKsa,KAAO,iBACZta,KAAKghL,KAAOA,CACb,GAEDs8K,EAAepzV,UAAYhJ,OAAO2J,OAAOwyV,EAAkBnzV,YAElCU,YAAc0yV,EAEvCn6L,EAAOx3B,QAAU2xN,yBCZjB,IAAID,EAAoBjkL,EAAQ,OAE5BmkL,EAAoB,SAAUlmQ,EAASmmQ,GACzCH,EAAkB9+V,KAAKyB,KAAMq3F,GAC7Br3F,KAAKsa,KAAO,oBACZta,KAAKw9V,UAAYA,CAClB,GAEDD,EAAkBrzV,UAAYhJ,OAAO2J,OAAOwyV,EAAkBnzV,YAElCU,YAAc2yV,EAE1Cp6L,EAAOx3B,QAAU4xN,uCCZbE,EAASrkL,EAAQ,OAErBjW,EAAOx3B,QAAU8xN,EAAOC,UAAUjuN,EAAQ7wH,QAAS,6CCFnD,IAAIuqP,EAAK/vF,EAAQ,OAEjBjW,EAAOx3B,QAAU,SAAUjnI,EAAMi5V,GAC/B,IAAI/kK,EAAY+kK,GAAOx3V,KAAKQ,MAAMnC,KAAKC,MAAQ,KAE/C,GAAoB,kBAATC,EAAmB,CAC5B,IAAIk5V,EAAez0F,EAAGzkQ,GACtB,GAA4B,qBAAjBk5V,EACT,OAEF,OAAOz3V,KAAKQ,MAAMiyL,EAAYglK,EAAe,IAC9C,CAAM,MAAoB,kBAATl5V,EACTk0L,EAAYl0L,OAEnB,CAGH,qBCbD,IAAI2O,EAAI,IACJ1C,EAAQ,GAAJ0C,EACJqF,EAAQ,GAAJ/H,EACJ4H,EAAQ,GAAJG,EACJmJ,EAAQ,EAAJtJ,EACJtV,EAAQ,OAAJsV,EAqJR,SAASslV,EAAO10F,EAAI20F,EAAOptV,EAAG4J,GAC5B,IAAIyjV,EAAWD,GAAa,IAAJptV,EACxB,OAAOvK,KAAK0L,MAAMs3P,EAAKz4P,GAAK,IAAM4J,GAAQyjV,EAAW,IAAM,GAC5D,CAxID56L,EAAOx3B,QAAU,SAAUgyB,EAAK79J,GAC9BA,EAAUA,GAAW,CAAC,EACtB,IAAIuH,SAAcs2J,EAClB,GAAa,WAATt2J,GAAqBs2J,EAAI/+J,OAAS,EACpC,OAkBJ,SAAegzK,GAEb,IADAA,EAAMnkI,OAAOmkI,IACLhzK,OAAS,IACf,OAEF,IAAI8D,EAAQ,mIAAmI0Z,KAC7Iw1J,GAEF,IAAKlvK,EACH,OAEF,IAAIgO,EAAIyL,WAAWzZ,EAAM,IAEzB,QADYA,EAAM,IAAM,MAAM6N,eAE5B,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAOG,EAAIzN,EACb,IAAK,QACL,IAAK,OACL,IAAK,IACH,OAAOyN,EAAImR,EACb,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOnR,EAAI6H,EACb,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAO7H,EAAIgI,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOhI,EAAIC,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOD,EAAI2C,EACb,IAAK,eACL,IAAK,cACL,IAAK,QACL,IAAK,OACL,IAAK,KACH,OAAO3C,EACT,QACE,OAEL,CAzEUuQ,CAAM08I,GACR,GAAa,WAATt2J,GAAqBujC,SAAS+yH,GACvC,OAAO79J,EAAQk+V,KA0GnB,SAAiB70F,GACf,IAAI20F,EAAQ33V,KAAKG,IAAI6iQ,GACrB,GAAI20F,GAASvlV,EACX,OAAOslV,EAAO10F,EAAI20F,EAAOvlV,EAAG,OAE9B,GAAIulV,GAASplV,EACX,OAAOmlV,EAAO10F,EAAI20F,EAAOplV,EAAG,QAE9B,GAAIolV,GAASntV,EACX,OAAOktV,EAAO10F,EAAI20F,EAAOntV,EAAG,UAE9B,GAAImtV,GAASzqV,EACX,OAAOwqV,EAAO10F,EAAI20F,EAAOzqV,EAAG,UAE9B,OAAO81P,EAAK,KACb,CAzHyB80F,CAAQtgM,GAiFlC,SAAkBwrG,GAChB,IAAI20F,EAAQ33V,KAAKG,IAAI6iQ,GACrB,GAAI20F,GAASvlV,EACX,OAAOpS,KAAK0L,MAAMs3P,EAAK5wP,GAAK,IAE9B,GAAIulV,GAASplV,EACX,OAAOvS,KAAK0L,MAAMs3P,EAAKzwP,GAAK,IAE9B,GAAIolV,GAASntV,EACX,OAAOxK,KAAK0L,MAAMs3P,EAAKx4P,GAAK,IAE9B,GAAImtV,GAASzqV,EACX,OAAOlN,KAAK0L,MAAMs3P,EAAK91P,GAAK,IAE9B,OAAO81P,EAAK,IACb,CAhGwC+0F,CAASvgM,GAEhD,MAAM,IAAIhsJ,MACR,wDACEqP,KAAKE,UAAUy8I,GAEpB,+CCrCGwgM,EAAW/kL,EAAQ,OACnBglL,EAAehlL,EAAQ,OACvB+jL,EAAM/jL,EAAQ,OACdp8B,EAAWo8B,EAAQ,OACnBgyH,EAAYhyH,EAAQ,OACpBrmB,EAAYqmB,EAAQ,OACpB6P,EAAW7P,EAAQ,OACnBq8D,EAAgBr8D,EAAQ,OACxB+9D,EAAW/9D,EAAQ,OACnBliB,EAAOkiB,EAAQ,OAEfilL,EAAiB,CAAC,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QACnGD,GACFC,EAAe7uV,OAAO,EAAG,EAAG,QAAS,QAAS,SAGhD,IAAI8uV,EAAsB,CACxBC,UAAW,CAAEC,QAAS,SAAS7/V,GAAS,OAAOo0J,EAAUp0J,IAAWw4O,EAASx4O,IAAUA,CAAS,EAAE04F,QAAS,+EAC3GonQ,UAAW,CAAED,QAAS,SAAS7/V,GAAS,OAAOo0J,EAAUp0J,IAAWw4O,EAASx4O,IAAUA,CAAS,EAAE04F,QAAS,+EAC3GqnQ,SAAU,CAAEF,QAAS,SAAS7/V,GAAS,OAAOw4O,EAASx4O,IAAUd,MAAMC,QAAQa,EAAS,EAAE04F,QAAS,wCACnG++K,UAAW,CAAEooF,QAASxhN,EAASnzI,KAAK,KAAMw0V,GAAiBhnQ,QAAS,iDACpE08B,OAAQ,CAAEyqO,QAAS/oH,EAAep+I,QAAS,8BAC3Cp3E,SAAU,CAAEu+U,QAASrnH,EAAU9/I,QAAS,+BACxCsnQ,OAAQ,CAAEH,QAASrnH,EAAU9/I,QAAS,6BACtCunQ,QAAS,CAAEJ,QAASrnH,EAAU9/I,QAAS,8BACvCwnQ,MAAO,CAAEL,QAASrnH,EAAU9/I,QAAS,4BACrCynQ,YAAa,CAAEN,QAASpzD,EAAW/zM,QAAS,mCAC5C0nQ,MAAO,CAAEP,QAASrnH,EAAU9/I,QAAS,4BACrC2nQ,cAAe,CAAER,QAASpzD,EAAW/zM,QAAS,sCAG5C4nQ,EAA2B,CAC7BtB,IAAK,CAAEa,QAASv1K,EAAU5xF,QAAS,uCACnC3kF,IAAK,CAAE8rV,QAASv1K,EAAU5xF,QAAS,uCACnC6nQ,IAAK,CAAEV,QAASv1K,EAAU5xF,QAAS,wCAGrC,SAASsS,EAASuwE,EAAQ8+D,EAAcx3O,EAAQ29V,GAC9C,IAAK1pH,EAAcj0O,GACjB,MAAM,IAAImQ,MAAM,aAAewtV,EAAgB,2BAEjDj+V,OAAOQ,KAAKF,GACTa,SAAQ,SAASpB,GAChB,IAAI+xO,EAAY94D,EAAOj5K,GACvB,GAAK+xO,GAML,IAAKA,EAAUwrH,QAAQh9V,EAAOP,IAC5B,MAAM,IAAI0Q,MAAMqhO,EAAU37I,cAN1B,IAAK2hJ,EACH,MAAM,IAAIrnO,MAAM,IAAM1Q,EAAM,wBAA0Bk+V,EAAgB,IAO3E,GACJ,CAUD,IAAIC,EAAqB,CACvB,SAAY,MACZ,OAAU,MACV,QAAW,MACX,MAAS,OAGPC,EAAsB,CACxB,YACA,YACA,cACA,WACA,SACA,UACA,SAGFl8L,EAAOx3B,QAAU,SAAUqT,EAASsgN,EAAoBx/V,EAASunB,GACxC,oBAAZvnB,GACTunB,EAAWvnB,EACXA,EAAU,CAAC,GAEXA,EAAUA,GAAW,CAAC,EAGxB,IAAI+2O,EAAqC,kBAAZ73F,IACNpS,EAAOk2D,SAAS9jD,GAEnCjrB,EAAS7yH,OAAO6iB,OAAO,CACzBspR,IAAKvtS,EAAQs2Q,WAAa,QAC1BmpF,IAAK1oH,EAAkB,WAAQxtO,EAC/Bm2V,IAAK1/V,EAAQi/V,OACZj/V,EAAQi0H,QAEX,SAAS4vH,EAAQ9kP,GACf,GAAIwoB,EACF,OAAOA,EAASxoB,GAElB,MAAMA,CACP,CAED,IAAKygW,GAA4C,SAAtBx/V,EAAQs2Q,UACjC,OAAOzyB,EAAQ,IAAIhyO,MAAM,yCAG3B,GAAuB,qBAAZqtI,EACT,OAAO2kG,EAAQ,IAAIhyO,MAAM,wBACpB,GAAIklO,EAAiB,CAC1B,KApDJ,SAAyB73F,GAChBr1C,EAASs1P,GAA0B,EAAMjgN,EAAS,UAC1D,CAmDKygN,CAAgBzgN,EAIjB,CAFD,MAAOj2I,GACL,OAAO46O,EAAQ56O,EAChB,CACIjJ,EAAQk/V,gBACXhgN,EAAU99I,OAAO6iB,OAAO,CAAC,EAAEi7H,GAE9B,KAAM,CACL,IAAI0gN,EAAkBL,EAAoBx9V,QAAO,SAAUg3O,GACzD,MAA+B,qBAAjB/4O,EAAQ+4O,EACvB,IAED,GAAI6mH,EAAgB9gW,OAAS,EAC3B,OAAO+kP,EAAQ,IAAIhyO,MAAM,WAAa+tV,EAAgB79R,KAAK,KAAO,sBAAyBm9E,EAAY,YAE1G,CAED,GAA2B,qBAAhBA,EAAQtsI,KAAoD,qBAAtB5S,EAAQy+V,UACvD,OAAO56G,EAAQ,IAAIhyO,MAAM,8EAG3B,GAA2B,qBAAhBqtI,EAAQkgN,KAAoD,qBAAtBp/V,EAAQ2+V,UACvD,OAAO96G,EAAQ,IAAIhyO,MAAM,8EAG3B,KAnFF,SAAyB7R,GAChB6pG,EAAS20P,GAAqB,EAAOx+V,EAAS,UACtD,CAkFGw+I,CAAgBx+I,EAIjB,CAFD,MAAOiJ,GACL,OAAO46O,EAAQ56O,EAChB,CAED,IAAI6vL,EAAY55C,EAAQ2+M,KAAOx3V,KAAKQ,MAAMnC,KAAKC,MAAQ,KAQvD,GANI3E,EAAQg/V,mBACH9/M,EAAQ2+M,IACN9mH,IACT73F,EAAQ2+M,IAAM/kK,GAGiB,qBAAtB94L,EAAQ2+V,UAA2B,CAC5C,IACEz/M,EAAQkgN,IAAMf,EAASr+V,EAAQ2+V,UAAW7lK,EAI3C,CAFD,MAAO/5L,GACL,OAAO8kP,EAAQ9kP,EAChB,CACD,GAA2B,qBAAhBmgJ,EAAQkgN,IACjB,OAAOv7G,EAAQ,IAAIhyO,MAAM,mGAE5B,CAED,GAAiC,qBAAtB7R,EAAQy+V,WAAgD,kBAAZv/M,EAAsB,CAC3E,IACEA,EAAQtsI,IAAMyrV,EAASr+V,EAAQy+V,UAAW3lK,EAI3C,CAFD,MAAO/5L,GACL,OAAO8kP,EAAQ9kP,EAChB,CACD,GAA2B,qBAAhBmgJ,EAAQtsI,IACjB,OAAOixO,EAAQ,IAAIhyO,MAAM,mGAE5B,CAEDzQ,OAAOQ,KAAK09V,GAAoB/8V,SAAQ,SAAUpB,GAChD,IAAI0+V,EAAQP,EAAmBn+V,GAC/B,GAA4B,qBAAjBnB,EAAQmB,GAAsB,CACvC,GAA8B,qBAAnB+9I,EAAQ2gN,GACjB,OAAOh8G,EAAQ,IAAIhyO,MAAM,gBAAkB1Q,EAAM,yCAA2C0+V,EAAQ,gBAEtG3gN,EAAQ2gN,GAAS7/V,EAAQmB,EAC1B,CACF,IAED,IAAIgf,EAAWngB,EAAQmgB,UAAY,OAEnC,GAAwB,oBAAboH,EAaT,OAAO81U,EAAI7qU,KAAK,CAACyhG,OAAQA,EAAQirB,QAASA,EAAS0qF,OAAQ41H,EAAoBr/U,SAAUA,IAZzFoH,EAAWA,GAAY6vI,EAAK7vI,GAE5B81U,EAAIxmF,WAAW,CACb5iJ,OAAQA,EACRi8C,WAAYsvL,EACZtgN,QAASA,EACT/+H,SAAUA,IACTi3I,KAAK,QAAS7vI,GACd6vI,KAAK,QAAQ,SAAU7e,GACtBhxH,EAAS,KAAMgxH,EAChB,GAIN,yBC7MD,IAAIglN,EAAoBjkL,EAAQ,OAC5BkkL,EAAoBlkL,EAAQ,OAC5BmkL,EAAoBnkL,EAAQ,OAC5BlpE,EAAoBkpE,EAAQ,OAC5B+kL,EAAoB/kL,EAAQ,OAC5BglL,EAAoBhlL,EAAQ,OAC5B+jL,EAAoB/jL,EAAQ,OAE5BwmL,EAAe,CAAC,QAAS,QAAS,QAAS,QAAS,QAAS,SAC7DC,EAAe,CAAC,QAAS,QAAS,SAClCC,EAAU,CAAC,QAAS,QAAS,SAE7B1B,IACFwB,EAAapwV,OAAO,EAAG,EAAG,QAAS,QAAS,SAC5CqwV,EAAarwV,OAAO,EAAG,EAAG,QAAS,QAAS,UAG9C2zJ,EAAOx3B,QAAU,SAAUo0N,EAAWC,EAAmBlgW,EAASunB,GAahE,IAAI5oB,EAWJ,GAvBwB,oBAAZqB,GAA4BunB,IACtCA,EAAWvnB,EACXA,EAAU,CAAC,GAGRA,IACHA,EAAU,CAAC,GAIbA,EAAUoB,OAAO6iB,OAAO,CAAC,EAAGjkB,GAK1BrB,EADE4oB,GAGK,SAASxoB,EAAK2f,GACnB,GAAI3f,EAAK,MAAMA,EACf,OAAO2f,CACR,EAGC1e,EAAQmgW,gBAAoD,kBAA3BngW,EAAQmgW,eAC3C,OAAOxhW,EAAK,IAAI4+V,EAAkB,oCAGpC,QAAsBh0V,IAAlBvJ,EAAQ26I,QAAiD,kBAAlB36I,EAAQ26I,OAA+C,KAAzB36I,EAAQ26I,MAAMl5E,QACrF,OAAO9iE,EAAK,IAAI4+V,EAAkB,qCAGpC,IAAI4C,EAAiBngW,EAAQmgW,gBAAkB95V,KAAKQ,MAAMnC,KAAKC,MAAQ,KAEvE,IAAKs7V,EACH,OAAOthW,EAAK,IAAI4+V,EAAkB,yBAGpC,GAAyB,kBAAd0C,EACT,OAAOthW,EAAK,IAAI4+V,EAAkB,yBAGpC,IAMI6C,EANAz9V,EAAQs9V,EAAUp+R,MAAM,KAE5B,GAAqB,IAAjBl/D,EAAM7D,OACR,OAAOH,EAAK,IAAI4+V,EAAkB,kBAKpC,IACE6C,EAAehwP,EAAO6vP,EAAW,CAAEjgR,UAAU,GAG9C,CAFC,MAAMjhF,GACN,OAAOJ,EAAKI,EACb,CAED,IAAKqhW,EACH,OAAOzhW,EAAK,IAAI4+V,EAAkB,kBAGpC,IACI19C,EADA5rL,EAASmsO,EAAansO,OAG1B,GAAgC,oBAAtBisO,EAAkC,CAC1C,IAAI34U,EACF,OAAO5oB,EAAK,IAAI4+V,EAAkB,yFAGpC19C,EAAYqgD,CACb,MAECrgD,EAAY,SAAS5rL,EAAQosO,GAC3B,OAAOA,EAAe,KAAMH,EAC7B,EAGH,OAAOrgD,EAAU5rL,GAAQ,SAASl1H,EAAKmhW,GACrC,GAAGnhW,EACD,OAAOJ,EAAK,IAAI4+V,EAAkB,2CAA6Cx+V,EAAIw4F,UAGrF,IAyBI4Q,EAzBAm4P,EAAmC,KAApB39V,EAAM,GAAG8+D,OAE5B,IAAK6+R,GAAgBJ,EACnB,OAAOvhW,EAAK,IAAI4+V,EAAkB,8BAGpC,GAAI+C,IAAiBJ,EACnB,OAAOvhW,EAAK,IAAI4+V,EAAkB,0CAcpC,GAXK+C,GAAiBtgW,EAAQo2Q,aAC5Bp2Q,EAAQo2Q,WAAa,CAAC,SAGnBp2Q,EAAQo2Q,aACXp2Q,EAAQo2Q,YAAc8pF,EAAkB11V,WAAWxH,QAAQ,uBACxDk9V,EAAkB11V,WAAWxH,QAAQ,oBAAsB88V,GAC3DI,EAAkB11V,WAAWxH,QAAQ,wBAA0B+8V,EAAeC,KAI7EhgW,EAAQo2Q,WAAWpzQ,QAAQo9V,EAAansO,OAAOs5K,KACnD,OAAO5uS,EAAK,IAAI4+V,EAAkB,sBAKpC,IACEp1P,EAAQk1P,EAAItwL,OAAOkzL,EAAWG,EAAansO,OAAOs5K,IAAK2yD,EAGxD,CAFC,MAAOh5V,GACP,OAAOvI,EAAKuI,EACb,CAED,IAAKihG,EACH,OAAOxpG,EAAK,IAAI4+V,EAAkB,sBAGpC,IAAIr+M,EAAUkhN,EAAalhN,QAE3B,GAA2B,qBAAhBA,EAAQkgN,MAAwBp/V,EAAQugW,gBAAiB,CAClE,GAA2B,kBAAhBrhN,EAAQkgN,IACjB,OAAOzgW,EAAK,IAAI4+V,EAAkB,sBAEpC,GAAIr+M,EAAQkgN,IAAMe,GAAkBngW,EAAQwgW,gBAAkB,GAC5D,OAAO7hW,EAAK,IAAI6+V,EAAe,iBAAkB,IAAI94V,KAAmB,IAAdw6I,EAAQkgN,MAErE,CAED,GAA2B,qBAAhBlgN,EAAQtsI,MAAwB5S,EAAQygW,iBAAkB,CACnE,GAA2B,kBAAhBvhN,EAAQtsI,IACjB,OAAOjU,EAAK,IAAI4+V,EAAkB,sBAEpC,GAAI4C,GAAkBjhN,EAAQtsI,KAAO5S,EAAQwgW,gBAAkB,GAC7D,OAAO7hW,EAAK,IAAI8+V,EAAkB,cAAe,IAAI/4V,KAAmB,IAAdw6I,EAAQtsI,MAErE,CAED,GAAI5S,EAAQ4+V,SAAU,CACpB,IAAI8B,EAAY3iW,MAAMC,QAAQgC,EAAQ4+V,UAAY5+V,EAAQ4+V,SAAW,CAAC5+V,EAAQ4+V,UAS9E,KARa7gW,MAAMC,QAAQkhJ,EAAQyhN,KAAOzhN,EAAQyhN,IAAM,CAACzhN,EAAQyhN,MAE9C19I,MAAK,SAAU29I,GAChC,OAAOF,EAAUz9I,MAAK,SAAU27I,GAC9B,OAAOA,aAAoB7oP,OAAS6oP,EAASjhV,KAAKijV,GAAkBhC,IAAagC,CAClF,GACF,IAGC,OAAOjiW,EAAK,IAAI4+V,EAAkB,mCAAqCmD,EAAU3+R,KAAK,SAEzF,CAED,GAAI/hE,EAAQ6+V,SAEyB,kBAAnB7+V,EAAQ6+V,QAAuB3/M,EAAQ2hN,MAAQ7gW,EAAQ6+V,QAC9D9gW,MAAMC,QAAQgC,EAAQ6+V,UAAoD,IAAzC7+V,EAAQ6+V,OAAO77V,QAAQk8I,EAAQ2hN,MAGvE,OAAOliW,EAAK,IAAI4+V,EAAkB,iCAAmCv9V,EAAQ6+V,SAIjF,GAAI7+V,EAAQ8+V,SACN5/M,EAAQx0H,MAAQ1qB,EAAQ8+V,QAC1B,OAAOngW,EAAK,IAAI4+V,EAAkB,kCAAoCv9V,EAAQ8+V,UAIlF,GAAI9+V,EAAQ++V,OACN7/M,EAAQ4hN,MAAQ9gW,EAAQ++V,MAC1B,OAAOpgW,EAAK,IAAI4+V,EAAkB,gCAAkCv9V,EAAQ++V,QAIhF,GAAI/+V,EAAQ26I,OACNuE,EAAQvE,QAAU36I,EAAQ26I,MAC5B,OAAOh8I,EAAK,IAAI4+V,EAAkB,gCAAkCv9V,EAAQ26I,QAIhF,GAAI36I,EAAQwwU,OAAQ,CAClB,GAA2B,kBAAhBtxL,EAAQ2+M,IACjB,OAAOl/V,EAAK,IAAI4+V,EAAkB,0CAGpC,IAAIwD,EAAkB1C,EAASr+V,EAAQwwU,OAAQtxL,EAAQ2+M,KACvD,GAA+B,qBAApBkD,EACT,OAAOpiW,EAAK,IAAI4+V,EAAkB,iGAEpC,GAAI4C,GAAkBY,GAAmB/gW,EAAQwgW,gBAAkB,GACjE,OAAO7hW,EAAK,IAAI8+V,EAAkB,kBAAmB,IAAI/4V,KAAuB,IAAlBq8V,IAEjE,CAED,IAAyB,IAArB/gW,EAAQggF,SAAmB,CAC7B,IAAIu4D,EAAY6nN,EAAa7nN,UAE7B,OAAO55I,EAAK,KAAM,CAChBs1H,OAAQA,EACRirB,QAASA,EACT3G,UAAWA,GAEd,CAED,OAAO55I,EAAK,KAAMugJ,EACnB,GACF,yBC5ND,IAAIogM,EAAahmK,EAAQ,OAGrB0nL,GAFW1nL,EAAQ,OAEFA,EAAQ,QACzB2nL,EAAa3nL,EAAQ,OACrB4nL,EAAiB5nL,EAAQ,OAsH7B,SAAS6nL,EAAOjgW,EAAKC,GAGpB,OADAm+U,EAAWxhL,aAAc38J,EAAM,UACvBC,OAAOgJ,UAAU6jK,eAAexvK,KAAKyC,EAAKC,EAClD,CAiBD,SAASigW,EAAOlgW,EAAKC,GAEpB,GAAY,OAARD,GAAiC,kBAATA,EAA5B,CAGA,GAAIA,EAAI+sK,eAAe9sK,GACtB,OAAQD,EAAIC,GAEb,IAAIrD,EAAIqD,EAAI6B,QAAQ,KACpB,IAAU,GAANlF,EAAJ,CAGA,IAAI2qO,EAAOtnO,EAAI0zK,OAAO,EAAG/2K,GACzB,GAAKoD,EAAI+sK,eAAew6D,GAGxB,OAAQ24H,EAAOlgW,EAAIunO,GAAOtnO,EAAI0zK,OAAO/2K,EAAI,GANxC,CAPA,CAcD,CAaD,SAASujW,EAAc3iV,EAAM4E,EAAOw/H,EAAOv7H,GAE1C,IAAIiwO,EACAr2P,EAEJ,GAAc,IAAVmiB,EAIH,OAHAk0O,EAAO10G,EAAMjzI,MAAM,IACdjR,KAAK8f,QACV6I,EAASiwO,GASV,IAAKr2P,KALLm+U,EAAW79I,GAAY,OAAT/iL,GACd4gU,EAAWxhL,aAAcp/I,EAAO,UAChC4gU,EAAWxhL,aAAcx6I,EAAQ,UACjCg8T,EAAW79I,GAAGn+K,GAAS,GAEX5E,GACX84O,EAAO10G,EAAMjzI,MAAM,IACdjR,KAAKuC,GACVkgW,EAAc3iV,EAAKvd,GAAMmiB,EAAQ,EAAGk0O,EAAMjwO,EAE3C,CA1LDskH,EAAQmqB,SAqCR,SAASA,EAAS90J,GAEjB,IAAIgoN,EAAK/nN,EACLmgW,EAAS,aAEb,GAAIpgW,GAAOA,EAAIogW,GACd,MAAO,IAAIzvV,MAAM,wCAElB,GAAI3Q,GAAOA,EAAI4J,aAAe1J,OAAQ,CAIrC,IAAKD,KAHL+nN,EAAM,CAAC,EACPhoN,EAAIogW,IAAU,EAEFpgW,EACPC,GAAOmgW,IAGXp4I,EAAI/nN,GAAO60J,EAAS90J,EAAIC,KAIzB,cADQD,EAAIogW,GACJp4I,CACR,CAED,GAAIhoN,GAAOA,EAAI4J,aAAe/M,MAAO,CAIpC,IAHAmrN,EAAM,GACNhoN,EAAIogW,IAAU,EAETngW,EAAM,EAAGA,EAAMD,EAAIpC,OAAQqC,IAC/B+nN,EAAItqN,KAAKo3J,EAAS90J,EAAIC,KAGvB,cADQD,EAAIogW,GACJp4I,CACR,CAKD,OAAQhoN,CACR,EA1ED2qI,EAAQ+xF,UA4ER,SAASA,EAAU2jI,EAAMC,GAExB,UAAYD,UAAiBC,EAC5B,OAAQ,EAET,GAAa,OAATD,GAA0B,OAATC,GAAkC,iBAATD,EAC7C,OAAQA,IAASC,EAElB,GAAID,EAAKz2V,aAAe02V,EAAK12V,YAC5B,OAAQ,EAET,IAAImqE,EACJ,IAAKA,KAAKssR,EAAM,CACf,IAAKC,EAAKvzL,eAAeh5F,GACxB,OAAQ,EAET,IAAK2oJ,EAAU2jI,EAAKtsR,GAAIusR,EAAKvsR,IAC5B,OAAQ,CACT,CAED,IAAKA,KAAKusR,EACT,IAAKD,EAAKtzL,eAAeh5F,GACxB,OAAQ,EAGV,OAAQ,CACR,EArGD42D,EAAQx/G,QAuGR,SAAiBnrB,GAEhB,IAAIC,EACJ,IAAKA,KAAOD,EACX,OAAQ,EACT,OAAQ,CACR,EA5GD2qI,EAAQs1N,OAASA,EACjBt1N,EAAQ41N,WAmHR,SAAoBvgW,EAAKqmB,GAExB,IAAK,IAAIpmB,KAAOD,EACXigW,EAAOjgW,EAAKC,IACfomB,EAASpmB,EAAKD,EAAIC,GAGpB,EAzHD0qI,EAAQ61N,MA2HR,SAAexgW,EAAKC,GAGnB,OADAm+U,EAAWxhL,aAAc38J,EAAM,UACvBigW,EAAOlgW,EAAKC,EACpB,EA9HD0qI,EAAQ81N,cAsLR,SAASA,EAAcjjV,EAAM4E,GAE5B,GAAc,IAAVA,EACH,MAAQ,CAAE5E,GAEX4gU,EAAW79I,GAAY,OAAT/iL,GACd4gU,EAAWxhL,aAAcp/I,EAAO,UAChC4gU,EAAWxhL,aAAcx6I,EAAQ,UACjCg8T,EAAW79I,GAAGn+K,GAAS,GAEvB,IACIniB,EADAygW,EAAK,GAGT,IAAKzgW,KAAOud,EACXijV,EAAcjjV,EAAKvd,GAAMmiB,EAAQ,GAAG/gB,SAAQ,SAAUmZ,GACrDkmV,EAAGhjW,KAAK,CAAEuC,GAAM87I,OAAOvhI,GACvB,IAGF,OAAQkmV,CACR,EAzMD/1N,EAAQg2N,YAwJR,SAAqBnjV,EAAM4E,EAAOiE,GAEjC85U,EAAc3iV,EAAM4E,EAAO,GAAIiE,EAC/B,EA1JDskH,EAAQi2N,mBAAqBC,EAC7Bl2N,EAAQk2N,qBAAuBA,EAC/Bl2N,EAAQm2N,QA4hBR,SAAiBnkW,GAKhB,OAHAyhV,EAAW79I,GAAG1jM,MAAMC,QAAQH,IAAQA,EAAIiB,OAAS,EAC7C,8CAEIjB,EAAIwI,KAAKQ,MAAMR,KAAKS,SAAWjJ,EAAIiB,QAC3C,EAjiBD+sI,EAAQo2N,gBA0pBR,SAAyB/gW,EAAK21U,GAE7ByI,EAAW79I,GAAoB,kBAATvgM,GAA6B,OAARA,EACvC,0CACJo+U,EAAW79I,GAAG1jM,MAAMC,QAAQ64U,GACxB,gDACJ,IAAK,IAAI/4U,EAAI,EAAGA,EAAI+4U,EAAQ/3U,OAAQhB,IACnCwhV,EAAW79I,GAA2B,kBAAhBo1I,EAAQ/4U,GAC1B,gDAGL,OAAQsD,OAAOQ,KAAKV,GAAKa,QAAO,SAAUZ,GACzC,OAAkC,IAA1B01U,EAAQ7zU,QAAQ7B,EACxB,GACD,EAvqBD0qI,EAAQq2N,aAAeA,EAEvBr2N,EAAQmuJ,WAoMR,SAAoBloH,EAAK7oG,GAExB,OAAQ6oG,EAAI+C,OAAO,EAAG5rG,EAAOnqE,SAAWmqE,CACxC,EAtMD4iE,EAAQ80F,SAwMR,SAAkB7uD,EAAKwxF,GAEtB,OAAQxxF,EAAI+C,OACR/C,EAAIhzK,OAASwkQ,EAAOxkQ,OAAQwkQ,EAAOxkQ,SAAWwkQ,CAClD,EA1MDz3H,EAAQs2N,aA4SR,SAAsBrwL,EAAKswL,GAE1B9iB,EAAWljU,OAAO01J,EAAK,OACvBwtK,EAAW+iB,eAAeD,EAAO,WAEjC,IA2BIruV,EA3BAuuV,GAAe,EACftiW,EAAUuiW,EAEVH,IACHE,EAAenB,EAAOiB,EAAO,QAC7BpiW,EAAUkiW,EAAaliW,EAASoiW,GAChC9iB,EAAWviL,OAAO/8J,EAAQiqK,KAAM,gBAChCq1K,EAAW79I,GAAGzhM,EAAQiqK,MAAQ,EAAG,qBACjCq1K,EAAW79I,GAAGzhM,EAAQiqK,MAAQ,GAAI,sBAClCq1K,EAAW/jH,KAAKv7N,EAAQwiW,UAAW,qBACnCljB,EAAW/jH,KAAKv7N,EAAQyiW,YAAa,uBACrCnjB,EAAW/jH,KAAKv7N,EAAQ0iW,cACpB,yBACJpjB,EAAW/jH,KAAKv7N,EAAQ2iW,eACpB,0BACJrjB,EAAW/jH,KAAKv7N,EAAQ4iW,eACpB,0BACJtjB,EAAW/jH,KAAKv7N,EAAQ6iW,mBACpB,8BAEA7iW,EAAQ6iW,oBACXvjB,EAAW79I,IAAI6gK,EACX,2DAMN,IAEIj6T,EAFAy6T,GAAS,EACT74L,EAAOjqK,EAAQiqK,KAEf84L,EAAO,EACPlkW,EAAQ,EACRmkW,EAAM,EACNx6U,EAAMspJ,EAAIhzK,OAGd,GAAIkB,EAAQ4iW,eACX,KAAOI,EAAMx6U,GAAOy6U,EAAQnxL,EAAI/hB,WAAWizM,OACxCA,EAKAhjW,EAAQwiW,YACM,MAAb1wL,EAAIkxL,IACPA,GAAO,EACPD,GAAQ,GACe,MAAbjxL,EAAIkxL,KACdA,GAAO,IAKQ,MAAblxL,EAAIkxL,KACHhjW,EAAQyiW,cACXK,EAmHH,SAAsB/uV,GAErB,OAjMU,KAiMNA,GAxMM,KAwMQA,EAET,EAlMC,MAmMCA,GA1MD,KA0MeA,EAEhB,EApMC,MAqMCA,GA5MD,KA4MeA,EAEhB,GAtMC,MAuMCA,GA9MD,KA8MeA,EAEhB,IAGC,CAEV,CArIUmvV,CAAapxL,EAAI/hB,WAAWizM,EAAM,KAC3B,IAAXF,GAAkBR,GAAgBQ,IAAU74L,IAC/CA,EAAO64L,EACPE,GAAO,KAIM,IAAXF,GAAgB9iW,EAAQ6iW,qBAC3B54L,EAAO,IAKT,IAAK5hI,EAAQ26T,EAAKA,EAAMx6U,KAEZ,KADXzU,EAAIovV,EAAerxL,EAAI/hB,WAAWizM,MAClBjvV,EAAIk2J,KAFU+4L,EAG7BnkW,GAASorK,EACTprK,GAASkV,EAOX,GAAIs0B,IAAU26T,EACb,OAAQ,IAAInxV,MAAM,mBAAqBqP,KAAKE,UAAU0wJ,IAIvD,GAAI9xK,EAAQ4iW,eACX,KAAOI,EAAMx6U,GAAOy6U,EAAQnxL,EAAI/hB,WAAWizM,OACxCA,EAKJ,GAAIA,EAAMx6U,IAAQxoB,EAAQ0iW,cACzB,OAAQ,IAAI7wV,MAAM,qCACdqP,KAAKE,UAAU0wJ,EAAIjiK,MAAMmzV,KAI9B,GAAc,IAAVnkW,EACH,OAAQ,EAIT,IAAIy1E,EAASz1E,EAAQkkW,EAcrB,IAAK/iW,EAAQ2iW,iBACR9jW,EAAQk7D,GAAoBua,EAAS8uR,GACzC,OAAQ,IAAIvxV,MAAM,6CACdqP,KAAKE,UAAU0wJ,EAAIjiK,MAAMw4B,EAAO26T,KAGrC,OAAQ1uR,CACR,EA3aDu3D,EAAQw3N,QA0MR,SAAiB5qV,GAEE,iBAANA,IACXA,EAAI,IAAI/T,KAAK+T,IAEd,OADA6mU,EAAW79I,GAAGhpL,EAAE3N,cAAgBpG,MACxBs8V,EAAe/gB,QAAQ,qCAC3BxnU,EAAEouM,iBAAkBpuM,EAAEquM,cAAgB,EAAGruM,EAAEsuM,aAC3CtuM,EAAEuuM,cAAevuM,EAAEwuM,gBAAiBxuM,EAAEyuM,gBACtCzuM,EAAE6qV,qBACN,EAlNDz3N,EAAQikN,QA0NR,SAAiB5uK,GAChB,OAAQ8/K,EAAe/gB,QAAQ,sCAC3BsjB,EAAariL,EAAKsiL,aAActiL,EAAK6lC,aACrC08I,EAAeviL,EAAK4lC,eAAgB5lC,EAAK2lC,iBACzC3lC,EAAK8lC,cAAe9lC,EAAK+lC,gBACzB/lC,EAAKgmC,gBACT,EA/NDr7E,EAAQ63N,cAsOR,SAAuB5xL,GAUtB,IAAIc,GAAWd,EACf,OAAKxoI,MAAMspI,GAGF,IAAIluK,KAAKotK,GAFT,IAAIptK,KAAKkuK,EAIlB,EApPD/mC,EAAQ83N,WAAaC,EACrB/3N,EAAQ+3N,WAAaA,EACrB/3N,EAAQg4N,YAAcA,EACtBh4N,EAAQi4N,UA0nBR,SAAmB95V,EAAG8J,GAMrB,OAJAiwV,EAAa/5V,GAIL65V,EAFC,CAAE75V,EAAE,GAAIA,EAAE,IAEK8J,EACxB,EAhoBD+3H,EAAQm4N,cAyjBR,SAAuBh6V,GAItB,OAFA+5V,EAAa/5V,GAEL3D,KAAKQ,MAAa,IAAPmD,EAAE,GAAWA,EAAE,GAClC,EA7jBD6hI,EAAQo4N,eAmkBR,SAAwBj6V,GAIvB,OAFA+5V,EAAa/5V,GAEL3D,KAAKQ,MAAa,IAAPmD,EAAE,GAAWA,EAAE,GAAK,IACvC,EAvkBD6hI,EAAQq4N,eA6kBR,SAAwBl6V,GAIvB,OAFA+5V,EAAa/5V,GAEL3D,KAAKQ,MAAa,IAAPmD,EAAE,GAAWA,EAAE,GAAK,IACvC,EAvYD,IAAIy5V,EAAiB,CACjB,MAAO,MAAO,MAAO,MAAO,MAAO,MACnC,MAAO,MAAO,MAAO,MAAO,MAAO,OACnCF,EAAe,CACf,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAsC9C,IAAIxpS,EAAmBj3D,OAAOi3D,kBAAoB,iBAC9CqpS,EAAmBtgW,OAAOsgW,mBAAqB,iBAM/Cb,EAAc,CACjBt4L,KAAM,GACNu4L,WAAW,EACXC,aAAa,EACbC,eAAe,EACfC,gBAAgB,EAChBC,gBAAgB,EAChBC,oBAAoB,GAoKrB,SAASM,EAAe1qV,GAEvB,OAAIA,GAnKM,IAmKOA,GAlKP,GAoKDA,EApJQ,GAqJNA,GAnKD,IAmKcA,GA9Jd,GAgKDA,EAtJO,GAuJLA,GA/JD,IA+JcA,GA1Jd,IA4JDA,EAxJO,IA2JN,CAEV,CAMD,SAASwqV,EAAQlvV,GAEhB,OAAc,KAANA,GACHA,GAAK,GAAUA,GAAK,IACd,MAANA,GACM,OAANA,GACM,OAANA,GACAA,GAAK,MAAUA,GAAK,MACd,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACM,QAANA,GACM,QAANA,CACL,CA2BD,SAASguV,EAAqB3nL,EAAQ/3C,GAErC,IAAI8hO,EAASjD,EAAer3P,SAASw4B,EAAO+3C,GAE5C,GAA6B,IAAzB+pL,EAAO5iS,OAAOziE,OACjB,OAAQ,KAGT,IAKIhB,EAAG8wB,EALH3lB,EAAQk7V,EAAO5iS,OAAO,GAGtB6iS,EAAWn7V,EAAK,SAChB2hJ,EAAS3hJ,EAAK,QAAYwH,eAOgB,IAAzC3S,EAAI8sJ,EAAO5nJ,QAAQ,oBAEgC,IADnD4rB,EAAIg8H,EAAO5nJ,QAAQ,wFAEvBlF,GAAK,gBAAgBgB,OAEpBslW,EADgB,KAAbA,EACQx5M,EAAOiqB,OAAO/2K,EAAG8wB,EAAI9wB,GAErBsmW,EAAW,IAAMx5M,EAAOiqB,OAAO/2K,EAAG8wB,EAAI9wB,GAElD8sJ,EAAS,wBAGV,IAAIg3M,EAAK,IAAIX,EAAWoD,OAAO,oBAAqBD,EAAUx5M,GAE9D,OADAg3M,EAAG0C,YAAcr7V,EACT24V,CACR,CAUD,SAASmC,EAAa/5V,GAErBs1U,EAAW79I,GAAGz3L,EAAE,IAAM,GAAKA,EAAE,IAAM,EAC/B,2CACJs1U,EAAW79I,GAAGz3L,EAAE,GAAK,IAAK,8BAC1B,CAUD,SAAS45V,EAAW55V,EAAG8J,GAEtBiwV,EAAa/5V,GACb+5V,EAAajwV,GACbwrU,EAAW79I,GAAGz3L,EAAE,GAAK8J,EAAE,IAAO9J,EAAE,IAAM8J,EAAE,IAAM9J,EAAE,IAAM8J,EAAE,GACpD,oCAEJ,IAAI8tV,EAAK,CAAE53V,EAAE,GAAK8J,EAAE,GAAI,GASxB,OAPI9J,EAAE,IAAM8J,EAAE,GACb8tV,EAAG,GAAK53V,EAAE,GAAK8J,EAAE,IAEjB8tV,EAAG,KACHA,EAAG,GAAK,KAAO9tV,EAAE,GAAK9J,EAAE,KAGjB43V,CACR,CAwCD,SAASiC,EAAY75V,EAAG8J,GAuBvB,OArBAiwV,EAAa/5V,GACb+5V,EAAajwV,GAKb9J,EAAE,IAAM8J,EAAE,GACN9J,EAAE,IAAM,MAKXA,EAAE,KACFA,EAAE,IAAM,KAMTA,EAAE,IAAM8J,EAAE,GAEF9J,CACR,CA6CD,SAASk4V,EAAaqC,EAAUvvM,EAAWkuB,GAE1C,IAAI0+K,EAAI3sR,EAGR,GADA2sR,EAAK,CAAC,EACF1+K,EACH,IAAKjuG,KAAKiuG,EACT0+K,EAAG3sR,GAAKiuG,EAASjuG,GAGnB,GAAIsvR,EACH,IAAKtvR,KAAKsvR,EACT3C,EAAG3sR,GAAKsvR,EAAStvR,GAGnB,GAAI+/E,EACH,IAAK//E,KAAK+/E,EACT4sM,EAAG3sR,GAAK+/E,EAAU//E,GAGpB,OAAQ2sR,CACR,yBC9tBD,IAAI4C,EAAclrL,EAAQ,OACtBxsC,EAASwsC,EAAAA,OAAAA,OACTkwD,EAASlwD,EAAQ,OACjBmrL,EAAcnrL,EAAQ,MACtBM,EAAON,EAAQ,OAGforL,EAAqB,oCACrBC,EAA2B,mCAG3BC,EAAuD,oBAA3Bp7H,EAAOq7H,gBAMvC,SAASC,EAAiB3jW,GACxB,IAAI2rI,EAAOk2D,SAAS7hM,IAID,kBAARA,EAAX,CAIA,IAAKyjW,EACH,MAAMG,EAAUJ,GAGlB,GAAmB,kBAARxjW,EACT,MAAM4jW,EAAUJ,GAGlB,GAAwB,kBAAbxjW,EAAIoG,KACb,MAAMw9V,EAAUJ,GAGlB,GAAqC,kBAA1BxjW,EAAI6jW,kBACb,MAAMD,EAAUJ,GAGlB,GAA0B,oBAAfxjW,EAAI8jW,OACb,MAAMF,EAAUJ,EAnBjB,CAqBF,CAED,SAASO,EAAkB/jW,GACzB,IAAI2rI,EAAOk2D,SAAS7hM,IAID,kBAARA,GAIQ,kBAARA,EAIX,MAAM4jW,EAnDqB,8CAoD5B,CA4BD,SAASI,EAAW5+I,GAClB,OAAOA,EACJ1jJ,QAAQ,KAAM,IACdA,QAAQ,MAAO,KACfA,QAAQ,MAAO,IACnB,CAED,SAASuiS,EAASC,GAGhB,IAAItsL,EAAU,GAFdssL,EAAYA,EAAU76V,YAEM1L,OAAS,EACrC,GAAgB,IAAZi6K,EACF,IAAK,IAAIj7K,EAAI,EAAGA,EAAIi7K,IAAWj7K,EAC7BunW,GAAa,IAIjB,OAAOA,EACJxiS,QAAQ,MAAO,KACfA,QAAQ,KAAM,IAClB,CAED,SAASkiS,EAAUO,GACjB,IAAIh8V,EAAO,GAAGuG,MAAMpR,KAAK4D,UAAW,GAChCkjW,EAAS3rL,EAAK35J,OAAOlW,KAAK6vK,EAAM0rL,GAAUpjW,MAAM,KAAMoH,GAC1D,OAAO,IAAIrK,UAAUsmW,EACtB,CAMD,SAASC,EAAephI,GAJxB,IAAwBljO,EAOtB,OAPsBA,EAKFkjO,EAJbt3F,EAAOk2D,SAAS9hM,IAAuB,kBAARA,IAKpCkjO,EAAQljN,KAAKE,UAAUgjN,IAClBA,CACR,CAED,SAASqhI,EAAiBrsQ,GACxB,OAAO,SAAcgrI,EAAOwF,IAjE9B,SAA0BzoO,GACxB,IAAI2rI,EAAOk2D,SAAS7hM,GAApB,CAIA,GAAmB,kBAARA,EACT,OAAOA,EAGT,IAAKyjW,EACH,MAAMG,EAAUL,GAGlB,GAAmB,kBAARvjW,EACT,MAAM4jW,EAAUL,GAGlB,GAAiB,WAAbvjW,EAAIoG,KACN,MAAMw9V,EAAUL,GAGlB,GAA0B,oBAAfvjW,EAAI8jW,OACb,MAAMF,EAAUL,EAnBjB,CAqBF,CA0CGgB,CAAiB97H,GACjBxF,EAAQohI,EAAephI,GACvB,IAAIwG,EAAOpB,EAAOG,WAAW,MAAQvwI,EAAMwwI,GAE3C,OAAOu7H,GADIv6H,EAAK5lN,OAAOo/M,GAAQwG,EAAK/+D,OAAO,WAE5C,CACF,CAED,SAAS85L,EAAmBvsQ,GAC1B,OAAO,SAAgBgrI,EAAO7rF,EAAWqxF,GACvC,IAAIg8H,EAAcH,EAAiBrsQ,EAAjBqsQ,CAAuBrhI,EAAOwF,GAChD,OAAO46H,EAAY13N,EAAOvtH,KAAKg5H,GAAYzL,EAAOvtH,KAAKqmV,GACxD,CACF,CAED,SAASC,EAAgBzsQ,GACxB,OAAO,SAAcgrI,EAAOl0D,GACzBg1L,EAAkBh1L,GAClBk0D,EAAQohI,EAAephI,GAGvB,IAAI9oF,EAASkuF,EAAOqtC,WAAW,UAAYz9K,GAE3C,OAAO+rQ,GADI7pN,EAAOt2H,OAAOo/M,GAAQ9oF,EAAO9oH,KAAK09I,EAAY,WAE1D,CACF,CAED,SAAS41L,EAAkB1sQ,GACzB,OAAO,SAAgBgrI,EAAO7rF,EAAW43B,GACvC20L,EAAiB30L,GACjBi0D,EAAQohI,EAAephI,GACvB7rF,EAAY6sN,EAAS7sN,GACrB,IAAIwtN,EAAWv8H,EAAOstC,aAAa,UAAY19K,GAE/C,OADA2sQ,EAAS/gV,OAAOo/M,GACT2hI,EAASh5L,OAAOoD,EAAW53B,EAAW,SAC9C,CACF,CAED,SAASytN,EAAmB5sQ,GAC1B,OAAO,SAAcgrI,EAAOl0D,GAC1Bg1L,EAAkBh1L,GAClBk0D,EAAQohI,EAAephI,GACvB,IAAI9oF,EAASkuF,EAAOqtC,WAAW,UAAYz9K,GAM3C,OAAO+rQ,GALI7pN,EAAOt2H,OAAOo/M,GAAQ9oF,EAAO9oH,KAAK,CAC3CrxB,IAAK+uK,EACL6I,QAASywD,EAAO9sC,UAAUupK,sBAC1BC,WAAY18H,EAAO9sC,UAAUypK,wBAC5B,WAEJ,CACF,CAED,SAASC,EAAqBhtQ,GAC5B,OAAO,SAAgBgrI,EAAO7rF,EAAW43B,GACvC20L,EAAiB30L,GACjBi0D,EAAQohI,EAAephI,GACvB7rF,EAAY6sN,EAAS7sN,GACrB,IAAIwtN,EAAWv8H,EAAOstC,aAAa,UAAY19K,GAE/C,OADA2sQ,EAAS/gV,OAAOo/M,GACT2hI,EAASh5L,OAAO,CACrB5rK,IAAKgvK,EACL4I,QAASywD,EAAO9sC,UAAUupK,sBAC1BC,WAAY18H,EAAO9sC,UAAUypK,wBAC5B5tN,EAAW,SACf,CACF,CAED,SAAS8tN,EAAkBjtQ,GACzB,IAAI8tP,EAAQ2e,EAAgBzsQ,GAC5B,OAAO,WACL,IAAIm/C,EAAY2uM,EAAMhlV,MAAM,KAAMG,WAElC,OADAk2I,EAAYksN,EAAY/oD,UAAUnjK,EAAW,KAAOn/C,EAErD,CACF,CAED,SAASktQ,EAAmBltQ,GAC1B,IAAI8tP,EAAQ4e,EAAkB1sQ,GAC9B,OAAO,SAAgBgrI,EAAO7rF,EAAW43B,GAGvC,OAFA53B,EAAYksN,EAAYnoD,UAAU/jK,EAAW,KAAOn/C,GAAM5uF,SAAS,UACtD08U,EAAM9iH,EAAO7rF,EAAW43B,EAEtC,CACF,CAED,SAASo2L,IACP,OAAO,WACL,MAAO,EACR,CACF,CAED,SAASC,IACP,OAAO,SAAgBpiI,EAAO7rF,GAC5B,MAAqB,KAAdA,CACR,CACF,CApNGqsN,IACFD,GAA4B,kBAC5BD,GAAsB,kBAoNxBrhM,EAAOx3B,QAAU,SAAayqI,GAC5B,IAAImwF,EAAkB,CACpBC,GAAIjB,EACJ/0L,GAAIm1L,EACJc,GAAIX,EACJY,GAAIP,EACJQ,KAAMN,GAEJO,EAAoB,CACtBJ,GAAIf,EACJj1L,GAAIo1L,EACJa,GAAIP,EACJQ,GAAIN,EACJO,KAAML,GAEJ5jW,EAAQ0zQ,EAAU1zQ,MAAM,0CAC5B,IAAKA,EACH,MAAMmiW,EA7OkB,wLA6OezuF,GACzC,IAAIW,GAAQr0Q,EAAM,IAAMA,EAAM,IAAI6N,cAC9B2oF,EAAOx2F,EAAM,GAEjB,MAAO,CACL4vB,KAAMi0U,EAAgBxvF,GAAM79K,GAC5B2zE,OAAQ+5L,EAAkB7vF,GAAM79K,GAEnC,yBC1PD,IAAI2tQ,EAAaztL,EAAQ,OACrB0tL,EAAe1tL,EAAQ,OAS3BztC,EAAQo7N,WAPS,CACf,QAAS,QAAS,QAClB,QAAS,QAAS,QAClB,QAAS,QAAS,QAClB,QAAS,QAAS,SAIpBp7N,EAAQr5G,KAAOu0U,EAAWv0U,KAC1Bq5G,EAAQkhC,OAASi6L,EAAaj6L,OAC9BlhC,EAAQz7B,OAAS42P,EAAa52P,OAC9By7B,EAAQ6yN,QAAUsI,EAAatI,QAC/B7yN,EAAQgrI,WAAa,SAAoBh5F,GACvC,OAAO,IAAIkpL,EAAWlpL,EACvB,EACDhyC,EAAQirI,aAAe,SAAsBj5F,GAC3C,OAAO,IAAImpL,EAAanpL,EACzB,uCCpBG/wC,EAASwsC,EAAAA,OAAAA,OACTshD,EAASthD,EAAQ,OAGrB,SAAS4tL,EAAWxoV,GAMlB,GALAxe,KAAKs4C,OAAS,KACdt4C,KAAKsB,UAAW,EAChBtB,KAAK6+M,UAAW,GAGXrgM,EAEH,OADAxe,KAAKs4C,OAASs0F,EAAOivD,MAAM,GACpB77L,KAIT,GAAyB,oBAAdwe,EAAK86N,KAGd,OAFAt5O,KAAKs4C,OAASs0F,EAAOivD,MAAM,GAC3Br9K,EAAK86N,KAAKt5O,MACHA,KAKT,GAAIwe,EAAK5f,QAA0B,kBAAT4f,EAQxB,OAPAxe,KAAKs4C,OAAS95B,EACdxe,KAAKsB,UAAW,EAChBmuI,EAAQyuE,SAAS,WACfl+M,KAAKs0I,KAAK,MAAO91H,GACjBxe,KAAK6+M,UAAW,EAChB7+M,KAAKs0I,KAAK,QACX,EAACzqI,KAAK7J,OACAA,KAGT,MAAM,IAAIjB,UAAU,gCAAiCyf,EAAO,IAC7D,CAlCU46J,EAAQ,OAmCdlV,SAAS8iM,EAAYtsI,GAE1BssI,EAAW98V,UAAUw4L,MAAQ,SAAelkL,GAC1Cxe,KAAKs4C,OAASs0F,EAAOmQ,OAAO,CAAC/8I,KAAKs4C,OAAQs0F,EAAOvtH,KAAKb,KACtDxe,KAAKs0I,KAAK,OAAQ91H,EACnB,EAEDwoV,EAAW98V,UAAUmrC,IAAM,SAAa72B,GAClCA,GACFxe,KAAK0iM,MAAMlkL,GACbxe,KAAKs0I,KAAK,MAAO91H,GACjBxe,KAAKs0I,KAAK,SACVt0I,KAAKsB,UAAW,EAChBtB,KAAK6+M,UAAW,CACjB,EAED17C,EAAOx3B,QAAUq7N,yBCrDjB,IAAIp6N,EAASwsC,EAAAA,OAAAA,OACT4tL,EAAa5tL,EAAQ,OACrB6tL,EAAM7tL,EAAQ,OACdshD,EAASthD,EAAQ,OACjB9uK,EAAW8uK,EAAQ,OACnBM,EAAON,EAAQ,OAEnB,SAAS+rL,EAAUjpV,EAAQ+D,GACzB,OAAO2sH,EACJvtH,KAAKnD,EAAQ+D,GACb3V,SAAS,UACTq4D,QAAQ,KAAM,IACdA,QAAQ,MAAO,KACfA,QAAQ,MAAO,IACnB,CASD,SAASukS,EAAQvpL,GACf,IAAI5pD,EAAS4pD,EAAK5pD,OACdirB,EAAU2+B,EAAK3+B,QACfmoN,EAAcxpL,EAAK+rD,QAAU/rD,EAAK3N,WAClC/vJ,EAAW09J,EAAK19J,SAChB82P,EAAOkwF,EAAIlzO,EAAOs5K,KAClB+5D,EAbN,SAAyBrzO,EAAQirB,EAAS/+H,GACxCA,EAAWA,GAAY,OACvB,IAAIonV,EAAgBlC,EAAU76V,EAASypH,GAAS,UAC5CuzO,EAAiBnC,EAAU76V,EAAS00I,GAAU/+H,GAClD,OAAOy5J,EAAK35J,OAAO,QAASsnV,EAAeC,EAC5C,CAQoBC,CAAgBxzO,EAAQirB,EAAS/+H,GAChDo4H,EAAY0+H,EAAKzkP,KAAK80U,EAAcD,GACxC,OAAOztL,EAAK35J,OAAO,QAASqnV,EAAc/uN,EAC3C,CAED,SAASwuN,EAAWlpL,GAClB,IAAI+rD,EAAS/rD,EAAK+rD,QAAQ/rD,EAAK3N,YAAY2N,EAAK18K,IAC5CumW,EAAe,IAAIR,EAAWt9H,GAClC1pO,KAAK6+M,UAAW,EAChB7+M,KAAK+zH,OAAS4pD,EAAK5pD,OACnB/zH,KAAKigB,SAAW09J,EAAK19J,SACrBjgB,KAAK0pO,OAAS1pO,KAAKgwK,WAAahwK,KAAKiB,IAAMumW,EAC3CxnW,KAAKg/I,QAAU,IAAIgoN,EAAWrpL,EAAK3+B,SACnCh/I,KAAK0pO,OAAOxyE,KAAK,QAAS,YACnBl3J,KAAKg/I,QAAQ19I,UAAYtB,KAAK6+M,UACjC7+M,KAAKsyB,MACR,EAACzoB,KAAK7J,OAEPA,KAAKg/I,QAAQkY,KAAK,QAAS,YACpBl3J,KAAK0pO,OAAOpoO,UAAYtB,KAAK6+M,UAChC7+M,KAAKsyB,MACR,EAACzoB,KAAK7J,MACR,CACD05K,EAAKxV,SAAS2iM,EAAYnsI,GAE1BmsI,EAAW38V,UAAUooB,KAAO,WAC1B,IACE,IAAI+lH,EAAY6uN,EAAQ,CACtBnzO,OAAQ/zH,KAAK+zH,OACbirB,QAASh/I,KAAKg/I,QAAQ1mG,OACtBoxL,OAAQ1pO,KAAK0pO,OAAOpxL,OACpBr4B,SAAUjgB,KAAKigB,WAMjB,OAJAjgB,KAAKs0I,KAAK,OAAQ+D,GAClBr4I,KAAKs0I,KAAK,OAAQ+D,GAClBr4I,KAAKs0I,KAAK,OACVt0I,KAAK6+M,UAAW,EACTxmE,CAKR,CAJC,MAAOrxI,GACPhH,KAAK6+M,UAAW,EAChB7+M,KAAKs0I,KAAK,QAASttI,GACnBhH,KAAKs0I,KAAK,QACX,CACF,EAEDuyN,EAAWv0U,KAAO40U,EAElB/jM,EAAOx3B,QAAUk7N,yBC5EjB,IAAIj6N,EAASwsC,EAAAA,OAAAA,OAEbjW,EAAOx3B,QAAU,SAAkB3qI,GACjC,MAAmB,kBAARA,EACFA,EACU,kBAARA,GAAoB4rI,EAAOk2D,SAAS9hM,GACtCA,EAAIsJ,WACN0W,KAAKE,UAAUlgB,EACvB,yBCRD,IAAI4rI,EAASwsC,EAAAA,OAAAA,OACT4tL,EAAa5tL,EAAQ,OACrB6tL,EAAM7tL,EAAQ,OACdshD,EAASthD,EAAQ,OACjB9uK,EAAW8uK,EAAQ,OACnBM,EAAON,EAAQ,OACfquL,EAAY,2DAMhB,SAASC,EAAcxjI,GACrB,GALF,SAAkBA,GAChB,MAAiD,oBAA1ChjO,OAAOgJ,UAAUI,SAAS/L,KAAK2lO,EACvC,CAGK4S,CAAS5S,GACX,OAAOA,EACT,IAAM,OAAOljN,KAAKC,MAAMijN,EACO,CAA/B,MAAOl9N,GAAK,MAAmB,CAChC,CAED,SAAS2gW,EAAcC,GACrB,IAAIP,EAAgBO,EAAOjmS,MAAM,IAAK,GAAG,GACzC,OAAO+lS,EAAc96N,EAAOvtH,KAAKgoV,EAAe,UAAU/8V,SAAS,UACpE,CAMD,SAASu9V,EAAiBD,GACxB,OAAOA,EAAOjmS,MAAM,KAAK,EAC1B,CAQD,SAASmmS,EAAW5rV,GAClB,OAAOurV,EAAUhqV,KAAKvB,MAAayrV,EAAczrV,EAClD,CAED,SAAS6rV,EAAUH,EAAQxxF,EAAW+wF,GACpC,IAAK/wF,EAAW,CACd,IAAIv3Q,EAAM,IAAI8S,MAAM,8CAEpB,MADA9S,EAAImrE,KAAO,oBACLnrE,CACP,CAED,IAAIw5I,EAAYwvN,EADhBD,EAASt9V,EAASs9V,IAEdR,EA1BN,SAA6BQ,GAC3B,OAAOA,EAAOjmS,MAAM,IAAK,GAAGE,KAAK,IAClC,CAwBoBmmS,CAAoBJ,GAEvC,OADWX,EAAI7wF,GACHvpG,OAAOu6L,EAAc/uN,EAAW8uN,EAC7C,CAED,SAASc,EAAUL,EAAQjqL,GAIzB,GAHAA,EAAOA,GAAQ,CAAC,GAGXmqL,EAFLF,EAASt9V,EAASs9V,IAGhB,OAAO,KAET,IAAI7zO,EAAS4zO,EAAcC,GAE3B,IAAK7zO,EACH,OAAO,KAET,IAAIirB,EAnCN,SAAwB4oN,EAAQ3nV,GAC9BA,EAAWA,GAAY,OACvB,IAAI++H,EAAU4oN,EAAOjmS,MAAM,KAAK,GAChC,OAAOirE,EAAOvtH,KAAK2/H,EAAS,UAAU10I,SAAS2V,EAChD,CA+BeioV,CAAeN,GAI7B,OAHmB,QAAf7zO,EAAOwrO,KAAiB5hL,EAAKh9E,QAC/Bq+C,EAAUh+H,KAAKC,MAAM+9H,EAAS2+B,EAAK19J,WAE9B,CACL8zG,OAAQA,EACRirB,QAASA,EACT3G,UAAWwvN,EAAiBD,GAE/B,CAED,SAASd,EAAanpL,GAEpB,IAAIwpL,GADJxpL,EAAOA,GAAQ,CAAC,GACO+rD,QAAQ/rD,EAAK1N,WAAW0N,EAAK18K,IAChDumW,EAAe,IAAIR,EAAWG,GAClCnnW,KAAK6+M,UAAW,EAChB7+M,KAAKo2Q,UAAYz4F,EAAKy4F,UACtBp2Q,KAAKigB,SAAW09J,EAAK19J,SACrBjgB,KAAK0pO,OAAS1pO,KAAKiwK,UAAYjwK,KAAKiB,IAAMumW,EAC1CxnW,KAAKq4I,UAAY,IAAI2uN,EAAWrpL,EAAKtlC,WACrCr4I,KAAK0pO,OAAOxyE,KAAK,QAAS,YACnBl3J,KAAKq4I,UAAU/2I,UAAYtB,KAAK6+M,UACnC7+M,KAAK6sK,QACR,EAAChjK,KAAK7J,OAEPA,KAAKq4I,UAAU6e,KAAK,QAAS,YACtBl3J,KAAK0pO,OAAOpoO,UAAYtB,KAAK6+M,UAChC7+M,KAAK6sK,QACR,EAAChjK,KAAK7J,MACR,CACD05K,EAAKxV,SAAS4iM,EAAcpsI,GAC5BosI,EAAa58V,UAAU2iK,OAAS,WAC9B,IACE,IAAI5kE,EAAQ8/P,EAAU/nW,KAAKq4I,UAAU//F,OAAQt4C,KAAKo2Q,UAAWp2Q,KAAKiB,IAAIq3C,QAClEt3C,EAAMinW,EAAUjoW,KAAKq4I,UAAU//F,OAAQt4C,KAAKigB,UAKhD,OAJAjgB,KAAKs0I,KAAK,OAAQrsC,EAAOjnG,GACzBhB,KAAKs0I,KAAK,OAAQrsC,GAClBjoG,KAAKs0I,KAAK,OACVt0I,KAAK6+M,UAAW,EACT52G,CAKR,CAJC,MAAOjhG,GACPhH,KAAK6+M,UAAW,EAChB7+M,KAAKs0I,KAAK,QAASttI,GACnBhH,KAAKs0I,KAAK,QACX,CACF,EAEDwyN,EAAa52P,OAAS+3P,EACtBnB,EAAatI,QAAUsJ,EACvBhB,EAAaj6L,OAASk7L,EAEtB5kM,EAAOx3B,QAAUm7N,yBCvHjB3jM,EAAOx3B,QAAUytC,EAAQ,MAARA,CAAqBA,EAAQ,+BCA9C,IAAM+uL,EAAe/uL,EAAQ,MACvBgvL,EAAchvL,EAAQ,OAE5BjW,EAAOx3B,QAAU,SAAU08N,GACzB,IAAMxgD,EAASsgD,EAAaE,GACtBC,EAAQF,EAAYC,GAE1B,OAAO,SAAUjyF,EAAWt2Q,GAE1B,OADkC,kBAAds2Q,EAAyBA,EAAU7lQ,cAAgB6lQ,GAErE,IAAK,YAAa,OAAO,IAAIyxC,EAAO,KAAM,IAAK,KAAM,IAAK/nT,GAC1D,IAAK,YAAa,OAAO,IAAI+nT,EAAO,KAAM,IAAK,KAAM,IAAK/nT,GAC1D,IAAK,YAAa,OAAO,IAAI+nT,EAAO,IAAK,IAAK,KAAM,IAAK/nT,GACzD,IAAK,YAAa,OAAO,IAAI+nT,EAAO,IAAK,KAAM,KAAM,IAAK/nT,GAE1D,IAAK,WAAY,OAAO,IAAI+nT,EAAO,KAAM,IAAK,EAAM,IAAK/nT,GACzD,IAAK,WAAY,OAAO,IAAI+nT,EAAO,KAAM,IAAK,EAAM,IAAK/nT,GACzD,IAAK,WAAY,OAAO,IAAI+nT,EAAO,IAAK,IAAK,EAAM,IAAK/nT,GACxD,IAAK,WAAY,OAAO,IAAI+nT,EAAO,IAAK,KAAM,EAAM,IAAK/nT,GAEzD,IAAK,WAAY,OAAO,IAAIwoW,EAAM,KAAM,IAAK,GAAMxoW,GACnD,IAAK,WAAY,OAAO,IAAIwoW,EAAM,KAAM,IAAK,GAAMxoW,GAEnD,QAAS,MAAM,IAAI6R,MAAM,qBAAuBykQ,GAEnD,CACF,0HC1BO1G,EAAct2F,EAAQ,OAAtBs2F,UAERvsG,EAAOx3B,QAAU,SAAC08N,GAAD,kDACf,WAAaE,EAAMp6H,EAAUq6H,EAAiBC,EAAe3oW,GAAS,wBACpE,cAAMA,IAED4oW,MAAQH,EACb,EAAKxjG,UAAY52B,EACjB,EAAKw6H,iBAAmBH,EACxB,EAAKI,eAAiBH,EACtB,EAAKnvI,SAAWx5N,EAEhB,EAAKy1E,OAAS,IAAI8yR,EAClB,EAAK9yR,OAAOszR,WAAWN,EAAMp6H,GAC7B,EAAKi4G,YAAa,EAXkD,CAYrE,CAbc,oCAef,SAAY/+I,EAAOpnL,EAAUoH,GAC3B,IAAIte,EAAQ,KACZ,IACE/I,KAAK8kB,OAAOuiL,EAAOpnL,EAGpB,CAFC,MAAOphB,GACPkK,EAAQlK,CACT,CAEDwoB,EAASte,EACV,GAxBc,oBA0Bf,SAAQse,GACN,IAAIte,EAAQ,KACZ,IACE/I,KAAKtB,KAAKsB,KAAK2rK,SAGhB,CAFC,MAAO9sK,GACPkK,EAAQlK,CACT,CAEDwoB,EAASte,EACV,GAnCc,oBAqCf,SAAQyV,EAAMyB,GACZ,IAAK2sH,EAAOk2D,SAAStkL,IAAyB,kBAATA,EAAmB,MAAM,IAAIzf,UAAU,qCAC5E,GAAIiB,KAAKomV,WAAY,MAAM,IAAIz0U,MAAM,yBAKrC,OAJKi7H,EAAOk2D,SAAStkL,KAAOA,EAAOouH,EAAOvtH,KAAKb,EAAMyB,IAErDjgB,KAAKu1E,OAAOuzR,OAAOtqV,GAEZxe,IACR,GA7Cc,oBA+Cf,SAAQigB,GACN,GAAIjgB,KAAKomV,WAAY,MAAM,IAAIz0U,MAAM,yBACrC3R,KAAKomV,YAAa,EAEdpmV,KAAK2oW,kBAAkB3oW,KAAKu1E,OAAOwzR,kBAAkB/oW,KAAK2oW,kBAC9D,IAAIh9L,EAAS3rK,KAAKu1E,OAAOyzR,QAAQhpW,KAAK4oW,eAAiB,GAKvD,YAJiBv/V,IAAb4W,IAAwB0rJ,EAASA,EAAOrhK,SAAS2V,IAErDjgB,KAAKipW,cAEEt9L,CACR,GA1Dc,yBA6Df,WAEE,OADA3rK,KAAKu1E,OAAOszR,WAAW7oW,KAAK0oW,MAAO1oW,KAAK+kQ,WACjC/kQ,IACR,GAhEc,oBAmEf,WACE,IAAM8jB,EAAQ,IAAI+jS,EAAO7nT,KAAK0oW,MAAO1oW,KAAK+kQ,UAAW/kQ,KAAK2oW,iBAAkB3oW,KAAK4oW,eAAgB5oW,KAAKs5N,UAItG,OAHAt5N,KAAKu1E,OAAOz5D,KAAKgI,EAAMyxD,QACvBzxD,EAAMsiU,WAAapmV,KAAKomV,WAEjBtiU,CACR,KAzEc,GAAsC4rP,EAAtC,2HCFTA,EAAct2F,EAAQ,OAAtBs2F,UAERvsG,EAAOx3B,QAAU,SAAC08N,GAAD,kDACf,WAAaE,EAAMp6H,EAAUq6H,EAAiB1oW,GAAS,wBACrD,cAAMA,IAED4oW,MAAQH,EACb,EAAKxjG,UAAY52B,EACjB,EAAKw6H,iBAAmBH,EACxB,EAAKlvI,SAAWx5N,EAEhB,EAAKy1E,OAAS,IAAI8yR,EAClB,EAAK9yR,OAAOszR,WAAWN,EAAMp6H,GAC7B,EAAKi4G,YAAa,EAVmC,CAWtD,CAZc,oCAcf,SAAY/+I,EAAOpnL,EAAUoH,GAC3B,IAAIte,EAAQ,KACZ,IACE/I,KAAK8kB,OAAOuiL,EAAOpnL,EAGpB,CAFC,MAAOphB,GACPkK,EAAQlK,CACT,CAEDwoB,EAASte,EACV,GAvBc,oBAyBf,WAAY,GAzBG,mBA2Bf,SAAOyT,GACLxc,KAAKtB,KAAKsB,KAAKgpW,QAAQxsV,GACxB,GA7Bc,oBA+Bf,SAAQgC,EAAMyB,GACZ,IAAK2sH,EAAOk2D,SAAStkL,IAAyB,kBAATA,EAAmB,MAAM,IAAIzf,UAAU,qCAC5E,GAAIiB,KAAKomV,WAAY,MAAM,IAAIz0U,MAAM,0BAKrC,OAJKi7H,EAAOk2D,SAAStkL,KAAOA,EAAOouH,EAAOvtH,KAAKb,EAAMyB,IAErDjgB,KAAKu1E,OAAOuzR,OAAOtqV,GAEZxe,IACR,GAvCc,qBAyCf,SAASkpW,EAAgBjpV,GAClBjgB,KAAKomV,aACRpmV,KAAKomV,YAAa,EAClBpmV,KAAKu1E,OAAOwzR,kBAAkB/oW,KAAK2oW,mBAGrC,IAAInqV,EAAOxe,KAAKu1E,OAAOyzR,QAAQE,GAG/B,YAFiB7/V,IAAb4W,IAAwBzB,EAAOA,EAAKlU,SAAS2V,IAE1CzB,CACR,GAnDc,yBAqDf,WAEE,OADAxe,KAAKu1E,OAAOszR,WAAW7oW,KAAK0oW,MAAO1oW,KAAK+kQ,WACjC/kQ,IACR,GAxDc,oBA0Df,WACE,IAAM8jB,EAAQ,IAAIwkV,EAAMtoW,KAAK0oW,MAAO1oW,KAAK+kQ,UAAW/kQ,KAAK2oW,iBAAkB3oW,KAAKs5N,UAIhF,OAHAt5N,KAAKu1E,OAAOz5D,KAAKgI,EAAMyxD,QACvBzxD,EAAMsiU,WAAapmV,KAAKomV,WAEjBtiU,CACR,KAhEc,GAAqC4rP,EAArC,uBCFjB,IAAMy5F,EAAwB,CAAC,EAAG,EAAG,MAAO,EAAG,MAAO,WAAY,WAAY,WAAY,MAAO,EAAG,WAAY,EAAG,WAAY,WAAY,MAAO,WAAY,IAAK,EAAG,IAAK,EAAG,WAAY,EAAG,WAAY,EAAG,WAAY,EAAG,IAAK,WAAY,MAAO,WAAY,MAAO,WAAY,MAAO,WAAY,IAAK,WAAY,MAAO,EAAG,WAAY,WAAY,WAAY,WAAY,MAAO,WAAY,WAAY,EAAG,WAAY,YAE9Zx9N,EAAQy9N,MAAQ,SAAU/1V,GACxB,IAAK,IAAIxB,EAAQ,EAAGA,EAAQ,KAAMA,EAAO,CAEvC,IAAMw3V,EAAMh2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCi2V,EAAMj2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCk2V,EAAMl2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCm2V,EAAMn2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCo2V,EAAMp2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCq2V,EAAMr2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCs2V,EAAMt2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCu2V,EAAMv2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCw2V,EAAMx2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACvCy2V,EAAMz2V,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAEzC4qJ,EAAK4rM,GAAON,GAAO,EAAIC,IAAQ,IAC/BxrM,EAAK8rM,GAAON,GAAO,EAAID,IAAQ,IAC7BQ,EAAS12V,EAAE,GAAK4qJ,EAChB+rM,EAAS32V,EAAE,GAAK2qJ,EAChBisM,EAAS52V,EAAE,IAAM4qJ,EACjBisM,EAAS72V,EAAE,IAAM2qJ,EACjBmsM,EAAU92V,EAAE,IAAM4qJ,EAClBmsM,EAAU/2V,EAAE,IAAM2qJ,EAClBqsM,EAAUh3V,EAAE,IAAM4qJ,EAClBqsM,EAAUj3V,EAAE,IAAM2qJ,EAClBusM,EAAUl3V,EAAE,IAAM4qJ,EAClBusM,EAAUn3V,EAAE,IAAM2qJ,EACxBC,EAAKorM,GAAOI,GAAO,EAAIC,IAAQ,IAC/B1rM,EAAKsrM,GAAOI,GAAO,EAAID,IAAQ,IAC/B,IAAMgB,EAASp3V,EAAE,GAAK4qJ,EAChBysM,EAASr3V,EAAE,GAAK2qJ,EAChB2sM,EAASt3V,EAAE,IAAM4qJ,EACjB2sM,EAASv3V,EAAE,IAAM2qJ,EACjB6sM,EAAUx3V,EAAE,IAAM4qJ,EAClB6sM,EAAUz3V,EAAE,IAAM2qJ,EAClB+sM,EAAU13V,EAAE,IAAM4qJ,EAClB+sM,EAAU33V,EAAE,IAAM2qJ,EAClBitM,EAAU53V,EAAE,IAAM4qJ,EAClBitM,EAAU73V,EAAE,IAAM2qJ,EACxBC,EAAKsrM,GAAOI,GAAO,EAAIC,IAAQ,IAC/B5rM,EAAKwrM,GAAOI,GAAO,EAAID,IAAQ,IAC/B,IAAMwB,EAAS93V,EAAE,GAAK4qJ,EAChBmtM,EAAS/3V,EAAE,GAAK2qJ,EAChBqtM,EAASh4V,EAAE,IAAM4qJ,EACjBqtM,EAASj4V,EAAE,IAAM2qJ,EACjButM,EAAUl4V,EAAE,IAAM4qJ,EAClButM,EAAUn4V,EAAE,IAAM2qJ,EAClBytM,EAAUp4V,EAAE,IAAM4qJ,EAClBytM,EAAUr4V,EAAE,IAAM2qJ,EAClB2tM,EAAUt4V,EAAE,IAAM4qJ,EAClB2tM,EAAUv4V,EAAE,IAAM2qJ,EACxBC,EAAKwrM,GAAOI,GAAO,EAAIC,IAAQ,IAC/B9rM,EAAK0rM,GAAOI,GAAO,EAAID,IAAQ,IAC/B,IAAMgC,EAASx4V,EAAE,GAAK4qJ,EAChB6tM,EAASz4V,EAAE,GAAK2qJ,EAChB+tM,EAAS14V,EAAE,IAAM4qJ,EACjB+tM,EAAS34V,EAAE,IAAM2qJ,EACjBiuM,EAAU54V,EAAE,IAAM4qJ,EAClBiuM,EAAU74V,EAAE,IAAM2qJ,EAClBmuM,EAAU94V,EAAE,IAAM4qJ,EAClBmuM,EAAU/4V,EAAE,IAAM2qJ,EAClBquM,EAAUh5V,EAAE,IAAM4qJ,EAClBquM,GAAUj5V,EAAE,IAAM2qJ,EACxBC,EAAK0rM,GAAON,GAAO,EAAIC,IAAQ,IAC/BtrM,EAAK4rM,GAAON,GAAO,EAAID,IAAQ,IAC/B,IAAMkD,GAASl5V,EAAE,GAAK4qJ,EAChBuuM,GAASn5V,EAAE,GAAK2qJ,EAChByuM,GAASp5V,EAAE,IAAM4qJ,EACjByuM,GAASr5V,EAAE,IAAM2qJ,EACjB2uM,GAAUt5V,EAAE,IAAM4qJ,EAClB2uM,GAAUv5V,EAAE,IAAM2qJ,EAClB6uM,GAAUx5V,EAAE,IAAM4qJ,EAClB6uM,GAAUz5V,EAAE,IAAM2qJ,EAClB+uM,GAAU15V,EAAE,IAAM4qJ,EAClB+uM,GAAU35V,EAAE,IAAM2qJ,EAGlBivM,GAASlD,EACTmD,GAASlD,EACTmD,GAAWjD,GAAU,EAAID,IAAW,GACpCmD,GAAWnD,GAAU,EAAIC,IAAW,GACpCmD,GAAUlD,GAAW,EAAIC,IAAY,GACrCkD,GAAUlD,GAAW,EAAID,IAAY,GACrCoD,GAAWjD,GAAW,EAAID,IAAY,GACtCmD,GAAWnD,GAAW,EAAIC,IAAY,GACtCmD,GAAWlD,GAAW,GAAKC,IAAY,GACvCkD,GAAWlD,GAAW,GAAKD,IAAY,GACvCoD,GAAWlD,GAAU,EAAIC,IAAW,GACpCkD,GAAWlD,GAAU,EAAID,IAAW,GACpCoD,GAAUjD,GAAU,GAAKD,IAAW,GACpCmD,GAAUnD,GAAU,GAAKC,IAAW,GACpCmD,GAAWlD,GAAW,GAAKC,IAAY,GACvCkD,GAAWlD,GAAW,GAAKD,IAAY,GACvCoD,GAAUjD,GAAW,GAAKD,IAAY,GACtCmD,GAAUnD,GAAW,GAAKC,IAAY,GACtCmD,GAAWlD,GAAW,EAAIC,IAAY,GACtCkD,GAAWlD,GAAW,EAAID,IAAY,GACtCoD,GAAWjD,GAAU,GAAKD,IAAW,EACrCmD,GAAWnD,GAAU,GAAKC,IAAW,EACrCmD,GAAWlD,GAAU,EAAIC,IAAW,GACpCkD,GAAWlD,GAAU,EAAID,IAAW,GACpCoD,GAAUjD,GAAW,GAAKD,IAAY,GACtCmD,GAAUnD,GAAW,GAAKC,IAAY,GACtCmD,GAAWlD,GAAW,GAAKC,IAAY,GACvCkD,GAAWlD,GAAW,GAAKD,IAAY,GACvCoD,GAAUjD,GAAW,GAAKD,IAAY,EACtCmD,GAAUnD,GAAW,GAAKC,IAAY,EACtCmD,GAAUlD,GAAU,GAAKC,IAAW,EACpCkD,GAAUlD,GAAU,GAAKD,IAAW,EACpCoD,GAAWjD,GAAU,GAAKD,IAAW,EACrCmD,GAAWnD,GAAU,GAAKC,IAAW,EACrCmD,GAAWlD,GAAW,GAAKC,IAAY,EACvCkD,GAAWlD,GAAW,GAAKD,IAAY,EACvCoD,GAAUlD,GAAW,GAAKC,IAAY,GACtCkD,GAAUlD,GAAW,GAAKD,IAAY,GACtCoD,GAAWjD,IAAW,GAAKD,IAAY,EACvCmD,GAAWnD,GAAW,GAAKC,KAAY,EACvCmD,GAAWlD,IAAU,GAAKC,KAAW,EACrCkD,GAAWlD,IAAU,GAAKD,KAAW,EACrCoD,GAAUlD,IAAU,GAAKC,KAAW,GACpCkD,GAAUlD,IAAU,GAAKD,KAAW,GACpCoD,GAAWjD,IAAW,EAAID,KAAY,GACtCmD,GAAWnD,IAAW,EAAIC,KAAY,GACtCmD,GAAWlD,IAAW,EAAIC,KAAY,GACtCkD,GAAWlD,IAAW,EAAID,KAAY,GACtCoD,GAAUlD,IAAW,GAAKC,KAAY,GACtCkD,GAAUlD,IAAW,GAAKD,KAAY,GAG5C15V,EAAE,GAAK45V,IAAWY,GAASY,GAC3Bp7V,EAAE,GAAK65V,IAAWY,GAASY,GAC3Br7V,EAAE,IAAM07V,IAAWY,GAAStC,GAC5Bh6V,EAAE,IAAM27V,IAAWY,GAAStC,GAC5Bj6V,EAAE,IAAMs6V,IAAYY,GAAUY,GAC9B97V,EAAE,IAAMu6V,IAAYY,GAAUY,GAC9B/7V,EAAE,IAAMo8V,IAAYtC,GAAUY,GAC9B16V,EAAE,IAAMq8V,IAAYtC,GAAUY,GAC9B36V,EAAE,IAAMg7V,IAAYY,GAAUY,GAC9Bx8V,EAAE,IAAMi7V,IAAYY,GAAUY,GAC9Bz8V,EAAE,GAAKw6V,IAAWY,GAASY,GAC3Bh8V,EAAE,GAAKy6V,IAAWY,GAASY,GAC3Bj8V,EAAE,IAAMs8V,IAAWtC,GAASY,GAC5B56V,EAAE,IAAMu8V,IAAWtC,GAASY,GAC5B76V,EAAE,IAAMk7V,IAAYY,GAAUY,GAC9B18V,EAAE,IAAMm7V,IAAYY,GAAUY,GAC9B38V,EAAE,IAAM85V,IAAYY,GAAUY,GAC9Bt7V,EAAE,IAAM+5V,IAAYY,GAAUY,GAC9Bv7V,EAAE,IAAM47V,IAAYY,GAAUtC,GAC9Bl6V,EAAE,IAAM67V,IAAYY,GAAUtC,GAC9Bn6V,EAAE,GAAKo7V,IAAWY,GAASY,GAC3B58V,EAAE,GAAKq7V,IAAWY,GAASY,GAC3B78V,EAAE,IAAMg6V,IAAWY,GAASY,GAC5Bx7V,EAAE,IAAMi6V,IAAWY,GAASY,GAC5Bz7V,EAAE,IAAM87V,IAAYY,GAAUtC,GAC9Bp6V,EAAE,IAAM+7V,IAAYY,GAAUtC,GAC9Br6V,EAAE,IAAM06V,IAAYY,GAAUY,GAC9Bl8V,EAAE,IAAM26V,IAAYY,GAAUY,GAC9Bn8V,EAAE,IAAMw8V,IAAYtC,GAAUY,GAC9B96V,EAAE,IAAMy8V,IAAYtC,GAAUY,GAC9B/6V,EAAE,GAAKg8V,IAAWY,GAAShD,GAC3B55V,EAAE,GAAKi8V,IAAWY,GAAShD,GAC3B75V,EAAE,IAAM46V,IAAWY,GAASE,GAC5B17V,EAAE,IAAM66V,IAAWY,GAASE,GAC5B37V,EAAE,IAAM08V,IAAYtC,GAAUE,GAC9Bt6V,EAAE,IAAM28V,IAAYtC,GAAUE,GAC9Bv6V,EAAE,IAAMs7V,IAAYY,GAAUE,GAC9Bp8V,EAAE,IAAMu7V,IAAYY,GAAUE,GAC9Br8V,EAAE,IAAMk6V,IAAYY,GAAUE,GAC9Bh7V,EAAE,IAAMm6V,IAAYY,GAAUE,GAC9Bj7V,EAAE,GAAK48V,IAAWhD,GAASY,GAC3Bx6V,EAAE,GAAK68V,IAAWhD,GAASY,GAC3Bz6V,EAAE,IAAMw7V,IAAWE,GAASY,GAC5Bt8V,EAAE,IAAMy7V,IAAWE,GAASY,GAC5Bv8V,EAAE,IAAMo6V,IAAYE,GAAUY,GAC9Bl7V,EAAE,IAAMq6V,IAAYE,GAAUY,GAC9Bn7V,EAAE,IAAMk8V,IAAYE,GAAUtC,GAC9B95V,EAAE,IAAMm8V,IAAYE,GAAUtC,GAC9B/5V,EAAE,IAAM86V,IAAYE,GAAUY,GAC9B57V,EAAE,IAAM+6V,IAAYE,GAAUY,GAG9B77V,EAAE,IAAM81V,EAA8B,EAARt3V,GAC9BwB,EAAE,IAAM81V,EAA8B,EAARt3V,EAAY,EAC3C,CACF,+CCzLKs+V,EAAc/2L,EAAQ,OAE5B,SAASyuI,IAEP7nT,KAAK0mD,MAAQ,CACX,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,GAGd1mD,KAAK+6D,UAAY,KACjB/6D,KAAKwrB,MAAQ,EACbxrB,KAAKowW,WAAY,CAClB,CAEDvoD,EAAO39S,UAAU2+V,WAAa,SAAUN,EAAMp6H,GAC5C,IAAK,IAAIvwO,EAAI,EAAGA,EAAI,KAAMA,EAAGoC,KAAK0mD,MAAM9oD,GAAK,EAC7CoC,KAAK+6D,UAAYwtS,EAAO,EACxBvoW,KAAKwrB,MAAQ,EACbxrB,KAAKowW,WAAY,CAClB,EAEDvoD,EAAO39S,UAAU4+V,OAAS,SAAUtqV,GAClC,IAAK,IAAI5gB,EAAI,EAAGA,EAAI4gB,EAAK5f,SAAUhB,EACjCoC,KAAK0mD,SAAS1mD,KAAKwrB,MAAQ,KAAOhN,EAAK5gB,IAAYoC,KAAKwrB,MAAQ,EAAlB,EAC9CxrB,KAAKwrB,OAAS,EACVxrB,KAAKwrB,QAAUxrB,KAAK+6D,YACtBo1S,EAAY/G,MAAMppW,KAAK0mD,OACvB1mD,KAAKwrB,MAAQ,EAGlB,EAEDq8R,EAAO39S,UAAU6+V,kBAAoB,SAAU7vQ,GAC7Cl5F,KAAK0mD,SAAS1mD,KAAKwrB,MAAQ,KAAO0tE,GAAcl5F,KAAKwrB,MAAQ,EAAlB,EACrB,KAAV,IAAP0tE,IAAsBl5F,KAAKwrB,QAAWxrB,KAAK+6D,UAAY,GAAIo1S,EAAY/G,MAAMppW,KAAK0mD,OACvF1mD,KAAK0mD,UAAU1mD,KAAK+6D,UAAY,GAAK,KAAO,MAAe/6D,KAAK+6D,UAAY,GAAK,EAA5B,EACrDo1S,EAAY/G,MAAMppW,KAAK0mD,OACvB1mD,KAAKwrB,MAAQ,EACbxrB,KAAKowW,WAAY,CAClB,EAEDvoD,EAAO39S,UAAU8+V,QAAU,SAAUpqW,GAC9BoB,KAAKowW,WAAWpwW,KAAK+oW,kBAAkB,GAG5C,IADA,IAAM/pV,EAAS4tH,EAAOivD,MAAMj9L,GACnBhB,EAAI,EAAGA,EAAIgB,IAAUhB,EAC5BohB,EAAOphB,GAAMoC,KAAK0mD,SAAS1mD,KAAKwrB,MAAQ,MAAcxrB,KAAKwrB,MAAQ,EAAlB,EAAyB,IAC1ExrB,KAAKwrB,OAAS,EACVxrB,KAAKwrB,QAAUxrB,KAAK+6D,YACtBo1S,EAAY/G,MAAMppW,KAAK0mD,OACvB1mD,KAAKwrB,MAAQ,GAIjB,OAAOxM,CACR,EAED6oS,EAAO39S,UAAU4R,KAAO,SAAU07F,GAChC,IAAK,IAAI55G,EAAI,EAAGA,EAAI,KAAMA,EAAG45G,EAAK9wD,MAAM9oD,GAAKoC,KAAK0mD,MAAM9oD,GACxD45G,EAAKz8C,UAAY/6D,KAAK+6D,UACtBy8C,EAAKhsF,MAAQxrB,KAAKwrB,MAClBgsF,EAAK44P,UAAYpwW,KAAKowW,SACvB,EAEDjtM,EAAOx3B,QAAUk8K,kCC/DjB,IAAI9rF,EAAQ,CAAC,EAEb,SAAS4H,EAAgB35J,EAAMqtB,EAASmsE,GACjCA,IACHA,EAAO7xJ,OAWT,IAAIiyN,EAEJ,SAAUC,GAnBZ,IAAwBP,EAAUC,EAsB9B,SAASK,EAAUE,EAAMC,EAAMC,GAC7B,OAAOH,EAAMtlO,KAAKyB,KAdtB,SAAoB8jO,EAAMC,EAAMC,GAC9B,MAAuB,kBAAZ3sI,EACFA,EAEAA,EAAQysI,EAAMC,EAAMC,EAE9B,CAQ2BC,CAAWH,EAAMC,EAAMC,KAAUhkO,IAC1D,CAED,OA1B8BujO,EAoBJM,GApBNP,EAoBLM,GApBsC15N,UAAYhJ,OAAO2J,OAAO04N,EAAWr5N,WAAYo5N,EAASp5N,UAAUU,YAAc04N,EAAUA,EAAStxN,UAAYuxN,EA0B/JK,CACR,CARD,CAQEpgE,GAEFogE,EAAU15N,UAAUoQ,KAAOkpJ,EAAKlpJ,KAChCspN,EAAU15N,UAAU8/D,KAAOA,EAC3B+xJ,EAAM/xJ,GAAQ45J,CACf,CAGD,SAASvyC,EAAM3kC,EAAUw3E,GACvB,GAAIrmO,MAAMC,QAAQ4uJ,GAAW,CAC3B,IAAIpkI,EAAMokI,EAAS9tJ,OAKnB,OAJA8tJ,EAAWA,EAAS9mJ,KAAI,SAAUhI,GAChC,OAAO6vC,OAAO7vC,EACf,IAEG0qB,EAAM,EACD,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS/8I,MAAM,EAAG2Y,EAAM,GAAGu5C,KAAK,MAAO,SAAW6qF,EAASpkI,EAAM,GAC3F,IAARA,EACF,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAAI,QAAQ3P,OAAO2P,EAAS,IAEzE,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAEnD,CACC,MAAO,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAOtvG,OAAOi/G,GAEjD,CA6BDi3E,EAAgB,yBAAyB,SAAUrpN,EAAM3b,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B2b,EAAO,GACrE,GAAEvb,WACH4kO,EAAgB,wBAAwB,SAAUrpN,EAAMoyI,EAAUquE,GAEhE,IAAIoJ,EA/BmB7lG,EAAQl3H,EAwC3BqnI,EAEJ,GATwB,kBAAbie,IAjCYpuB,EAiCkC,OAAVouB,EAhCpCioB,QAAQvtK,GAAOA,EAAM,EAAI,GAAKA,EAAKk3H,EAAO1/H,UAAY0/H,IAiC/D6lG,EAAa,cACbz3E,EAAWA,EAAS/pF,QAAQ,QAAS,KAErCwhK,EAAa,UAhCjB,SAAkBvyD,EAAKtzC,EAAQoiG,GAK7B,YAJiBr3N,IAAbq3N,GAA0BA,EAAW9uD,EAAIhzK,UAC3C8hO,EAAW9uD,EAAIhzK,QAGVgzK,EAAI14D,UAAUwnH,EAAWpiG,EAAO1/H,OAAQ8hO,KAAcpiG,CAC9D,CA+BKmiG,CAASnmN,EAAM,aAEjBm0H,EAAM,OAAOsO,OAAOziI,EAAM,KAAKyiI,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,aACzE,CACL,IAAIrlJ,EAhCR,SAAkBuqK,EAAKtzC,EAAQn2F,GAK7B,MAJqB,kBAAVA,IACTA,EAAQ,KAGNA,EAAQm2F,EAAO1/H,OAASgzK,EAAIhzK,UAGS,IAAhCgzK,EAAI9uK,QAAQw7H,EAAQn2F,EAE9B,CAsBc60G,CAAS1iI,EAAM,KAAO,WAAa,WAC9Cm0H,EAAM,QAASsO,OAAOziI,EAAM,MAAOyiI,OAAO11I,EAAM,KAAK01I,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,QACrG,CAGD,OADAje,GAAO,mBAAmBsO,cAAcg+E,EAEzC,GAAEh8N,WACH4kO,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAUrpN,GACtD,MAAO,OAASA,EAAO,4BACxB,IACDqpN,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAUrpN,GAChD,MAAO,eAAiBA,EAAO,+BAChC,IACDqpN,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC5kO,WACjF4kO,EAAgB,wBAAwB,SAAU96N,GAChD,MAAO,qBAAuBA,CAC/B,GAAE9J,WACH4kO,EAAgB,qCAAsC,oCACtDxgE,EAAOx3B,QAAQ,EAAQowF,oDCnGnBy8C,EAAat3Q,OAAOQ,MAAQ,SAAUV,GACxC,IAAIU,EAAO,GAEX,IAAK,IAAIT,KAAOD,EACdU,EAAKhD,KAAKuC,GAGZ,OAAOS,CACR,EAIDyhK,EAAOx3B,QAAUq7D,EAEjB,IAAIyxE,EAAWr/F,EAAQ,OAEnBi9F,EAAWj9F,EAAQ,OAEvBA,EAAQ,MAARA,CAAoB4tB,EAAQyxE,GAM1B,IAFA,IAAI/2Q,EAAO82Q,EAAWnC,EAASnsQ,WAEtB4K,EAAI,EAAGA,EAAIpT,EAAK9C,OAAQkW,IAAK,CACpC,IAAIkkF,EAASt3F,EAAKoT,GACbkyL,EAAO98L,UAAU8uF,KAASguG,EAAO98L,UAAU8uF,GAAUq9K,EAASnsQ,UAAU8uF,GAC9E,CAGH,SAASguG,EAAOlnM,GACd,KAAME,gBAAgBgnM,GAAS,OAAO,IAAIA,EAAOlnM,GACjD24Q,EAASl6Q,KAAKyB,KAAMF,GACpBu2Q,EAAS93Q,KAAKyB,KAAMF,GACpBE,KAAK04Q,eAAgB,EAEjB54Q,KACuB,IAArBA,EAAQ++M,WAAoB7+M,KAAK6+M,UAAW,IACvB,IAArB/+M,EAAQwB,WAAoBtB,KAAKsB,UAAW,IAElB,IAA1BxB,EAAQ44Q,gBACV14Q,KAAK04Q,eAAgB,EACrB14Q,KAAKk3J,KAAK,MAAOyhH,IAGtB,CA8BD,SAASA,IAEH34Q,KAAK44Q,eAAeC,OAGxBppI,EAAQyuE,SAAS46D,EAAS94Q,KAC3B,CAED,SAAS84Q,EAAQ3vQ,GACfA,EAAKksC,KACN,CAtCDn0C,OAAOC,eAAe6lM,EAAO98L,UAAW,wBAAyB,CAI/D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IAEH3pM,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAEH73Q,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAeHsC,OAAOC,eAAe6lM,EAAO98L,UAAW,YAAa,CAInD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAIvC54Q,KAAKg5Q,eAAeC,WAAaj5Q,KAAK44Q,eAAeK,UAC7D,EACDxuQ,IAAK,SAAa9L,QAGY0K,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAM9C54Q,KAAKg5Q,eAAeC,UAAYt6Q,EAChCqB,KAAK44Q,eAAeK,UAAYt6Q,EACjC,wCChHHwkK,EAAOx3B,QAAUu7D,EAEjB,IAAIwoE,EAAYt2F,EAAQ,OAIxB,SAAS8tB,EAAYpnM,GACnB,KAAME,gBAAgBknM,GAAc,OAAO,IAAIA,EAAYpnM,GAC3D4vQ,EAAUnxQ,KAAKyB,KAAMF,EACtB,CALDs5K,EAAQ,MAARA,CAAoB8tB,EAAawoE,GAOjCxoE,EAAYh9L,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC5DA,EAAG,KAAMg8J,EACV,0CCbGL,YAHJ7jC,EAAOx3B,QAAU8sI,EAMjBA,EAASU,cAAgBA,EAGhB//F,EAAAA,OAAAA,aAAT,IAEIggG,EAAkB,SAAyBC,EAAShyQ,GACtD,OAAOgyQ,EAAQhqQ,UAAUhI,GAAMzI,MAChC,EAMG87N,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAYvD,IAEI22D,EAFAoxM,EAAYngG,EAAQ,OAKtBjxG,EADEoxM,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,WAAmB,EAK7B,IAcIC,EACAC,EACAr6P,EAhBAs6P,EAAavgG,EAAQ,MAErBwgG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC69C,EAA4Bh+C,EAAeg+C,0BAC3CC,EAA6Bj+C,EAAei+C,2BAC5CC,EAAqCl+C,EAAek+C,mCAOxD5gG,EAAQ,MAARA,CAAoBq/F,EAAU/9C,GAE9B,IAAIu/C,EAAiBL,EAAYK,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASf,EAAcr5Q,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQs6Q,oBAG7Dp6Q,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAI9En6Q,KAAKs4C,OAAS,IAAIqhO,EAClB35Q,KAAKpB,OAAS,EACdoB,KAAKq6Q,MAAQ,KACbr6Q,KAAKs6Q,WAAa,EAClBt6Q,KAAKu6Q,QAAU,KACfv6Q,KAAK64Q,OAAQ,EACb74Q,KAAKw6Q,YAAa,EAClBx6Q,KAAKy6Q,SAAU,EAKfz6Q,KAAK06Q,MAAO,EAGZ16Q,KAAK26Q,cAAe,EACpB36Q,KAAK46Q,iBAAkB,EACvB56Q,KAAK66Q,mBAAoB,EACzB76Q,KAAK86Q,iBAAkB,EACvB96Q,KAAK87G,QAAS,EAEd97G,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAKi5Q,WAAY,EAIjBj5Q,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAElDj7Q,KAAKk7Q,WAAa,EAElBl7Q,KAAKm7Q,aAAc,EACnBn7Q,KAAKgwG,QAAU,KACfhwG,KAAKigB,SAAW,KAEZngB,EAAQmgB,WACLw5P,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpCp5K,KAAKgwG,QAAU,IAAIypK,EAAc35Q,EAAQmgB,UACzCjgB,KAAKigB,SAAWngB,EAAQmgB,SAE3B,CAED,SAASw4P,EAAS34Q,GAEhB,GADAknM,EAASA,GAAU5tB,EAAQ,SACrBp5K,gBAAgBy4Q,GAAW,OAAO,IAAIA,EAAS34Q,GAGrD,IAAIq6Q,EAAWn6Q,gBAAgBgnM,EAC/BhnM,KAAKg5Q,eAAiB,IAAIG,EAAcr5Q,EAASE,KAAMm6Q,GAEvDn6Q,KAAK6+M,UAAW,EAEZ/+M,IAC0B,oBAAjBA,EAAQqvG,OAAqBnvG,KAAKo7Q,MAAQt7Q,EAAQqvG,MAC9B,oBAApBrvG,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,UAGrEm6N,EAAOn8N,KAAKyB,KACb,CAgED,SAASs7Q,EAAiBrsK,EAAQo4F,EAAOpnL,EAAUs7P,EAAYC,GAC7DrzM,EAAM,mBAAoBk/H,GAC1B,IAMMo0E,EANF/0N,EAAQuoD,EAAO+pK,eAEnB,GAAc,OAAV3xE,EACF3gJ,EAAM+zN,SAAU,EAyOpB,SAAoBxrK,EAAQvoD,GAE1B,GADAyhB,EAAM,cACFzhB,EAAMmyN,MAAO,OAEjB,GAAInyN,EAAMspD,QAAS,CACjB,IAAIq3F,EAAQ3gJ,EAAMspD,QAAQ36D,MAEtBgyJ,GAASA,EAAMzoM,SACjB8nD,EAAMpO,OAAO55C,KAAK2oM,GAClB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OAEhD,CAED8nD,EAAMmyN,OAAQ,EAEVnyN,EAAMg0N,KAIRgB,EAAazsK,IAGbvoD,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTl0N,EAAMk0N,iBAAkB,EACxBe,EAAc1sK,IAGnB,CArQG2sK,CAAW3sK,EAAQvoD,QAKnB,GAFK80N,IAAgBC,EAmDzB,SAAsB/0N,EAAO2gJ,GAC3B,IAAIo0E,EAhQiBz6Q,EAkQFqmM,EAjQZz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAiQA,kBAAVjyE,QAAgCh+L,IAAVg+L,GAAwB3gJ,EAAMqkJ,aACtF0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAe50B,IAnQ/E,IAAuBrmM,EAsQrB,OAAOy6Q,CACR,CA3D6BI,CAAan1N,EAAO2gJ,IAE1Co0E,EACFxB,EAAehrK,EAAQwsK,QAClB,GAAI/0N,EAAMqkJ,YAAc1D,GAASA,EAAMzoM,OAAS,EAKrD,GAJqB,kBAAVyoM,GAAuB3gJ,EAAMqkJ,YAAc7pM,OAAOyJ,eAAe08L,KAAWz6D,EAAO1iI,YAC5Fm9L,EAtNR,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CAoNey0E,CAAoBz0E,IAG1Bk0E,EACE70N,EAAM8zN,WAAYP,EAAehrK,EAAQ,IAAI+qK,GAA2C+B,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,QACtH,GAAI3gJ,EAAMmyN,MACfoB,EAAehrK,EAAQ,IAAI6qK,OACtB,IAAIpzN,EAAMuyN,UACf,OAAO,EAEPvyN,EAAM+zN,SAAU,EAEZ/zN,EAAMspD,UAAY/vF,GACpBonL,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,GACxB3gJ,EAAMqkJ,YAA+B,IAAjB1D,EAAMzoM,OAAcm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,GAAY20E,EAAc/sK,EAAQvoD,IAE7Gq1N,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,EAElC,MACSk0E,IACV70N,EAAM+zN,SAAU,EAChBuB,EAAc/sK,EAAQvoD,IAO1B,OAAQA,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAkC,IAAjBnkJ,EAAM9nD,OACrE,CAED,SAASm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,EAAOk0E,GAClC70N,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAiB8nD,EAAMg0N,MAChDh0N,EAAMw0N,WAAa,EACnBjsK,EAAOqlC,KAAK,OAAQ+yD,KAGpB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACzC28Q,EAAY70N,EAAMpO,OAAO+P,QAAQg/I,GAAY3gJ,EAAMpO,OAAO55C,KAAK2oM,GAC/D3gJ,EAAMi0N,cAAce,EAAazsK,IAGvC+sK,EAAc/sK,EAAQvoD,EACvB,CAxHDxlD,OAAOC,eAAes3Q,EAASvuQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,gBAIFh5Q,KAAKg5Q,eAAeC,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAKg5Q,iBAMVh5Q,KAAKg5Q,eAAeC,UAAYt6Q,EACjC,IAEH85Q,EAASvuQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzCk4Q,EAASvuQ,UAAU+xQ,WAAarC,EAAYsC,UAE5CzD,EAASvuQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,EAMD45Q,EAASvuQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GACzC,IACIu7P,EADA90N,EAAQ1mD,KAAKg5Q,eAkBjB,OAfKtyN,EAAMqkJ,WAYTywE,GAAiB,EAXI,kBAAVn0E,KACTpnL,EAAWA,GAAYymC,EAAMu0N,mBAEZv0N,EAAMzmC,WACrBonL,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,GAC3BA,EAAW,IAGbu7P,GAAiB,GAMdF,EAAiBt7Q,KAAMqnM,EAAOpnL,GAAU,EAAOu7P,EACvD,EAGD/C,EAASvuQ,UAAUm+C,QAAU,SAAUg/I,GACrC,OAAOi0E,EAAiBt7Q,KAAMqnM,EAAO,MAAM,GAAM,EAClD,EAwEDoxE,EAASvuQ,UAAUiyQ,SAAW,WAC5B,OAAuC,IAAhCn8Q,KAAKg5Q,eAAeuB,OAC5B,EAGD9B,EAASvuQ,UAAUkyQ,YAAc,SAAUr+G,GACpC07G,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpC,IAAIppE,EAAU,IAAIypK,EAAc17G,GAChC/9J,KAAKg5Q,eAAehpK,QAAUA,EAE9BhwG,KAAKg5Q,eAAe/4P,SAAWjgB,KAAKg5Q,eAAehpK,QAAQ/vF,SAK3D,IAHA,IAAIzE,EAAIxb,KAAKg5Q,eAAe1gO,OAAOqqM,KAC/B31H,EAAU,GAED,OAANxxG,GACLwxG,GAAWhd,EAAQ0yF,MAAMlnL,EAAEgD,MAC3BhD,EAAIA,EAAEhd,KAOR,OAJAwB,KAAKg5Q,eAAe1gO,OAAO5D,QAEX,KAAZs4E,GAAgBhtH,KAAKg5Q,eAAe1gO,OAAO55C,KAAKsuH,GACpDhtH,KAAKg5Q,eAAep6Q,OAASouH,EAAQpuH,OAC9BoB,IACR,EAGD,IAAIq8Q,EAAU,WAuBd,SAASC,EAAc5rQ,EAAGg2C,GACxB,OAAIh2C,GAAK,GAAsB,IAAjBg2C,EAAM9nD,QAAgB8nD,EAAMmyN,MAAc,EACpDnyN,EAAMqkJ,WAAmB,EAEzBr6L,IAAMA,EAEJg2C,EAAM6zN,SAAW7zN,EAAM9nD,OAAe8nD,EAAMpO,OAAOqqM,KAAKnkO,KAAK5f,OAAmB8nD,EAAM9nD,QAIxF8R,EAAIg2C,EAAMmkJ,gBAAenkJ,EAAMmkJ,cA/BrC,SAAiCn6L,GAgB/B,OAfIA,GAAK2rQ,EAEP3rQ,EAAI2rQ,GAIJ3rQ,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,CACR,CAcoD6rQ,CAAwB7rQ,IACvEA,GAAKg2C,EAAM9nD,OAAe8R,EAEzBg2C,EAAMmyN,MAKJnyN,EAAM9nD,QAJX8nD,EAAMi0N,cAAe,EACd,GAIV,CAoID,SAASe,EAAazsK,GACpB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,eAAgBzhB,EAAMi0N,aAAcj0N,EAAMk0N,iBAChDl0N,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTzyM,EAAM,eAAgBzhB,EAAM6zN,SAC5B7zN,EAAMk0N,iBAAkB,EACxBnrI,EAAQyuE,SAASy9D,EAAe1sK,GAEnC,CAED,SAAS0sK,EAAc1sK,GACrB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,gBAAiBzhB,EAAMuyN,UAAWvyN,EAAM9nD,OAAQ8nD,EAAMmyN,OAEvDnyN,EAAMuyN,YAAcvyN,EAAM9nD,SAAU8nD,EAAMmyN,QAC7C5pK,EAAOqlC,KAAK,YACZ5tF,EAAMk0N,iBAAkB,GAS1Bl0N,EAAMi0N,cAAgBj0N,EAAM6zN,UAAY7zN,EAAMmyN,OAASnyN,EAAM9nD,QAAU8nD,EAAMmkJ,cAC7E2xE,EAAKvtK,EACN,CAQD,SAAS+sK,EAAc/sK,EAAQvoD,GACxBA,EAAMy0N,cACTz0N,EAAMy0N,aAAc,EACpB1rI,EAAQyuE,SAASu+D,EAAgBxtK,EAAQvoD,GAE5C,CAED,SAAS+1N,EAAextK,EAAQvoD,GAwB9B,MAAQA,EAAM+zN,UAAY/zN,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAiBnkJ,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAe,CACpH,IAAI0pB,EAAMo+B,EAAM9nD,OAGhB,GAFAupE,EAAM,wBACN8mC,EAAOE,KAAK,GACR7mF,IAAQo+B,EAAM9nD,OAChB,KACH,CAED8nD,EAAMy0N,aAAc,CACrB,CA4QD,SAASuB,EAAwBvzQ,GAC/B,IAAIu9C,EAAQv9C,EAAK6vQ,eACjBtyN,EAAMm0N,kBAAoB1xQ,EAAKguJ,cAAc,YAAc,EAEvDzwG,EAAMo0N,kBAAoBp0N,EAAMo1D,OAGlCp1D,EAAM6zN,SAAU,EACPpxQ,EAAKguJ,cAAc,QAAU,GACtChuJ,EAAKwzQ,QAER,CAED,SAASC,EAAiBzzQ,GACxBg/D,EAAM,4BACNh/D,EAAKgmG,KAAK,EACX,CA2BD,SAAS0tK,EAAQ5tK,EAAQvoD,GACvByhB,EAAM,SAAUzhB,EAAM+zN,SAEjB/zN,EAAM+zN,SACTxrK,EAAOE,KAAK,GAGdzoD,EAAMo0N,iBAAkB,EACxB7rK,EAAOqlC,KAAK,UACZkoI,EAAKvtK,GACDvoD,EAAM6zN,UAAY7zN,EAAM+zN,SAASxrK,EAAOE,KAAK,EAClD,CAeD,SAASqtK,EAAKvtK,GACZ,IAAIvoD,EAAQuoD,EAAO+pK,eAGnB,IAFA7wM,EAAM,OAAQzhB,EAAM6zN,SAEb7zN,EAAM6zN,SAA6B,OAAlBtrK,EAAOE,SAGhC,CAyHD,SAAS2tK,EAASpsQ,EAAGg2C,GAEnB,OAAqB,IAAjBA,EAAM9nD,OAAqB,MAE3B8nD,EAAMqkJ,WAAYie,EAAMtiK,EAAMpO,OAAO8+C,SAAkB1mF,GAAKA,GAAKg2C,EAAM9nD,QAEtDoqN,EAAftiK,EAAMspD,QAAetpD,EAAMpO,OAAOupB,KAAK,IAAqC,IAAxBnb,EAAMpO,OAAO15C,OAAoB8nD,EAAMpO,OAAOwtK,QAAmBp/J,EAAMpO,OAAOykG,OAAOr2F,EAAM9nD,QACnJ8nD,EAAMpO,OAAO5D,SAGbs0K,EAAMtiK,EAAMpO,OAAOk2F,QAAQ99H,EAAGg2C,EAAMspD,SAE/Bg5G,GATP,IAAIA,CAUL,CAED,SAAS+zD,EAAY9tK,GACnB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,cAAezhB,EAAM8zN,YAEtB9zN,EAAM8zN,aACT9zN,EAAMmyN,OAAQ,EACdppI,EAAQyuE,SAAS8+D,EAAet2N,EAAOuoD,GAE1C,CAED,SAAS+tK,EAAct2N,EAAOuoD,GAG5B,GAFA9mC,EAAM,gBAAiBzhB,EAAM8zN,WAAY9zN,EAAM9nD,SAE1C8nD,EAAM8zN,YAA+B,IAAjB9zN,EAAM9nD,SAC7B8nD,EAAM8zN,YAAa,EACnBvrK,EAAO4vG,UAAW,EAClB5vG,EAAOqlC,KAAK,OAER5tF,EAAMs0N,aAAa,CAGrB,IAAIiC,EAAShuK,EAAO2pK,iBAEfqE,GAAUA,EAAOjC,aAAeiC,EAAOC,WAC1CjuK,EAAO1uG,SAEV,CAEJ,CAYD,SAASuC,EAAQq6Q,EAAIn6Q,GACnB,IAAK,IAAIpF,EAAI,EAAGgS,EAAIutQ,EAAGv+Q,OAAQhB,EAAIgS,EAAGhS,IACpC,GAAIu/Q,EAAGv/Q,KAAOoF,EAAG,OAAOpF,EAG1B,OAAQ,CACT,CA5tBD66Q,EAASvuQ,UAAUilG,KAAO,SAAUz+F,GAClCy3D,EAAM,OAAQz3D,GACdA,EAAI4L,SAAS5L,EAAG,IAChB,IAAIg2C,EAAQ1mD,KAAKg5Q,eACboE,EAAQ1sQ,EAKZ,GAJU,IAANA,IAASg2C,EAAMk0N,iBAAkB,GAI3B,IAANlqQ,GAAWg2C,EAAMi0N,gBAA0C,IAAxBj0N,EAAMmkJ,cAAsBnkJ,EAAM9nD,QAAU8nD,EAAMmkJ,cAAgBnkJ,EAAM9nD,OAAS,IAAM8nD,EAAMmyN,OAGlI,OAFA1wM,EAAM,qBAAsBzhB,EAAM9nD,OAAQ8nD,EAAMmyN,OAC3B,IAAjBnyN,EAAM9nD,QAAgB8nD,EAAMmyN,MAAOkE,EAAY/8Q,MAAW07Q,EAAa17Q,MACpE,KAKT,GAAU,KAFV0Q,EAAI4rQ,EAAc5rQ,EAAGg2C,KAENA,EAAMmyN,MAEnB,OADqB,IAAjBnyN,EAAM9nD,QAAcm+Q,EAAY/8Q,MAC7B,KAyBT,IA4BIgpN,EA5BAq0D,EAAS32N,EAAMi0N,aAgDnB,OA/CAxyM,EAAM,gBAAiBk1M,IAEF,IAAjB32N,EAAM9nD,QAAgB8nD,EAAM9nD,OAAS8R,EAAIg2C,EAAMmkJ,gBAEjD1iI,EAAM,6BADNk1M,GAAS,GAMP32N,EAAMmyN,OAASnyN,EAAM+zN,QAEvBtyM,EAAM,mBADNk1M,GAAS,GAEAA,IACTl1M,EAAM,WACNzhB,EAAM+zN,SAAU,EAChB/zN,EAAMg0N,MAAO,EAEQ,IAAjBh0N,EAAM9nD,SAAc8nD,EAAMi0N,cAAe,GAE7C36Q,KAAKo7Q,MAAM10N,EAAMmkJ,eAEjBnkJ,EAAMg0N,MAAO,EAGRh0N,EAAM+zN,UAAS/pQ,EAAI4rQ,EAAcc,EAAO12N,KAMnC,QAFDsiK,EAAPt4M,EAAI,EAASosQ,EAASpsQ,EAAGg2C,GAAkB,OAG7CA,EAAMi0N,aAAej0N,EAAM9nD,QAAU8nD,EAAMmkJ,cAC3Cn6L,EAAI,IAEJg2C,EAAM9nD,QAAU8R,EAChBg2C,EAAMw0N,WAAa,GAGA,IAAjBx0N,EAAM9nD,SAGH8nD,EAAMmyN,QAAOnyN,EAAMi0N,cAAe,GAEnCyC,IAAU1sQ,GAAKg2C,EAAMmyN,OAAOkE,EAAY/8Q,OAGlC,OAARgpN,GAAchpN,KAAKs0I,KAAK,OAAQ00E,GAC7BA,CACR,EAuHDyvD,EAASvuQ,UAAUkxQ,MAAQ,SAAU1qQ,GACnCupQ,EAAej6Q,KAAM,IAAI+5Q,EAA2B,WACrD,EAEDtB,EAASvuQ,UAAUovO,KAAO,SAAU9hI,EAAM8lK,GACxC,IAAIl+Q,EAAMY,KACN0mD,EAAQ1mD,KAAKg5Q,eAEjB,OAAQtyN,EAAM4zN,YACZ,KAAK,EACH5zN,EAAM2zN,MAAQ7iK,EACd,MAEF,KAAK,EACH9wD,EAAM2zN,MAAQ,CAAC3zN,EAAM2zN,MAAO7iK,GAC5B,MAEF,QACE9wD,EAAM2zN,MAAM37Q,KAAK84G,GAIrB9wD,EAAM4zN,YAAc,EACpBnyM,EAAM,wBAAyBzhB,EAAM4zN,WAAYgD,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAASjoO,MAAkBmiE,IAASi4B,EAAQ+tI,QAAUhmK,IAASi4B,EAAQ0yF,OAC7Ew2C,EAAQ8E,EAI5B,SAASC,EAAS7+D,EAAU8+D,GAC1Bx1M,EAAM,YAEF02I,IAAaz/M,GACXu+Q,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5Bz1M,EAAM,WAENqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BtmK,EAAK0+C,eAAe,QAAS6nH,GAC7BvmK,EAAK0+C,eAAe,QAAShjC,GAC7B1b,EAAK0+C,eAAe,SAAUwnH,GAC9Bt+Q,EAAI82J,eAAe,MAAOyiH,GAC1Bv5Q,EAAI82J,eAAe,MAAOunH,GAC1Br+Q,EAAI82J,eAAe,OAAQ8nH,GAC3BC,GAAY,GAMRv3N,EAAMw0N,YAAgB1jK,EAAKohK,iBAAkBphK,EAAKohK,eAAesF,WAAYH,IAhClF,CAED,SAASpF,IACPxwM,EAAM,SACNqvC,EAAKniE,KACN,CAjBGqR,EAAM8zN,WAAY/qI,EAAQyuE,SAASq/D,GAAYn+Q,EAAI83J,KAAK,MAAOqmH,GACnE/lK,EAAK+wB,GAAG,SAAUm1I,GAsBlB,IAAIK,EAwFN,SAAqB3+Q,GACnB,OAAO,WACL,IAAIsnD,EAAQtnD,EAAI45Q,eAChB7wM,EAAM,cAAezhB,EAAMw0N,YACvBx0N,EAAMw0N,YAAYx0N,EAAMw0N,aAEH,IAArBx0N,EAAMw0N,YAAoB9B,EAAgBh6Q,EAAK,UACjDsnD,EAAM6zN,SAAU,EAChBiC,EAAKp9Q,GAER,CACF,CAnGe++Q,CAAY/+Q,GAC1Bo4G,EAAK+wB,GAAG,QAASw1I,GACjB,IAAIE,GAAY,EAwBhB,SAASD,EAAO32E,GACdl/H,EAAM,UACN,IAAI6gJ,EAAMxxG,EAAKkrF,MAAM2E,GACrBl/H,EAAM,aAAc6gJ,IAER,IAARA,KAKwB,IAArBtiK,EAAM4zN,YAAoB5zN,EAAM2zN,QAAU7iK,GAAQ9wD,EAAM4zN,WAAa,IAAqC,IAAhCx3Q,EAAQ4jD,EAAM2zN,MAAO7iK,MAAkBymK,IACpH91M,EAAM,8BAA+BzhB,EAAMw0N,YAC3Cx0N,EAAMw0N,cAGR97Q,EAAIg/Q,QAEP,CAID,SAASlrJ,EAAQuoJ,GACftzM,EAAM,UAAWszM,GACjBgC,IACAjmK,EAAK0+C,eAAe,QAAShjC,GACU,IAAnCkmJ,EAAgB5hK,EAAM,UAAgByiK,EAAeziK,EAAMikK,EAChE,CAKD,SAASoC,IACPrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BL,GACD,CAID,SAASK,IACP31M,EAAM,YACNqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BJ,GACD,CAID,SAASA,IACPt1M,EAAM,UACN/oE,EAAIq+Q,OAAOjmK,EACZ,CAUD,OA7DAp4G,EAAImpI,GAAG,OAAQy1I,GAtkBjB,SAAyB3E,EAAS5pQ,EAAOvG,GAGvC,GAAuC,oBAA5BmwQ,EAAQgF,gBAAgC,OAAOhF,EAAQgF,gBAAgB5uQ,EAAOvG,GAKpFmwQ,EAAQiF,SAAYjF,EAAQiF,QAAQ7uQ,GAAuC5R,MAAMC,QAAQu7Q,EAAQiF,QAAQ7uQ,IAAS4pQ,EAAQiF,QAAQ7uQ,GAAO44C,QAAQn/C,GAASmwQ,EAAQiF,QAAQ7uQ,GAAS,CAACvG,EAAImwQ,EAAQiF,QAAQ7uQ,IAA5J4pQ,EAAQ9wI,GAAG94H,EAAOvG,EACpE,CA4lBCm1Q,CAAgB7mK,EAAM,QAAS0b,GAO/B1b,EAAK0/C,KAAK,QAAS2mH,GAQnBrmK,EAAK0/C,KAAK,SAAU4mH,GAQpBtmK,EAAK88B,KAAK,OAAQl1I,GAEbsnD,EAAM6zN,UACTpyM,EAAM,eACN/oE,EAAIu9Q,UAGCnlK,CACR,EAeDihK,EAASvuQ,UAAUuzQ,OAAS,SAAUjmK,GACpC,IAAI9wD,EAAQ1mD,KAAKg5Q,eACb2E,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBl3N,EAAM4zN,WAAkB,OAAOt6Q,KAEnC,GAAyB,IAArB0mD,EAAM4zN,WAER,OAAI9iK,GAAQA,IAAS9wD,EAAM2zN,QACtB7iK,IAAMA,EAAO9wD,EAAM2zN,OAExB3zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EACZ/iK,GAAMA,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IANK39Q,KAW3C,IAAKw3G,EAAM,CAET,IAAI+mK,EAAQ73N,EAAM2zN,MACd/xP,EAAMo+B,EAAM4zN,WAChB5zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EAEhB,IAAK,IAAI38Q,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACvB2gR,EAAM3gR,GAAG02I,KAAK,SAAUt0I,KAAM,CAC5B49Q,YAAY,IAIhB,OAAO59Q,IACR,CAGD,IAAIuP,EAAQzM,EAAQ4jD,EAAM2zN,MAAO7iK,GACjC,OAAe,IAAXjoG,IACJm3C,EAAM2zN,MAAM7qQ,OAAOD,EAAO,GAC1Bm3C,EAAM4zN,YAAc,EACK,IAArB5zN,EAAM4zN,aAAkB5zN,EAAM2zN,MAAQ3zN,EAAM2zN,MAAM,IACtD7iK,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IAJD39Q,IAM1B,EAIDy4Q,EAASvuQ,UAAUq+H,GAAK,SAAUq2D,EAAI11L,GACpC,IAAI0pG,EAAM8nH,EAAOxwN,UAAUq+H,GAAGhqI,KAAKyB,KAAM4+L,EAAI11L,GACzCw9C,EAAQ1mD,KAAKg5Q,eAuBjB,MArBW,SAAPp6E,GAGFl4I,EAAMm0N,kBAAoB76Q,KAAKm3J,cAAc,YAAc,GAErC,IAAlBzwG,EAAM6zN,SAAmBv6Q,KAAK28Q,UAClB,aAAP/9E,IACJl4I,EAAM8zN,YAAe9zN,EAAMm0N,oBAC9Bn0N,EAAMm0N,kBAAoBn0N,EAAMi0N,cAAe,EAC/Cj0N,EAAM6zN,SAAU,EAChB7zN,EAAMk0N,iBAAkB,EACxBzyM,EAAM,cAAezhB,EAAM9nD,OAAQ8nD,EAAM+zN,SAErC/zN,EAAM9nD,OACR88Q,EAAa17Q,MACH0mD,EAAM+zN,SAChBhrI,EAAQyuE,SAAS0+D,EAAkB58Q,QAKlC4yG,CACR,EAED6lK,EAASvuQ,UAAU0uJ,YAAc6/G,EAASvuQ,UAAUq+H,GAEpDkwI,EAASvuQ,UAAUgsJ,eAAiB,SAAU0oC,EAAI11L,GAChD,IAAI0pG,EAAM8nH,EAAOxwN,UAAUgsJ,eAAe33J,KAAKyB,KAAM4+L,EAAI11L,GAYzD,MAVW,aAAP01L,GAOFnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAED6lK,EAASvuQ,UAAUqvJ,mBAAqB,SAAUqlC,GAChD,IAAIhsF,EAAM8nH,EAAOxwN,UAAUqvJ,mBAAmBv3J,MAAMhC,KAAMmC,WAY1D,MAVW,aAAPy8L,QAA4Bv1L,IAAPu1L,GAOvBnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAsBD6lK,EAASvuQ,UAAUyyQ,OAAS,WAC1B,IAAIj2N,EAAQ1mD,KAAKg5Q,eAYjB,OAVKtyN,EAAM6zN,UACTpyM,EAAM,UAINzhB,EAAM6zN,SAAW7zN,EAAMm0N,kBAQ3B,SAAgB5rK,EAAQvoD,GACjBA,EAAMo0N,kBACTp0N,EAAMo0N,iBAAkB,EACxBrrI,EAAQyuE,SAAS2+D,EAAS5tK,EAAQvoD,GAErC,CAZGi2N,CAAO38Q,KAAM0mD,IAGfA,EAAMo1D,QAAS,EACR97G,IACR,EAsBDy4Q,EAASvuQ,UAAUk0Q,MAAQ,WAUzB,OATAj2M,EAAM,wBAAyBnoE,KAAKg5Q,eAAeuB,UAEf,IAAhCv6Q,KAAKg5Q,eAAeuB,UACtBpyM,EAAM,SACNnoE,KAAKg5Q,eAAeuB,SAAU,EAC9Bv6Q,KAAKs0I,KAAK,UAGZt0I,KAAKg5Q,eAAel9J,QAAS,EACtB97G,IACR,EAcDy4Q,EAASvuQ,UAAUsX,KAAO,SAAUytF,GAClC,IAAIla,EAAQ/0F,KAER0mD,EAAQ1mD,KAAKg5Q,eACbl9J,GAAS,EA0Bb,IAAK,IAAIl+G,KAzBTqxG,EAAOs5B,GAAG,OAAO,WAGf,GAFApgE,EAAM,eAEFzhB,EAAMspD,UAAYtpD,EAAMmyN,MAAO,CACjC,IAAIxxE,EAAQ3gJ,EAAMspD,QAAQ36D,MACtBgyJ,GAASA,EAAMzoM,QAAQm2F,EAAMr2F,KAAK2oM,EACvC,CAEDtyG,EAAMr2F,KAAK,KACZ,IACDuwG,EAAOs5B,GAAG,QAAQ,SAAU8+D,IAC1Bl/H,EAAM,gBACFzhB,EAAMspD,UAASq3F,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,KAE3C3gJ,EAAMqkJ,YAAyB,OAAV1D,QAA4Bh+L,IAAVg+L,MAAuC3gJ,EAAMqkJ,YAAgB1D,GAAUA,EAAMzoM,UAE9Gm2F,EAAMr2F,KAAK2oM,KAGnBvrF,GAAS,EACT7M,EAAOmvK,UAEV,IAGanvK,OACI5lG,IAAZrJ,KAAKpC,IAAyC,oBAAdqxG,EAAOrxG,KACzCoC,KAAKpC,GAAK,SAAoBo7F,GAC5B,OAAO,WACL,OAAOiW,EAAOjW,GAAQh3F,MAAMitG,EAAQ9sG,UACrC,CACF,CAJS,CAIRvE,IAKN,IAAK,IAAI8S,EAAI,EAAGA,EAAIwpQ,EAAat7Q,OAAQ8R,IACvCu+F,EAAOs5B,GAAG2xI,EAAaxpQ,GAAI1Q,KAAKs0I,KAAKzqI,KAAK7J,KAAMk6Q,EAAaxpQ,KAc/D,OATA1Q,KAAKo7Q,MAAQ,SAAU1qQ,GACrBy3D,EAAM,gBAAiBz3D,GAEnBorG,IACFA,GAAS,EACT7M,EAAO0tK,SAEV,EAEM38Q,IACR,EAEqB,oBAAXhC,SACTy6Q,EAASvuQ,UAAUlM,OAAOwgR,eAAiB,WAKzC,YAJ0Cn1Q,IAAtCqwQ,IACFA,EAAoCtgG,EAAQ,QAGvCsgG,EAAkC15Q,KAC1C,GAGHkB,OAAOC,eAAes3Q,EAASvuQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAenuE,aAC5B,IAEH3pM,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAe1gO,MACnD,IAEHp3C,OAAOC,eAAes3Q,EAASvuQ,UAAW,kBAAmB,CAI3D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAeuB,OAC5B,EACD9vQ,IAAK,SAAai8C,GACZ1mD,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeuB,QAAU7zN,EAEjC,IAGH+xN,EAASgG,UAAY3B,EACrB57Q,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAep6Q,MAC5B,IAmDmB,oBAAXZ,SACTy6Q,EAASp5P,KAAO,SAAUq/P,EAAU/gG,GAKlC,YAJat0K,IAATgW,IACFA,EAAO+5J,EAAQ,QAGV/5J,EAAKo5P,EAAUiG,EAAU/gG,EACjC,uCC3hCHxa,EAAOx3B,QAAU+jI,EAEjB,IAAI5zC,EAAiB1iD,EAAAA,OAAAA,EACjB2gG,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCC,EAAqC9iD,EAAe8iD,mCACpDC,EAA8B/iD,EAAe+iD,4BAE7C73E,EAAS5tB,EAAQ,OAIrB,SAAS0lG,EAAerD,EAAIj9P,GAC1B,IAAIugQ,EAAK/+Q,KAAKg/Q,gBACdD,EAAGE,cAAe,EAClB,IAAI5zO,EAAK0zO,EAAGG,QAEZ,GAAW,OAAP7zO,EACF,OAAOrrC,KAAKs0I,KAAK,QAAS,IAAIqqI,GAGhCI,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KACD,MAAR1gQ,GACFxe,KAAKtB,KAAK8f,GACZ6sB,EAAGowO,GACH,IAAIjrG,EAAKxwK,KAAKg5Q,eACdxoG,EAAGiqG,SAAU,GAETjqG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBACpC7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cAEjB,CAED,SAAS6kE,EAAU5vQ,GACjB,KAAME,gBAAgB0vQ,GAAY,OAAO,IAAIA,EAAU5vQ,GACvDknM,EAAOzoM,KAAKyB,KAAMF,GAClBE,KAAKg/Q,gBAAkB,CACrBF,eAAgBA,EAAej1Q,KAAK7J,MACpCo/Q,eAAe,EACfH,cAAc,EACdC,QAAS,KACTC,WAAY,KACZE,cAAe,MAGjBr/Q,KAAKg5Q,eAAe2B,cAAe,EAInC36Q,KAAKg5Q,eAAe0B,MAAO,EAEvB56Q,IAC+B,oBAAtBA,EAAQ+H,YAA0B7H,KAAKk5Q,WAAap5Q,EAAQ+H,WAC1C,oBAAlB/H,EAAQ2yQ,QAAsBzyQ,KAAKs/Q,OAASx/Q,EAAQ2yQ,QAIjEzyQ,KAAKuoI,GAAG,YAAag3I,EACtB,CAED,SAASA,IACP,IAAIxqL,EAAQ/0F,KAEe,oBAAhBA,KAAKs/Q,QAA0Bt/Q,KAAKg5Q,eAAeC,UAK5Dx6Q,EAAKuB,KAAM,KAAM,MAJjBA,KAAKs/Q,QAAO,SAAU7D,EAAIj9P,GACxB/f,EAAKs2F,EAAO0mL,EAAIj9P,EACjB,GAIJ,CAwDD,SAAS/f,EAAKwwG,EAAQwsK,EAAIj9P,GACxB,GAAIi9P,EAAI,OAAOxsK,EAAOqlC,KAAK,QAASmnI,GAMpC,GALY,MAARj9P,GACFywF,EAAOvwG,KAAK8f,GAIVywF,EAAO2pK,eAAeh6Q,OAAQ,MAAM,IAAIigR,EAC5C,GAAI5vK,EAAO+vK,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAO3vK,EAAOvwG,KAAK,KACpB,CA/HD06K,EAAQ,MAARA,CAAoBs2F,EAAW1oE,GA+D/B0oE,EAAUxlQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GAE1C,OADAjgB,KAAKg/Q,gBAAgBI,eAAgB,EAC9Bp4E,EAAO98L,UAAUxL,KAAKH,KAAKyB,KAAMqnM,EAAOpnL,EAChD,EAYDyvP,EAAUxlQ,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC1DA,EAAG,IAAI0uO,EAA2B,gBACnC,EAEDrK,EAAUxlQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACtD,IAAI0zO,EAAK/+Q,KAAKg/Q,gBAKd,GAJAD,EAAGG,QAAU7zO,EACb0zO,EAAGI,WAAa93E,EAChB03E,EAAGM,cAAgBp/P,GAEd8+P,EAAGE,aAAc,CACpB,IAAIzuG,EAAKxwK,KAAKg5Q,gBACV+F,EAAGK,eAAiB5uG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBAAe7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cACxF,CACF,EAKD6kE,EAAUxlQ,UAAUkxQ,MAAQ,SAAU1qQ,GACpC,IAAIquQ,EAAK/+Q,KAAKg/Q,gBAEQ,OAAlBD,EAAGI,YAAwBJ,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBj/Q,KAAKk5Q,WAAW6F,EAAGI,WAAYJ,EAAGM,cAAeN,EAAGD,gBAMvD,EAEDpP,EAAUxlQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC5C27J,EAAO98L,UAAUmxQ,SAAS98Q,KAAKyB,KAAMnB,GAAK,SAAU2gR,GAClDn0O,EAAGm0O,EACJ,GACF,0CCxIGx4E,YAfJ,SAASy4E,EAAc/4N,GACrB,IAAIquC,EAAQ/0F,KAEZA,KAAKxB,KAAO,KACZwB,KAAK04D,MAAQ,KAEb14D,KAAKguE,OAAS,YAimBhB,SAAwB0xM,EAASh5N,EAAO7nD,GACtC,IAAI65D,EAAQgnN,EAAQhnN,MACpBgnN,EAAQhnN,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAIrtB,EAAKqtB,EAAMrxC,SACfq/B,EAAMi5N,YACNt0O,EAAGxsC,GACH65D,EAAQA,EAAMl6D,IACf,CAGDkoD,EAAMk5N,mBAAmBphR,KAAOkhR,CACjC,CA7mBGG,CAAe9qL,EAAOruC,EACvB,CACF,CArBDy8G,EAAOx3B,QAAU0qI,EA8BjBA,EAASyJ,cAAgBA,EAGzB,IAAIC,EAAe,CACjBC,UAAW5mG,EAAQ,QAMjBshD,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAUvD,IAkIIyuQ,EAlIArG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC89C,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCuB,EAAyBpkD,EAAeokD,uBACxCC,EAAuBrkD,EAAeqkD,qBACtCC,EAAyBtkD,EAAeskD,uBACxCC,EAA6BvkD,EAAeukD,2BAC5CC,EAAuBxkD,EAAewkD,qBAEtCrG,EAAiBL,EAAYK,eAIjC,SAASsG,IAAQ,CAEjB,SAAST,EAAchgR,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQ0gR,oBAI7DxgR,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAE9En6Q,KAAKygR,aAAc,EAEnBzgR,KAAKk+Q,WAAY,EAEjBl+Q,KAAK0gR,QAAS,EAEd1gR,KAAK64Q,OAAQ,EAEb74Q,KAAKk9Q,UAAW,EAEhBl9Q,KAAKi5Q,WAAY,EAIjB,IAAI0H,GAAqC,IAA1B7gR,EAAQ8gR,cACvB5gR,KAAK4gR,eAAiBD,EAItB3gR,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAIlDj7Q,KAAKpB,OAAS,EAEdoB,KAAK6gR,SAAU,EAEf7gR,KAAK8gR,OAAS,EAKd9gR,KAAK06Q,MAAO,EAIZ16Q,KAAK+gR,kBAAmB,EAExB/gR,KAAKghR,QAAU,SAAUvF,IA6R3B,SAAiBxsK,EAAQwsK,GACvB,IAAI/0N,EAAQuoD,EAAO2pK,eACf8B,EAAOh0N,EAAMg0N,KACbrvO,EAAKqb,EAAMw4N,QACf,GAAkB,oBAAP7zO,EAAmB,MAAM,IAAIszO,EAExC,GAbF,SAA4Bj4N,GAC1BA,EAAMm6N,SAAU,EAChBn6N,EAAMw4N,QAAU,KAChBx4N,EAAM9nD,QAAU8nD,EAAMu6N,SACtBv6N,EAAMu6N,SAAW,CAClB,CAOCC,CAAmBx6N,GACf+0N,GArCN,SAAsBxsK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,KAC3Cqb,EAAMi5N,UAEJjF,GAGFjrI,EAAQyuE,SAAS7yK,EAAIowO,GAGrBhsI,EAAQyuE,SAASijE,EAAalyK,EAAQvoD,GACtCuoD,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,KAIvBpwO,EAAGowO,GACHxsK,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,GAGvB0F,EAAYlyK,EAAQvoD,GAEvB,CAeS26N,CAAapyK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,OAAS,CAErD,IAAI6xO,EAAWoE,EAAW56N,IAAUuoD,EAAOgqK,UAEtCiE,GAAax2N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBACjEC,EAAYvyK,EAAQvoD,GAGlBg0N,EACFjrI,EAAQyuE,SAASujE,EAAYxyK,EAAQvoD,EAAOw2N,EAAU7xO,GAEtDo2O,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,EAEvC,CACF,CAhTG21O,CAAQ/xK,EAAQwsK,EACjB,EAGDz7Q,KAAKk/Q,QAAU,KAEfl/Q,KAAKihR,SAAW,EAChBjhR,KAAKuhR,gBAAkB,KACvBvhR,KAAK0hR,oBAAsB,KAG3B1hR,KAAK2/Q,UAAY,EAGjB3/Q,KAAK2hR,aAAc,EAEnB3hR,KAAKohR,cAAe,EAEpBphR,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAK4hR,qBAAuB,EAG5B5hR,KAAK4/Q,mBAAqB,IAAIH,EAAcz/Q,KAC7C,CA2CD,SAASq2Q,EAASv2Q,GAUhB,IAAIq6Q,EAAWn6Q,gBATfgnM,EAASA,GAAU5tB,EAAQ,QAU3B,IAAK+gG,IAAa8F,EAAgB1hR,KAAK83Q,EAAUr2Q,MAAO,OAAO,IAAIq2Q,EAASv2Q,GAC5EE,KAAK44Q,eAAiB,IAAIkH,EAAchgR,EAASE,KAAMm6Q,GAEvDn6Q,KAAKsB,UAAW,EAEZxB,IAC2B,oBAAlBA,EAAQ4iM,QAAsB1iM,KAAKonM,OAAStnM,EAAQ4iM,OACjC,oBAAnB5iM,EAAQ+hR,SAAuB7hR,KAAK8hR,QAAUhiR,EAAQ+hR,QAClC,oBAApB/hR,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,SACtC,oBAAlBT,EAAQkxQ,QAAsBhxQ,KAAK+wQ,OAASjxQ,EAAQkxQ,QAGjEt2C,EAAOn8N,KAAKyB,KACb,CAuJD,SAAS+hR,EAAQ9yK,EAAQvoD,EAAOm7N,EAAQv5P,EAAK++K,EAAOpnL,EAAUorB,GAC5Dqb,EAAMu6N,SAAW34P,EACjBo+B,EAAMw4N,QAAU7zO,EAChBqb,EAAMm6N,SAAU,EAChBn6N,EAAMg0N,MAAO,EACTh0N,EAAMuyN,UAAWvyN,EAAMs6N,QAAQ,IAAIb,EAAqB,UAAmB0B,EAAQ5yK,EAAO6yK,QAAQz6E,EAAO3gJ,EAAMs6N,SAAc/xK,EAAOm4F,OAAOC,EAAOpnL,EAAUymC,EAAMs6N,SACtKt6N,EAAMg0N,MAAO,CACd,CAuDD,SAAS+G,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,GACtC6xO,GASP,SAAsBjuK,EAAQvoD,GACP,IAAjBA,EAAM9nD,QAAgB8nD,EAAMw3N,YAC9Bx3N,EAAMw3N,WAAY,EAClBjvK,EAAOqlC,KAAK,SAEf,CAdgB0tI,CAAa/yK,EAAQvoD,GACpCA,EAAMi5N,YACNt0O,IACA81O,EAAYlyK,EAAQvoD,EACrB,CAaD,SAAS86N,EAAYvyK,EAAQvoD,GAC3BA,EAAMq6N,kBAAmB,EACzB,IAAIroN,EAAQhS,EAAM66N,gBAElB,GAAItyK,EAAO6yK,SAAWppN,GAASA,EAAMl6D,KAAM,CAEzC,IAAIoR,EAAI82C,EAAMk7N,qBACVtpO,EAAS,IAAIz6C,MAAM+R,GACnBqyQ,EAASv7N,EAAMk5N,mBACnBqC,EAAOvpN,MAAQA,EAIf,IAHA,IAAIltC,EAAQ,EACR02P,GAAa,EAEVxpN,GACLpgB,EAAO9sB,GAASktC,EACXA,EAAMypN,QAAOD,GAAa,GAC/BxpN,EAAQA,EAAMl6D,KACdgtB,GAAS,EAGX8sB,EAAO4pO,WAAaA,EACpBH,EAAQ9yK,EAAQvoD,GAAO,EAAMA,EAAM9nD,OAAQ05C,EAAQ,GAAI2pO,EAAOj0M,QAG9DtnB,EAAMi5N,YACNj5N,EAAMg7N,oBAAsB,KAExBO,EAAOzjR,MACTkoD,EAAMk5N,mBAAqBqC,EAAOzjR,KAClCyjR,EAAOzjR,KAAO,MAEdkoD,EAAMk5N,mBAAqB,IAAIH,EAAc/4N,GAG/CA,EAAMk7N,qBAAuB,CAC9B,KAAM,CAEL,KAAOlpN,GAAO,CACZ,IAAI2uI,EAAQ3uI,EAAM2uI,MACdpnL,EAAWy4C,EAAMz4C,SACjBorB,EAAKqtB,EAAMrxC,SASf,GAPA06P,EAAQ9yK,EAAQvoD,GAAO,EADbA,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACJyoM,EAAOpnL,EAAUorB,GACpDqtB,EAAQA,EAAMl6D,KACdkoD,EAAMk7N,uBAKFl7N,EAAMm6N,QACR,KAEH,CAEa,OAAVnoN,IAAgBhS,EAAMg7N,oBAAsB,KACjD,CAEDh7N,EAAM66N,gBAAkB7oN,EACxBhS,EAAMq6N,kBAAmB,CAC1B,CA0CD,SAASO,EAAW56N,GAClB,OAAOA,EAAMg6N,QAA2B,IAAjBh6N,EAAM9nD,QAA0C,OAA1B8nD,EAAM66N,kBAA6B76N,EAAMw2N,WAAax2N,EAAMm6N,OAC1G,CAED,SAASuB,EAAUnzK,EAAQvoD,GACzBuoD,EAAO8hK,QAAO,SAAUlyQ,GACtB6nD,EAAMi5N,YAEF9gR,GACFo7Q,EAAehrK,EAAQpwG,GAGzB6nD,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,aACZ6sI,EAAYlyK,EAAQvoD,EACrB,GACF,CAeD,SAASy6N,EAAYlyK,EAAQvoD,GAC3B,IAAI27N,EAAOf,EAAW56N,GAEtB,GAAI27N,IAhBN,SAAmBpzK,EAAQvoD,GACpBA,EAAMi7N,aAAgBj7N,EAAM+5N,cACF,oBAAlBxxK,EAAO8hK,QAA0BrqN,EAAMuyN,WAKhDvyN,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,eALZ5tF,EAAMi5N,YACNj5N,EAAM+5N,aAAc,EACpBhxI,EAAQyuE,SAASkkE,EAAWnzK,EAAQvoD,IAMzC,CAMG64N,CAAUtwK,EAAQvoD,GAEM,IAApBA,EAAMi5N,YACRj5N,EAAMw2N,UAAW,EACjBjuK,EAAOqlC,KAAK,UAER5tF,EAAMs0N,cAAa,CAGrB,IAAIsH,EAASrzK,EAAO+pK,iBAEfsJ,GAAUA,EAAOtH,aAAesH,EAAO9H,aAC1CvrK,EAAO1uG,SAEV,CAIL,OAAO8hR,CACR,CA5hBDjpG,EAAQ,MAARA,CAAoBi9F,EAAU37C,GAyF9BolD,EAAc51Q,UAAU6uQ,UAAY,WAIlC,IAHA,IAAIxzQ,EAAUvF,KAAKuhR,gBACf12F,EAAM,GAEHtlL,GACLslL,EAAInsL,KAAK6G,GACTA,EAAUA,EAAQ/G,KAGpB,OAAOqsL,CACR,EAED,WACE,IACE3pL,OAAOC,eAAe2+Q,EAAc51Q,UAAW,SAAU,CACvDM,IAAKu1Q,EAAaC,WAAU,WAC1B,OAAOhgR,KAAK+4Q,WACb,GAAE,6EAAmF,YAE5E,CAAZ,MAAOttH,GAAK,CAPhB,IAcsB,oBAAXztJ,QAAyBA,OAAOukR,aAAiE,oBAA3Cv4Q,SAASE,UAAUlM,OAAOukR,cACzFtC,EAAkBj2Q,SAASE,UAAUlM,OAAOukR,aAC5CrhR,OAAOC,eAAek1Q,EAAUr4Q,OAAOukR,YAAa,CAClD5jR,MAAO,SAAe6C,GACpB,QAAIy+Q,EAAgB1hR,KAAKyB,KAAMwB,IAC3BxB,OAASq2Q,IACN70Q,GAAUA,EAAOo3Q,0BAA0BkH,EACnD,KAGHG,EAAkB,SAAyBz+Q,GACzC,OAAOA,aAAkBxB,IAC1B,EA8BHq2Q,EAASnsQ,UAAUovO,KAAO,WACxB2gC,EAAej6Q,KAAM,IAAIkgR,EAC1B,EA8BD7J,EAASnsQ,UAAUw4L,MAAQ,SAAU2E,EAAOpnL,EAAUorB,GACpD,IAnNqBrqC,EAmNjB0lD,EAAQ1mD,KAAK44Q,eACb5vD,GAAM,EAENm5D,GAASz7N,EAAMqkJ,aAtNE/pM,EAsN0BqmM,EArNxCz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAsO9C,OAfI6I,IAAUv1I,EAAOk2D,SAASuE,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CA2NWy0E,CAAoBz0E,IAGN,oBAAbpnL,IACTorB,EAAKprB,EACLA,EAAW,MAGTkiQ,EAAOliQ,EAAW,SAAmBA,IAAUA,EAAWymC,EAAMu0N,iBAClD,oBAAP5vO,IAAmBA,EAAKk1O,GAC/B75N,EAAMg6N,OA7CZ,SAAuBzxK,EAAQ5jE,GAC7B,IAAIowO,EAAK,IAAI4E,EAEbpG,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,EACtB,CAwCmB+G,CAAcxiR,KAAMqrC,IAAa82O,GAnCrD,SAAoBlzK,EAAQvoD,EAAO2gJ,EAAOh8J,GACxC,IAAIowO,EAQJ,OANc,OAAVp0E,EACFo0E,EAAK,IAAI2E,EACiB,kBAAV/4E,GAAuB3gJ,EAAMqkJ,aAC7C0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,UAAW50B,KAG3Do0E,IACFxB,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,IACd,EAIV,CAmB6DgH,CAAWziR,KAAM0mD,EAAO2gJ,EAAOh8J,MACzFqb,EAAMi5N,YACN32D,EAwDJ,SAAuB/5G,EAAQvoD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,GAC5D,IAAK82O,EAAO,CACV,IAAIO,EAtBR,SAAqBh8N,EAAO2gJ,EAAOpnL,GAC5BymC,EAAMqkJ,aAAsC,IAAxBrkJ,EAAMk6N,eAA4C,kBAAVv5E,IAC/DA,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,IAG7B,OAAOonL,CACR,CAgBkBs7E,CAAYj8N,EAAO2gJ,EAAOpnL,GAErConL,IAAUq7E,IACZP,GAAQ,EACRliQ,EAAW,SACXonL,EAAQq7E,EAEX,CAED,IAAIp6P,EAAMo+B,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACvC8nD,EAAM9nD,QAAU0pB,EAChB,IAAI0gM,EAAMtiK,EAAM9nD,OAAS8nD,EAAMmkJ,cAE1Bme,IAAKtiK,EAAMw3N,WAAY,GAE5B,GAAIx3N,EAAMm6N,SAAWn6N,EAAMo6N,OAAQ,CACjC,IAAIhlB,EAAOp1M,EAAMg7N,oBACjBh7N,EAAMg7N,oBAAsB,CAC1Br6E,MAAOA,EACPpnL,SAAUA,EACVkiQ,MAAOA,EACP96P,SAAUgkB,EACV7sC,KAAM,MAGJs9P,EACFA,EAAKt9P,KAAOkoD,EAAMg7N,oBAElBh7N,EAAM66N,gBAAkB76N,EAAMg7N,oBAGhCh7N,EAAMk7N,sBAAwB,CAC/B,MACCG,EAAQ9yK,EAAQvoD,GAAO,EAAOp+B,EAAK++K,EAAOpnL,EAAUorB,GAGtD,OAAO29K,CACR,CA/FS45D,CAAc5iR,KAAM0mD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,IAEpD29K,CACR,EAEDqtD,EAASnsQ,UAAU24Q,KAAO,WACxB7iR,KAAK44Q,eAAekI,QACrB,EAEDzK,EAASnsQ,UAAU44Q,OAAS,WAC1B,IAAIp8N,EAAQ1mD,KAAK44Q,eAEblyN,EAAMo6N,SACRp6N,EAAMo6N,SACDp6N,EAAMm6N,SAAYn6N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBAAiBC,EAAYxhR,KAAM0mD,GAE9G,EAED2vN,EAASnsQ,UAAU64Q,mBAAqB,SAA4B9iQ,GAGlE,GADwB,kBAAbA,IAAuBA,EAAWA,EAAS1P,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOzN,SAASmd,EAAW,IAAI1P,gBAAkB,GAAI,MAAM,IAAI+vQ,EAAqBrgQ,GAExL,OADAjgB,KAAK44Q,eAAeqC,gBAAkBh7P,EAC/BjgB,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAWH73Q,OAAOC,eAAek1Q,EAASnsQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IA2LHwrE,EAASnsQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACrDA,EAAG,IAAI0uO,EAA2B,YACnC,EAED1D,EAASnsQ,UAAU43Q,QAAU,KAE7BzL,EAASnsQ,UAAUmrC,IAAM,SAAUgyJ,EAAOpnL,EAAUorB,GAClD,IAAIqb,EAAQ1mD,KAAK44Q,eAoBjB,MAlBqB,oBAAVvxE,GACTh8J,EAAKg8J,EACLA,EAAQ,KACRpnL,EAAW,MACkB,oBAAbA,IAChBorB,EAAKprB,EACLA,EAAW,MAGC,OAAVonL,QAA4Bh+L,IAAVg+L,GAAqBrnM,KAAK0iM,MAAM2E,EAAOpnL,GAEzDymC,EAAMo6N,SACRp6N,EAAMo6N,OAAS,EACf9gR,KAAK8iR,UAIFp8N,EAAMg6N,QAsEb,SAAqBzxK,EAAQvoD,EAAOrb,GAClCqb,EAAMg6N,QAAS,EACfS,EAAYlyK,EAAQvoD,GAEhBrb,IACEqb,EAAMw2N,SAAUztI,EAAQyuE,SAAS7yK,GAAS4jE,EAAOioD,KAAK,SAAU7rH,IAGtEqb,EAAMmyN,OAAQ,EACd5pK,EAAO3tG,UAAW,CACnB,CAhFoB0hR,CAAYhjR,KAAM0mD,EAAOrb,GACrCrrC,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAsFHsC,OAAOC,eAAek1Q,EAASnsQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAK44Q,gBAIF54Q,KAAK44Q,eAAeK,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAK44Q,iBAMV54Q,KAAK44Q,eAAeK,UAAYt6Q,EACjC,IAEH03Q,EAASnsQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzC81Q,EAASnsQ,UAAU+xQ,WAAarC,EAAYsC,UAE5C7F,EAASnsQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,0CCtrBGokR,YAEJ,SAASliR,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAEjN,IAAIk8Q,EAAW9jG,EAAQ,OAEnB8pG,EAAellR,OAAO,eACtBmlR,EAAcnlR,OAAO,cACrBolR,EAASplR,OAAO,SAChBqlR,EAASrlR,OAAO,SAChBslR,EAAetlR,OAAO,eACtBulR,EAAiBvlR,OAAO,iBACxBwlR,EAAUxlR,OAAO,UAErB,SAASylR,EAAiB9kR,EAAOF,GAC/B,MAAO,CACLE,MAAOA,EACPF,KAAMA,EAET,CAED,SAASilR,EAAe90G,GACtB,IAAInmK,EAAUmmK,EAAKs0G,GAEnB,GAAgB,OAAZz6Q,EAAkB,CACpB,IAAI+V,EAAOowJ,EAAK40G,GAASr0K,OAIZ,OAAT3wF,IACFowJ,EAAK00G,GAAgB,KACrB10G,EAAKs0G,GAAgB,KACrBt0G,EAAKu0G,GAAe,KACpB16Q,EAAQg7Q,EAAiBjlQ,GAAM,IAElC,CACF,CAED,SAASmlQ,EAAW/0G,GAGlBn/B,EAAQyuE,SAASwlE,EAAgB90G,EAClC,CAeD,IAAIg1G,EAAyB1iR,OAAOyJ,gBAAe,WAAc,IAC7Dk5Q,EAAuC3iR,OAAO+I,gBA4D/ClJ,EA5D+DkiR,EAAwB,CACpFh0K,aACF,OAAOjvG,KAAKwjR,EACb,EAEDhlR,KAAM,WACJ,IAAIu2F,EAAQ/0F,KAIR+I,EAAQ/I,KAAKojR,GAEjB,GAAc,OAAVr6Q,EACF,OAAOC,QAAQN,OAAOK,GAGxB,GAAI/I,KAAKqjR,GACP,OAAOr6Q,QAAQP,QAAQg7Q,OAAiBp6Q,GAAW,IAGrD,GAAIrJ,KAAKwjR,GAASvK,UAKhB,OAAO,IAAIjwQ,SAAQ,SAAUP,EAASC,GACpC+mI,EAAQyuE,UAAS,WACXnpH,EAAMquL,GACR16Q,EAAOqsF,EAAMquL,IAEb36Q,EAAQg7Q,OAAiBp6Q,GAAW,GAEvC,GACF,IAOH,IACIu0H,EADAkmJ,EAAc9jR,KAAKsjR,GAGvB,GAAIQ,EACFlmJ,EAAU,IAAI50H,QA1DpB,SAAqB86Q,EAAal1G,GAChC,OAAO,SAAUnmK,EAASC,GACxBo7Q,EAAY76Q,MAAK,WACX2lK,EAAKy0G,GACP56Q,EAAQg7Q,OAAiBp6Q,GAAW,IAItCulK,EAAK20G,GAAgB96Q,EAASC,EAC/B,GAAEA,EACJ,CACF,CA+C2Bq7Q,CAAYD,EAAa9jR,WAC1C,CAGL,IAAIwe,EAAOxe,KAAKwjR,GAASr0K,OAEzB,GAAa,OAAT3wF,EACF,OAAOxV,QAAQP,QAAQg7Q,EAAiBjlQ,GAAM,IAGhDo/G,EAAU,IAAI50H,QAAQhJ,KAAKujR,GAC5B,CAGD,OADAvjR,KAAKsjR,GAAgB1lJ,EACdA,CACR,GACuC5/H,OAAOwgR,eAAe,WAC9D,OAAOx+Q,IACR,IAAGe,EAAgBkiR,EAAuB,UAAU,WACnD,IAAIe,EAAShkR,KAKb,OAAO,IAAIgJ,SAAQ,SAAUP,EAASC,GACpCs7Q,EAAOR,GAASjjR,QAAQ,MAAM,SAAU1B,GAClCA,EACF6J,EAAO7J,GAIT4J,EAAQg7Q,OAAiBp6Q,GAAW,GACrC,GACF,GACF,IAAG45Q,GAAwBW,GAoE5BzgH,EAAOx3B,QAlEiC,SAA2C18B,GACjF,IAAIg1K,EAEAhmR,EAAWiD,OAAO2J,OAAOg5Q,GAA4D9iR,EAArBkjR,EAAiB,CAAC,EAAmCT,EAAS,CAChI7kR,MAAOswG,EACP3tG,UAAU,IACRP,EAAgBkjR,EAAgBf,EAAc,CAChDvkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBd,EAAa,CAC/CxkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBb,EAAQ,CAC1CzkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBZ,EAAQ,CAC1C1kR,MAAOswG,EAAO+pK,eAAewB,WAC7Bl5Q,UAAU,IACRP,EAAgBkjR,EAAgBV,EAAgB,CAClD5kR,MAAO,SAAe8J,EAASC,GAC7B,IAAI8V,EAAOvgB,EAASulR,GAASr0K,OAEzB3wF,GACFvgB,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,EAAiBjlQ,GAAM,MAE/BvgB,EAASilR,GAAgBz6Q,EACzBxK,EAASklR,GAAez6Q,EAE3B,EACDpH,UAAU,IACR2iR,IA8BJ,OA7BAhmR,EAASqlR,GAAgB,KACzBpG,EAASjuK,GAAQ,SAAUpwG,GACzB,GAAIA,GAAoB,+BAAbA,EAAImrE,KAAuC,CACpD,IAAIthE,EAASzK,EAASklR,GAWtB,OARe,OAAXz6Q,IACFzK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxBz6Q,EAAO7J,SAGTZ,EAASmlR,GAAUvkR,EAEpB,CAED,IAAI4J,EAAUxK,EAASilR,GAEP,OAAZz6Q,IACFxK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,OAAiBp6Q,GAAW,KAGtCpL,EAASolR,IAAU,CACpB,IACDp0K,EAAOs5B,GAAG,WAAYo7I,EAAW95Q,KAAK,KAAM5L,IACrCA,CACR,qCC1MD,SAASsD,EAAQC,EAAQC,GAAkB,IAAIC,EAAOR,OAAOQ,KAAKF,GAAS,GAAIN,OAAOS,sBAAuB,CAAE,IAAIC,EAAUV,OAAOS,sBAAsBH,GAAaC,IAAgBG,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOZ,OAAOa,yBAAyBP,EAAQM,GAAKV,UAAa,KAAGM,EAAKhD,KAAKsD,MAAMN,EAAME,EAAW,CAAC,OAAOF,CAAO,CAIrV,SAASX,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAIjN,SAASi/N,EAAkB/9N,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAI7T,IACItzF,EADWwsC,EAAQ,OACDxsC,OAGlBi6B,EADYuS,EAAQ,OACAvS,QAEpB2gB,EAAS3gB,GAAWA,EAAQ2gB,QAAU,UAM1CrkB,EAAOx3B,QAEP,WACE,SAASguI,KArBX,SAAyB5vQ,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAsBrJk/N,CAAgBj+N,KAAM25Q,GAEtB35Q,KAAK2iP,KAAO,KACZ3iP,KAAK4iP,KAAO,KACZ5iP,KAAKpB,OAAS,CACf,CAvBH,IAAsBq6N,EAAamK,EAAYC,EAoM7C,OApMoBpK,EAyBP0gD,EAzBoBv2C,EAyBR,CAAC,CACxBniO,IAAK,OACLtC,MAAO,SAAcmW,GACnB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAM,MAEJwB,KAAKpB,OAAS,EAAGoB,KAAK4iP,KAAKpkP,KAAOk6D,EAAW14D,KAAK2iP,KAAOjqL,EAC7D14D,KAAK4iP,KAAOlqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,UACLtC,MAAO,SAAiBmW,GACtB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAMwB,KAAK2iP,MAEO,IAAhB3iP,KAAKpB,SAAcoB,KAAK4iP,KAAOlqL,GACnC14D,KAAK2iP,KAAOjqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,QACLtC,MAAO,WACL,GAAoB,IAAhBqB,KAAKpB,OAAT,CACA,IAAIoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAGpB,OAFoB,IAAhBxe,KAAKpB,OAAcoB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KAAU5iP,KAAK2iP,KAAO3iP,KAAK2iP,KAAKnkP,OAC7EwB,KAAKpB,OACAoqN,CAJsB,CAK9B,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACLqB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KACxB5iP,KAAKpB,OAAS,CACf,GACA,CACDqC,IAAK,OACLtC,MAAO,SAAc0U,GACnB,GAAoB,IAAhBrT,KAAKpB,OAAc,MAAO,GAI9B,IAHA,IAAI4c,EAAIxb,KAAK2iP,KACT35B,EAAM,GAAKxtM,EAAEgD,KAEVhD,EAAIA,EAAEhd,MACXwqN,GAAO31M,EAAImI,EAAEgD,KAGf,OAAOwqM,CACR,GACA,CACD/nN,IAAK,SACLtC,MAAO,SAAgB+R,GACrB,GAAoB,IAAhB1Q,KAAKpB,OAAc,OAAOguI,EAAOivD,MAAM,GAK3C,IAJA,IArEcz8L,EAAK8C,EAAQvC,EAqEvBqpN,EAAMp8E,EAAOigI,YAAYn8P,IAAM,GAC/B8K,EAAIxb,KAAK2iP,KACT/kP,EAAI,EAED4d,GAzEOpc,EA0EDoc,EAAEgD,KA1EItc,EA0EE8mN,EA1EMrpN,EA0ED/B,EAzE9BgvI,EAAO1iI,UAAU4R,KAAKvd,KAAKa,EAAK8C,EAAQvC,GA0ElC/B,GAAK4d,EAAEgD,KAAK5f,OACZ4c,EAAIA,EAAEhd,KAGR,OAAOwqN,CACR,GAEA,CACD/nN,IAAK,UACLtC,MAAO,SAAiB+R,EAAGwzQ,GACzB,IAAIl7D,EAcJ,OAZIt4M,EAAI1Q,KAAK2iP,KAAKnkO,KAAK5f,QAErBoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAAK7O,MAAM,EAAGe,GAC9B1Q,KAAK2iP,KAAKnkO,KAAOxe,KAAK2iP,KAAKnkO,KAAK7O,MAAMe,IAGtCs4M,EAFSt4M,IAAM1Q,KAAK2iP,KAAKnkO,KAAK5f,OAExBoB,KAAKo3F,QAGL8sL,EAAalkR,KAAKmkR,WAAWzzQ,GAAK1Q,KAAKokR,WAAW1zQ,GAGnDs4M,CACR,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACL,OAAOqB,KAAK2iP,KAAKnkO,IAClB,GAEA,CACDvd,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAI8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EACJm1M,EAAMxtM,EAAEgD,KAGZ,IAFA9N,GAAKs4M,EAAIpqN,OAEF4c,EAAIA,EAAEhd,MAAM,CACjB,IAAIozK,EAAMp2J,EAAEgD,KACR6lQ,EAAK3zQ,EAAIkhK,EAAIhzK,OAASgzK,EAAIhzK,OAAS8R,EAIvC,GAHI2zQ,IAAOzyG,EAAIhzK,OAAQoqN,GAAOp3C,EAASo3C,GAAOp3C,EAAIjiK,MAAM,EAAGe,GAGjD,KAFVA,GAAK2zQ,GAEQ,CACPA,IAAOzyG,EAAIhzK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAOozJ,EAAIjiK,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAIs4M,EAAMp8E,EAAOigI,YAAYn8P,GACzB8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EAIR,IAHA2H,EAAEgD,KAAK1C,KAAKktM,GACZt4M,GAAK8K,EAAEgD,KAAK5f,OAEL4c,EAAIA,EAAEhd,MAAM,CACjB,IAAI2uK,EAAM3xJ,EAAEgD,KACR6lQ,EAAK3zQ,EAAIy8J,EAAIvuK,OAASuuK,EAAIvuK,OAAS8R,EAIvC,GAHAy8J,EAAIrxJ,KAAKktM,EAAKA,EAAIpqN,OAAS8R,EAAG,EAAG2zQ,GAGvB,KAFV3zQ,GAAK2zQ,GAEQ,CACPA,IAAOl3G,EAAIvuK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAO2uJ,EAAIx9J,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAKumL,EACL7oL,MAAO,SAAe8sJ,EAAG3rJ,GACvB,OAAO+mK,EAAQ7mK,KAnMrB,SAAuBkC,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAAyB,MAAhBD,UAAUvE,GAAauE,UAAUvE,GAAK,CAAC,EAAOA,EAAI,EAAK2D,EAAQL,OAAOkB,IAAS,GAAMC,SAAQ,SAAUpB,GAAOF,EAAgBmB,EAAQjB,EAAKmB,EAAOnB,GAAQ,IAAcC,OAAOoB,0BAA6BpB,OAAOqB,iBAAiBL,EAAQhB,OAAOoB,0BAA0BF,IAAmBb,EAAQL,OAAOkB,IAASC,SAAQ,SAAUpB,GAAOC,OAAOC,eAAee,EAAQjB,EAAKC,OAAOa,yBAAyBK,EAAQnB,GAAQ,GAAM,CAAC,OAAOiB,CAAS,CAmM3fwhO,CAAc,CAAC,EAAG5jO,EAAS,CAE9CsjB,MAAO,EAEPg+M,eAAe,IAElB,IAjM6DgC,GAAYnD,EAAkBhH,EAAY/uN,UAAWk5N,GAAiBC,GAAapD,EAAkBhH,EAAaoK,GAoM3Ks2C,CACR,CArLD,qDC2BA,SAAS2K,EAAoBn7Q,EAAMtK,GACjC0lR,EAAYp7Q,EAAMtK,GAClB2lR,EAAYr7Q,EACb,CAED,SAASq7Q,EAAYr7Q,GACfA,EAAKyvQ,iBAAmBzvQ,EAAKyvQ,eAAemC,WAC5C5xQ,EAAK6vQ,iBAAmB7vQ,EAAK6vQ,eAAe+B,WAChD5xQ,EAAKmrI,KAAK,QACX,CAqBD,SAASiwI,EAAYp7Q,EAAMtK,GACzBsK,EAAKmrI,KAAK,QAASz1I,EACpB,CAaDskK,EAAOx3B,QAAU,CACfprI,QAnGF,SAAiB1B,EAAKwsC,GACpB,IAAI0pD,EAAQ/0F,KAERykR,EAAoBzkR,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAeC,UAC/DyL,EAAoB1kR,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeK,UAEnE,OAAIwL,GAAqBC,GACnBr5O,EACFA,EAAGxsC,GACMA,IACJmB,KAAK44Q,eAEE54Q,KAAK44Q,eAAewI,eAC9BphR,KAAK44Q,eAAewI,cAAe,EACnC3xI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAHpC4wI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAOjCmB,OAKLA,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,GAI9Bj5Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,GAGlCj5Q,KAAKq7Q,SAASx8Q,GAAO,MAAM,SAAUA,IAC9BwsC,GAAMxsC,EACJk2F,EAAM6jL,eAEC7jL,EAAM6jL,eAAewI,aAI/B3xI,EAAQyuE,SAASsmE,EAAazvL,IAH9BA,EAAM6jL,eAAewI,cAAe,EACpC3xI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,IAH7C4wI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,GAOtCwsC,GACTokG,EAAQyuE,SAASsmE,EAAazvL,GAC9B1pD,EAAGxsC,IAEH4wI,EAAQyuE,SAASsmE,EAAazvL,EAEjC,IAEM/0F,KACR,EAiDCk8Q,UApCF,WACMl8Q,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,EAChCj5Q,KAAKg5Q,eAAeyB,SAAU,EAC9Bz6Q,KAAKg5Q,eAAeH,OAAQ,EAC5B74Q,KAAKg5Q,eAAewB,YAAa,GAG/Bx6Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,EAChCj5Q,KAAK44Q,eAAeC,OAAQ,EAC5B74Q,KAAK44Q,eAAe8H,QAAS,EAC7B1gR,KAAK44Q,eAAe6H,aAAc,EAClCzgR,KAAK44Q,eAAe+I,aAAc,EAClC3hR,KAAK44Q,eAAesE,UAAW,EAC/Bl9Q,KAAK44Q,eAAewI,cAAe,EAEtC,EAoBCnH,eAdF,SAAwBhrK,EAAQpwG,GAM9B,IAAIyjR,EAASrzK,EAAO+pK,eAChBiE,EAAShuK,EAAO2pK,eAChB0J,GAAUA,EAAOtH,aAAeiC,GAAUA,EAAOjC,YAAa/rK,EAAO1uG,QAAQ1B,GAAUowG,EAAOqlC,KAAK,QAASz1I,EACjH,uCC9FD,IAAI8lR,EAA6BvrG,EAAAA,OAAAA,EAAAA,2BAgBjC,SAASwE,IAAS,CAmFlBza,EAAOx3B,QA7EP,SAASi5I,EAAI31K,EAAQ0uE,EAAMt2J,GACzB,GAAoB,oBAATs2J,EAAqB,OAAOinG,EAAI31K,EAAQ,KAAM0uE,GACpDA,IAAMA,EAAO,CAAC,GACnBt2J,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAIziC,EAAOn0N,UAAUvD,OAAQwK,EAAO,IAAIvL,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAC/Eh0N,EAAKg0N,GAAQj7N,UAAUi7N,GAGzB/1M,EAASrlB,MAAMhC,KAAMoJ,EAPH,CAQnB,CACF,CAWY8tJ,CAAK7vI,GAAYu2J,GAC5B,IAAIihC,EAAWlhC,EAAKkhC,WAA8B,IAAlBlhC,EAAKkhC,UAAsB5vG,EAAO4vG,SAC9Dv9M,EAAWq8K,EAAKr8K,WAA8B,IAAlBq8K,EAAKr8K,UAAsB2tG,EAAO3tG,SAE9DujR,EAAiB,WACd51K,EAAO3tG,UAAUw8Q,GACvB,EAEGgH,EAAgB71K,EAAO2pK,gBAAkB3pK,EAAO2pK,eAAesE,SAE/DY,EAAW,WACbx8Q,GAAW,EACXwjR,GAAgB,EACXjmE,GAAUx3L,EAAS9oB,KAAK0wG,EAC9B,EAEG81K,EAAgB91K,EAAO+pK,gBAAkB/pK,EAAO+pK,eAAewB,WAE/D7B,EAAQ,WACV95D,GAAW,EACXkmE,GAAgB,EACXzjR,GAAU+lB,EAAS9oB,KAAK0wG,EAC9B,EAEGikB,EAAU,SAAiBr0H,GAC7BwoB,EAAS9oB,KAAK0wG,EAAQpwG,EACvB,EAEGg/Q,EAAU,WACZ,IAAIh/Q,EAEJ,OAAIggN,IAAakmE,GACV91K,EAAO+pK,gBAAmB/pK,EAAO+pK,eAAeH,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,IAG3ByC,IAAawjR,GACV71K,EAAO2pK,gBAAmB3pK,EAAO2pK,eAAeC,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,SAF/B,CAID,EAEGmmR,EAAY,WACd/1K,EAAOhB,IAAIs6B,GAAG,SAAUu1I,EACzB,EAgBD,OAnEF,SAAmB7uK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAmDK4zC,CAAUj2K,GAIH3tG,IAAa2tG,EAAO2pK,iBAE7B3pK,EAAOs5B,GAAG,MAAOs8I,GACjB51K,EAAOs5B,GAAG,QAASs8I,KANnB51K,EAAOs5B,GAAG,WAAYu1I,GACtB7uK,EAAOs5B,GAAG,QAASs1I,GACf5uK,EAAOhB,IAAK+2K,IAAiB/1K,EAAOs5B,GAAG,UAAWy8I,IAOxD/1K,EAAOs5B,GAAG,MAAOowI,GACjB1pK,EAAOs5B,GAAG,SAAUu1I,IACD,IAAfngG,EAAK50K,OAAiBkmG,EAAOs5B,GAAG,QAASrV,GAC7CjkB,EAAOs5B,GAAG,QAASs1I,GACZ,WACL5uK,EAAOinD,eAAe,WAAY4nH,GAClC7uK,EAAOinD,eAAe,QAAS2nH,GAC/B5uK,EAAOinD,eAAe,UAAW8uH,GAC7B/1K,EAAOhB,KAAKgB,EAAOhB,IAAIioD,eAAe,SAAU4nH,GACpD7uK,EAAOinD,eAAe,MAAO2uH,GAC7B51K,EAAOinD,eAAe,QAAS2uH,GAC/B51K,EAAOinD,eAAe,SAAU4nH,GAChC7uK,EAAOinD,eAAe,MAAOyiH,GAC7B1pK,EAAOinD,eAAe,QAAShjC,GAC/BjkB,EAAOinD,eAAe,QAAS2nH,EAChC,CACF,qBCrGD16G,EAAOx3B,QAAU,WACf,MAAM,IAAIh6H,MAAM,gDACjB,qCCED,IAAIizQ,EAWJ,IAAI9oD,EAAiB1iD,EAAAA,OAAAA,EACjBgjD,EAAmBN,EAAeM,iBAClC+jD,EAAuBrkD,EAAeqkD,qBAE1C,SAASviG,EAAK/+K,GAEZ,GAAIA,EAAK,MAAMA,CAChB,CAMD,SAASsmR,EAAUl2K,EAAQwrK,EAASoG,EAASx5P,GAC3CA,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACDA,IACJA,GAAS,EACT1xO,EAASrlB,WAAM,EAAQG,WACxB,CACF,CAgBY+0J,CAAK7vI,GAChB,IAAI+9P,GAAS,EACbn2K,EAAOs5B,GAAG,SAAS,WACjB68I,GAAS,CACV,SACW/7Q,IAARu7Q,IAAmBA,EAAMxrG,EAAQ,QACrCwrG,EAAI31K,EAAQ,CACV4vG,SAAU47D,EACVn5Q,SAAUu/Q,IACT,SAAUhiR,GACX,GAAIA,EAAK,OAAOwoB,EAASxoB,GACzBumR,GAAS,EACT/9P,GACD,IACD,IAAI4xP,GAAY,EAChB,OAAO,SAAUp6Q,GACf,IAAIumR,IACAnM,EAGJ,OAFAA,GAAY,EAvBhB,SAAmBhqK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAuBO4zC,CAAUj2K,GAAgBA,EAAOqiI,QACP,oBAAnBriI,EAAO1uG,QAA+B0uG,EAAO1uG,eACxD8mB,EAASxoB,GAAO,IAAIshR,EAAqB,QAC1C,CACF,CAED,SAAS5hR,EAAK2K,GACZA,GACD,CAED,SAASowO,EAAKj6N,EAAM7f,GAClB,OAAO6f,EAAKi6N,KAAK95O,EAClB,CAED,SAAS6lR,EAAY1mE,GACnB,OAAKA,EAAQ//M,OAC8B,oBAAhC+/M,EAAQA,EAAQ//M,OAAS,GAA0Bg/K,EACvD+gC,EAAQvxI,MAFawwG,CAG7B,CA6BDza,EAAOx3B,QA3BP,WACE,IAAK,IAAI2qF,EAAOn0N,UAAUvD,OAAQ+/M,EAAU,IAAI9gN,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAClFze,EAAQye,GAAQj7N,UAAUi7N,GAG5B,IAOIr0N,EAPAse,EAAWg+P,EAAY1mE,GAG3B,GAFI9gN,MAAMC,QAAQ6gN,EAAQ,MAAKA,EAAUA,EAAQ,IAE7CA,EAAQ//M,OAAS,EACnB,MAAM,IAAIw9N,EAAiB,WAI7B,IAAIkpD,EAAW3mE,EAAQ/4M,KAAI,SAAUqpG,EAAQrxG,GAC3C,IAAI68Q,EAAU78Q,EAAI+gN,EAAQ//M,OAAS,EAEnC,OAAOumR,EAAUl2K,EAAQwrK,EADX78Q,EAAI,GACyB,SAAUiB,GAC9CkK,IAAOA,EAAQlK,GAChBA,GAAKymR,EAASjjR,QAAQ9D,GACtBk8Q,IACJ6K,EAASjjR,QAAQ9D,GACjB8oB,EAASte,GACV,GACF,IACD,OAAO41M,EAAQh8D,OAAO22F,EACvB,sCC5FD,IAAIisC,EAAwBnsG,EAAAA,OAAAA,EAAAA,sBAsB5BjW,EAAOx3B,QAAU,CACfkuI,iBAjBF,SAA0BnzN,EAAO5mD,EAAS0lR,EAAWrL,GACnD,IAAIvvE,EALN,SAA2B9qM,EAASq6Q,EAAUqL,GAC5C,OAAgC,MAAzB1lR,EAAQ+qM,cAAwB/qM,EAAQ+qM,cAAgBsvE,EAAWr6Q,EAAQ0lR,GAAa,IAChG,CAGWC,CAAkB3lR,EAASq6Q,EAAUqL,GAE/C,GAAW,MAAP56E,EAAa,CACf,IAAMhgK,SAASggK,IAAQzkM,KAAKQ,MAAMikM,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI26E,EADCpL,EAAWqL,EAAY,gBACI56E,GAGxC,OAAOzkM,KAAKQ,MAAMikM,EACnB,CAGD,OAAOlkJ,EAAMqkJ,WAAa,GAAK,KAChC,0BCtBD5nC,EAAOx3B,QAAU,EAAjBw3B,OAAAA,qCCAAx3B,EAAUw3B,EAAOx3B,QAAU,EAAjBw3B,QACFu3D,OAAS/uF,EACjBA,EAAQ8sI,SAAW9sI,EACnBA,EAAQ0qI,SAAW,EAAnB1qI,OACAA,EAAQq7D,OAAS,EAAjBr7D,OACAA,EAAQ+jI,UAAY,EAApB/jI,OACAA,EAAQu7D,YAAc,EAAtBv7D,OACAA,EAAQuxI,SAAW,EAAnBvxI,OACAA,EAAQ+5I,SAAW,EAAnB/5I,6BCNA,IAAIrzF,EAAS8gI,EAAQ,OACjBxsC,EAASt0F,EAAOs0F,OAGpB,SAAS+4I,EAAWvmR,EAAKkoB,GACvB,IAAK,IAAIrmB,KAAO7B,EACdkoB,EAAIrmB,GAAO7B,EAAI6B,EAElB,CASD,SAAS2kR,EAAY/8Q,EAAKg9Q,EAAkBjnR,GAC1C,OAAOguI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,CAVGguI,EAAOvtH,MAAQutH,EAAOivD,OAASjvD,EAAOigI,aAAejgI,EAAOk5I,gBAC9D3iH,EAAOx3B,QAAUrzF,GAGjBqtO,EAAUrtO,EAAQqzF,GAClBA,EAAQiB,OAASg5I,GAOnBA,EAAW17Q,UAAYhJ,OAAO2J,OAAO+hI,EAAO1iI,WAG5Cy7Q,EAAU/4I,EAAQg5I,GAElBA,EAAWvmQ,KAAO,SAAUxW,EAAKg9Q,EAAkBjnR,GACjD,GAAmB,kBAARiK,EACT,MAAM,IAAI9J,UAAU,iCAEtB,OAAO6tI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,EAEDgnR,EAAW/pF,MAAQ,SAAUr/K,EAAM43C,EAAMn0C,GACvC,GAAoB,kBAATzD,EACT,MAAM,IAAIzd,UAAU,6BAEtB,IAAIouK,EAAMvgC,EAAOpwH,GAUjB,YATanT,IAAT+qD,EACsB,kBAAbn0C,EACTktJ,EAAI/4G,KAAKA,EAAMn0C,GAEfktJ,EAAI/4G,KAAKA,GAGX+4G,EAAI/4G,KAAK,GAEJ+4G,CACR,EAEDy4G,EAAW/Y,YAAc,SAAUrwP,GACjC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAO6tI,EAAOpwH,EACf,EAEDopQ,EAAWE,gBAAkB,SAAUtpQ,GACrC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAOu5C,EAAOytO,WAAWvpQ,EAC1B,sCCvCD,IAAIowH,EAASwsC,EAAAA,OAAAA,OAGT4sG,EAAap5I,EAAOo5I,YAAc,SAAU/lQ,GAE9C,QADAA,EAAW,GAAKA,IACIA,EAAS1P,eAC3B,IAAK,MAAM,IAAK,OAAO,IAAK,QAAQ,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,OAAO,IAAK,QAAQ,IAAK,UAAU,IAAK,WAAW,IAAK,MACxI,OAAO,EACT,QACE,OAAO,EAEZ,EA0CD,SAASkpQ,EAAcx5P,GAErB,IAAIokQ,EACJ,OAFArkR,KAAKigB,SAXP,SAA2B89I,GACzB,IAAIkoH,EA/BN,SAA4BloH,GAC1B,IAAKA,EAAK,MAAO,OAEjB,IADA,IAAImoH,IAEF,OAAQnoH,GACN,IAAK,OACL,IAAK,QACH,MAAO,OACT,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,UACT,IAAK,SACL,IAAK,SACH,MAAO,SACT,IAAK,SACL,IAAK,QACL,IAAK,MACH,OAAOA,EACT,QACE,GAAImoH,EAAS,OACbnoH,GAAO,GAAKA,GAAKxtJ,cACjB21Q,GAAU,EAGjB,CAKYC,CAAmBpoH,GAC9B,GAAoB,kBAATkoH,IAAsBr5I,EAAOo5I,aAAeA,IAAeA,EAAWjoH,IAAO,MAAM,IAAIpsJ,MAAM,qBAAuBosJ,GAC/H,OAAOkoH,GAAQloH,CAChB,CAOiBqoH,CAAkBnmQ,GAE1BjgB,KAAKigB,UACX,IAAK,UACHjgB,KAAK4vG,KAAOy2K,EACZrmR,KAAKq1C,IAAMixO,EACXjC,EAAK,EACL,MACF,IAAK,OACHrkR,KAAKumR,SAAWC,EAChBnC,EAAK,EACL,MACF,IAAK,SACHrkR,KAAK4vG,KAAO62K,EACZzmR,KAAKq1C,IAAMqxO,EACXrC,EAAK,EACL,MACF,QAGE,OAFArkR,KAAK0iM,MAAQikF,OACb3mR,KAAKq1C,IAAMuxO,GAGf5mR,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAWn6I,EAAOigI,YAAYwX,EACpC,CAmCD,SAAS2C,EAAcxvD,GACrB,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,IAAM,EAAa,EAAWA,GAAQ,IAAM,GAAa,EAAWA,GAAQ,IAAM,GAAa,EACpIA,GAAQ,IAAM,GAAQ,GAAK,CACnC,CA0DD,SAASgvD,EAAar5G,GACpB,IAAI3xJ,EAAIxb,KAAK8mR,UAAY9mR,KAAK6mR,SAC1BxtQ,EAtBN,SAA6BlQ,EAAMgkK,EAAK3xJ,GACtC,GAAwB,OAAV,IAAT2xJ,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,EAAG,CACvC,GAAwB,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,GACZ,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,QAGZ,CACF,CAKSI,CAAoBjnR,KAAMmtK,GAClC,YAAU9jK,IAANgQ,EAAwBA,EACxBrZ,KAAK6mR,UAAY15G,EAAIvuK,QACvBuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAGxb,KAAK6mR,UAC5B7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,aAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAG2xJ,EAAIvuK,aAClCoB,KAAK6mR,UAAY15G,EAAIvuK,QACtB,CA0BD,SAASynR,EAAUl5G,EAAKvvK,GACtB,IAAKuvK,EAAIvuK,OAAShB,GAAK,IAAM,EAAG,CAC9B,IAAIyb,EAAI8zJ,EAAI7iK,SAAS,UAAW1M,GAChC,GAAIyb,EAAG,CACL,IAAIxF,EAAIwF,EAAEw2I,WAAWx2I,EAAEza,OAAS,GAChC,GAAIiV,GAAK,OAAUA,GAAK,MAKtB,OAJA7T,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7Bya,EAAE1J,MAAM,GAAI,EAEtB,CACD,OAAO0J,CACR,CAID,OAHArZ,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7BuuK,EAAI7iK,SAAS,UAAW1M,EAAGuvK,EAAIvuK,OAAS,EAChD,CAID,SAAS0nR,EAASn5G,GAChB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,GAAIntK,KAAK6mR,SAAU,CACjB,IAAIxxO,EAAMr1C,KAAK8mR,UAAY9mR,KAAK6mR,SAChC,OAAOxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,UAAW,EAAG+qC,EACjD,CACD,OAAOh8B,CACR,CAED,SAASotQ,EAAWt5G,EAAKvvK,GACvB,IAAI8S,GAAKy8J,EAAIvuK,OAAShB,GAAK,EAC3B,OAAU,IAAN8S,EAAgBy8J,EAAI7iK,SAAS,SAAU1M,IAC3CoC,KAAK6mR,SAAW,EAAIn2Q,EACpB1Q,KAAK8mR,UAAY,EACP,IAANp2Q,EACF1Q,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAEpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAE/BuuK,EAAI7iK,SAAS,SAAU1M,EAAGuvK,EAAIvuK,OAAS8R,GAC/C,CAED,SAASg2Q,EAAUv5G,GACjB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,SAAU,EAAG,EAAItK,KAAK6mR,UACpExtQ,CACR,CAGD,SAASstQ,EAAYx5G,GACnB,OAAOA,EAAI7iK,SAAStK,KAAKigB,SAC1B,CAED,SAAS2mQ,EAAUz5G,GACjB,OAAOA,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,EAC9C,CA1NDxhC,EAAQ,EAAgB8tI,EA6BxBA,EAAcvvQ,UAAUw4L,MAAQ,SAAUv1B,GACxC,GAAmB,IAAfA,EAAIvuK,OAAc,MAAO,GAC7B,IAAIya,EACAzb,EACJ,GAAIoC,KAAK6mR,SAAU,CAEjB,QAAUx9Q,KADVgQ,EAAIrZ,KAAKumR,SAASp5G,IACG,MAAO,GAC5BvvK,EAAIoC,KAAK6mR,SACT7mR,KAAK6mR,SAAW,CACjB,MACCjpR,EAAI,EAEN,OAAIA,EAAIuvK,EAAIvuK,OAAeya,EAAIA,EAAIrZ,KAAK4vG,KAAKu9D,EAAKvvK,GAAKoC,KAAK4vG,KAAKu9D,EAAKvvK,GAC/Dyb,GAAK,EACb,EAEDogQ,EAAcvvQ,UAAUmrC,IAwGxB,SAAiB83H,GACf,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAI,SACvBA,CACR,EAzGDogQ,EAAcvvQ,UAAU0lG,KA0FxB,SAAkBu9D,EAAKvvK,GACrB,IAAImxG,EArEN,SAA6B5lG,EAAMgkK,EAAKvvK,GACtC,IAAI8wB,EAAIy+I,EAAIvuK,OAAS,EACrB,GAAI8vB,EAAI9wB,EAAG,OAAO,EAClB,IAAIymR,EAAK2C,EAAc75G,EAAIz+I,IAC3B,GAAI21P,GAAM,EAER,OADIA,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAER,OADI21P,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAIR,OAHI21P,EAAK,IACI,IAAPA,EAAUA,EAAK,EAAOl7Q,EAAK09Q,SAAWxC,EAAK,GAE1CA,EAET,OAAO,CACR,CA8Ca6C,CAAoBlnR,KAAMmtK,EAAKvvK,GAC3C,IAAKoC,KAAK6mR,SAAU,OAAO15G,EAAI7iK,SAAS,OAAQ1M,GAChDoC,KAAK8mR,UAAY/3K,EACjB,IAAI15D,EAAM83H,EAAIvuK,QAAUmwG,EAAQ/uG,KAAK6mR,UAErC,OADA15G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU,EAAG1xO,GACpB83H,EAAI7iK,SAAS,OAAQ1M,EAAGy3C,EAChC,EA9FDokO,EAAcvvQ,UAAUq8Q,SAAW,SAAUp5G,GAC3C,GAAIntK,KAAK6mR,UAAY15G,EAAIvuK,OAEvB,OADAuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG7mR,KAAK6mR,UACzD7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,WAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG15G,EAAIvuK,QAC/DoB,KAAK6mR,UAAY15G,EAAIvuK,MACtB,qBC7HD,IAAIyxW,EAAW,IACXx2S,EAAmB,iBACnBy2S,EAAc,sBACdC,EAAM,IAGNC,EAAU,qBACVC,EAAU,oBACVC,EAAS,6BACTC,EAAY,kBACZC,EAAY,kBAGZC,EAAS,aAGTC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZC,EAAW,mBAGXC,EAAe50V,SA4EnB,SAAS60V,EAAUxyW,GACjB,OAAOA,IAAUA,CAClB,CA+BD,SAASyyW,EAAW5vW,EAAQvB,GAC1B,OAnGF,SAAkByP,EAAO2hW,GAKvB,IAJA,IAAI9hW,GAAS,EACT3Q,EAAS8Q,EAAQA,EAAM9Q,OAAS,EAChCw1E,EAASv2E,MAAMe,KAEV2Q,EAAQ3Q,GACfw1E,EAAO7kE,GAAS8hW,EAAS3hW,EAAMH,GAAQA,EAAOG,GAEhD,OAAO0kE,CACR,CA0FQk9R,CAASrxW,GAAO,SAASgB,GAC9B,OAAOO,EAAOP,EACf,GACF,CAiBD,IAPiBm6H,EAAMvzH,EAOnB0pW,EAAcrwW,OAAOgJ,UAGrB6jK,EAAiBwjM,EAAYxjM,eAO7Bi3D,EAAiBusI,EAAYjnW,SAG7By6N,EAAuBwsI,EAAYxsI,qBAGnCysI,GAvBap2O,EAuBQl6H,OAAOQ,KAvBTmG,EAuBe3G,OAtB7B,SAAS2H,GACd,OAAOuyH,EAAKvzH,EAAUgB,GACvB,GAqBC4oW,EAAYtrW,KAAKE,IAUrB,SAASqrW,EAAc/yW,EAAOwlN,GAG5B,IAAI/vI,EAAUt2E,EAAQa,IA8HxB,SAAqBA,GAEnB,OAmFF,SAA2BA,GACzB,OAAOgzW,EAAahzW,IAAUizW,EAAYjzW,EAC3C,CArFQkzW,CAAkBlzW,IAAUovK,EAAexvK,KAAKI,EAAO,aAC1DomO,EAAqBxmO,KAAKI,EAAO,WAAaqmO,EAAezmO,KAAKI,IAAU6xW,EACjF,CAlIiCsB,CAAYnzW,GAvE9C,SAAmB+R,EAAG2gW,GAIpB,IAHA,IAAI9hW,GAAS,EACT6kE,EAASv2E,MAAM6S,KAEVnB,EAAQmB,GACf0jE,EAAO7kE,GAAS8hW,EAAS9hW,GAE3B,OAAO6kE,CACR,CAgEK29R,CAAUpzW,EAAMC,OAAQ6uC,QACxB,GAEA7uC,EAASw1E,EAAOx1E,OAChBozW,IAAgBpzW,EAEpB,IAAK,IAAIqC,KAAOtC,GACTwlN,IAAap2C,EAAexvK,KAAKI,EAAOsC,IACvC+wW,IAAuB,UAAP/wW,GAAmBgxW,EAAQhxW,EAAKrC,KACpDw1E,EAAO11E,KAAKuC,GAGhB,OAAOmzE,CACR,CASD,SAAS89R,EAAS1wW,GAChB,IAkCF,SAAqB7C,GACnB,IAAIwzW,EAAOxzW,GAASA,EAAMiM,YACtB8tP,EAAwB,mBAARy5G,GAAsBA,EAAKjoW,WAAcqnW,EAE7D,OAAO5yW,IAAU+5P,CAClB,CAvCM05G,CAAY5wW,GACf,OAAOgwW,EAAWhwW,GAEpB,IAAI4yE,EAAS,GACb,IAAK,IAAInzE,KAAOC,OAAOM,GACjBusK,EAAexvK,KAAKiD,EAAQP,IAAe,eAAPA,GACtCmzE,EAAO11E,KAAKuC,GAGhB,OAAOmzE,CACR,CAUD,SAAS69R,EAAQtzW,EAAOC,GAEtB,SADAA,EAAmB,MAAVA,EAAiBi7D,EAAmBj7D,KAE1B,iBAATD,GAAqBsyW,EAASxzV,KAAK9e,KAC1CA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQC,CAC5C,CA0GD,IAAId,EAAUD,MAAMC,QA2BpB,SAAS8zW,EAAYjzW,GACnB,OAAgB,MAATA,GAkFT,SAAkBA,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAASk7D,CAC5C,CArFyBw4S,CAAS1zW,EAAMC,UAiDzC,SAAoBD,GAGlB,IAAIs4J,EAAM6/E,EAASn4O,GAASqmO,EAAezmO,KAAKI,GAAS,GACzD,OAAOs4J,GAAOw5M,GAAWx5M,GAAOy5M,CACjC,CAtDoDr3H,CAAW16O,EAC/D,CA+GD,SAASm4O,EAASn4O,GAChB,IAAI0I,SAAc1I,EAClB,QAASA,IAAkB,UAAR0I,GAA4B,YAARA,EACxC,CA0BD,SAASsqW,EAAahzW,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CA4NDwkK,EAAOx3B,QAncP,SAAkB2mO,EAAY3zW,EAAOu7L,EAAWq4K,GA+bhD,IAAgB/wW,EA9bd8wW,EAAaV,EAAYU,GAAcA,GA8bzB9wW,EA9b6C8wW,GA+b3ClB,EAAW5vW,EA/B7B,SAAcA,GACZ,OAAOowW,EAAYpwW,GAAUkwW,EAAclwW,GAAU0wW,EAAS1wW,EAC/D,CA6BoCE,CAAKF,IAAW,GA9bnD04L,EAAaA,IAAcq4K,EAgV7B,SAAmB5zW,GACjB,IAAIy1E,EAvCN,SAAkBz1E,GAChB,IAAKA,EACH,OAAiB,IAAVA,EAAcA,EAAQ,EAG/B,IADAA,EAgEF,SAAkBA,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GApGF,SAAkBA,GAChB,MAAuB,iBAATA,GACXgzW,EAAahzW,IAAUqmO,EAAezmO,KAAKI,IAAUiyW,CACzD,CAiGKrlE,CAAS5sS,GACX,OAAO4xW,EAET,GAAIz5H,EAASn4O,GAAQ,CACnB,IAAIqkH,EAAgC,mBAAjBrkH,EAAMsoO,QAAwBtoO,EAAMsoO,UAAYtoO,EACnEA,EAAQm4O,EAAS9zH,GAAUA,EAAQ,GAAMA,CAC1C,CACD,GAAoB,iBAATrkH,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMgkE,QAAQkuS,EAAQ,IAC9B,IAAI2B,EAAWzB,EAAWtzV,KAAK9e,GAC/B,OAAQ6zW,GAAYxB,EAAUvzV,KAAK9e,GAC/BuyW,EAAavyW,EAAMgR,MAAM,GAAI6iW,EAAW,EAAI,GAC3C1B,EAAWrzV,KAAK9e,GAAS4xW,GAAO5xW,CACtC,CAnFS+5I,CAAS/5I,MACH0xW,GAAY1xW,KAAU,IAAW,CAE7C,OADYA,EAAQ,GAAK,EAAI,GACf2xW,CACf,CACD,OAAO3xW,IAAUA,EAAQA,EAAQ,CAClC,CA6Bc8zW,CAAS9zW,GAClB47V,EAAYnmR,EAAS,EAEzB,OAAOA,IAAWA,EAAUmmR,EAAYnmR,EAASmmR,EAAYnmR,EAAU,CACxE,CArVqCs+R,CAAUx4K,GAAa,EAE3D,IAAIt7L,EAAS0zW,EAAW1zW,OAIxB,OAHIs7L,EAAY,IACdA,EAAYu3K,EAAU7yW,EAASs7L,EAAW,IAoP9C,SAAkBv7L,GAChB,MAAuB,iBAATA,IACVb,EAAQa,IAAUgzW,EAAahzW,IAAUqmO,EAAezmO,KAAKI,IAAUgyW,CAC5E,CArPQx5H,CAASm7H,GACXp4K,GAAat7L,GAAU0zW,EAAWxvW,QAAQnE,EAAOu7L,IAAc,IAC7Dt7L,GAnNT,SAAqB8Q,EAAO/Q,EAAOu7L,GACjC,GAAIv7L,IAAUA,EACZ,OAvBJ,SAAuB+Q,EAAOyhS,EAAWj3G,EAAWy4K,GAIlD,IAHA,IAAI/zW,EAAS8Q,EAAM9Q,OACf2Q,EAAQ2qL,GAAay4K,EAAY,GAAK,GAElCA,EAAYpjW,MAAYA,EAAQ3Q,GACtC,GAAIuyS,EAAUzhS,EAAMH,GAAQA,EAAOG,GACjC,OAAOH,EAGX,OAAQ,CACT,CAaUqjW,CAAcljW,EAAOyhW,EAAWj3K,GAKzC,IAHA,IAAI3qL,EAAQ2qL,EAAY,EACpBt7L,EAAS8Q,EAAM9Q,SAEV2Q,EAAQ3Q,GACf,GAAI8Q,EAAMH,KAAW5Q,EACnB,OAAO4Q,EAGX,OAAQ,CACT,CAsMkBsjW,CAAYP,EAAY3zW,EAAOu7L,IAAc,CAC/D,qBCtSD,IASI8qC,EANc9jO,OAAOgJ,UAMQI,SAkDjC64J,EAAOx3B,QAhCP,SAAmBhtI,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GA2B3B,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CA5BIgzW,CAAahzW,IA7BJ,oBA6BcqmO,EAAezmO,KAAKI,EAC/C,qBC9BD,IAAI0xW,EAAW,IACXC,EAAc,sBACdC,EAAM,IAGNK,EAAY,kBAGZC,EAAS,aAGTC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZE,EAAe50V,SAUf0oN,EAPc9jO,OAAOgJ,UAOQI,SAyDjC,SAASwsO,EAASn4O,GAChB,IAAI0I,SAAc1I,EAClB,QAASA,IAAkB,UAAR0I,GAA4B,YAARA,EACxC,CAoKD87J,EAAOx3B,QApMP,SAAmBhtI,GACjB,MAAuB,iBAATA,GAAqBA,GAgJrC,SAAmBA,GACjB,IAAIy1E,EAvCN,SAAkBz1E,GAChB,IAAKA,EACH,OAAiB,IAAVA,EAAcA,EAAQ,EAG/B,IADAA,EAgEF,SAAkBA,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GApGF,SAAkBA,GAChB,MAAuB,iBAATA,GAtBhB,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CAqBIgzW,CAAahzW,IAAUqmO,EAAezmO,KAAKI,IAAUiyW,CACzD,CAiGKrlE,CAAS5sS,GACX,OAAO4xW,EAET,GAAIz5H,EAASn4O,GAAQ,CACnB,IAAIqkH,EAAgC,mBAAjBrkH,EAAMsoO,QAAwBtoO,EAAMsoO,UAAYtoO,EACnEA,EAAQm4O,EAAS9zH,GAAUA,EAAQ,GAAMA,CAC1C,CACD,GAAoB,iBAATrkH,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMgkE,QAAQkuS,EAAQ,IAC9B,IAAI2B,EAAWzB,EAAWtzV,KAAK9e,GAC/B,OAAQ6zW,GAAYxB,EAAUvzV,KAAK9e,GAC/BuyW,EAAavyW,EAAMgR,MAAM,GAAI6iW,EAAW,EAAI,GAC3C1B,EAAWrzV,KAAK9e,GAAS4xW,GAAO5xW,CACtC,CAnFS+5I,CAAS/5I,MACH0xW,GAAY1xW,KAAU,IAAW,CAE7C,OADYA,EAAQ,GAAK,EAAI,GACf2xW,CACf,CACD,OAAO3xW,IAAUA,EAAQA,EAAQ,CAClC,CA6Bc8zW,CAAS9zW,GAClB47V,EAAYnmR,EAAS,EAEzB,OAAOA,IAAWA,EAAUmmR,EAAYnmR,EAASmmR,EAAYnmR,EAAU,CACxE,CArJ6Cs+R,CAAU/zW,EACvD,qBC5DD,IASIqmO,EANc9jO,OAAOgJ,UAMQI,SA2DjC64J,EAAOx3B,QALP,SAAkBhtI,GAChB,MAAuB,iBAATA,GA9BhB,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CA6BIgzW,CAAahzW,IAjEF,mBAiEYqmO,EAAezmO,KAAKI,EAC/C,qBC9BD,IAPiBy8H,EAAMvzH,EAOnBirW,EAAY9oW,SAASE,UACrBqnW,EAAcrwW,OAAOgJ,UAGrB6oW,EAAeD,EAAUxoW,SAGzByjK,EAAiBwjM,EAAYxjM,eAG7BilM,EAAmBD,EAAax0W,KAAK2C,QAOrC8jO,EAAiBusI,EAAYjnW,SAG7B2oW,GA3Ba73O,EA2BUl6H,OAAOyJ,eA3BX9C,EA2B2B3G,OA1BzC,SAAS2H,GACd,OAAOuyH,EAAKvzH,EAAUgB,GACvB,GAgGHs6J,EAAOx3B,QAdP,SAAuBhtI,GACrB,IAjCF,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CA+BMgzW,CAAahzW,IAnHJ,mBAoHVqmO,EAAezmO,KAAKI,IA3G1B,SAAsBA,GAGpB,IAAIy1E,GAAS,EACb,GAAa,MAATz1E,GAA0C,mBAAlBA,EAAM2L,SAChC,IACE8pE,KAAYz1E,EAAQ,GACR,CAAZ,MAAOqI,GAAK,CAEhB,OAAOotE,CACR,CAiGgD8+R,CAAav0W,GAC1D,OAAO,EAET,IAAI+5P,EAAQu6G,EAAat0W,GACzB,GAAc,OAAV+5P,EACF,OAAO,EAET,IAAIy5G,EAAOpkM,EAAexvK,KAAKm6P,EAAO,gBAAkBA,EAAM9tP,YAC9D,MAAuB,mBAARunW,GACbA,aAAgBA,GAAQY,EAAax0W,KAAK4zW,IAASa,CACtD,qBC9HD,IASIhuI,EANc9jO,OAAOgJ,UAMQI,SAyB7BxM,EAAUD,MAAMC,QAkDpBqlK,EAAOx3B,QALP,SAAkBhtI,GAChB,MAAuB,iBAATA,IACVb,EAAQa,IAtBd,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CAoBuBgzW,CAAahzW,IAjFrB,mBAiF+BqmO,EAAezmO,KAAKI,EAClE,qBClFD,IAGI0xW,EAAW,IACXC,EAAc,sBACdC,EAAM,IAGNK,EAAY,kBAGZC,EAAS,aAGTC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZE,EAAe50V,SAUf0oN,EAPc9jO,OAAOgJ,UAOQI,SAmBjC,SAASimP,EAAO7/O,EAAG0qH,GACjB,IAAIhnD,EACJ,GAAmB,mBAARgnD,EACT,MAAM,IAAIr8H,UAvDQ,uBA0DpB,OADA2R,EA+KF,SAAmB/R,GACjB,IAAIy1E,EAvCN,SAAkBz1E,GAChB,IAAKA,EACH,OAAiB,IAAVA,EAAcA,EAAQ,EAG/B,IADAA,EAgEF,SAAkBA,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GApGF,SAAkBA,GAChB,MAAuB,iBAATA,GAtBhB,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CAqBIgzW,CAAahzW,IAAUqmO,EAAezmO,KAAKI,IAAUiyW,CACzD,CAiGKrlE,CAAS5sS,GACX,OAAO4xW,EAET,GAAIz5H,EAASn4O,GAAQ,CACnB,IAAIqkH,EAAgC,mBAAjBrkH,EAAMsoO,QAAwBtoO,EAAMsoO,UAAYtoO,EACnEA,EAAQm4O,EAAS9zH,GAAUA,EAAQ,GAAMA,CAC1C,CACD,GAAoB,iBAATrkH,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMgkE,QAAQkuS,EAAQ,IAC9B,IAAI2B,EAAWzB,EAAWtzV,KAAK9e,GAC/B,OAAQ6zW,GAAYxB,EAAUvzV,KAAK9e,GAC/BuyW,EAAavyW,EAAMgR,MAAM,GAAI6iW,EAAW,EAAI,GAC3C1B,EAAWrzV,KAAK9e,GAAS4xW,GAAO5xW,CACtC,CAnFS+5I,CAAS/5I,MACH0xW,GAAY1xW,KAAU,IAAW,CAE7C,OADYA,EAAQ,GAAK,EAAI,GACf2xW,CACf,CACD,OAAO3xW,IAAUA,EAAQA,EAAQ,CAClC,CA6Bc8zW,CAAS9zW,GAClB47V,EAAYnmR,EAAS,EAEzB,OAAOA,IAAWA,EAAUmmR,EAAYnmR,EAASmmR,EAAYnmR,EAAU,CACxE,CApLKs+R,CAAUhiW,GACP,WAOL,QANMA,EAAI,IACR0jE,EAASgnD,EAAKp5H,MAAMhC,KAAMmC,YAExBuO,GAAK,IACP0qH,OAAO/xH,GAEF+qE,CACR,CACF,CAiDD,SAAS0iK,EAASn4O,GAChB,IAAI0I,SAAc1I,EAClB,QAASA,IAAkB,UAAR0I,GAA4B,YAARA,EACxC,CAoKD87J,EAAOx3B,QApMP,SAAcvQ,GACZ,OAAOm1H,EAAO,EAAGn1H,EAClB,yBCzFD,IAAI+3O,EAAkB,sBASlBtC,EAAS,aAGTC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZE,EAAe50V,SAGf82V,EAA8B,iBAAVjmQ,EAAAA,GAAsBA,EAAAA,GAAUA,EAAAA,EAAOjsG,SAAWA,QAAUisG,EAAAA,EAGhFkmQ,EAA0B,iBAARlqW,MAAoBA,MAAQA,KAAKjI,SAAWA,QAAUiI,KAGxE0vG,EAAOu6P,GAAcC,GAAYrpW,SAAS,cAATA,GAUjCg7N,EAPc9jO,OAAOgJ,UAOQI,SAG7BmnW,EAAYtrW,KAAKE,IACjBitW,EAAYntW,KAAKC,IAkBjB3B,EAAM,WACR,OAAOo0G,EAAKr0G,KAAKC,KAClB,EAwDD,SAAS8uW,EAASn4O,EAAMu6B,EAAM71J,GAC5B,IAAI0zW,EACAC,EACAC,EACAt/R,EACAu/R,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAAR54O,EACT,MAAM,IAAIr8H,UAAUo0W,GAUtB,SAASc,EAAWvvW,GAClB,IAAI0E,EAAOoqW,EACPh8H,EAAUi8H,EAKd,OAHAD,EAAWC,OAAWpqW,EACtBwqW,EAAiBnvW,EACjB0vE,EAASgnD,EAAKp5H,MAAMw1O,EAASpuO,EAE9B,CAED,SAAS8qW,EAAYxvW,GAMnB,OAJAmvW,EAAiBnvW,EAEjBivW,EAAU3lQ,WAAWmmQ,EAAcx+M,GAE5Bm+M,EAAUG,EAAWvvW,GAAQ0vE,CACrC,CAUD,SAASggS,EAAa1vW,GACpB,IAAI2vW,EAAoB3vW,EAAOkvW,EAM/B,YAAyBvqW,IAAjBuqW,GAA+BS,GAAqB1+M,GACzD0+M,EAAoB,GAAON,GANJrvW,EAAOmvW,GAM8BH,CAChE,CAED,SAASS,IACP,IAAIzvW,EAAOD,IACX,GAAI2vW,EAAa1vW,GACf,OAAO4vW,EAAa5vW,GAGtBivW,EAAU3lQ,WAAWmmQ,EAzBvB,SAAuBzvW,GACrB,IAEI0vE,EAASuhF,GAFWjxJ,EAAOkvW,GAI/B,OAAOG,EAAST,EAAUl/R,EAAQs/R,GAHRhvW,EAAOmvW,IAGkCz/R,CACpE,CAmBoCmgS,CAAc7vW,GAClD,CAED,SAAS4vW,EAAa5vW,GAKpB,OAJAivW,OAAUtqW,EAIN2qW,GAAYR,EACPS,EAAWvvW,IAEpB8uW,EAAWC,OAAWpqW,EACf+qE,EACR,CAcD,SAASogS,IACP,IAAI9vW,EAAOD,IACPgwW,EAAaL,EAAa1vW,GAM9B,GAJA8uW,EAAWrxW,UACXsxW,EAAWzzW,KACX4zW,EAAelvW,EAEX+vW,EAAY,CACd,QAAgBprW,IAAZsqW,EACF,OAAOO,EAAYN,GAErB,GAAIG,EAGF,OADAJ,EAAU3lQ,WAAWmmQ,EAAcx+M,GAC5Bs+M,EAAWL,EAErB,CAID,YAHgBvqW,IAAZsqW,IACFA,EAAU3lQ,WAAWmmQ,EAAcx+M,IAE9BvhF,CACR,CAGD,OAxGAuhF,EAAOjd,EAASid,IAAS,EACrBmhF,EAASh3O,KACXg0W,IAAYh0W,EAAQg0W,QAEpBJ,GADAK,EAAS,YAAaj0W,GACH2xW,EAAU/4N,EAAS54I,EAAQ4zW,UAAY,EAAG/9M,GAAQ+9M,EACrEM,EAAW,aAAcl0W,IAAYA,EAAQk0W,SAAWA,GAiG1DQ,EAAUhzK,OAnCV,gBACkBn4L,IAAZsqW,GACF3qG,aAAa2qG,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUtqW,CAChD,EA8BDmrW,EAAU/hG,MA5BV,WACE,YAAmBppQ,IAAZsqW,EAAwBv/R,EAASkgS,EAAa7vW,IACtD,EA2BM+vW,CACR,CAyFD,SAAS19H,EAASn4O,GAChB,IAAI0I,SAAc1I,EAClB,QAASA,IAAkB,UAAR0I,GAA4B,YAARA,EACxC,CA2ED,SAASqxI,EAAS/5I,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAhCF,SAAkBA,GAChB,MAAuB,iBAATA,GAtBhB,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC1B,CAqBIgzW,CAAahzW,IAvXF,mBAuXYqmO,EAAezmO,KAAKI,EAC/C,CA6BK4sS,CAAS5sS,GACX,OAzZM,IA2ZR,GAAIm4O,EAASn4O,GAAQ,CACnB,IAAIqkH,EAAgC,mBAAjBrkH,EAAMsoO,QAAwBtoO,EAAMsoO,UAAYtoO,EACnEA,EAAQm4O,EAAS9zH,GAAUA,EAAQ,GAAMA,CAC1C,CACD,GAAoB,iBAATrkH,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMgkE,QAAQkuS,EAAQ,IAC9B,IAAI2B,EAAWzB,EAAWtzV,KAAK9e,GAC/B,OAAQ6zW,GAAYxB,EAAUvzV,KAAK9e,GAC/BuyW,EAAavyW,EAAMgR,MAAM,GAAI6iW,EAAW,EAAI,GAC3C1B,EAAWrzV,KAAK9e,GAtab,KAsa6BA,CACtC,CAEDwkK,EAAOx3B,QA9IP,SAAkBvQ,EAAMu6B,EAAM71J,GAC5B,IAAIg0W,GAAU,EACVE,GAAW,EAEf,GAAmB,mBAAR54O,EACT,MAAM,IAAIr8H,UAAUo0W,GAMtB,OAJIr8H,EAASh3O,KACXg0W,EAAU,YAAah0W,IAAYA,EAAQg0W,QAAUA,EACrDE,EAAW,aAAcl0W,IAAYA,EAAQk0W,SAAWA,GAEnDT,EAASn4O,EAAMu6B,EAAM,CAC1B,QAAWm+M,EACX,QAAWn+M,EACX,SAAYq+M,GAEf,yBCxTD,IAGIh2W,EAHOo7K,EAAQ,OAGDp7K,OAElBmlK,EAAOx3B,QAAU3tI,yBCLjB,IAAIA,EAASo7K,EAAQ,OACjBs7L,EAAYt7L,EAAQ,OACpB4rD,EAAiB5rD,EAAQ,OAOzBu7L,EAAiB32W,EAASA,EAAOgkQ,iBAAc34P,EAkBnD85J,EAAOx3B,QATP,SAAoBhtI,GAClB,OAAa,MAATA,OACe0K,IAAV1K,EAdQ,qBADL,gBAiBJg2W,GAAkBA,KAAkBzzW,OAAOvC,GAC/C+1W,EAAU/1W,GACVqmO,EAAermO,EACpB,yBCxBD,IAAIy0W,EAA8B,iBAAVjmQ,EAAAA,GAAsBA,EAAAA,GAAUA,EAAAA,EAAOjsG,SAAWA,QAAUisG,EAAAA,EAEpFg2D,EAAOx3B,QAAUynO,yBCHjB,IAAIp1W,EAASo7K,EAAQ,OAGjBm4L,EAAcrwW,OAAOgJ,UAGrB6jK,EAAiBwjM,EAAYxjM,eAO7B6mM,EAAuBrD,EAAYjnW,SAGnCqqW,EAAiB32W,EAASA,EAAOgkQ,iBAAc34P,EA6BnD85J,EAAOx3B,QApBP,SAAmBhtI,GACjB,IAAIsmV,EAAQl3K,EAAexvK,KAAKI,EAAOg2W,GACnC19M,EAAMt4J,EAAMg2W,GAEhB,IACEh2W,EAAMg2W,QAAkBtrW,EACxB,IAAIwrW,GAAW,CACH,CAAZ,MAAO7tW,GAAK,CAEd,IAAIotE,EAASwgS,EAAqBr2W,KAAKI,GAQvC,OAPIk2W,IACE5vB,EACFtmV,EAAMg2W,GAAkB19M,SAEjBt4J,EAAMg2W,IAGVvgS,CACR,qBC1CD,IAOIwgS,EAPc1zW,OAAOgJ,UAOcI,SAavC64J,EAAOx3B,QAJP,SAAwBhtI,GACtB,OAAOi2W,EAAqBr2W,KAAKI,EAClC,yBCnBD,IAAIy0W,EAAah6L,EAAQ,OAGrBi6L,EAA0B,iBAARlqW,MAAoBA,MAAQA,KAAKjI,SAAWA,QAAUiI,KAGxE0vG,EAAOu6P,GAAcC,GAAYrpW,SAAS,cAATA,GAErCm5J,EAAOx3B,QAAU9yB,qBCejB,IAAI/6G,EAAUD,MAAMC,QAEpBqlK,EAAOx3B,QAAU7tI,yBCzBjB,IAAIg3W,EAAa17L,EAAQ,OACrB09D,EAAW19D,EAAQ,MAmCvBjW,EAAOx3B,QAVP,SAAoBhtI,GAClB,IAAKm4O,EAASn4O,GACZ,OAAO,EAIT,IAAIs4J,EAAM69M,EAAWn2W,GACrB,MA5BY,qBA4BLs4J,GA3BI,8BA2BcA,GA7BZ,0BA6B6BA,GA1B7B,kBA0BgDA,CAC9D,oBCJDkM,EAAOx3B,QALP,SAAkBhtI,GAChB,IAAI0I,SAAc1I,EAClB,OAAgB,MAATA,IAA0B,UAAR0I,GAA4B,YAARA,EAC9C,qBCAD87J,EAAOx3B,QAJP,SAAsBhtI,GACpB,OAAgB,MAATA,GAAiC,iBAATA,CAChC,yBC1BD,IAAIm2W,EAAa17L,EAAQ,OACrBt7K,EAAUs7K,EAAQ,OAClBu4L,EAAev4L,EAAQ,OA2B3BjW,EAAOx3B,QALP,SAAkBhtI,GAChB,MAAuB,iBAATA,IACVb,EAAQa,IAAUgzW,EAAahzW,IArBrB,mBAqB+Bm2W,EAAWn2W,EACzD,qBCNDwkK,EAAOx3B,QAJP,SAAqBhtI,GACnB,YAAiB0K,IAAV1K,CACR,sCClBD,IAAIulK,EAAWkV,EAAQ,OACnB6sK,EAAW7sK,EAAQ,OACnBxsC,EAASwsC,EAAAA,OAAAA,OAET27L,EAAU,IAAIl3W,MAAM,IAExB,SAASovS,IACPg5C,EAAS1nV,KAAKyB,KAAM,IAGpBA,KAAK6gT,GAAK,WACV7gT,KAAKi/I,GAAK,WACVj/I,KAAKw0T,GAAK,WACVx0T,KAAK1B,GAAK,SACX,CA8GD,SAAS02W,EAAMhyW,EAAG0N,GAChB,OAAQ1N,GAAK0N,EAAM1N,IAAO,GAAK0N,CAChC,CAED,SAASukW,EAAKnrW,EAAG8J,EAAGC,EAAG0E,EAAG5H,EAAGokE,EAAG1hE,GAC9B,OAAQ2hW,EAAMlrW,GAAM8J,EAAIC,GAAQD,EAAK2E,GAAM5H,EAAIokE,EAAK,EAAG1hE,GAAKO,EAAK,CAClE,CAED,SAASshW,EAAKprW,EAAG8J,EAAGC,EAAG0E,EAAG5H,EAAGokE,EAAG1hE,GAC9B,OAAQ2hW,EAAMlrW,GAAM8J,EAAI2E,EAAM1E,GAAM0E,GAAO5H,EAAIokE,EAAK,EAAG1hE,GAAKO,EAAK,CAClE,CAED,SAASuhW,EAAKrrW,EAAG8J,EAAGC,EAAG0E,EAAG5H,EAAGokE,EAAG1hE,GAC9B,OAAQ2hW,EAAMlrW,GAAK8J,EAAIC,EAAI0E,GAAK5H,EAAIokE,EAAK,EAAG1hE,GAAKO,EAAK,CACvD,CAED,SAASwhW,EAAKtrW,EAAG8J,EAAGC,EAAG0E,EAAG5H,EAAGokE,EAAG1hE,GAC9B,OAAQ2hW,EAAMlrW,GAAM+J,GAAKD,GAAM2E,IAAQ5H,EAAIokE,EAAK,EAAG1hE,GAAKO,EAAK,CAC9D,CA9HDswJ,EAAS+oI,EAAKg5C,GAEdh5C,EAAI/iS,UAAUw4G,QAAU,WAEtB,IADA,IAAIirJ,EAAIonG,EACCn3W,EAAI,EAAGA,EAAI,KAAMA,EAAG+vQ,EAAE/vQ,GAAKoC,KAAK6rU,OAAOjrF,YAAgB,EAAJhjP,GAE5D,IAAIkM,EAAI9J,KAAK6gT,GACTjtS,EAAI5T,KAAKi/I,GACTprI,EAAI7T,KAAKw0T,GACTj8S,EAAIvY,KAAK1B,GAEbwL,EAAImrW,EAAInrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI08V,EAAI18V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIohW,EAAIphW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,UAAY,IACtC/5P,EAAIqhW,EAAIrhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IACtC7jQ,EAAImrW,EAAInrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI08V,EAAI18V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIohW,EAAIphW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,WAAY,IACtC/5P,EAAIqhW,EAAIrhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IACtC7jQ,EAAImrW,EAAInrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI08V,EAAI18V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIohW,EAAIphW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,WAAY,IACvC/5P,EAAIqhW,EAAIrhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,IAAK,WAAY,IACvC7jQ,EAAImrW,EAAInrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,IAAK,WAAY,GACvCp1P,EAAI08V,EAAI18V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,IAAK,WAAY,IACvC95P,EAAIohW,EAAIphW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,WAAY,IAGvC7jQ,EAAIorW,EAAIprW,EAFR8J,EAAIqhW,EAAIrhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,IAAK,WAAY,IAEzB95P,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI28V,EAAI38V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,GACtC95P,EAAIqhW,EAAIrhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,UAAY,IACvC/5P,EAAIshW,EAAIthW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IACtC7jQ,EAAIorW,EAAIprW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI28V,EAAI38V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,IAAK,SAAY,GACvC95P,EAAIqhW,EAAIrhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,WAAY,IACvC/5P,EAAIshW,EAAIthW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IACtC7jQ,EAAIorW,EAAIprW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,UAAY,GACtCp1P,EAAI28V,EAAI38V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,IAAK,WAAY,GACvC95P,EAAIqhW,EAAIrhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,WAAY,IACtC/5P,EAAIshW,EAAIthW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IACtC7jQ,EAAIorW,EAAIprW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,IAAK,WAAY,GACvCp1P,EAAI28V,EAAI38V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,GACtC95P,EAAIqhW,EAAIrhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,WAAY,IAGtC7jQ,EAAIqrW,EAAIrrW,EAFR8J,EAAIshW,EAAIthW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,IAAK,WAAY,IAEzB95P,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI48V,EAAI58V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIshW,EAAIthW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,WAAY,IACvC/5P,EAAIuhW,EAAIvhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,IAAK,WAAY,IACvC7jQ,EAAIqrW,EAAIrrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI48V,EAAI58V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIshW,EAAIthW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,WAAY,IACtC/5P,EAAIuhW,EAAIvhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,IAAK,WAAY,IACvC7jQ,EAAIqrW,EAAIrrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,IAAK,UAAY,GACvCp1P,EAAI48V,EAAI58V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIshW,EAAIthW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,WAAY,IACtC/5P,EAAIuhW,EAAIvhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,SAAY,IACtC7jQ,EAAIqrW,EAAIrrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI48V,EAAI58V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,IAAK,WAAY,IACvC95P,EAAIshW,EAAIthW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,UAAY,IAGvC7jQ,EAAIsrW,EAAItrW,EAFR8J,EAAIuhW,EAAIvhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IAExB95P,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI68V,EAAI78V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIuhW,EAAIvhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,WAAY,IACvC/5P,EAAIwhW,EAAIxhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IACtC7jQ,EAAIsrW,EAAItrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,IAAK,WAAY,GACvCp1P,EAAI68V,EAAI78V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,GAAI,WAAY,IACtC95P,EAAIuhW,EAAIvhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,IAAK,WAAY,IACvC/5P,EAAIwhW,EAAIxhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IACtC7jQ,EAAIsrW,EAAItrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI68V,EAAI78V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,IAAK,WAAY,IACvC95P,EAAIuhW,EAAIvhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,WAAY,IACtC/5P,EAAIwhW,EAAIxhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,IAAK,WAAY,IACvC7jQ,EAAIsrW,EAAItrW,EAAG8J,EAAGC,EAAG0E,EAAGo1P,EAAE,GAAI,WAAY,GACtCp1P,EAAI68V,EAAI78V,EAAGzO,EAAG8J,EAAGC,EAAG85P,EAAE,IAAK,WAAY,IACvC95P,EAAIuhW,EAAIvhW,EAAG0E,EAAGzO,EAAG8J,EAAG+5P,EAAE,GAAI,UAAY,IACtC/5P,EAAIwhW,EAAIxhW,EAAGC,EAAG0E,EAAGzO,EAAG6jQ,EAAE,GAAI,WAAY,IAEtC3tQ,KAAK6gT,GAAM7gT,KAAK6gT,GAAK/2S,EAAK,EAC1B9J,KAAKi/I,GAAMj/I,KAAKi/I,GAAKrrI,EAAK,EAC1B5T,KAAKw0T,GAAMx0T,KAAKw0T,GAAK3gT,EAAK,EAC1B7T,KAAK1B,GAAM0B,KAAK1B,GAAKia,EAAK,CAC3B,EAED00R,EAAI/iS,UAAUo8U,QAAU,WAEtBtmV,KAAK6rU,OAAO7rU,KAAKmmV,gBAAkB,IAC/BnmV,KAAKmmV,aAAe,KACtBnmV,KAAK6rU,OAAOz3Q,KAAK,EAAGp0D,KAAKmmV,aAAc,IACvCnmV,KAAK0iH,UACL1iH,KAAKmmV,aAAe,GAGtBnmV,KAAK6rU,OAAOz3Q,KAAK,EAAGp0D,KAAKmmV,aAAc,IACvCnmV,KAAK6rU,OAAOzrF,cAAcpgP,KAAK+qP,QAAQ,GAAI,IAC3C/qP,KAAK6rU,OAAOzrF,cAAcpgP,KAAK+qP,QAAQ,GAAI,IAC3C/qP,KAAK0iH,UAGL,IAAIpqE,EAASs0F,EAAOigI,YAAY,IAKhC,OAJAv0N,EAAOqwO,aAAa3oR,KAAK6gT,GAAI,GAC7BvoQ,EAAOqwO,aAAa3oR,KAAKi/I,GAAI,GAC7B3mG,EAAOqwO,aAAa3oR,KAAKw0T,GAAI,GAC7Bl8Q,EAAOqwO,aAAa3oR,KAAK1B,GAAI,IACtBg6C,CACR,EAsBD6qH,EAAOx3B,QAAUshK,yBCjJjB,IAAId,EAAK/yH,EAAQ,OACbi8L,EAAUj8L,EAAQ,OAEtB,SAASk8L,EAAYznM,GACnB7tK,KAAK6tK,KAAOA,GAAQ,IAAIwnM,EAAQpoG,IACjC,CACD9pG,EAAOx3B,QAAU2pO,EAEjBA,EAAYzqW,OAAS,SAAgBgjK,GACnC,OAAO,IAAIynM,EAAYznM,EACxB,EAEDynM,EAAYprW,UAAUqrW,WAAa,SAAoB7kW,GACrD,IAAI4X,EAAM5X,EAAE6tJ,YACRi3M,EAAYrvW,KAAK8K,KAAKqX,EAAM,GAIhC,GACE,IAAIxe,EAAI,IAAIqiS,EAAGnsS,KAAK6tK,KAAK/B,SAAS0pM,UAC7B1rW,EAAEu4J,IAAI3xJ,IAAM,GAEnB,OAAO5G,CACR,EAEDwrW,EAAYprW,UAAUurW,WAAa,SAAoBttU,EAAOwP,GAE5D,IAAIn7B,EAAOm7B,EAAKntB,IAAI2d,GACpB,OAAOA,EAAMpc,IAAI/rB,KAAKu1W,WAAW/4V,GAClC,EAED84V,EAAYprW,UAAUuT,KAAO,SAAc/M,EAAGqkE,EAAG1pC,GAC/C,IAAI/iB,EAAM5X,EAAE6tJ,YACRqB,EAAMusI,EAAGhiI,KAAKz5J,GACdglW,EAAO,IAAIvpE,EAAG,GAAGpsI,MAAMH,GAEtB7qF,IACHA,EAAI5uE,KAAKE,IAAI,EAAIiiB,EAAM,GAAM,IAI/B,IADA,IAAIwuR,EAAKpmS,EAAEuhN,KAAK,GACP5+M,EAAI,GAAIyjS,EAAGptF,MAAMr2M,GAAIA,KAM9B,IALA,IAAIkF,EAAI7H,EAAE0hJ,KAAK/+I,GAEXsiW,EAAM7+D,EAAG/2I,MAAMH,GAGZ7qF,EAAI,EAAGA,IAAK,CACjB,IAAIjrE,EAAI9J,KAAKy1W,WAAW,IAAItpE,EAAG,GAAI2K,GAC/BzrQ,GACFA,EAAGvhC,GAEL,IAAI9G,EAAI8G,EAAEi2J,MAAMH,GAAK60D,OAAOl8M,GAC5B,GAAoB,IAAhBvV,EAAEq/J,IAAIqzM,IAA8B,IAAf1yW,EAAEq/J,IAAIszM,GAA/B,CAGA,IAAK,IAAI/3W,EAAI,EAAGA,EAAIyV,EAAGzV,IAAK,CAG1B,GAAoB,KAFpBoF,EAAIA,EAAEijK,UAEA5D,IAAIqzM,GACR,OAAO,EACT,GAAmB,IAAf1yW,EAAEq/J,IAAIszM,GACR,KACH,CAED,GAAI/3W,IAAMyV,EACR,OAAO,CAZC,CAaX,CAED,OAvBY,CAwBb,EAEDiiW,EAAYprW,UAAU0rW,WAAa,SAAoBllW,EAAGqkE,GACxD,IAAIzsD,EAAM5X,EAAE6tJ,YACRqB,EAAMusI,EAAGhiI,KAAKz5J,GACdglW,EAAO,IAAIvpE,EAAG,GAAGpsI,MAAMH,GAEtB7qF,IACHA,EAAI5uE,KAAKE,IAAI,EAAIiiB,EAAM,GAAM,IAI/B,IADA,IAAIwuR,EAAKpmS,EAAEuhN,KAAK,GACP5+M,EAAI,GAAIyjS,EAAGptF,MAAMr2M,GAAIA,KAK9B,IAJA,IAAIkF,EAAI7H,EAAE0hJ,KAAK/+I,GAEXsiW,EAAM7+D,EAAG/2I,MAAMH,GAEZ7qF,EAAI,EAAGA,IAAK,CACjB,IAAIjrE,EAAI9J,KAAKy1W,WAAW,IAAItpE,EAAG,GAAI2K,GAE/Br+R,EAAI/H,EAAE2iN,IAAIvpN,GACd,GAAkB,IAAd2O,EAAE0mJ,KAAK,GACT,OAAO1mJ,EAET,IAAIzV,EAAI8G,EAAEi2J,MAAMH,GAAK60D,OAAOl8M,GAC5B,GAAoB,IAAhBvV,EAAEq/J,IAAIqzM,IAA8B,IAAf1yW,EAAEq/J,IAAIszM,GAA/B,CAGA,IAAK,IAAI/3W,EAAI,EAAGA,EAAIyV,EAAGzV,IAAK,CAG1B,GAAoB,KAFpBoF,EAAIA,EAAEijK,UAEA5D,IAAIqzM,GACR,OAAO1yW,EAAE4gK,UAAUquD,KAAK,GAAGoB,IAAI3iN,GACjC,GAAmB,IAAf1N,EAAEq/J,IAAIszM,GACR,KACH,CAED,GAAI/3W,IAAMyV,EAER,OADArQ,EAAIA,EAAEijK,UACGrC,UAAUquD,KAAK,GAAGoB,IAAI3iN,EAbvB,CAeX,CAED,OAAO,CACR,0BClHD,SAAWyyJ,EAAQx3B,GACjB,aAGA,SAAS+xB,EAAQC,EAAKlvB,GACpB,IAAKkvB,EAAK,MAAM,IAAIhsJ,MAAM88H,GAAO,mBAClC,CAID,SAASy1B,EAAUzH,EAAM2G,GACvB3G,EAAK4G,OAASD,EACd,IAAIE,EAAW,WAAc,EAC7BA,EAASp5J,UAAYk5J,EAAUl5J,UAC/BuyJ,EAAKvyJ,UAAY,IAAIo5J,EACrB7G,EAAKvyJ,UAAUU,YAAc6xJ,CAC9B,CAID,SAAS1L,EAAI8L,EAAQkN,EAAMs9C,GACzB,GAAIt2D,EAAGu2D,KAAKzqD,GACV,OAAOA,EAGT78J,KAAK2lK,SAAW,EAChB3lK,KAAK25L,MAAQ,KACb35L,KAAKpB,OAAS,EAGdoB,KAAK4/J,IAAM,KAEI,OAAX/C,IACW,OAATkN,GAA0B,OAATA,IACnBs9C,EAASt9C,EACTA,EAAO,IAGT/pK,KAAKurK,MAAM1O,GAAU,EAAGkN,GAAQ,GAAIs9C,GAAU,MAEjD,CAUD,IAAIz6E,EATkB,kBAAXu2B,EACTA,EAAOx3B,QAAUolB,EAEjBplB,EAAQolB,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAGlP,SAAW,GAGd,IAEIjV,EADoB,qBAAX/pI,QAAmD,qBAAlBA,OAAO+pI,OACxC/pI,OAAO+pI,OAEPwsC,EAAAA,OAAAA,MAGZ,CADC,MAAOpyK,GACR,CA+HD,SAASugN,EAAerrM,EAAQ3M,GAC9B,IAAIsE,EAAIqI,EAAO2zI,WAAWtgJ,GAE1B,OAAIsE,GAAK,IAAMA,GAAK,GACXA,EAAI,GAEFA,GAAK,IAAMA,GAAK,IAClBA,EAAI,GAGHA,EAAI,GAAM,EAErB,CAED,SAAS2zM,EAActrM,EAAQurM,EAAYl4M,GACzC,IAAI8J,EAAIkuM,EAAcrrM,EAAQ3M,GAI9B,OAHIA,EAAQ,GAAKk4M,IACfpuM,GAAKkuM,EAAcrrM,EAAQ3M,EAAQ,IAAM,GAEpC8J,CACR,CA6CD,SAASquM,EAAW91C,EAAKzpI,EAAOkN,EAAK8uG,GAGnC,IAFA,IAAI9qI,EAAI,EACJiP,EAAMniB,KAAKC,IAAIwrK,EAAIhzK,OAAQy2C,GACtBz3C,EAAIuqC,EAAOvqC,EAAI0qB,EAAK1qB,IAAK,CAChC,IAAIiW,EAAI+9J,EAAI/hB,WAAWjyJ,GAAK,GAE5Byb,GAAK8qI,EAIH9qI,GADExF,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,CAER,CACD,OAAOwF,CACR,CApND03I,EAAGu2D,KAAO,SAAejpD,GACvB,OAAIA,aAAetN,GAIJ,OAARsN,GAA+B,kBAARA,GAC5BA,EAAIzzJ,YAAYi3I,WAAakP,EAAGlP,UAAYhkJ,MAAMC,QAAQugK,EAAIs7B,MACjE,EAED5oC,EAAG1qJ,IAAM,SAAclC,EAAMoC,GAC3B,OAAIpC,EAAKk+J,IAAI97J,GAAS,EAAUpC,EACzBoC,CACR,EAEDwqJ,EAAG3qJ,IAAM,SAAcjC,EAAMoC,GAC3B,OAAIpC,EAAKk+J,IAAI97J,GAAS,EAAUpC,EACzBoC,CACR,EAEDwqJ,EAAG7mJ,UAAUqhK,MAAQ,SAAe1O,EAAQkN,EAAMs9C,GAChD,GAAsB,kBAAXxqD,EACT,OAAO78J,KAAK2nN,YAAY9qD,EAAQkN,EAAMs9C,GAGxC,GAAsB,kBAAXxqD,EACT,OAAO78J,KAAK4nN,WAAW/qD,EAAQkN,EAAMs9C,GAG1B,QAATt9C,IACFA,EAAO,IAETrM,EAAOqM,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI5hI,EAAQ,EACM,OAFlB00H,EAASA,EAAOvyJ,WAAWq4D,QAAQ,OAAQ,KAEhC,KACTx6B,IACAnoC,KAAK2lK,SAAW,GAGdx9H,EAAQ00H,EAAOj+J,SACJ,KAATmrK,EACF/pK,KAAK6nN,UAAUhrD,EAAQ10H,EAAOk/K,IAE9BrnN,KAAK8nN,WAAWjrD,EAAQkN,EAAM5hI,GACf,OAAXk/K,GACFrnN,KAAK4nN,WAAW5nN,KAAKs7B,UAAWyuI,EAAMs9C,IAI7C,EAEDt2D,EAAG7mJ,UAAUy9M,YAAc,SAAsB9qD,EAAQkN,EAAMs9C,GACzDxqD,EAAS,IACX78J,KAAK2lK,SAAW,EAChB9I,GAAUA,GAERA,EAAS,UACX78J,KAAK25L,MAAQ,CAAW,SAAT98B,GACf78J,KAAKpB,OAAS,GACLi+J,EAAS,kBAClB78J,KAAK25L,MAAQ,CACF,SAAT98B,EACCA,EAAS,SAAa,UAEzB78J,KAAKpB,OAAS,IAEd8+J,EAAOb,EAAS,kBAChB78J,KAAK25L,MAAQ,CACF,SAAT98B,EACCA,EAAS,SAAa,SACvB,GAEF78J,KAAKpB,OAAS,GAGD,OAAXyoN,GAGJrnN,KAAK4nN,WAAW5nN,KAAKs7B,UAAWyuI,EAAMs9C,EACvC,EAEDt2D,EAAG7mJ,UAAU09M,WAAa,SAAqB/qD,EAAQkN,EAAMs9C,GAG3D,GADA3pD,EAAgC,kBAAlBb,EAAOj+J,QACjBi+J,EAAOj+J,QAAU,EAGnB,OAFAoB,KAAK25L,MAAQ,CAAE,GACf35L,KAAKpB,OAAS,EACPoB,KAGTA,KAAKpB,OAASuH,KAAK8K,KAAK4rJ,EAAOj+J,OAAS,GACxCoB,KAAK25L,MAAQ,IAAI97L,MAAMmC,KAAKpB,QAC5B,IAAK,IAAIhB,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC/BoC,KAAK25L,MAAM/7L,GAAK,EAGlB,IAAI8wB,EAAG7M,EACHusI,EAAM,EACV,GAAe,OAAXi5D,EACF,IAAKzpN,EAAIi/J,EAAOj+J,OAAS,EAAG8vB,EAAI,EAAG9wB,GAAK,EAAGA,GAAK,EAC9CikB,EAAIg7I,EAAOj/J,GAAMi/J,EAAOj/J,EAAI,IAAM,EAAMi/J,EAAOj/J,EAAI,IAAM,GACzDoC,KAAK25L,MAAMjrK,IAAO7M,GAAKusI,EAAO,SAC9BpuJ,KAAK25L,MAAMjrK,EAAI,GAAM7M,IAAO,GAAKusI,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP1/H,UAGC,GAAe,OAAX24L,EACT,IAAKzpN,EAAI,EAAG8wB,EAAI,EAAG9wB,EAAIi/J,EAAOj+J,OAAQhB,GAAK,EACzCikB,EAAIg7I,EAAOj/J,GAAMi/J,EAAOj/J,EAAI,IAAM,EAAMi/J,EAAOj/J,EAAI,IAAM,GACzDoC,KAAK25L,MAAMjrK,IAAO7M,GAAKusI,EAAO,SAC9BpuJ,KAAK25L,MAAMjrK,EAAI,GAAM7M,IAAO,GAAKusI,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP1/H,KAIN,OAAO1uB,KAAKi5K,OACb,EAwBDloB,EAAG7mJ,UAAU29M,UAAY,SAAoBhrD,EAAQ10H,EAAOk/K,GAE1DrnN,KAAKpB,OAASuH,KAAK8K,MAAM4rJ,EAAOj+J,OAASupC,GAAS,GAClDnoC,KAAK25L,MAAQ,IAAI97L,MAAMmC,KAAKpB,QAC5B,IAAK,IAAIhB,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC/BoC,KAAK25L,MAAM/7L,GAAK,EAIlB,IAGIikB,EAHAusI,EAAM,EACN1/H,EAAI,EAGR,GAAe,OAAX24L,EACF,IAAKzpN,EAAIi/J,EAAOj+J,OAAS,EAAGhB,GAAKuqC,EAAOvqC,GAAK,EAC3CikB,EAAI2lM,EAAa3qD,EAAQ10H,EAAOvqC,IAAMwwJ,EACtCpuJ,KAAK25L,MAAMjrK,IAAU,SAAJ7M,EACbusI,GAAO,IACTA,GAAO,GACP1/H,GAAK,EACL1uB,KAAK25L,MAAMjrK,IAAM7M,IAAM,IAEvBusI,GAAO,OAKX,IAAKxwJ,GADai/J,EAAOj+J,OAASupC,GACX,IAAM,EAAIA,EAAQ,EAAIA,EAAOvqC,EAAIi/J,EAAOj+J,OAAQhB,GAAK,EAC1EikB,EAAI2lM,EAAa3qD,EAAQ10H,EAAOvqC,IAAMwwJ,EACtCpuJ,KAAK25L,MAAMjrK,IAAU,SAAJ7M,EACbusI,GAAO,IACTA,GAAO,GACP1/H,GAAK,EACL1uB,KAAK25L,MAAMjrK,IAAM7M,IAAM,IAEvBusI,GAAO,EAKbpuJ,KAAKi5K,OACN,EA0BDloB,EAAG7mJ,UAAU49M,WAAa,SAAqBjrD,EAAQkN,EAAM5hI,GAE3DnoC,KAAK25L,MAAQ,CAAE,GACf35L,KAAKpB,OAAS,EAGd,IAAK,IAAImpN,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWj+C,EAClEg+C,IAEFA,IACAC,EAAWA,EAAUj+C,EAAQ,EAO7B,IALA,IAAIh7D,EAAQ8tD,EAAOj+J,OAASupC,EACxBs2H,EAAM1vD,EAAQg5G,EACd1yK,EAAMlvC,KAAKC,IAAI2oG,EAAOA,EAAQ0vD,GAAOt2H,EAErC21H,EAAO,EACFlgK,EAAIuqC,EAAOvqC,EAAIy3C,EAAKz3C,GAAKmqN,EAChCjqD,EAAO4pD,EAAU7qD,EAAQj/J,EAAGA,EAAImqN,EAASh+C,GAEzC/pK,KAAKioN,MAAMD,GACPhoN,KAAK25L,MAAM,GAAK77B,EAAO,SACzB99J,KAAK25L,MAAM,IAAM77B,EAEjB99J,KAAKkoN,OAAOpqD,GAIhB,GAAY,IAARW,EAAW,CACb,IAAIztJ,EAAM,EAGV,IAFA8sJ,EAAO4pD,EAAU7qD,EAAQj/J,EAAGi/J,EAAOj+J,OAAQmrK,GAEtCnsK,EAAI,EAAGA,EAAI6gK,EAAK7gK,IACnBoT,GAAO+4J,EAGT/pK,KAAKioN,MAAMj3M,GACPhR,KAAK25L,MAAM,GAAK77B,EAAO,SACzB99J,KAAK25L,MAAM,IAAM77B,EAEjB99J,KAAKkoN,OAAOpqD,EAEf,CAED99J,KAAKi5K,OACN,EAEDloB,EAAG7mJ,UAAU4R,KAAO,SAAe07F,GACjCA,EAAKmiF,MAAQ,IAAI97L,MAAMmC,KAAKpB,QAC5B,IAAK,IAAIhB,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC/B45G,EAAKmiF,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAE7B45G,EAAK54G,OAASoB,KAAKpB,OACnB44G,EAAKmuD,SAAW3lK,KAAK2lK,SACrBnuD,EAAKooD,IAAM5/J,KAAK4/J,GACjB,EAED7O,EAAG7mJ,UAAU4Z,MAAQ,WACnB,IAAIzK,EAAI,IAAI03I,EAAG,MAEf,OADA/wJ,KAAK8b,KAAKzC,GACHA,CACR,EAED03I,EAAG7mJ,UAAUi+M,QAAU,SAAkB3rM,GACvC,KAAOxc,KAAKpB,OAAS4d,GACnBxc,KAAK25L,MAAM35L,KAAKpB,UAAY,EAE9B,OAAOoB,IACR,EAGD+wJ,EAAG7mJ,UAAU+uK,MAAQ,WACnB,KAAOj5K,KAAKpB,OAAS,GAAqC,IAAhCoB,KAAK25L,MAAM35L,KAAKpB,OAAS,IACjDoB,KAAKpB,SAEP,OAAOoB,KAAKooN,WACb,EAEDr3D,EAAG7mJ,UAAUk+M,UAAY,WAKvB,OAHoB,IAAhBpoN,KAAKpB,QAAkC,IAAlBoB,KAAK25L,MAAM,KAClC35L,KAAK2lK,SAAW,GAEX3lK,IACR,EAED+wJ,EAAG7mJ,UAAU28J,QAAU,WACrB,OAAQ7mK,KAAK4/J,IAAM,UAAY,SAAW5/J,KAAKsK,SAAS,IAAM,GAC/D,EAgCD,IAAI+9M,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYr/M,EAAMk1J,EAAKwsB,GAC9BA,EAAIllB,SAAWtH,EAAIsH,SAAWx8J,EAAKw8J,SACnC,IAAIr9I,EAAOnf,EAAKvK,OAASy/J,EAAIz/J,OAAU,EACvCisL,EAAIjsL,OAAS0pB,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIxe,EAAoB,EAAhBX,EAAKwwL,MAAM,GACf/lL,EAAmB,EAAfyqJ,EAAIs7B,MAAM,GACdtgL,EAAIvP,EAAI8J,EAERqqJ,EAAS,SAAJ5kJ,EACLovM,EAASpvM,EAAI,SAAa,EAC9BwxK,EAAI8O,MAAM,GAAK17B,EAEf,IAAK,IAAIlpF,EAAI,EAAGA,EAAIzsD,EAAKysD,IAAK,CAM5B,IAHA,IAAI2zI,EAASD,IAAU,GACnBE,EAAgB,SAARF,EACRG,EAAOziN,KAAKC,IAAI2uE,EAAGspF,EAAIz/J,OAAS,GAC3B8vB,EAAIvoB,KAAKE,IAAI,EAAG0uE,EAAI5rE,EAAKvK,OAAS,GAAI8vB,GAAKk6L,EAAMl6L,IAAK,CAC7D,IAAI9wB,EAAKm3E,EAAIrmD,EAAK,EAIlBg6L,IADArvM,GAFAvP,EAAoB,EAAhBX,EAAKwwL,MAAM/7L,KACfgW,EAAmB,EAAfyqJ,EAAIs7B,MAAMjrK,IACFi6L,GACG,SAAa,EAC5BA,EAAY,SAAJtvM,CACT,CACDwxK,EAAI8O,MAAM5kH,GAAa,EAAR4zI,EACfF,EAAiB,EAATC,CACT,CAOD,OANc,IAAVD,EACF59B,EAAI8O,MAAM5kH,GAAa,EAAR0zI,EAEf59B,EAAIjsL,SAGCisL,EAAI5R,OACZ,CA1lBDloB,EAAG7mJ,UAAUI,SAAW,SAAmBy/J,EAAM8O,GAI/C,IAAIgS,EACJ,GAHAhS,EAAoB,EAAVA,GAAe,EAGZ,MAJb9O,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC8gB,EAAM,GAGN,IAFA,IAAIz8B,EAAM,EACNq6D,EAAQ,EACH7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CACpC,IAAIikB,EAAI7hB,KAAK25L,MAAM/7L,GACfkgK,GAA+B,UAArBj8I,GAAKusI,EAAOq6D,IAAmBn+M,SAAS,IAGpDugL,EADY,KADd49B,EAAS5mM,IAAO,GAAKusI,EAAQ,WACVxwJ,IAAMoC,KAAKpB,OAAS,EAC/BypN,EAAM,EAAIvqD,EAAKl/J,QAAUk/J,EAAO+sB,EAEhC/sB,EAAO+sB,GAEfz8B,GAAO,IACI,KACTA,GAAO,GACPxwJ,IAEH,CAID,IAHc,IAAV6qN,IACF59B,EAAM49B,EAAMn+M,SAAS,IAAMugL,GAEtBA,EAAIjsL,OAASi6K,IAAY,GAC9BgS,EAAM,IAAMA,EAKd,OAHsB,IAAlB7qL,KAAK2lK,WACPklB,EAAM,IAAMA,GAEPA,CACR,CAED,GAAI9gB,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAI8+C,EAAYP,EAAWv+C,GAEvB++C,EAAYP,EAAWx+C,GAC3B8gB,EAAM,GACN,IAAIh3K,EAAI7T,KAAK8jB,QAEb,IADAjQ,EAAE8xJ,SAAW,GACL9xJ,EAAEsvI,UAAU,CAClB,IAAI9pI,EAAIxF,EAAE4wJ,KAAKqkD,GAAWx+M,SAASy/J,GAMjC8gB,GALFh3K,EAAIA,EAAEk1M,MAAMD,IAEL3lE,SAGC9pI,EAAIwxK,EAFJw9B,EAAMQ,EAAYxvM,EAAEza,QAAUya,EAAIwxK,CAI3C,CAID,IAHI7qL,KAAKmjJ,WACP0nC,EAAM,IAAMA,GAEPA,EAAIjsL,OAASi6K,IAAY,GAC9BgS,EAAM,IAAMA,EAKd,OAHsB,IAAlB7qL,KAAK2lK,WACPklB,EAAM,IAAMA,GAEPA,CACR,CAEDntB,GAAO,EAAO,kCACf,EAED3M,EAAG7mJ,UAAUwuI,SAAW,WACtB,IAAIswE,EAAMhpN,KAAK25L,MAAM,GASrB,OARoB,IAAhB35L,KAAKpB,OACPoqN,GAAuB,SAAhBhpN,KAAK25L,MAAM,GACO,IAAhB35L,KAAKpB,QAAkC,IAAlBoB,KAAK25L,MAAM,GAEzCqvB,GAAO,iBAAoC,SAAhBhpN,KAAK25L,MAAM,GAC7B35L,KAAKpB,OAAS,GACvB8+J,GAAO,EAAO,8CAEU,IAAlB19J,KAAK2lK,UAAmBqjD,EAAMA,CACvC,EAEDj4D,EAAG7mJ,UAAUqX,OAAS,WACpB,OAAOvhB,KAAKsK,SAAS,GACtB,EAEDymJ,EAAG7mJ,UAAUizI,SAAW,SAAmBkqE,EAAQzoN,GAEjD,OADA8+J,EAAyB,qBAAX9wB,GACP5sI,KAAKipN,YAAYr8E,EAAQy6E,EAAQzoN,EACzC,EAEDmyJ,EAAG7mJ,UAAUoxB,QAAU,SAAkB+rL,EAAQzoN,GAC/C,OAAOoB,KAAKipN,YAAYprN,MAAOwpN,EAAQzoN,EACxC,EAEDmyJ,EAAG7mJ,UAAU++M,YAAc,SAAsBC,EAAW7B,EAAQzoN,GAClE,IAAIywG,EAAarvG,KAAKqvG,aAClB85G,EAAYvqN,GAAUuH,KAAKE,IAAI,EAAGgpG,GACtCquD,EAAOruD,GAAc85G,EAAW,yCAChCzrD,EAAOyrD,EAAY,EAAG,+BAEtBnpN,KAAKi5K,QACL,IAGIrlK,EAAGhW,EAHHwrN,EAA0B,OAAX/B,EACfz0G,EAAM,IAAIs2G,EAAUC,GAGpBxmN,EAAI3C,KAAK8jB,QACb,GAAKslM,EAYE,CACL,IAAKxrN,EAAI,GAAI+E,EAAEwgJ,SAAUvlJ,IACvBgW,EAAIjR,EAAE+7J,MAAM,KACZ/7J,EAAEk8J,OAAO,GAETjsD,EAAIh1G,GAAKgW,EAGX,KAAOhW,EAAIurN,EAAWvrN,IACpBg1G,EAAIh1G,GAAK,CAEZ,KAvBkB,CAEjB,IAAKA,EAAI,EAAGA,EAAIurN,EAAY95G,EAAYzxG,IACtCg1G,EAAIh1G,GAAK,EAGX,IAAKA,EAAI,GAAI+E,EAAEwgJ,SAAUvlJ,IACvBgW,EAAIjR,EAAE+7J,MAAM,KACZ/7J,EAAEk8J,OAAO,GAETjsD,EAAIu2G,EAAYvrN,EAAI,GAAKgW,CAE5B,CAaD,OAAOg/F,CACR,EAEGzsG,KAAKkjN,MACPt4D,EAAG7mJ,UAAUo/M,WAAa,SAAqBznM,GAC7C,OAAO,GAAK1b,KAAKkjN,MAAMxnM,EACxB,EAEDkvI,EAAG7mJ,UAAUo/M,WAAa,SAAqBznM,GAC7C,IAAIhR,EAAIgR,EACJxI,EAAI,EAiBR,OAhBIxI,GAAK,OACPwI,GAAK,GACLxI,KAAO,IAELA,GAAK,KACPwI,GAAK,EACLxI,KAAO,GAELA,GAAK,IACPwI,GAAK,EACLxI,KAAO,GAELA,GAAK,IACPwI,GAAK,EACLxI,KAAO,GAEFwI,EAAIxI,CACZ,EAGHkgJ,EAAG7mJ,UAAUq/M,UAAY,SAAoB1nM,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAIhR,EAAIgR,EACJxI,EAAI,EAoBR,OAnBqB,KAAZ,KAAJxI,KACHwI,GAAK,GACLxI,KAAO,IAEU,KAAV,IAAJA,KACHwI,GAAK,EACLxI,KAAO,GAES,KAAT,GAAJA,KACHwI,GAAK,EACLxI,KAAO,GAES,KAAT,EAAJA,KACHwI,GAAK,EACLxI,KAAO,GAES,KAAT,EAAJA,IACHwI,IAEKA,CACR,EAGD03I,EAAG7mJ,UAAUq0J,UAAY,WACvB,IAAI18I,EAAI7hB,KAAK25L,MAAM35L,KAAKpB,OAAS,GAC7Bo/J,EAAKh+J,KAAKspN,WAAWznM,GACzB,OAA2B,IAAnB7hB,KAAKpB,OAAS,GAAUo/J,CACjC,EAgBDjN,EAAG7mJ,UAAUs/M,SAAW,WACtB,GAAIxpN,KAAKmjJ,SAAU,OAAO,EAG1B,IADA,IAAI9pI,EAAI,EACCzb,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CACpC,IAAIgW,EAAI5T,KAAKupN,UAAUvpN,KAAK25L,MAAM/7L,IAElC,GADAyb,GAAKzF,EACK,KAANA,EAAU,KACf,CACD,OAAOyF,CACR,EAED03I,EAAG7mJ,UAAUmlG,WAAa,WACxB,OAAOlpG,KAAK8K,KAAKjR,KAAKu+J,YAAc,EACrC,EAEDxN,EAAG7mJ,UAAUo6I,OAAS,SAAiB1mI,GACrC,OAAsB,IAAlB5d,KAAK2lK,SACA3lK,KAAKsG,MAAMmjN,MAAM7rM,GAAO2wJ,MAAM,GAEhCvuK,KAAK8jB,OACb,EAEDitI,EAAG7mJ,UAAUq6I,SAAW,SAAmB3mI,GACzC,OAAI5d,KAAK0pN,MAAM9rM,EAAQ,GACd5d,KAAK2pN,KAAK/rM,GAAO2wJ,MAAM,GAAG/H,OAE5BxmK,KAAK8jB,OACb,EAEDitI,EAAG7mJ,UAAU0nJ,MAAQ,WACnB,OAAyB,IAAlB5xJ,KAAK2lK,QACb,EAGD5U,EAAG7mJ,UAAUq3J,IAAM,WACjB,OAAOvhK,KAAK8jB,QAAQ0iJ,MACrB,EAEDzV,EAAG7mJ,UAAUs8J,KAAO,WAKlB,OAJKxmK,KAAKmjJ,WACRnjJ,KAAK2lK,UAAY,GAGZ3lK,IACR,EAGD+wJ,EAAG7mJ,UAAU0/M,KAAO,SAAevrD,GACjC,KAAOr+J,KAAKpB,OAASy/J,EAAIz/J,QACvBoB,KAAK25L,MAAM35L,KAAKpB,UAAY,EAG9B,IAAK,IAAIhB,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAC9BoC,KAAK25L,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAAKygK,EAAIs7B,MAAM/7L,GAG5C,OAAOoC,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUy4C,IAAM,SAAc07G,GAE/B,OADAX,EAA0C,KAAlC19J,KAAK2lK,SAAWtH,EAAIsH,WACrB3lK,KAAK4pN,KAAKvrD,EAClB,EAGDtN,EAAG7mJ,UAAU8nJ,GAAK,SAAaqM,GAC7B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQ6+B,IAAI07G,GAC/CA,EAAIv6I,QAAQ6+B,IAAI3iD,KACxB,EAED+wJ,EAAG7mJ,UAAU2/M,IAAM,SAAcxrD,GAC/B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQ8lM,KAAKvrD,GAChDA,EAAIv6I,QAAQ8lM,KAAK5pN,KACzB,EAGD+wJ,EAAG7mJ,UAAU4/M,MAAQ,SAAgBzrD,GAEnC,IAAIzqJ,EAEFA,EADE5T,KAAKpB,OAASy/J,EAAIz/J,OAChBy/J,EAEAr+J,KAGN,IAAK,IAAIpC,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAC5BoC,KAAK25L,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAAKygK,EAAIs7B,MAAM/7L,GAK5C,OAFAoC,KAAKpB,OAASgV,EAAEhV,OAEToB,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAU6/M,KAAO,SAAe1rD,GAEjC,OADAX,EAA0C,KAAlC19J,KAAK2lK,SAAWtH,EAAIsH,WACrB3lK,KAAK8pN,MAAMzrD,EACnB,EAGDtN,EAAG7mJ,UAAU6nJ,IAAM,SAAcsM,GAC/B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQimM,KAAK1rD,GAChDA,EAAIv6I,QAAQimM,KAAK/pN,KACzB,EAED+wJ,EAAG7mJ,UAAU8/M,KAAO,SAAe3rD,GACjC,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQgmM,MAAMzrD,GACjDA,EAAIv6I,QAAQgmM,MAAM9pN,KAC1B,EAGD+wJ,EAAG7mJ,UAAU+/M,MAAQ,SAAgB5rD,GAEnC,IAAIv0J,EACA8J,EACA5T,KAAKpB,OAASy/J,EAAIz/J,QACpBkL,EAAI9J,KACJ4T,EAAIyqJ,IAEJv0J,EAAIu0J,EACJzqJ,EAAI5T,MAGN,IAAK,IAAIpC,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAC5BoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAAKgW,EAAE+lL,MAAM/7L,GAGvC,GAAIoC,OAAS8J,EACX,KAAOlM,EAAIkM,EAAElL,OAAQhB,IACnBoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAM5B,OAFAoC,KAAKpB,OAASkL,EAAElL,OAEToB,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUggN,KAAO,SAAe7rD,GAEjC,OADAX,EAA0C,KAAlC19J,KAAK2lK,SAAWtH,EAAIsH,WACrB3lK,KAAKiqN,MAAM5rD,EACnB,EAGDtN,EAAG7mJ,UAAU+nJ,IAAM,SAAcoM,GAC/B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQomM,KAAK7rD,GAChDA,EAAIv6I,QAAQomM,KAAKlqN,KACzB,EAED+wJ,EAAG7mJ,UAAUigN,KAAO,SAAe9rD,GACjC,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQmmM,MAAM5rD,GACjDA,EAAIv6I,QAAQmmM,MAAMjqN,KAC1B,EAGD+wJ,EAAG7mJ,UAAUu/M,MAAQ,SAAgB7rM,GACnC8/I,EAAwB,kBAAV9/I,GAAsBA,GAAS,GAE7C,IAAIwsM,EAAsC,EAAxBjkN,KAAK8K,KAAK2M,EAAQ,IAChCysM,EAAWzsM,EAAQ,GAGvB5d,KAAKmoN,QAAQiC,GAETC,EAAW,GACbD,IAIF,IAAK,IAAIxsN,EAAI,EAAGA,EAAIwsN,EAAaxsN,IAC/BoC,KAAK25L,MAAM/7L,GAAsB,UAAhBoC,KAAK25L,MAAM/7L,GAS9B,OALIysN,EAAW,IACbrqN,KAAK25L,MAAM/7L,IAAMoC,KAAK25L,MAAM/7L,GAAM,UAAc,GAAKysN,GAIhDrqN,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUy/M,KAAO,SAAe/rM,GACjC,OAAO5d,KAAK8jB,QAAQ2lM,MAAM7rM,EAC3B,EAGDmzI,EAAG7mJ,UAAUogN,KAAO,SAAerwB,EAAKt8B,GACtCD,EAAsB,kBAARu8B,GAAoBA,GAAO,GAEzC,IAAI7rC,EAAO6rC,EAAM,GAAM,EACnBswB,EAAOtwB,EAAM,GAUjB,OARAj6L,KAAKmoN,QAAQ/5D,EAAM,GAGjBpuJ,KAAK25L,MAAMvrC,GADTuP,EACgB39J,KAAK25L,MAAMvrC,GAAQ,GAAKm8D,EAExBvqN,KAAK25L,MAAMvrC,KAAS,GAAKm8D,GAGtCvqN,KAAKi5K,OACb,EAGDloB,EAAG7mJ,UAAU4/J,KAAO,SAAezL,GACjC,IAAIhlJ,EAkBAvP,EAAG8J,EAfP,GAAsB,IAAlB5T,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAI7B,OAHA3lK,KAAK2lK,SAAW,EAChBtsJ,EAAIrZ,KAAKwqN,KAAKnsD,GACdr+J,KAAK2lK,UAAY,EACV3lK,KAAKooN,YAGP,GAAsB,IAAlBpoN,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAIpC,OAHAtH,EAAIsH,SAAW,EACftsJ,EAAIrZ,KAAKwqN,KAAKnsD,GACdA,EAAIsH,SAAW,EACRtsJ,EAAE+uM,YAKPpoN,KAAKpB,OAASy/J,EAAIz/J,QACpBkL,EAAI9J,KACJ4T,EAAIyqJ,IAEJv0J,EAAIu0J,EACJzqJ,EAAI5T,MAIN,IADA,IAAIyoN,EAAQ,EACH7qN,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAC5Byb,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,KAAwB,EAAbgW,EAAE+lL,MAAM/7L,IAAU6qN,EAC1CzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAChBovM,EAAQpvM,IAAM,GAEhB,KAAiB,IAAVovM,GAAe7qN,EAAIkM,EAAElL,OAAQhB,IAClCyb,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,IAAU6qN,EACvBzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAChBovM,EAAQpvM,IAAM,GAIhB,GADArZ,KAAKpB,OAASkL,EAAElL,OACF,IAAV6pN,EACFzoN,KAAK25L,MAAM35L,KAAKpB,QAAU6pN,EAC1BzoN,KAAKpB,cAEA,GAAIkL,IAAM9J,KACf,KAAOpC,EAAIkM,EAAElL,OAAQhB,IACnBoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAI5B,OAAOoC,IACR,EAGD+wJ,EAAG7mJ,UAAU6hB,IAAM,SAAcsyI,GAC/B,IAAIzrD,EACJ,OAAqB,IAAjByrD,EAAIsH,UAAoC,IAAlB3lK,KAAK2lK,UAC7BtH,EAAIsH,SAAW,EACf/yD,EAAM5yG,KAAKwqB,IAAI6zI,GACfA,EAAIsH,UAAY,EACT/yD,GACmB,IAAjByrD,EAAIsH,UAAoC,IAAlB3lK,KAAK2lK,UACpC3lK,KAAK2lK,SAAW,EAChB/yD,EAAMyrD,EAAI7zI,IAAIxqB,MACdA,KAAK2lK,SAAW,EACT/yD,GAGL5yG,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQgmJ,KAAKzL,GAEhDA,EAAIv6I,QAAQgmJ,KAAK9pK,KACzB,EAGD+wJ,EAAG7mJ,UAAUsgN,KAAO,SAAensD,GAEjC,GAAqB,IAAjBA,EAAIsH,SAAgB,CACtBtH,EAAIsH,SAAW,EACf,IAAItsJ,EAAIrZ,KAAK8pK,KAAKzL,GAElB,OADAA,EAAIsH,SAAW,EACRtsJ,EAAE+uM,WAGV,CAAM,GAAsB,IAAlBpoN,KAAK2lK,SAId,OAHA3lK,KAAK2lK,SAAW,EAChB3lK,KAAK8pK,KAAKzL,GACVr+J,KAAK2lK,SAAW,EACT3lK,KAAKooN,YAId,IAWIt+M,EAAG8J,EAXHyuJ,EAAMriK,KAAKqiK,IAAIhE,GAGnB,GAAY,IAARgE,EAIF,OAHAriK,KAAK2lK,SAAW,EAChB3lK,KAAKpB,OAAS,EACdoB,KAAK25L,MAAM,GAAK,EACT35L,KAKLqiK,EAAM,GACRv4J,EAAI9J,KACJ4T,EAAIyqJ,IAEJv0J,EAAIu0J,EACJzqJ,EAAI5T,MAIN,IADA,IAAIyoN,EAAQ,EACH7qN,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAE5B6qN,GADApvM,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,KAAwB,EAAbgW,EAAE+lL,MAAM/7L,IAAU6qN,IAC7B,GACbzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAElB,KAAiB,IAAVovM,GAAe7qN,EAAIkM,EAAElL,OAAQhB,IAElC6qN,GADApvM,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,IAAU6qN,IACV,GACbzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAIlB,GAAc,IAAVovM,GAAe7qN,EAAIkM,EAAElL,QAAUkL,IAAM9J,KACvC,KAAOpC,EAAIkM,EAAElL,OAAQhB,IACnBoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAU5B,OANAoC,KAAKpB,OAASuH,KAAKE,IAAIrG,KAAKpB,OAAQhB,GAEhCkM,IAAM9J,OACRA,KAAK2lK,SAAW,GAGX3lK,KAAKi5K,OACb,EAGDloB,EAAG7mJ,UAAUsgB,IAAM,SAAc6zI,GAC/B,OAAOr+J,KAAK8jB,QAAQ0mM,KAAKnsD,EAC1B,EA8CD,IAAIosD,EAAc,SAAsBthN,EAAMk1J,EAAKwsB,GACjD,IAII5sB,EACAj5D,EACAg5D,EANAl0J,EAAIX,EAAKwwL,MACT/lL,EAAIyqJ,EAAIs7B,MACRnvF,EAAIqgF,EAAI8O,MACR9lL,EAAI,EAIJwxJ,EAAY,EAAPv7J,EAAE,GACP4gN,EAAW,KAALrlD,EACNslD,EAAMtlD,IAAO,GACbnzJ,EAAY,EAAPpI,EAAE,GACP8gN,EAAW,KAAL14M,EACN24M,EAAM34M,IAAO,GACbC,EAAY,EAAPrI,EAAE,GACPghN,EAAW,KAAL34M,EACN44M,EAAM54M,IAAO,GACb64M,EAAY,EAAPlhN,EAAE,GACPmhN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrhN,EAAE,GACPshN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxhN,EAAE,GACPyhN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3hN,EAAE,GACP4hN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9hN,EAAE,GACP+hN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjiN,EAAE,GACPkiN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpiN,EAAE,GACPqiN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbh7L,EAAY,EAAPtd,EAAE,GACPy4M,EAAW,KAALn7L,EACNo7L,EAAMp7L,IAAO,GACb9e,EAAY,EAAPwB,EAAE,GACP24M,EAAW,KAALn6M,EACNo6M,EAAMp6M,IAAO,GACbC,EAAY,EAAPuB,EAAE,GACP64M,EAAW,KAALp6M,EACNq6M,EAAMr6M,IAAO,GACbs6M,EAAY,EAAP/4M,EAAE,GACPg5M,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPl5M,EAAE,GACPm5M,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPr5M,EAAE,GACPs5M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPx5M,EAAE,GACPy5M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP35M,EAAE,GACP45M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP95M,EAAE,GACP+5M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPj6M,EAAE,GACPk6M,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjBhjC,EAAIllB,SAAWx8J,EAAKw8J,SAAWtH,EAAIsH,SACnCklB,EAAIjsL,OAAS,GAMb,IAAImpB,IAAQlU,GAJZoqJ,EAAK93J,KAAKmN,KAAKo3M,EAAK2B,IAIE,KAAa,MAFnCrnH,GADAA,EAAM7+F,KAAKmN,KAAKo3M,EAAK4B,IACRnmN,KAAKmN,KAAKq3M,EAAK0B,GAAQ,KAEU,IAAO,EACrDx4M,IAFAmqJ,EAAK73J,KAAKmN,KAAKq3M,EAAK2B,KAEPtnH,IAAQ,IAAO,IAAMj9E,KAAO,IAAO,EAChDA,IAAM,SAENk2I,EAAK93J,KAAKmN,KAAKs3M,EAAKyB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKs3M,EAAK0B,IACRnmN,KAAKmN,KAAKu3M,EAAKwB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKu3M,EAAKyB,GAKpB,IAAInkM,IAAQtU,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK6B,GAAQ,GAIZ,KAAa,MAFnCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAK8B,GAAQ,GACvBrmN,KAAKmN,KAAKq3M,EAAK4B,GAAQ,KAEU,IAAO,EACrD14M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK6B,GAAQ,IAErBxnH,IAAQ,IAAO,IAAM78E,KAAO,IAAO,EAChDA,IAAM,SAEN81I,EAAK93J,KAAKmN,KAAKw3M,EAAKuB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKw3M,EAAKwB,IACRnmN,KAAKmN,KAAKy3M,EAAKsB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKy3M,EAAKuB,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK2B,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK4B,GAAQ,GACvBrmN,KAAKmN,KAAKu3M,EAAK0B,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK2B,GAAQ,EAKlC,IAAIwB,IAAQn6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK+B,GAAQ,GAIZ,KAAa,MAFnCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKgC,GAAQ,GACvBvmN,KAAKmN,KAAKq3M,EAAK8B,GAAQ,KAEU,IAAO,EACrD54M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK+B,GAAQ,IAErB1nH,IAAQ,IAAO,IAAMgpH,KAAO,IAAO,EAChDA,IAAM,SAEN/vD,EAAK93J,KAAKmN,KAAK23M,EAAKoB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK23M,EAAKqB,IACRnmN,KAAKmN,KAAK43M,EAAKmB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK43M,EAAKoB,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKyB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK0B,GAAQ,GACvBrmN,KAAKmN,KAAKy3M,EAAKwB,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKyB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK6B,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK8B,GAAQ,GACvBvmN,KAAKmN,KAAKu3M,EAAK4B,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK6B,GAAQ,EAKlC,IAAIuB,IAAQp6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKkC,GAAQ,GAIZ,KAAa,MAFnC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKmC,GAAQ,GACvB1mN,KAAKmN,KAAKq3M,EAAKiC,GAAQ,KAEU,IAAO,EACrD/4M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKkC,GAAQ,IAErB7nH,IAAQ,IAAO,IAAMipH,KAAO,IAAO,EAChDA,IAAM,SAENhwD,EAAK93J,KAAKmN,KAAK83M,EAAKiB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK83M,EAAKkB,IACRnmN,KAAKmN,KAAK+3M,EAAKgB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK+3M,EAAKiB,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKsB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKuB,GAAQ,GACvBrmN,KAAKmN,KAAK43M,EAAKqB,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKsB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK2B,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK4B,GAAQ,GACvBvmN,KAAKmN,KAAKy3M,EAAK0B,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK2B,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKgC,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKiC,GAAQ,GACvB1mN,KAAKmN,KAAKu3M,EAAK+B,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKgC,GAAQ,EAKlC,IAAIqB,IAAQr6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKqC,GAAQ,GAIZ,KAAa,MAFnC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKsC,IAAQ,GACvB7mN,KAAKmN,KAAKq3M,EAAKoC,GAAQ,KAEU,IAAO,EACrDl5M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKqC,IAAQ,IAErBhoH,IAAQ,IAAO,IAAMkpH,KAAO,IAAO,EAChDA,IAAM,SAENjwD,EAAK93J,KAAKmN,KAAKi4M,EAAKc,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKi4M,EAAKe,IACRnmN,KAAKmN,KAAKk4M,EAAKa,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKk4M,EAAKc,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKmB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKoB,GAAQ,GACvBrmN,KAAKmN,KAAK+3M,EAAKkB,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKmB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKwB,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKyB,GAAQ,GACvBvmN,KAAKmN,KAAK43M,EAAKuB,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKwB,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK8B,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK+B,GAAQ,GACvB1mN,KAAKmN,KAAKy3M,EAAK6B,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK8B,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKmC,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKoC,IAAQ,GACvB7mN,KAAKmN,KAAKu3M,EAAKkC,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKmC,IAAQ,EAKlC,IAAImB,IAAQt6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKwC,IAAQ,GAIZ,KAAa,MAFnCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKyC,IAAQ,GACvBhnN,KAAKmN,KAAKq3M,EAAKuC,IAAQ,KAEU,IAAO,EACrDr5M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKwC,IAAQ,IAErBnoH,IAAQ,IAAO,IAAMmpH,KAAO,IAAO,EAChDA,IAAM,SAENlwD,EAAK93J,KAAKmN,KAAKo4M,EAAKW,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKo4M,EAAKY,IACRnmN,KAAKmN,KAAKq4M,EAAKU,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKq4M,EAAKW,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKgB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKiB,GAAQ,GACvBrmN,KAAKmN,KAAKk4M,EAAKe,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKgB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKqB,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKsB,GAAQ,GACvBvmN,KAAKmN,KAAK+3M,EAAKoB,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKqB,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK2B,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK4B,GAAQ,GACvB1mN,KAAKmN,KAAK43M,EAAK0B,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK2B,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKiC,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKkC,IAAQ,GACvB7mN,KAAKmN,KAAKy3M,EAAKgC,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKiC,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKsC,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKuC,IAAQ,GACvBhnN,KAAKmN,KAAKu3M,EAAKqC,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKsC,IAAQ,EAKlC,IAAIiB,IAAQv6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK2C,IAAQ,GAIZ,KAAa,MAFnCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAK4C,IAAQ,GACvBnnN,KAAKmN,KAAKq3M,EAAK0C,IAAQ,KAEU,IAAO,EACrDx5M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK2C,IAAQ,IAErBtoH,IAAQ,IAAO,IAAMopH,KAAO,IAAO,EAChDA,IAAM,SAENnwD,EAAK93J,KAAKmN,KAAKu4M,EAAKQ,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKu4M,EAAKS,IACRnmN,KAAKmN,KAAKw4M,EAAKO,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKw4M,EAAKQ,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKa,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKc,GAAQ,GACvBrmN,KAAKmN,KAAKq4M,EAAKY,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKa,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKkB,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKmB,GAAQ,GACvBvmN,KAAKmN,KAAKk4M,EAAKiB,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKkB,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKwB,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKyB,GAAQ,GACvB1mN,KAAKmN,KAAK+3M,EAAKuB,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKwB,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK8B,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK+B,IAAQ,GACvB7mN,KAAKmN,KAAK43M,EAAK6B,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK8B,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKoC,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKqC,IAAQ,GACvBhnN,KAAKmN,KAAKy3M,EAAKmC,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKoC,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKyC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK0C,IAAQ,GACvBnnN,KAAKmN,KAAKu3M,EAAKwC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKyC,IAAQ,EAKlC,IAAIe,IAAQx6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK8C,IAAQ,GAIZ,KAAa,MAFnCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAK+C,IAAQ,GACvBtnN,KAAKmN,KAAKq3M,EAAK6C,IAAQ,KAEU,IAAO,EACrD35M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK8C,IAAQ,IAErBzoH,IAAQ,IAAO,IAAMqpH,KAAO,IAAO,EAChDA,IAAM,SAENpwD,EAAK93J,KAAKmN,KAAK04M,EAAKK,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK04M,EAAKM,IACRnmN,KAAKmN,KAAK24M,EAAKI,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK24M,EAAKK,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKU,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKW,GAAQ,GACvBrmN,KAAKmN,KAAKw4M,EAAKS,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKU,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKe,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKgB,GAAQ,GACvBvmN,KAAKmN,KAAKq4M,EAAKc,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKe,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKqB,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKsB,GAAQ,GACvB1mN,KAAKmN,KAAKk4M,EAAKoB,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKqB,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAK2B,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAK4B,IAAQ,GACvB7mN,KAAKmN,KAAK+3M,EAAK0B,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAK2B,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKiC,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKkC,IAAQ,GACvBhnN,KAAKmN,KAAK43M,EAAKgC,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKiC,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKuC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKwC,IAAQ,GACvBnnN,KAAKmN,KAAKy3M,EAAKsC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKuC,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK4C,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK6C,IAAQ,GACvBtnN,KAAKmN,KAAKu3M,EAAK2C,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK4C,IAAQ,EAKlC,IAAIa,IAAQz6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKiD,IAAQ,GAIZ,KAAa,MAFnC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKkD,IAAQ,GACvBznN,KAAKmN,KAAKq3M,EAAKgD,IAAQ,KAEU,IAAO,EACrD95M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKiD,IAAQ,IAErB5oH,IAAQ,IAAO,IAAMspH,KAAO,IAAO,EAChDA,IAAM,SAENrwD,EAAK93J,KAAKmN,KAAK64M,EAAKE,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKG,IACRnmN,KAAKmN,KAAK84M,EAAKC,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK84M,EAAKE,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKO,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKQ,GAAQ,GACvBrmN,KAAKmN,KAAK24M,EAAKM,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKO,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKY,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKa,GAAQ,GACvBvmN,KAAKmN,KAAKw4M,EAAKW,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKY,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKkB,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKmB,GAAQ,GACvB1mN,KAAKmN,KAAKq4M,EAAKiB,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKkB,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKwB,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKyB,IAAQ,GACvB7mN,KAAKmN,KAAKk4M,EAAKuB,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKwB,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAK8B,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAK+B,IAAQ,GACvBhnN,KAAKmN,KAAK+3M,EAAK6B,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAK8B,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKoC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKqC,IAAQ,GACvBnnN,KAAKmN,KAAK43M,EAAKmC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKoC,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK0C,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK2C,IAAQ,GACvBtnN,KAAKmN,KAAKy3M,EAAKyC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK0C,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK+C,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKgD,IAAQ,GACvBznN,KAAKmN,KAAKu3M,EAAK8C,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK+C,IAAQ,EAKlC,IAAIW,IAAQ16M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKoD,IAAQ,GAIZ,KAAa,MAFnC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKqD,IAAQ,GACvB5nN,KAAKmN,KAAKq3M,EAAKmD,IAAQ,KAEU,IAAO,EACrDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKoD,IAAQ,IAErB/oH,IAAQ,IAAO,IAAMupH,KAAO,IAAO,EAChDA,IAAM,SAENtwD,EAAK93J,KAAKmN,KAAK64M,EAAKI,GAEpBvnH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKK,IACRrmN,KAAKmN,KAAK84M,EAAKG,GAAQ,EACpCvuD,EAAK73J,KAAKmN,KAAK84M,EAAKI,GACpBvuD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKS,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKU,GAAQ,GACvBvmN,KAAKmN,KAAK24M,EAAKQ,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKS,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKe,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKgB,GAAQ,GACvB1mN,KAAKmN,KAAKw4M,EAAKc,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKe,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKqB,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKsB,IAAQ,GACvB7mN,KAAKmN,KAAKq4M,EAAKoB,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKqB,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAK2B,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAK4B,IAAQ,GACvBhnN,KAAKmN,KAAKk4M,EAAK0B,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAK2B,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKiC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKkC,IAAQ,GACvBnnN,KAAKmN,KAAK+3M,EAAKgC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKiC,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKuC,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKwC,IAAQ,GACvBtnN,KAAKmN,KAAK43M,EAAKsC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKuC,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK6C,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK8C,IAAQ,GACvBznN,KAAKmN,KAAKy3M,EAAK4C,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK6C,IAAQ,EAKlC,IAAIY,IAAS36M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKkD,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKmD,IAAQ,GACvB5nN,KAAKmN,KAAKu3M,EAAKiD,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKkD,IAAQ,IAErB/oH,IAAQ,IAAO,IAAMwpH,KAAQ,IAAO,EACjDA,IAAO,SAEPvwD,EAAK93J,KAAKmN,KAAK64M,EAAKM,GAEpBznH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKO,IACRvmN,KAAKmN,KAAK84M,EAAKK,GAAQ,EACpCzuD,EAAK73J,KAAKmN,KAAK84M,EAAKM,GACpBzuD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKY,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKa,GAAQ,GACvB1mN,KAAKmN,KAAK24M,EAAKW,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKY,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKkB,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKmB,IAAQ,GACvB7mN,KAAKmN,KAAKw4M,EAAKiB,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKkB,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKwB,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKyB,IAAQ,GACvBhnN,KAAKmN,KAAKq4M,EAAKuB,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKwB,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAK8B,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAK+B,IAAQ,GACvBnnN,KAAKmN,KAAKk4M,EAAK6B,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAK8B,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKoC,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKqC,IAAQ,GACvBtnN,KAAKmN,KAAK+3M,EAAKmC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKoC,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK0C,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK2C,IAAQ,GACvBznN,KAAKmN,KAAK43M,EAAKyC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK0C,IAAQ,EAKlC,IAAIa,IAAS56M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKgD,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKiD,IAAQ,GACvB5nN,KAAKmN,KAAKy3M,EAAK+C,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKgD,IAAQ,IAErB/oH,IAAQ,IAAO,IAAMypH,KAAQ,IAAO,EACjDA,IAAO,SAEPxwD,EAAK93J,KAAKmN,KAAK64M,EAAKS,GAEpB5nH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKU,IACR1mN,KAAKmN,KAAK84M,EAAKQ,GAAQ,EACpC5uD,EAAK73J,KAAKmN,KAAK84M,EAAKS,GACpB5uD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKe,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKgB,IAAQ,GACvB7mN,KAAKmN,KAAK24M,EAAKc,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKe,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKqB,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKsB,IAAQ,GACvBhnN,KAAKmN,KAAKw4M,EAAKoB,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKqB,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAK2B,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAK4B,IAAQ,GACvBnnN,KAAKmN,KAAKq4M,EAAK0B,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAK2B,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKiC,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKkC,IAAQ,GACvBtnN,KAAKmN,KAAKk4M,EAAKgC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKiC,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKuC,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKwC,IAAQ,GACvBznN,KAAKmN,KAAK+3M,EAAKsC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKuC,IAAQ,EAKlC,IAAIc,IAAS76M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK6C,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK8C,IAAQ,GACvB5nN,KAAKmN,KAAK43M,EAAK4C,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK6C,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM0pH,KAAQ,IAAO,EACjDA,IAAO,SAEPzwD,EAAK93J,KAAKmN,KAAK64M,EAAKY,GAEpB/nH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKa,KACR7mN,KAAKmN,KAAK84M,EAAKW,GAAQ,EACpC/uD,EAAK73J,KAAKmN,KAAK84M,EAAKY,IACpB/uD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKkB,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKmB,IAAQ,GACvBhnN,KAAKmN,KAAK24M,EAAKiB,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKkB,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKwB,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKyB,IAAQ,GACvBnnN,KAAKmN,KAAKw4M,EAAKuB,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKwB,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAK8B,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAK+B,IAAQ,GACvBtnN,KAAKmN,KAAKq4M,EAAK6B,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAK8B,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKoC,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKqC,IAAQ,GACvBznN,KAAKmN,KAAKk4M,EAAKmC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKoC,IAAQ,EAKlC,IAAIe,IAAS96M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAK0C,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAK2C,IAAQ,GACvB5nN,KAAKmN,KAAK+3M,EAAKyC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAK0C,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM2pH,KAAQ,IAAO,EACjDA,IAAO,SAEP1wD,EAAK93J,KAAKmN,KAAK64M,EAAKe,IAEpBloH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKgB,KACRhnN,KAAKmN,KAAK84M,EAAKc,IAAQ,EACpClvD,EAAK73J,KAAKmN,KAAK84M,EAAKe,IACpBlvD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKqB,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKsB,IAAQ,GACvBnnN,KAAKmN,KAAK24M,EAAKoB,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKqB,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAK2B,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAK4B,IAAQ,GACvBtnN,KAAKmN,KAAKw4M,EAAK0B,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAK2B,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKiC,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKkC,IAAQ,GACvBznN,KAAKmN,KAAKq4M,EAAKgC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKiC,IAAQ,EAKlC,IAAIgB,IAAS/6M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKuC,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKwC,IAAQ,GACvB5nN,KAAKmN,KAAKk4M,EAAKsC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKuC,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM4pH,KAAQ,IAAO,EACjDA,IAAO,SAEP3wD,EAAK93J,KAAKmN,KAAK64M,EAAKkB,IAEpBroH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKmB,KACRnnN,KAAKmN,KAAK84M,EAAKiB,IAAQ,EACpCrvD,EAAK73J,KAAKmN,KAAK84M,EAAKkB,IACpBrvD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKwB,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKyB,IAAQ,GACvBtnN,KAAKmN,KAAK24M,EAAKuB,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKwB,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAK8B,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAK+B,IAAQ,GACvBznN,KAAKmN,KAAKw4M,EAAK6B,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAK8B,IAAQ,EAKlC,IAAIiB,IAASh7M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKoC,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKqC,IAAQ,GACvB5nN,KAAKmN,KAAKq4M,EAAKmC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKoC,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM6pH,KAAQ,IAAO,EACjDA,IAAO,SAEP5wD,EAAK93J,KAAKmN,KAAK64M,EAAKqB,IAEpBxoH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKsB,KACRtnN,KAAKmN,KAAK84M,EAAKoB,IAAQ,EACpCxvD,EAAK73J,KAAKmN,KAAK84M,EAAKqB,IACpBxvD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAK2B,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAK4B,IAAQ,GACvBznN,KAAKmN,KAAK24M,EAAK0B,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAK2B,IAAQ,EAKlC,IAAIkB,IAASj7M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKiC,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKkC,IAAQ,GACvB5nN,KAAKmN,KAAKw4M,EAAKgC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKiC,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM8pH,KAAQ,IAAO,EACjDA,IAAO,SAEP7wD,EAAK93J,KAAKmN,KAAK64M,EAAKwB,IAEpB3oH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKyB,KACRznN,KAAKmN,KAAK84M,EAAKuB,IAAQ,EACpC3vD,EAAK73J,KAAKmN,KAAK84M,EAAKwB,IAKpB,IAAImB,IAASl7M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAK8B,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAK+B,IAAQ,GACvB5nN,KAAKmN,KAAK24M,EAAK6B,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAK8B,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM+pH,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAASn7M,GAJboqJ,EAAK93J,KAAKmN,KAAK64M,EAAK2B,KAIG,KAAa,MAFpC9oH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAK4B,KACR5nN,KAAKmN,KAAK84M,EAAK0B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAj6M,IAFAmqJ,EAAK73J,KAAKmN,KAAK84M,EAAK2B,MAEP/oH,IAAQ,IAAO,IAAMgqH,KAAQ,IAAO,EACjDA,IAAO,SACPxkH,EAAE,GAAKziF,GACPyiF,EAAE,GAAKriF,GACPqiF,EAAE,GAAKwjH,GACPxjH,EAAE,GAAKyjH,GACPzjH,EAAE,GAAK0jH,GACP1jH,EAAE,GAAK2jH,GACP3jH,EAAE,GAAK4jH,GACP5jH,EAAE,GAAK6jH,GACP7jH,EAAE,GAAK8jH,GACP9jH,EAAE,GAAK+jH,GACP/jH,EAAE,IAAMgkH,GACRhkH,EAAE,IAAMikH,GACRjkH,EAAE,IAAMkkH,GACRlkH,EAAE,IAAMmkH,GACRnkH,EAAE,IAAMokH,GACRpkH,EAAE,IAAMqkH,GACRrkH,EAAE,IAAMskH,GACRtkH,EAAE,IAAMukH,GACRvkH,EAAE,IAAMwkH,GACE,IAANn7M,IACF22F,EAAE,IAAM32F,EACRg3K,EAAIjsL,UAECisL,CACR,EAgDD,SAASokC,EAAY9lN,EAAMk1J,EAAKwsB,GAE9B,OADW,IAAIqkC,GACHC,KAAKhmN,EAAMk1J,EAAKwsB,EAC7B,CAqBD,SAASqkC,EAAMlsN,EAAGC,GAChBjD,KAAKgD,EAAIA,EACThD,KAAKiD,EAAIA,CACV,CAxEIkD,KAAKmN,OACRm3M,EAAcjC,GAiDhBz3D,EAAG7mJ,UAAUklN,MAAQ,SAAgB/wD,EAAKwsB,GACxC,IAAIj4E,EACAtqF,EAAMtoB,KAAKpB,OAASy/J,EAAIz/J,OAW5B,OATEg0G,EADkB,KAAhB5yG,KAAKpB,QAAgC,KAAfy/J,EAAIz/J,OACtB6rN,EAAYzqN,KAAMq+J,EAAKwsB,GACpBviK,EAAM,GACTkgM,EAAWxoN,KAAMq+J,EAAKwsB,GACnBviK,EAAM,KArDnB,SAAmBnf,EAAMk1J,EAAKwsB,GAC5BA,EAAIllB,SAAWtH,EAAIsH,SAAWx8J,EAAKw8J,SACnCklB,EAAIjsL,OAASuK,EAAKvK,OAASy/J,EAAIz/J,OAI/B,IAFA,IAAI6pN,EAAQ,EACR4G,EAAU,EACLt6I,EAAI,EAAGA,EAAI81G,EAAIjsL,OAAS,EAAGm2E,IAAK,CAGvC,IAAI2zI,EAAS2G,EACbA,EAAU,EAGV,IAFA,IAAI1G,EAAgB,SAARF,EACRG,EAAOziN,KAAKC,IAAI2uE,EAAGspF,EAAIz/J,OAAS,GAC3B8vB,EAAIvoB,KAAKE,IAAI,EAAG0uE,EAAI5rE,EAAKvK,OAAS,GAAI8vB,GAAKk6L,EAAMl6L,IAAK,CAC7D,IAAI9wB,EAAIm3E,EAAIrmD,EAGRrV,GAFoB,EAAhBlQ,EAAKwwL,MAAM/7L,KACI,EAAfygK,EAAIs7B,MAAMjrK,IAGduvI,EAAS,SAAJ5kJ,EAGTsvM,EAAa,UADb1qD,EAAMA,EAAK0qD,EAAS,GAIpB0G,IAFA3G,GAHAA,EAAUA,GAAWrvM,EAAI,SAAa,GAAM,IAGxB4kJ,IAAO,IAAO,KAEZ,GACtByqD,GAAU,QACX,CACD79B,EAAI8O,MAAM5kH,GAAK4zI,EACfF,EAAQC,EACRA,EAAS2G,CACV,CAOD,OANc,IAAV5G,EACF59B,EAAI8O,MAAM5kH,GAAK0zI,EAEf59B,EAAIjsL,SAGCisL,EAAI5R,OACZ,CAeSq2C,CAAStvN,KAAMq+J,EAAKwsB,GAEpBokC,EAAWjvN,KAAMq+J,EAAKwsB,GAGvBj4E,CACR,EAUDs8G,EAAKhlN,UAAUqlN,QAAU,SAAkBC,GAGzC,IAFA,IAAI3+M,EAAI,IAAIhT,MAAM2xN,GACd5/M,EAAImhJ,EAAG7mJ,UAAUo/M,WAAWkG,GAAK,EAC5B5xN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IACrBiT,EAAEjT,GAAKoC,KAAKyvN,OAAO7xN,EAAGgS,EAAG4/M,GAG3B,OAAO3+M,CACR,EAGDq+M,EAAKhlN,UAAUulN,OAAS,SAAiBzsN,EAAG4M,EAAG4/M,GAC7C,GAAU,IAANxsN,GAAWA,IAAMwsN,EAAI,EAAG,OAAOxsN,EAGnC,IADA,IAAI0sN,EAAK,EACA9xN,EAAI,EAAGA,EAAIgS,EAAGhS,IACrB8xN,IAAW,EAAJ1sN,IAAW4M,EAAIhS,EAAI,EAC1BoF,IAAM,EAGR,OAAO0sN,CACR,EAIDR,EAAKhlN,UAAUylN,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI5xN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IACrBmyN,EAAKnyN,GAAKiyN,EAAID,EAAIhyN,IAClBoyN,EAAKpyN,GAAKkyN,EAAIF,EAAIhyN,GAErB,EAEDsxN,EAAKhlN,UAAUrC,UAAY,SAAoBgoN,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE5vN,KAAK2vN,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIn8M,EAAI,EAAGA,EAAIm8M,EAAGn8M,IAAM,EAM3B,IALA,IAAIzD,EAAIyD,GAAK,EAET48M,EAAQ9pN,KAAK4N,IAAI,EAAI5N,KAAK6J,GAAKJ,GAC/BsgN,EAAQ/pN,KAAK6N,IAAI,EAAI7N,KAAK6J,GAAKJ,GAE1B4L,EAAI,EAAGA,EAAIg0M,EAAGh0M,GAAK5L,EAI1B,IAHA,IAAIugN,EAASF,EACTG,EAASF,EAEJxhM,EAAI,EAAGA,EAAIrb,EAAGqb,IAAK,CAC1B,IAAI03L,EAAK2J,EAAKv0M,EAAIkT,GACd2hM,EAAKL,EAAKx0M,EAAIkT,GAEd2mI,EAAK06D,EAAKv0M,EAAIkT,EAAIrb,GAClBi9M,EAAKN,EAAKx0M,EAAIkT,EAAIrb,GAElBu2J,EAAKumD,EAAS96D,EAAK+6D,EAASE,EAEhCA,EAAKH,EAASG,EAAKF,EAAS/6D,EAC5BA,EAAKuU,EAELmmD,EAAKv0M,EAAIkT,GAAK03L,EAAK/wD,EACnB26D,EAAKx0M,EAAIkT,GAAK2hM,EAAKC,EAEnBP,EAAKv0M,EAAIkT,EAAIrb,GAAK+yM,EAAK/wD,EACvB26D,EAAKx0M,EAAIkT,EAAIrb,GAAKg9M,EAAKC,EAGnB5hM,IAAM9e,IACRg6J,EAAKqmD,EAAQE,EAASD,EAAQE,EAE9BA,EAASH,EAAQG,EAASF,EAAQC,EAClCA,EAASvmD,EAEZ,CAGN,EAEDslD,EAAKhlN,UAAUqmN,YAAc,SAAsB7/M,EAAGC,GACpD,IAAI6+M,EAAqB,EAAjBrpN,KAAKE,IAAIsK,EAAGD,GAChBs1J,EAAU,EAAJwpD,EACN5xN,EAAI,EACR,IAAK4xN,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B5xN,IAGF,OAAO,GAAKA,EAAI,EAAIooK,CACrB,EAEDkpD,EAAKhlN,UAAU4b,UAAY,SAAoB+pM,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI5xN,EAAI,EAAGA,EAAI4xN,EAAI,EAAG5xN,IAAK,CAC9B,IAAIiT,EAAIg/M,EAAIjyN,GAEZiyN,EAAIjyN,GAAKiyN,EAAIL,EAAI5xN,EAAI,GACrBiyN,EAAIL,EAAI5xN,EAAI,GAAKiT,EAEjBA,EAAIi/M,EAAIlyN,GAERkyN,EAAIlyN,IAAMkyN,EAAIN,EAAI5xN,EAAI,GACtBkyN,EAAIN,EAAI5xN,EAAI,IAAMiT,CACnB,CACF,EAEDq+M,EAAKhlN,UAAUsmN,aAAe,SAAuBhyD,EAAIgxD,GAEvD,IADA,IAAI/G,EAAQ,EACH7qN,EAAI,EAAGA,EAAI4xN,EAAI,EAAG5xN,IAAK,CAC9B,IAAIikB,EAAoC,KAAhC1b,KAAK0L,MAAM2sJ,EAAG,EAAI5gK,EAAI,GAAK4xN,GACjCrpN,KAAK0L,MAAM2sJ,EAAG,EAAI5gK,GAAK4xN,GACvB/G,EAEFjqD,EAAG5gK,GAAS,SAAJikB,EAGN4mM,EADE5mM,EAAI,SACE,EAEAA,EAAI,SAAY,CAE3B,CAED,OAAO28I,CACR,EAED0wD,EAAKhlN,UAAUumN,WAAa,SAAqBjyD,EAAIl2I,EAAKunM,EAAKL,GAE7D,IADA,IAAI/G,EAAQ,EACH7qN,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACvB6qN,GAAyB,EAARjqD,EAAG5gK,GAEpBiyN,EAAI,EAAIjyN,GAAa,KAAR6qN,EAAgBA,KAAkB,GAC/CoH,EAAI,EAAIjyN,EAAI,GAAa,KAAR6qN,EAAgBA,KAAkB,GAIrD,IAAK7qN,EAAI,EAAI0qB,EAAK1qB,EAAI4xN,IAAK5xN,EACzBiyN,EAAIjyN,GAAK,EAGX8/J,EAAiB,IAAV+qD,GACP/qD,EAA6B,MAAb,KAAR+qD,GACT,EAEDyG,EAAKhlN,UAAUwmN,KAAO,SAAelB,GAEnC,IADA,IAAImB,EAAK,IAAI9yN,MAAM2xN,GACV5xN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IACrB+yN,EAAG/yN,GAAK,EAGV,OAAO+yN,CACR,EAEDzB,EAAKhlN,UAAUilN,KAAO,SAAensN,EAAGC,EAAG4nL,GACzC,IAAI2kC,EAAI,EAAIxvN,KAAKuwN,YAAYvtN,EAAEpE,OAAQqE,EAAErE,QAErCgxN,EAAM5vN,KAAKuvN,QAAQC,GAEnB/jE,EAAIzrJ,KAAK0wN,KAAKlB,GAEdK,EAAM,IAAIhyN,MAAM2xN,GAChBoB,EAAO,IAAI/yN,MAAM2xN,GACjBqB,EAAO,IAAIhzN,MAAM2xN,GAEjBsB,EAAO,IAAIjzN,MAAM2xN,GACjBuB,EAAQ,IAAIlzN,MAAM2xN,GAClBwB,EAAQ,IAAInzN,MAAM2xN,GAElByB,EAAOpmC,EAAI8O,MACfs3B,EAAKryN,OAAS4wN,EAEdxvN,KAAKywN,WAAWztN,EAAE22L,MAAO32L,EAAEpE,OAAQixN,EAAKL,GACxCxvN,KAAKywN,WAAWxtN,EAAE02L,MAAO12L,EAAErE,OAAQkyN,EAAMtB,GAEzCxvN,KAAK6H,UAAUgoN,EAAKpkE,EAAGmlE,EAAMC,EAAMrB,EAAGI,GACtC5vN,KAAK6H,UAAUipN,EAAMrlE,EAAGslE,EAAOC,EAAOxB,EAAGI,GAEzC,IAAK,IAAIhyN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IAAK,CAC1B,IAAIgsK,EAAKgnD,EAAKhzN,GAAKmzN,EAAMnzN,GAAKizN,EAAKjzN,GAAKozN,EAAMpzN,GAC9CizN,EAAKjzN,GAAKgzN,EAAKhzN,GAAKozN,EAAMpzN,GAAKizN,EAAKjzN,GAAKmzN,EAAMnzN,GAC/CgzN,EAAKhzN,GAAKgsK,CACX,CASD,OAPA5pK,KAAK8lB,UAAU8qM,EAAMC,EAAMrB,GAC3BxvN,KAAK6H,UAAU+oN,EAAMC,EAAMI,EAAMxlE,EAAG+jE,EAAGI,GACvC5vN,KAAK8lB,UAAUmrM,EAAMxlE,EAAG+jE,GACxBxvN,KAAKwwN,aAAaS,EAAMzB,GAExB3kC,EAAIllB,SAAW3iK,EAAE2iK,SAAW1iK,EAAE0iK,SAC9BklB,EAAIjsL,OAASoE,EAAEpE,OAASqE,EAAErE,OACnBisL,EAAI5R,OACZ,EAGDloB,EAAG7mJ,UAAUi6I,IAAM,SAAcka,GAC/B,IAAIwsB,EAAM,IAAI95B,EAAG,MAEjB,OADA85B,EAAI8O,MAAQ,IAAI97L,MAAMmC,KAAKpB,OAASy/J,EAAIz/J,QACjCoB,KAAKovN,MAAM/wD,EAAKwsB,EACxB,EAGD95B,EAAG7mJ,UAAUgnN,KAAO,SAAe7yD,GACjC,IAAIwsB,EAAM,IAAI95B,EAAG,MAEjB,OADA85B,EAAI8O,MAAQ,IAAI97L,MAAMmC,KAAKpB,OAASy/J,EAAIz/J,QACjCqwN,EAAWjvN,KAAMq+J,EAAKwsB,EAC9B,EAGD95B,EAAG7mJ,UAAUoJ,KAAO,SAAe+qJ,GACjC,OAAOr+J,KAAK8jB,QAAQsrM,MAAM/wD,EAAKr+J,KAChC,EAED+wJ,EAAG7mJ,UAAU+9M,MAAQ,SAAgB5pD,GACnCX,EAAsB,kBAARW,GACdX,EAAOW,EAAM,UAIb,IADA,IAAIoqD,EAAQ,EACH7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CACpC,IAAIikB,GAAqB,EAAhB7hB,KAAK25L,MAAM/7L,IAAUygK,EAC1BJ,GAAU,SAAJp8I,IAA0B,SAAR4mM,GAC5BA,IAAU,GACVA,GAAU5mM,EAAI,SAAa,EAE3B4mM,GAASxqD,IAAO,GAChBj+J,KAAK25L,MAAM/7L,GAAU,SAALqgK,CACjB,CAOD,OALc,IAAVwqD,IACFzoN,KAAK25L,MAAM/7L,GAAK6qN,EAChBzoN,KAAKpB,UAGAoB,IACR,EAED+wJ,EAAG7mJ,UAAUinN,KAAO,SAAe9yD,GACjC,OAAOr+J,KAAK8jB,QAAQmkM,MAAM5pD,EAC3B,EAGDtN,EAAG7mJ,UAAUw7J,IAAM,WACjB,OAAO1lK,KAAKmkJ,IAAInkJ,KACjB,EAGD+wJ,EAAG7mJ,UAAUknN,KAAO,WAClB,OAAOpxN,KAAKsT,KAAKtT,KAAK8jB,QACvB,EAGDitI,EAAG7mJ,UAAU8G,IAAM,SAAcqtJ,GAC/B,IAAIx8I,EAxxCN,SAAqBw8I,GAGnB,IAFA,IAAIx8I,EAAI,IAAIhkB,MAAMwgK,EAAIE,aAEb07B,EAAM,EAAGA,EAAMp4K,EAAEjjB,OAAQq7L,IAAO,CACvC,IAAI7rC,EAAO6rC,EAAM,GAAM,EACnBswB,EAAOtwB,EAAM,GAEjBp4K,EAAEo4K,IAAQ57B,EAAIs7B,MAAMvrC,GAAQ,GAAKm8D,KAAWA,CAC7C,CAED,OAAO1oM,CACR,CA6wCSwvM,CAAWhzD,GACnB,GAAiB,IAAbx8I,EAAEjjB,OAAc,OAAO,IAAImyJ,EAAG,GAIlC,IADA,IAAIn+C,EAAM5yG,KACDpC,EAAI,EAAGA,EAAIikB,EAAEjjB,QACP,IAATijB,EAAEjkB,GADsBA,IAAKg1G,EAAMA,EAAI8yD,OAI7C,KAAM9nK,EAAIikB,EAAEjjB,OACV,IAAK,IAAI+D,EAAIiwG,EAAI8yD,MAAO9nK,EAAIikB,EAAEjjB,OAAQhB,IAAK+E,EAAIA,EAAE+iK,MAClC,IAAT7jJ,EAAEjkB,KAENg1G,EAAMA,EAAIuxC,IAAIxhJ,IAIlB,OAAOiwG,CACR,EAGDm+C,EAAG7mJ,UAAUonN,OAAS,SAAiBp4H,GACrCwkE,EAAuB,kBAATxkE,GAAqBA,GAAQ,GAC3C,IAGIt7F,EAHAyb,EAAI6/E,EAAO,GACX7lF,GAAK6lF,EAAO7/E,GAAK,GACjBk4M,EAAa,WAAe,GAAKl4M,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAIovM,EAAQ,EAEZ,IAAK7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CAChC,IAAI4zN,EAAWxxN,KAAK25L,MAAM/7L,GAAK2zN,EAC3B19M,GAAsB,EAAhB7T,KAAK25L,MAAM/7L,IAAU4zN,GAAan4M,EAC5CrZ,KAAK25L,MAAM/7L,GAAKiW,EAAI40M,EACpBA,EAAQ+I,IAAc,GAAKn4M,CAC5B,CAEGovM,IACFzoN,KAAK25L,MAAM/7L,GAAK6qN,EAChBzoN,KAAKpB,SAER,CAED,GAAU,IAANyU,EAAS,CACX,IAAKzV,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IAChCoC,KAAK25L,MAAM/7L,EAAIyV,GAAKrT,KAAK25L,MAAM/7L,GAGjC,IAAKA,EAAI,EAAGA,EAAIyV,EAAGzV,IACjBoC,KAAK25L,MAAM/7L,GAAK,EAGlBoC,KAAKpB,QAAUyU,CAChB,CAED,OAAOrT,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUunN,MAAQ,SAAgBv4H,GAGnC,OADAwkE,EAAyB,IAAlB19J,KAAK2lK,UACL3lK,KAAKsxN,OAAOp4H,EACpB,EAKD63D,EAAG7mJ,UAAU20J,OAAS,SAAiB3lE,EAAMw4H,EAAMC,GAEjD,IAAIj5M,EADJglJ,EAAuB,kBAATxkE,GAAqBA,GAAQ,GAGzCxgF,EADEg5M,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAIr4M,EAAI6/E,EAAO,GACX7lF,EAAIlN,KAAKC,KAAK8yF,EAAO7/E,GAAK,GAAIrZ,KAAKpB,QACnC44B,EAAO,SAAc,WAAcne,GAAMA,EACzCu4M,EAAcD,EAMlB,GAJAj5M,GAAKrF,EACLqF,EAAIvS,KAAKE,IAAI,EAAGqS,GAGZk5M,EAAa,CACf,IAAK,IAAIh0N,EAAI,EAAGA,EAAIyV,EAAGzV,IACrBg0N,EAAYj4B,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAEpCg0N,EAAYhzN,OAASyU,CACtB,CAED,GAAU,IAANA,QAEG,GAAIrT,KAAKpB,OAASyU,EAEvB,IADArT,KAAKpB,QAAUyU,EACVzV,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC3BoC,KAAK25L,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,EAAIyV,QAGjCrT,KAAK25L,MAAM,GAAK,EAChB35L,KAAKpB,OAAS,EAGhB,IAAI6pN,EAAQ,EACZ,IAAK7qN,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,IAAgB,IAAV6qN,GAAe7qN,GAAK8a,GAAI9a,IAAK,CAChE,IAAIkgK,EAAuB,EAAhB99J,KAAK25L,MAAM/7L,GACtBoC,KAAK25L,MAAM/7L,GAAM6qN,GAAU,GAAKpvM,EAAOykJ,IAASzkJ,EAChDovM,EAAQ3qD,EAAOtmI,CAChB,CAYD,OATIo6L,GAAyB,IAAVnJ,IACjBmJ,EAAYj4B,MAAMi4B,EAAYhzN,UAAY6pN,GAGxB,IAAhBzoN,KAAKpB,SACPoB,KAAK25L,MAAM,GAAK,EAChB35L,KAAKpB,OAAS,GAGToB,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAU2nN,MAAQ,SAAgB34H,EAAMw4H,EAAMC,GAG/C,OADAj0D,EAAyB,IAAlB19J,KAAK2lK,UACL3lK,KAAK6+J,OAAO3lE,EAAMw4H,EAAMC,EAChC,EAGD5gE,EAAG7mJ,UAAUioJ,KAAO,SAAej5D,GACjC,OAAOl5F,KAAK8jB,QAAQ2tM,MAAMv4H,EAC3B,EAED63D,EAAG7mJ,UAAU4nN,MAAQ,SAAgB54H,GACnC,OAAOl5F,KAAK8jB,QAAQwtM,OAAOp4H,EAC5B,EAGD63D,EAAG7mJ,UAAUkoJ,KAAO,SAAel5D,GACjC,OAAOl5F,KAAK8jB,QAAQ+tM,MAAM34H,EAC3B,EAED63D,EAAG7mJ,UAAUs7J,MAAQ,SAAgBtsE,GACnC,OAAOl5F,KAAK8jB,QAAQ+6I,OAAO3lE,EAC5B,EAGD63D,EAAG7mJ,UAAUw/M,MAAQ,SAAgBzvB,GACnCv8B,EAAsB,kBAARu8B,GAAoBA,GAAO,GACzC,IAAI5gL,EAAI4gL,EAAM,GACV5mL,GAAK4mL,EAAM5gL,GAAK,GAChB1W,EAAI,GAAK0W,EAGb,QAAIrZ,KAAKpB,QAAUyU,OAGXrT,KAAK25L,MAAMtmL,GAEL1Q,EACf,EAGDouJ,EAAG7mJ,UAAU6nN,OAAS,SAAiB74H,GACrCwkE,EAAuB,kBAATxkE,GAAqBA,GAAQ,GAC3C,IAAI7/E,EAAI6/E,EAAO,GACX7lF,GAAK6lF,EAAO7/E,GAAK,GAIrB,GAFAqkJ,EAAyB,IAAlB19J,KAAK2lK,SAAgB,2CAExB3lK,KAAKpB,QAAUyU,EACjB,OAAOrT,KAQT,GALU,IAANqZ,GACFhG,IAEFrT,KAAKpB,OAASuH,KAAKC,IAAIiN,EAAGrT,KAAKpB,QAErB,IAANya,EAAS,CACX,IAAIme,EAAO,SAAc,WAAcne,GAAMA,EAC7CrZ,KAAK25L,MAAM35L,KAAKpB,OAAS,IAAM44B,CAChC,CAED,OAAOx3B,KAAKi5K,OACb,EAGDloB,EAAG7mJ,UAAUgoJ,MAAQ,SAAgBh5D,GACnC,OAAOl5F,KAAK8jB,QAAQiuM,OAAO74H,EAC5B,EAGD63D,EAAG7mJ,UAAUqkK,MAAQ,SAAgBlQ,GAGnC,OAFAX,EAAsB,kBAARW,GACdX,EAAOW,EAAM,UACTA,EAAM,EAAUr+J,KAAK4+J,OAAOP,GAGV,IAAlBr+J,KAAK2lK,SACa,IAAhB3lK,KAAKpB,SAAiC,EAAhBoB,KAAK25L,MAAM,IAAUt7B,GAC7Cr+J,KAAK25L,MAAM,GAAKt7B,GAAuB,EAAhBr+J,KAAK25L,MAAM,IAClC35L,KAAK2lK,SAAW,EACT3lK,OAGTA,KAAK2lK,SAAW,EAChB3lK,KAAK4+J,MAAMP,GACXr+J,KAAK2lK,SAAW,EACT3lK,MAIFA,KAAKkoN,OAAO7pD,EACpB,EAEDtN,EAAG7mJ,UAAUg+M,OAAS,SAAiB7pD,GACrCr+J,KAAK25L,MAAM,IAAMt7B,EAGjB,IAAK,IAAIzgK,EAAI,EAAGA,EAAIoC,KAAKpB,QAAUoB,KAAK25L,MAAM/7L,IAAM,SAAWA,IAC7DoC,KAAK25L,MAAM/7L,IAAM,SACbA,IAAMoC,KAAKpB,OAAS,EACtBoB,KAAK25L,MAAM/7L,EAAI,GAAK,EAEpBoC,KAAK25L,MAAM/7L,EAAI,KAKnB,OAFAoC,KAAKpB,OAASuH,KAAKE,IAAIrG,KAAKpB,OAAQhB,EAAI,GAEjCoC,IACR,EAGD+wJ,EAAG7mJ,UAAU00J,MAAQ,SAAgBP,GAGnC,GAFAX,EAAsB,kBAARW,GACdX,EAAOW,EAAM,UACTA,EAAM,EAAG,OAAOr+J,KAAKuuK,OAAOlQ,GAEhC,GAAsB,IAAlBr+J,KAAK2lK,SAIP,OAHA3lK,KAAK2lK,SAAW,EAChB3lK,KAAKuuK,MAAMlQ,GACXr+J,KAAK2lK,SAAW,EACT3lK,KAKT,GAFAA,KAAK25L,MAAM,IAAMt7B,EAEG,IAAhBr+J,KAAKpB,QAAgBoB,KAAK25L,MAAM,GAAK,EACvC35L,KAAK25L,MAAM,IAAM35L,KAAK25L,MAAM,GAC5B35L,KAAK2lK,SAAW,OAGhB,IAAK,IAAI/nK,EAAI,EAAGA,EAAIoC,KAAKpB,QAAUoB,KAAK25L,MAAM/7L,GAAK,EAAGA,IACpDoC,KAAK25L,MAAM/7L,IAAM,SACjBoC,KAAK25L,MAAM/7L,EAAI,IAAM,EAIzB,OAAOoC,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAU8nN,KAAO,SAAe3zD,GACjC,OAAOr+J,KAAK8jB,QAAQyqJ,MAAMlQ,EAC3B,EAEDtN,EAAG7mJ,UAAU+nN,KAAO,SAAe5zD,GACjC,OAAOr+J,KAAK8jB,QAAQ86I,MAAMP,EAC3B,EAEDtN,EAAG7mJ,UAAUgoN,KAAO,WAGlB,OAFAlyN,KAAK2lK,SAAW,EAET3lK,IACR,EAED+wJ,EAAG7mJ,UAAU5D,IAAM,WACjB,OAAOtG,KAAK8jB,QAAQouM,MACrB,EAEDnhE,EAAG7mJ,UAAUioN,aAAe,SAAuB9zD,EAAKla,EAAK/sD,GAC3D,IACIx5F,EAIAikB,EALAyG,EAAM+1I,EAAIz/J,OAASw4F,EAGvBp3F,KAAKmoN,QAAQ7/L,GAGb,IAAImgM,EAAQ,EACZ,IAAK7qN,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAAK,CAC/BikB,GAA6B,EAAxB7hB,KAAK25L,MAAM/7L,EAAIw5F,IAAcqxH,EAClC,IAAIliN,GAAwB,EAAf83J,EAAIs7B,MAAM/7L,IAAUumJ,EAEjCskE,IADA5mM,GAAa,SAARtb,IACS,KAAQA,EAAQ,SAAa,GAC3CvG,KAAK25L,MAAM/7L,EAAIw5F,GAAa,SAAJv1E,CACzB,CACD,KAAOjkB,EAAIoC,KAAKpB,OAASw4F,EAAOx5F,IAE9B6qN,GADA5mM,GAA6B,EAAxB7hB,KAAK25L,MAAM/7L,EAAIw5F,IAAcqxH,IACrB,GACbzoN,KAAK25L,MAAM/7L,EAAIw5F,GAAa,SAAJv1E,EAG1B,GAAc,IAAV4mM,EAAa,OAAOzoN,KAAKi5K,QAK7B,IAFAvb,GAAkB,IAAX+qD,GACPA,EAAQ,EACH7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAE3B6qN,GADA5mM,IAAsB,EAAhB7hB,KAAK25L,MAAM/7L,IAAU6qN,IACd,GACbzoN,KAAK25L,MAAM/7L,GAAS,SAAJikB,EAIlB,OAFA7hB,KAAK2lK,SAAW,EAET3lK,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUkoN,SAAW,SAAmB/zD,EAAK9xG,GAC9C,IAAI6qC,GAAQp3F,KAAKpB,OAASy/J,EAAIz/J,QAE1BkL,EAAI9J,KAAK8jB,QACTlQ,EAAIyqJ,EAGJg0D,EAA8B,EAAxBz+M,EAAE+lL,MAAM/lL,EAAEhV,OAAS,GAGf,KADdw4F,EAAQ,GADMp3F,KAAKspN,WAAW+I,MAG5Bz+M,EAAIA,EAAEk+M,MAAM16H,GACZttF,EAAEwnN,OAAOl6H,GACTi7H,EAA8B,EAAxBz+M,EAAE+lL,MAAM/lL,EAAEhV,OAAS,IAI3B,IACI+D,EADAgO,EAAI7G,EAAElL,OAASgV,EAAEhV,OAGrB,GAAa,QAAT2tD,EAAgB,EAClB5pD,EAAI,IAAIouJ,EAAG,OACTnyJ,OAAS+R,EAAI,EACfhO,EAAEg3L,MAAQ,IAAI97L,MAAM8E,EAAE/D,QACtB,IAAK,IAAIhB,EAAI,EAAGA,EAAI+E,EAAE/D,OAAQhB,IAC5B+E,EAAEg3L,MAAM/7L,GAAK,CAEhB,CAED,IAAI01G,EAAOxpG,EAAEga,QAAQquM,aAAav+M,EAAG,EAAGjD,GAClB,IAAlB2iG,EAAKqyD,WACP77J,EAAIwpG,EACA3wG,IACFA,EAAEg3L,MAAMhpL,GAAK,IAIjB,IAAK,IAAI+d,EAAI/d,EAAI,EAAG+d,GAAK,EAAGA,IAAK,CAC/B,IAAI4jM,EAAmC,UAAL,EAAxBxoN,EAAE6vL,MAAM/lL,EAAEhV,OAAS8vB,KACE,EAA5B5kB,EAAE6vL,MAAM/lL,EAAEhV,OAAS8vB,EAAI,IAO1B,IAHA4jM,EAAKnsN,KAAKC,IAAKksN,EAAKD,EAAO,EAAG,UAE9BvoN,EAAEqoN,aAAav+M,EAAG0+M,EAAI5jM,GACA,IAAf5kB,EAAE67J,UACP2sD,IACAxoN,EAAE67J,SAAW,EACb77J,EAAEqoN,aAAav+M,EAAG,EAAG8a,GAChB5kB,EAAEq5I,WACLr5I,EAAE67J,UAAY,GAGdhjK,IACFA,EAAEg3L,MAAMjrK,GAAK4jM,EAEhB,CAWD,OAVI3vN,GACFA,EAAEs2K,QAEJnvK,EAAEmvK,QAGW,QAAT1sH,GAA4B,IAAV6qC,GACpBttF,EAAE+0J,OAAOznE,GAGJ,CACLu6D,IAAKhvJ,GAAK,KACV87J,IAAK30J,EAER,EAMDinJ,EAAG7mJ,UAAUqoN,OAAS,SAAiBl0D,EAAK9xG,EAAMimK,GAGhD,OAFA90D,GAAQW,EAAIlb,UAERnjJ,KAAKmjJ,SACA,CACLwO,IAAK,IAAIZ,EAAG,GACZ0N,IAAK,IAAI1N,EAAG,IAKM,IAAlB/wJ,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,UAC7B/yD,EAAM5yG,KAAKuhK,MAAMgxD,OAAOl0D,EAAK9xG,GAEhB,QAATA,IACFolG,EAAM/+C,EAAI++C,IAAI4P,OAGH,QAATh1G,IACFkyG,EAAM7rD,EAAI6rD,IAAI8C,MACVixD,GAA6B,IAAjB/zD,EAAIkH,UAClBlH,EAAIqL,KAAKzL,IAIN,CACL1M,IAAKA,EACL8M,IAAKA,IAIa,IAAlBz+J,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,UAC7B/yD,EAAM5yG,KAAKuyN,OAAOl0D,EAAIkD,MAAOh1G,GAEhB,QAATA,IACFolG,EAAM/+C,EAAI++C,IAAI4P,OAGT,CACL5P,IAAKA,EACL8M,IAAK7rD,EAAI6rD,MAI0B,KAAlCz+J,KAAK2lK,SAAWtH,EAAIsH,WACvB/yD,EAAM5yG,KAAKuhK,MAAMgxD,OAAOl0D,EAAIkD,MAAOh1G,GAEtB,QAATA,IACFkyG,EAAM7rD,EAAI6rD,IAAI8C,MACVixD,GAA6B,IAAjB/zD,EAAIkH,UAClBlH,EAAI+rD,KAAKnsD,IAIN,CACL1M,IAAK/+C,EAAI++C,IACT8M,IAAKA,IAOLJ,EAAIz/J,OAASoB,KAAKpB,QAAUoB,KAAKqiK,IAAIhE,GAAO,EACvC,CACL1M,IAAK,IAAIZ,EAAG,GACZ0N,IAAKz+J,MAKU,IAAfq+J,EAAIz/J,OACO,QAAT2tD,EACK,CACLolG,IAAK3xJ,KAAKyyN,KAAKp0D,EAAIs7B,MAAM,IACzBl7B,IAAK,MAII,QAATlyG,EACK,CACLolG,IAAK,KACL8M,IAAK,IAAI1N,EAAG/wJ,KAAKykK,KAAKpG,EAAIs7B,MAAM,MAI7B,CACLhoC,IAAK3xJ,KAAKyyN,KAAKp0D,EAAIs7B,MAAM,IACzBl7B,IAAK,IAAI1N,EAAG/wJ,KAAKykK,KAAKpG,EAAIs7B,MAAM,MAI7B35L,KAAKoyN,SAAS/zD,EAAK9xG,GAlF1B,IAAIolG,EAAK8M,EAAK7rD,CAmFf,EAGDm+C,EAAG7mJ,UAAUynJ,IAAM,SAAc0M,GAC/B,OAAOr+J,KAAKuyN,OAAOl0D,EAAK,OAAO,GAAO1M,GACvC,EAGDZ,EAAG7mJ,UAAUu0J,IAAM,SAAcJ,GAC/B,OAAOr+J,KAAKuyN,OAAOl0D,EAAK,OAAO,GAAOI,GACvC,EAED1N,EAAG7mJ,UAAU2nJ,KAAO,SAAewM,GACjC,OAAOr+J,KAAKuyN,OAAOl0D,EAAK,OAAO,GAAMI,GACtC,EAGD1N,EAAG7mJ,UAAU27J,SAAW,SAAmBxH,GACzC,IAAIq0D,EAAK1yN,KAAKuyN,OAAOl0D,GAGrB,GAAIq0D,EAAGj0D,IAAItb,SAAU,OAAOuvE,EAAG/gE,IAE/B,IAAI8M,EAA0B,IAApBi0D,EAAG/gE,IAAIgU,SAAiB+sD,EAAGj0D,IAAI+rD,KAAKnsD,GAAOq0D,EAAGj0D,IAEpDk0D,EAAOt0D,EAAImH,MAAM,GACjBotD,EAAKv0D,EAAIK,MAAM,GACf2D,EAAM5D,EAAI4D,IAAIswD,GAGlB,OAAItwD,EAAM,GAAY,IAAPuwD,GAAoB,IAARvwD,EAAkBqwD,EAAG/gE,IAGrB,IAApB+gE,EAAG/gE,IAAIgU,SAAiB+sD,EAAG/gE,IAAIiN,MAAM,GAAK8zD,EAAG/gE,IAAI4c,MAAM,EAC/D,EAEDxd,EAAG7mJ,UAAUu6J,KAAO,SAAepG,GACjCX,EAAOW,GAAO,UAId,IAHA,IAAI7iJ,GAAK,GAAK,IAAM6iJ,EAEhBwD,EAAM,EACDjkK,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IACpCikK,GAAOrmJ,EAAIqmJ,GAAuB,EAAhB7hK,KAAK25L,MAAM/7L,KAAWygK,EAG1C,OAAOwD,CACR,EAGD9Q,EAAG7mJ,UAAU6+M,MAAQ,SAAgB1qD,GACnCX,EAAOW,GAAO,UAGd,IADA,IAAIoqD,EAAQ,EACH7qN,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IAAK,CACzC,IAAIikB,GAAqB,EAAhB7hB,KAAK25L,MAAM/7L,IAAkB,SAAR6qN,EAC9BzoN,KAAK25L,MAAM/7L,GAAMikB,EAAIw8I,EAAO,EAC5BoqD,EAAQ5mM,EAAIw8I,CACb,CAED,OAAOr+J,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUuoN,KAAO,SAAep0D,GACjC,OAAOr+J,KAAK8jB,QAAQilM,MAAM1qD,EAC3B,EAEDtN,EAAG7mJ,UAAU2oN,KAAO,SAAer3M,GACjCkiJ,EAAsB,IAAfliJ,EAAEmqJ,UACTjI,GAAQliJ,EAAE2nI,UAEV,IAAIngJ,EAAIhD,KACJiD,EAAIuY,EAAEsI,QAGR9gB,EADiB,IAAfA,EAAE2iK,SACA3iK,EAAE6uJ,KAAKr2I,GAEPxY,EAAE8gB,QAaR,IATA,IAAIgvM,EAAI,IAAI/hE,EAAG,GACXgiE,EAAI,IAAIhiE,EAAG,GAGXiqC,EAAI,IAAIjqC,EAAG,GACXiiE,EAAI,IAAIjiE,EAAG,GAEXt4I,EAAI,EAEDzV,EAAE6/J,UAAY5/J,EAAE4/J,UACrB7/J,EAAE67J,OAAO,GACT57J,EAAE47J,OAAO,KACPpmJ,EAMJ,IAHA,IAAIw6M,EAAKhwN,EAAE6gB,QACPovM,EAAKlwN,EAAE8gB,SAEH9gB,EAAEmgJ,UAAU,CAClB,IAAK,IAAIvlJ,EAAI,EAAGu1N,EAAK,EAAyB,KAArBnwN,EAAE22L,MAAM,GAAKw5B,IAAav1N,EAAI,KAAMA,EAAGu1N,IAAO,GACvE,GAAIv1N,EAAI,EAEN,IADAoF,EAAE67J,OAAOjhK,GACFA,KAAM,IACPk1N,EAAEn0D,SAAWo0D,EAAEp0D,WACjBm0D,EAAEhpD,KAAKmpD,GACPF,EAAEvI,KAAK0I,IAGTJ,EAAEj0D,OAAO,GACTk0D,EAAEl0D,OAAO,GAIb,IAAK,IAAInwI,EAAI,EAAG0kM,EAAK,EAAyB,KAArBnwN,EAAE02L,MAAM,GAAKy5B,IAAa1kM,EAAI,KAAMA,EAAG0kM,IAAO,GACvE,GAAI1kM,EAAI,EAEN,IADAzrB,EAAE47J,OAAOnwI,GACFA,KAAM,IACPssK,EAAEr8B,SAAWq0D,EAAEr0D,WACjBq8B,EAAElxB,KAAKmpD,GACPD,EAAExI,KAAK0I,IAGTl4B,EAAEn8B,OAAO,GACTm0D,EAAEn0D,OAAO,GAIT77J,EAAEq/J,IAAIp/J,IAAM,GACdD,EAAEwnN,KAAKvnN,GACP6vN,EAAEtI,KAAKxvB,GACP+3B,EAAEvI,KAAKwI,KAEP/vN,EAAEunN,KAAKxnN,GACPg4L,EAAEwvB,KAAKsI,GACPE,EAAExI,KAAKuI,GAEV,CAED,MAAO,CACLjpN,EAAGkxL,EACHpnL,EAAGo/M,EACHK,IAAKpwN,EAAEquN,OAAO74M,GAEjB,EAKDs4I,EAAG7mJ,UAAUopN,OAAS,SAAiB93M,GACrCkiJ,EAAsB,IAAfliJ,EAAEmqJ,UACTjI,GAAQliJ,EAAE2nI,UAEV,IAAIr5I,EAAI9J,KACJ4T,EAAI4H,EAAEsI,QAGRha,EADiB,IAAfA,EAAE67J,SACA77J,EAAE+nJ,KAAKr2I,GAEP1R,EAAEga,QAQR,IALA,IAuCI8uF,EAvCA5qF,EAAK,IAAI+oI,EAAG,GACZj7H,EAAK,IAAIi7H,EAAG,GAEZ9zI,EAAQrJ,EAAEkQ,QAEPha,EAAEq1J,KAAK,GAAK,GAAKvrJ,EAAEurJ,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIvhK,EAAI,EAAGu1N,EAAK,EAAyB,KAArBrpN,EAAE6vL,MAAM,GAAKw5B,IAAav1N,EAAI,KAAMA,EAAGu1N,IAAO,GACvE,GAAIv1N,EAAI,EAEN,IADAkM,EAAE+0J,OAAOjhK,GACFA,KAAM,GACPoqB,EAAG22I,SACL32I,EAAG8hJ,KAAK7sJ,GAGV+K,EAAG62I,OAAO,GAId,IAAK,IAAInwI,EAAI,EAAG0kM,EAAK,EAAyB,KAArBx/M,EAAE+lL,MAAM,GAAKy5B,IAAa1kM,EAAI,KAAMA,EAAG0kM,IAAO,GACvE,GAAI1kM,EAAI,EAEN,IADA9a,EAAEirJ,OAAOnwI,GACFA,KAAM,GACPoH,EAAG6oI,SACL7oI,EAAGg0I,KAAK7sJ,GAGV6Y,EAAG+oI,OAAO,GAIV/0J,EAAEu4J,IAAIzuJ,IAAM,GACd9J,EAAE0gN,KAAK52M,GACPoU,EAAGwiM,KAAK10L,KAERliB,EAAE42M,KAAK1gN,GACPgsB,EAAG00L,KAAKxiM,GAEX,CAaD,OATE4qF,EADgB,IAAd9oG,EAAEq1J,KAAK,GACHn3I,EAEA8N,GAGAqpI,KAAK,GAAK,GAChBvsD,EAAIk3D,KAAKtuJ,GAGJo3F,CACR,EAEDm+C,EAAG7mJ,UAAUmpN,IAAM,SAAch1D,GAC/B,GAAIr+J,KAAKmjJ,SAAU,OAAOkb,EAAI/3J,MAC9B,GAAI+3J,EAAIlb,SAAU,OAAOnjJ,KAAKsG,MAE9B,IAAIwD,EAAI9J,KAAK8jB,QACTlQ,EAAIyqJ,EAAIv6I,QACZha,EAAE67J,SAAW,EACb/xJ,EAAE+xJ,SAAW,EAGb,IAAK,IAAIvuE,EAAQ,EAAGttF,EAAE+4J,UAAYjvJ,EAAEivJ,SAAUzrE,IAC5CttF,EAAE+0J,OAAO,GACTjrJ,EAAEirJ,OAAO,GAGX,OAAG,CACD,KAAO/0J,EAAE+4J,UACP/4J,EAAE+0J,OAAO,GAEX,KAAOjrJ,EAAEivJ,UACPjvJ,EAAEirJ,OAAO,GAGX,IAAIxlJ,EAAIvP,EAAEu4J,IAAIzuJ,GACd,GAAIyF,EAAI,EAAG,CAET,IAAIxI,EAAI/G,EACRA,EAAI8J,EACJA,EAAI/C,CACL,MAAM,GAAU,IAANwI,GAAyB,IAAdzF,EAAEurJ,KAAK,GAC3B,MAGFr1J,EAAE0gN,KAAK52M,EACR,CAED,OAAOA,EAAE09M,OAAOl6H,EACjB,EAGD25D,EAAG7mJ,UAAU6kK,KAAO,SAAe1Q,GACjC,OAAOr+J,KAAK6yN,KAAKx0D,GAAKv0J,EAAE+nJ,KAAKwM,EAC9B,EAEDtN,EAAG7mJ,UAAU24J,OAAS,WACpB,OAA+B,KAAP,EAAhB7iK,KAAK25L,MAAM,GACpB,EAED5oC,EAAG7mJ,UAAUy0J,MAAQ,WACnB,OAA+B,KAAP,EAAhB3+J,KAAK25L,MAAM,GACpB,EAGD5oC,EAAG7mJ,UAAUw0J,MAAQ,SAAgBL,GACnC,OAAOr+J,KAAK25L,MAAM,GAAKt7B,CACxB,EAGDtN,EAAG7mJ,UAAUqpN,MAAQ,SAAgBt5B,GACnCv8B,EAAsB,kBAARu8B,GACd,IAAI5gL,EAAI4gL,EAAM,GACV5mL,GAAK4mL,EAAM5gL,GAAK,GAChB1W,EAAI,GAAK0W,EAGb,GAAIrZ,KAAKpB,QAAUyU,EAGjB,OAFArT,KAAKmoN,QAAQ90M,EAAI,GACjBrT,KAAK25L,MAAMtmL,IAAM1Q,EACV3C,KAKT,IADA,IAAIyoN,EAAQ9lN,EACH/E,EAAIyV,EAAa,IAAVo1M,GAAe7qN,EAAIoC,KAAKpB,OAAQhB,IAAK,CACnD,IAAIikB,EAAoB,EAAhB7hB,KAAK25L,MAAM/7L,GAEnB6qN,GADA5mM,GAAK4mM,KACS,GACd5mM,GAAK,SACL7hB,KAAK25L,MAAM/7L,GAAKikB,CACjB,CAKD,OAJc,IAAV4mM,IACFzoN,KAAK25L,MAAM/7L,GAAK6qN,EAChBzoN,KAAKpB,UAEAoB,IACR,EAED+wJ,EAAG7mJ,UAAUi5I,OAAS,WACpB,OAAuB,IAAhBnjJ,KAAKpB,QAAkC,IAAlBoB,KAAK25L,MAAM,EACxC,EAED5oC,EAAG7mJ,UAAUi1J,KAAO,SAAed,GACjC,IAOIzrD,EAPA+yD,EAAWtH,EAAM,EAErB,GAAsB,IAAlBr+J,KAAK2lK,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB3lK,KAAK2lK,UAAkBA,EAAU,OAAO,EAK5C,GAHA3lK,KAAKi5K,QAGDj5K,KAAKpB,OAAS,EAChBg0G,EAAM,MACD,CACD+yD,IACFtH,GAAOA,GAGTX,EAAOW,GAAO,SAAW,qBAEzB,IAAIx8I,EAAoB,EAAhB7hB,KAAK25L,MAAM,GACnB/mF,EAAM/wF,IAAMw8I,EAAM,EAAIx8I,EAAIw8I,GAAO,EAAI,CACtC,CACD,OAAsB,IAAlBr+J,KAAK2lK,SAA8B,GAAN/yD,EAC1BA,CACR,EAMDm+C,EAAG7mJ,UAAUm4J,IAAM,SAAchE,GAC/B,GAAsB,IAAlBr+J,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAAgB,OAAQ,EACvD,GAAsB,IAAlB3lK,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAAgB,OAAO,EAEtD,IAAI/yD,EAAM5yG,KAAKwzN,KAAKn1D,GACpB,OAAsB,IAAlBr+J,KAAK2lK,SAA8B,GAAN/yD,EAC1BA,CACR,EAGDm+C,EAAG7mJ,UAAUspN,KAAO,SAAen1D,GAEjC,GAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAQ,OAAO,EACrC,GAAIoB,KAAKpB,OAASy/J,EAAIz/J,OAAQ,OAAQ,EAGtC,IADA,IAAIg0G,EAAM,EACDh1G,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IAAK,CACzC,IAAIkM,EAAoB,EAAhB9J,KAAK25L,MAAM/7L,GACfgW,EAAmB,EAAfyqJ,EAAIs7B,MAAM/7L,GAElB,GAAIkM,IAAM8J,EAAV,CACI9J,EAAI8J,EACNg/F,GAAO,EACE9oG,EAAI8J,IACbg/F,EAAM,GAER,KANqB,CAOtB,CACD,OAAOA,CACR,EAEDm+C,EAAG7mJ,UAAUupN,IAAM,SAAcp1D,GAC/B,OAA0B,IAAnBr+J,KAAKm/J,KAAKd,EAClB,EAEDtN,EAAG7mJ,UAAU85I,GAAK,SAAaqa,GAC7B,OAAyB,IAAlBr+J,KAAKqiK,IAAIhE,EACjB,EAEDtN,EAAG7mJ,UAAUwpN,KAAO,SAAer1D,GACjC,OAAOr+J,KAAKm/J,KAAKd,IAAQ,CAC1B,EAEDtN,EAAG7mJ,UAAUqoJ,IAAM,SAAc8L,GAC/B,OAAOr+J,KAAKqiK,IAAIhE,IAAQ,CACzB,EAEDtN,EAAG7mJ,UAAUypN,IAAM,SAAct1D,GAC/B,OAA2B,IAApBr+J,KAAKm/J,KAAKd,EAClB,EAEDtN,EAAG7mJ,UAAU+5I,GAAK,SAAaoa,GAC7B,OAA0B,IAAnBr+J,KAAKqiK,IAAIhE,EACjB,EAEDtN,EAAG7mJ,UAAU0pN,KAAO,SAAev1D,GACjC,OAAOr+J,KAAKm/J,KAAKd,IAAQ,CAC1B,EAEDtN,EAAG7mJ,UAAUooJ,IAAM,SAAc+L,GAC/B,OAAOr+J,KAAKqiK,IAAIhE,IAAQ,CACzB,EAEDtN,EAAG7mJ,UAAU2pN,IAAM,SAAcx1D,GAC/B,OAA0B,IAAnBr+J,KAAKm/J,KAAKd,EAClB,EAEDtN,EAAG7mJ,UAAUmoJ,GAAK,SAAagM,GAC7B,OAAyB,IAAlBr+J,KAAKqiK,IAAIhE,EACjB,EAMDtN,EAAG6O,IAAM,SAAcvB,GACrB,OAAO,IAAIy1D,EAAIz1D,EAChB,EAEDtN,EAAG7mJ,UAAU61J,MAAQ,SAAgBg0D,GAGnC,OAFAr2D,GAAQ19J,KAAK4/J,IAAK,yCAClBlC,EAAyB,IAAlB19J,KAAK2lK,SAAgB,iCACrBouD,EAAIC,UAAUh0N,MAAMi0N,UAAUF,EACtC,EAEDhjE,EAAG7mJ,UAAU05J,QAAU,WAErB,OADAlG,EAAO19J,KAAK4/J,IAAK,wDACV5/J,KAAK4/J,IAAIs0D,YAAYl0N,KAC7B,EAED+wJ,EAAG7mJ,UAAU+pN,UAAY,SAAoBF,GAE3C,OADA/zN,KAAK4/J,IAAMm0D,EACJ/zN,IACR,EAED+wJ,EAAG7mJ,UAAUo6J,SAAW,SAAmByvD,GAEzC,OADAr2D,GAAQ19J,KAAK4/J,IAAK,yCACX5/J,KAAKi0N,UAAUF,EACvB,EAEDhjE,EAAG7mJ,UAAUi7J,OAAS,SAAiB9G,GAErC,OADAX,EAAO19J,KAAK4/J,IAAK,sCACV5/J,KAAK4/J,IAAI7zI,IAAI/rB,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAUg8J,QAAU,SAAkB7H,GAEvC,OADAX,EAAO19J,KAAK4/J,IAAK,uCACV5/J,KAAK4/J,IAAIkK,KAAK9pK,KAAMq+J,EAC5B,EAEDtN,EAAG7mJ,UAAUk7J,OAAS,SAAiB/G,GAErC,OADAX,EAAO19J,KAAK4/J,IAAK,sCACV5/J,KAAK4/J,IAAIp1I,IAAIxqB,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAUk8J,QAAU,SAAkB/H,GAEvC,OADAX,EAAO19J,KAAK4/J,IAAK,uCACV5/J,KAAK4/J,IAAI4qD,KAAKxqN,KAAMq+J,EAC5B,EAEDtN,EAAG7mJ,UAAUiqN,OAAS,SAAiB91D,GAErC,OADAX,EAAO19J,KAAK4/J,IAAK,sCACV5/J,KAAK4/J,IAAIw0D,IAAIp0N,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAU26J,OAAS,SAAiBxG,GAGrC,OAFAX,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAIy0D,SAASr0N,KAAMq+J,GACjBr+J,KAAK4/J,IAAIzb,IAAInkJ,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAUoqN,QAAU,SAAkBj2D,GAGvC,OAFAX,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAIy0D,SAASr0N,KAAMq+J,GACjBr+J,KAAK4/J,IAAItsJ,KAAKtT,KAAMq+J,EAC5B,EAEDtN,EAAG7mJ,UAAU+7J,OAAS,WAGpB,OAFAvI,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAI8F,IAAI1lK,KACrB,EAED+wJ,EAAG7mJ,UAAUsqN,QAAU,WAGrB,OAFA92D,EAAO19J,KAAK4/J,IAAK,uCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAIwxD,KAAKpxN,KACtB,EAGD+wJ,EAAG7mJ,UAAUg7J,QAAU,WAGrB,OAFAxH,EAAO19J,KAAK4/J,IAAK,uCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAIxqJ,KAAKpV,KACtB,EAED+wJ,EAAG7mJ,UAAUw5J,QAAU,WAGrB,OAFAhG,EAAO19J,KAAK4/J,IAAK,uCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAImP,KAAK/uK,KACtB,EAGD+wJ,EAAG7mJ,UAAUq4J,OAAS,WAGpB,OAFA7E,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAI2B,IAAIvhK,KACrB,EAED+wJ,EAAG7mJ,UAAUuqN,OAAS,SAAiBp2D,GAGrC,OAFAX,EAAO19J,KAAK4/J,MAAQvB,EAAIuB,IAAK,qBAC7B5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAI5uJ,IAAIhR,KAAMq+J,EAC3B,EAGD,IAAIq2D,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQz6M,EAAMkB,GAErBxb,KAAKsa,KAAOA,EACZta,KAAKwb,EAAI,IAAIu1I,EAAGv1I,EAAG,IACnBxb,KAAK0Q,EAAI1Q,KAAKwb,EAAE+iJ,YAChBv+J,KAAK+0E,EAAI,IAAIg8E,EAAG,GAAGugE,OAAOtxN,KAAK0Q,GAAG85M,KAAKxqN,KAAKwb,GAE5Cxb,KAAKgZ,IAAMhZ,KAAKg1N,MACjB,CAgDD,SAASC,IACPF,EAAOx2N,KACLyB,KACA,OACA,0EACH,CA8DD,SAASk1N,IACPH,EAAOx2N,KACLyB,KACA,OACA,iEACH,CAGD,SAASm1N,IACPJ,EAAOx2N,KACLyB,KACA,OACA,wDACH,CAGD,SAASo1N,IAEPL,EAAOx2N,KACLyB,KACA,QACA,sEACH,CA6CD,SAAS8zN,EAAKnjN,GACZ,GAAiB,kBAANA,EAAgB,CACzB,IAAIkvJ,EAAQ9O,EAAGskE,OAAO1kN,GACtB3Q,KAAK2Q,EAAIkvJ,EAAMrkJ,EACfxb,KAAK6/J,MAAQA,CACd,MACCnC,EAAO/sJ,EAAE8iN,IAAI,GAAI,kCACjBzzN,KAAK2Q,EAAIA,EACT3Q,KAAK6/J,MAAQ,IAEhB,CAgOD,SAASy1D,EAAM3kN,GACbmjN,EAAIv1N,KAAKyB,KAAM2Q,GAEf3Q,KAAKo3F,MAAQp3F,KAAK2Q,EAAE4tJ,YAChBv+J,KAAKo3F,MAAQ,KAAO,IACtBp3F,KAAKo3F,OAAS,GAAMp3F,KAAKo3F,MAAQ,IAGnCp3F,KAAKqZ,EAAI,IAAI03I,EAAG,GAAGugE,OAAOtxN,KAAKo3F,OAC/Bp3F,KAAK4yN,GAAK5yN,KAAKu1N,KAAKv1N,KAAKqZ,EAAEqsJ,OAC3B1lK,KAAKw1N,KAAOx1N,KAAKqZ,EAAEi6M,OAAOtzN,KAAK2Q,GAE/B3Q,KAAKy1N,KAAOz1N,KAAKw1N,KAAKrxE,IAAInkJ,KAAKqZ,GAAGulJ,MAAM,GAAGjN,IAAI3xJ,KAAK2Q,GACpD3Q,KAAKy1N,KAAOz1N,KAAKy1N,KAAK5jE,KAAK7xJ,KAAKqZ,GAChCrZ,KAAKy1N,KAAOz1N,KAAKqZ,EAAEmR,IAAIxqB,KAAKy1N,KAC7B,CA7aDV,EAAO7qN,UAAU8qN,KAAO,WACtB,IAAIh8M,EAAM,IAAI+3I,EAAG,MAEjB,OADA/3I,EAAI2gL,MAAQ,IAAI97L,MAAMsI,KAAK8K,KAAKjR,KAAK0Q,EAAI,KAClCsI,CACR,EAED+7M,EAAO7qN,UAAUwrN,QAAU,SAAkBr3D,GAG3C,IACIoP,EADAp0J,EAAIglJ,EAGR,GACEr+J,KAAK2hE,MAAMtoD,EAAGrZ,KAAKgZ,KAGnBy0J,GADAp0J,GADAA,EAAIrZ,KAAK21N,MAAMt8M,IACTywJ,KAAK9pK,KAAKgZ,MACPulJ,kBACFkP,EAAOztK,KAAK0Q,GAErB,IAAI2xJ,EAAMoL,EAAOztK,KAAK0Q,GAAK,EAAI2I,EAAEm6M,KAAKxzN,KAAKwb,GAgB3C,OAfY,IAAR6mJ,GACFhpJ,EAAEsgL,MAAM,GAAK,EACbtgL,EAAEza,OAAS,GACFyjK,EAAM,EACfhpJ,EAAEmxM,KAAKxqN,KAAKwb,QAEInS,IAAZgQ,EAAE4/J,MAEJ5/J,EAAE4/J,QAGF5/J,EAAEu8M,SAICv8M,CACR,EAED07M,EAAO7qN,UAAUy3D,MAAQ,SAAgBwgE,EAAO0oD,GAC9C1oD,EAAM08B,OAAO7+J,KAAK0Q,EAAG,EAAGm6K,EACzB,EAEDkqC,EAAO7qN,UAAUyrN,MAAQ,SAAgBt3D,GACvC,OAAOA,EAAI/qJ,KAAKtT,KAAK+0E,EACtB,EAQDmvF,EAAS+wD,EAAMF,GAEfE,EAAK/qN,UAAUy3D,MAAQ,SAAgBwgE,EAAOnjH,GAK5C,IAHA,IAAIwY,EAAO,QAEPkzI,EAASvkK,KAAKC,IAAI+7H,EAAMvjI,OAAQ,GAC3BhB,EAAI,EAAGA,EAAI8sK,EAAQ9sK,IAC1BohB,EAAO26K,MAAM/7L,GAAKukI,EAAMw3D,MAAM/7L,GAIhC,GAFAohB,EAAOpgB,OAAS8rK,EAEZvoC,EAAMvjI,QAAU,EAGlB,OAFAujI,EAAMw3D,MAAM,GAAK,OACjBx3D,EAAMvjI,OAAS,GAKjB,IAAIslN,EAAO/hF,EAAMw3D,MAAM,GAGvB,IAFA36K,EAAO26K,MAAM36K,EAAOpgB,UAAYslN,EAAO1sL,EAElC55B,EAAI,GAAIA,EAAIukI,EAAMvjI,OAAQhB,IAAK,CAClC,IAAIY,EAAwB,EAAjB2jI,EAAMw3D,MAAM/7L,GACvBukI,EAAMw3D,MAAM/7L,EAAI,KAAQY,EAAOg5B,IAAS,EAAM0sL,IAAS,GACvDA,EAAO1lN,CACR,CACD0lN,KAAU,GACV/hF,EAAMw3D,MAAM/7L,EAAI,IAAMsmN,EACT,IAATA,GAAc/hF,EAAMvjI,OAAS,GAC/BujI,EAAMvjI,QAAU,GAEhBujI,EAAMvjI,QAAU,CAEnB,EAEDq2N,EAAK/qN,UAAUyrN,MAAQ,SAAgBt3D,GAErCA,EAAIs7B,MAAMt7B,EAAIz/J,QAAU,EACxBy/J,EAAIs7B,MAAMt7B,EAAIz/J,OAAS,GAAK,EAC5By/J,EAAIz/J,QAAU,EAId,IADA,IAAIq/J,EAAK,EACArgK,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAAK,CACnC,IAAIikB,EAAmB,EAAfw8I,EAAIs7B,MAAM/7L,GAClBqgK,GAAU,IAAJp8I,EACNw8I,EAAIs7B,MAAM/7L,GAAU,SAALqgK,EACfA,EAAS,GAAJp8I,GAAao8I,EAAK,SAAa,EACrC,CASD,OANkC,IAA9BI,EAAIs7B,MAAMt7B,EAAIz/J,OAAS,KACzBy/J,EAAIz/J,SAC8B,IAA9By/J,EAAIs7B,MAAMt7B,EAAIz/J,OAAS,IACzBy/J,EAAIz/J,UAGDy/J,CACR,EAQD6F,EAASgxD,EAAMH,GAQf7wD,EAASixD,EAAMJ,GASf7wD,EAASkxD,EAAQL,GAEjBK,EAAOlrN,UAAUyrN,MAAQ,SAAgBt3D,GAGvC,IADA,IAAIoqD,EAAQ,EACH7qN,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAAK,CACnC,IAAIogK,EAA0B,IAAL,EAAfK,EAAIs7B,MAAM/7L,IAAiB6qN,EACjCxqD,EAAU,SAALD,EACTA,KAAQ,GAERK,EAAIs7B,MAAM/7L,GAAKqgK,EACfwqD,EAAQzqD,CACT,CAID,OAHc,IAAVyqD,IACFpqD,EAAIs7B,MAAMt7B,EAAIz/J,UAAY6pN,GAErBpqD,CACR,EAGDtN,EAAGskE,OAAS,SAAgB/6M,GAE1B,GAAIo6M,EAAOp6M,GAAO,OAAOo6M,EAAOp6M,GAEhC,IAAIulJ,EACJ,GAAa,SAATvlJ,EACFulJ,EAAQ,IAAIo1D,OACP,GAAa,SAAT36M,EACTulJ,EAAQ,IAAIq1D,OACP,GAAa,SAAT56M,EACTulJ,EAAQ,IAAIs1D,MACP,IAAa,WAAT76M,EAGT,MAAM,IAAI3I,MAAM,iBAAmB2I,GAFnCulJ,EAAQ,IAAIu1D,CAGb,CAGD,OAFAV,EAAOp6M,GAAQulJ,EAERA,CACR,EAiBDi0D,EAAI5pN,UAAUqqN,SAAW,SAAmBzqN,GAC1C4zJ,EAAsB,IAAf5zJ,EAAE67J,SAAgB,iCACzBjI,EAAO5zJ,EAAE81J,IAAK,kCACf,EAEDk0D,EAAI5pN,UAAUmqN,SAAW,SAAmBvqN,EAAG8J,GAC7C8pJ,EAAqC,KAA7B5zJ,EAAE67J,SAAW/xJ,EAAE+xJ,UAAiB,iCACxCjI,EAAO5zJ,EAAE81J,KAAO91J,EAAE81J,MAAQhsJ,EAAEgsJ,IAC1B,kCACH,EAEDk0D,EAAI5pN,UAAUqrN,KAAO,SAAezrN,GAClC,OAAI9J,KAAK6/J,MAAc7/J,KAAK6/J,MAAM61D,QAAQ5rN,GAAGmqN,UAAUj0N,MAChD8J,EAAE+nJ,KAAK7xJ,KAAK2Q,GAAGsjN,UAAUj0N,KACjC,EAED8zN,EAAI5pN,UAAUq3J,IAAM,SAAcz3J,GAChC,OAAIA,EAAEq5I,SACGr5I,EAAEga,QAGJ9jB,KAAK2Q,EAAE6Z,IAAI1gB,GAAGmqN,UAAUj0N,KAChC,EAED8zN,EAAI5pN,UAAU6hB,IAAM,SAAcjiB,EAAG8J,GACnC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAEiiB,IAAInY,GAIhB,OAHIg/F,EAAIyvD,IAAIriK,KAAK2Q,IAAM,GACrBiiG,EAAI43G,KAAKxqN,KAAK2Q,GAETiiG,EAAIqhH,UAAUj0N,KACtB,EAED8zN,EAAI5pN,UAAU4/J,KAAO,SAAehgK,EAAG8J,GACrC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAEggK,KAAKl2J,GAIjB,OAHIg/F,EAAIyvD,IAAIriK,KAAK2Q,IAAM,GACrBiiG,EAAI43G,KAAKxqN,KAAK2Q,GAETiiG,CACR,EAEDkhH,EAAI5pN,UAAUsgB,IAAM,SAAc1gB,EAAG8J,GACnC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAE0gB,IAAI5W,GAIhB,OAHIg/F,EAAIusD,KAAK,GAAK,GAChBvsD,EAAIk3D,KAAK9pK,KAAK2Q,GAETiiG,EAAIqhH,UAAUj0N,KACtB,EAED8zN,EAAI5pN,UAAUsgN,KAAO,SAAe1gN,EAAG8J,GACrC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAE0gN,KAAK52M,GAIjB,OAHIg/F,EAAIusD,KAAK,GAAK,GAChBvsD,EAAIk3D,KAAK9pK,KAAK2Q,GAETiiG,CACR,EAEDkhH,EAAI5pN,UAAUkqN,IAAM,SAActqN,EAAGu0J,GAEnC,OADAr+J,KAAKu0N,SAASzqN,GACP9J,KAAKu1N,KAAKzrN,EAAEgoN,MAAMzzD,GAC1B,EAEDy1D,EAAI5pN,UAAUoJ,KAAO,SAAexJ,EAAG8J,GAErC,OADA5T,KAAKq0N,SAASvqN,EAAG8J,GACV5T,KAAKu1N,KAAKzrN,EAAEwJ,KAAKM,GACzB,EAEDkgN,EAAI5pN,UAAUi6I,IAAM,SAAcr6I,EAAG8J,GAEnC,OADA5T,KAAKq0N,SAASvqN,EAAG8J,GACV5T,KAAKu1N,KAAKzrN,EAAEq6I,IAAIvwI,GACxB,EAEDkgN,EAAI5pN,UAAUknN,KAAO,SAAetnN,GAClC,OAAO9J,KAAKsT,KAAKxJ,EAAGA,EAAEga,QACvB,EAEDgwM,EAAI5pN,UAAUw7J,IAAM,SAAc57J,GAChC,OAAO9J,KAAKmkJ,IAAIr6I,EAAGA,EACpB,EAEDgqN,EAAI5pN,UAAUkL,KAAO,SAAetL,GAClC,GAAIA,EAAEq5I,SAAU,OAAOr5I,EAAEga,QAEzB,IAAI+xM,EAAO71N,KAAK2Q,EAAE+tJ,MAAM,GAIxB,GAHAhB,EAAOm4D,EAAO,IAAM,GAGP,IAATA,EAAY,CACd,IAAI7kN,EAAMhR,KAAK2Q,EAAEob,IAAI,IAAIglI,EAAG,IAAI8N,OAAO,GACvC,OAAO7+J,KAAKgR,IAAIlH,EAAGkH,EACpB,CAOD,IAFA,IAAIrO,EAAI3C,KAAK2Q,EAAEshN,KAAK,GAChB5+M,EAAI,GACA1Q,EAAEwgJ,UAA2B,IAAfxgJ,EAAE+7J,MAAM,IAC5BrrJ,IACA1Q,EAAEk8J,OAAO,GAEXnB,GAAQ/6J,EAAEwgJ,UAEV,IAAI6c,EAAM,IAAIjP,EAAG,GAAGgP,MAAM//J,MACtB81N,EAAO91D,EAAIuC,SAIXwzD,EAAO/1N,KAAK2Q,EAAEshN,KAAK,GAAGpzD,OAAO,GAC7Bx7J,EAAIrD,KAAK2Q,EAAE4tJ,YAGf,IAFAl7J,EAAI,IAAI0tJ,EAAG,EAAI1tJ,EAAIA,GAAG08J,MAAM//J,MAEW,IAAhCA,KAAKgR,IAAI3N,EAAG0yN,GAAM1zD,IAAIyzD,IAC3BzyN,EAAE6iK,QAAQ4vD,GAOZ,IAJA,IAAIjiN,EAAI7T,KAAKgR,IAAI3N,EAAGV,GAChB0W,EAAIrZ,KAAKgR,IAAIlH,EAAGnH,EAAEqvN,KAAK,GAAGnzD,OAAO,IACjChuJ,EAAI7Q,KAAKgR,IAAIlH,EAAGnH,GAChBgO,EAAI0C,EACc,IAAfxC,EAAEwxJ,IAAIrC,IAAY,CAEvB,IADA,IAAIhnJ,EAAMnI,EACDjT,EAAI,EAAoB,IAAjBob,EAAIqpJ,IAAIrC,GAAYpiK,IAClCob,EAAMA,EAAIitJ,SAEZvI,EAAO9/J,EAAI+S,GACX,IAAIiD,EAAI5T,KAAKgR,IAAI6C,EAAG,IAAIk9I,EAAG,GAAGugE,OAAO3gN,EAAI/S,EAAI,IAE7Cyb,EAAIA,EAAEwrJ,OAAOjxJ,GACbC,EAAID,EAAEqyJ,SACNp1J,EAAIA,EAAEg0J,OAAOhxJ,GACblD,EAAI/S,CACL,CAED,OAAOyb,CACR,EAEDy6M,EAAI5pN,UAAU6kK,KAAO,SAAejlK,GAClC,IAAIksN,EAAMlsN,EAAEwpN,OAAOtzN,KAAK2Q,GACxB,OAAqB,IAAjBqlN,EAAIrwD,UACNqwD,EAAIrwD,SAAW,EACR3lK,KAAKu1N,KAAKS,GAAKzzD,UAEfviK,KAAKu1N,KAAKS,EAEpB,EAEDlC,EAAI5pN,UAAU8G,IAAM,SAAclH,EAAGu0J,GACnC,GAAIA,EAAIlb,SAAU,OAAO,IAAI4N,EAAG,GAAGgP,MAAM//J,MACzC,GAAoB,IAAhBq+J,EAAIc,KAAK,GAAU,OAAOr1J,EAAEga,QAEhC,IACI89I,EAAM,IAAI/jK,MAAM,IACpB+jK,EAAI,GAAK,IAAI7Q,EAAG,GAAGgP,MAAM//J,MACzB4hK,EAAI,GAAK93J,EACT,IAAK,IAAIlM,EAAI,EAAGA,EAAIgkK,EAAIhjK,OAAQhB,IAC9BgkK,EAAIhkK,GAAKoC,KAAKmkJ,IAAIyd,EAAIhkK,EAAI,GAAIkM,GAGhC,IAAI8oG,EAAMgvD,EAAI,GACVr8J,EAAU,EACV0wN,EAAa,EACb9tL,EAAQk2H,EAAIE,YAAc,GAK9B,IAJc,IAAVp2H,IACFA,EAAQ,IAGLvqC,EAAIygK,EAAIz/J,OAAS,EAAGhB,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAIkgK,EAAOO,EAAIs7B,MAAM/7L,GACZ8wB,EAAIyZ,EAAQ,EAAGzZ,GAAK,EAAGA,IAAK,CACnC,IAAIurK,EAAOn8B,GAAQpvI,EAAK,EACpBkkF,IAAQgvD,EAAI,KACdhvD,EAAM5yG,KAAK0lK,IAAI9yD,IAGL,IAARqnF,GAAyB,IAAZ10L,GAKjBA,IAAY,EACZA,GAAW00L,GA9BE,MA+Bbg8B,GACwC,IAANr4N,GAAiB,IAAN8wB,KAE7CkkF,EAAM5yG,KAAKmkJ,IAAIvxC,EAAKgvD,EAAIr8J,IACxB0wN,EAAa,EACb1wN,EAAU,IAXR0wN,EAAa,CAYhB,CACD9tL,EAAQ,EACT,CAED,OAAOyqE,CACR,EAEDkhH,EAAI5pN,UAAU8pN,UAAY,SAAoB31D,GAC5C,IAAIhlJ,EAAIglJ,EAAIxM,KAAK7xJ,KAAK2Q,GAEtB,OAAO0I,IAAMglJ,EAAMhlJ,EAAEyK,QAAUzK,CAChC,EAEDy6M,EAAI5pN,UAAUgqN,YAAc,SAAsB71D,GAChD,IAAIzrD,EAAMyrD,EAAIv6I,QAEd,OADA8uF,EAAIgtD,IAAM,KACHhtD,CACR,EAMDm+C,EAAGoZ,KAAO,SAAe9L,GACvB,OAAO,IAAIi3D,EAAKj3D,EACjB,EAkBD6F,EAASoxD,EAAMxB,GAEfwB,EAAKprN,UAAU8pN,UAAY,SAAoB31D,GAC7C,OAAOr+J,KAAKu1N,KAAKl3D,EAAIyzD,MAAM9xN,KAAKo3F,OACjC,EAEDk+H,EAAKprN,UAAUgqN,YAAc,SAAsB71D,GACjD,IAAIhlJ,EAAIrZ,KAAKu1N,KAAKl3D,EAAIla,IAAInkJ,KAAKw1N,OAE/B,OADAn8M,EAAEumJ,IAAM,KACDvmJ,CACR,EAEDi8M,EAAKprN,UAAUoJ,KAAO,SAAexJ,EAAG8J,GACtC,GAAI9J,EAAEq5I,UAAYvvI,EAAEuvI,SAGlB,OAFAr5I,EAAE6vL,MAAM,GAAK,EACb7vL,EAAElL,OAAS,EACJkL,EAGT,IAAI+G,EAAI/G,EAAEwJ,KAAKM,GACXC,EAAIhD,EAAEqhJ,MAAMlyJ,KAAKo3F,OAAO+sD,IAAInkJ,KAAKy1N,MAAM1D,OAAO/xN,KAAKo3F,OAAO+sD,IAAInkJ,KAAK2Q,GACnEua,EAAIra,EAAE25M,KAAK32M,GAAGgrJ,OAAO7+J,KAAKo3F,OAC1Bwb,EAAM1nF,EAQV,OANIA,EAAEm3I,IAAIriK,KAAK2Q,IAAM,EACnBiiG,EAAM1nF,EAAEs/L,KAAKxqN,KAAK2Q,GACTua,EAAEi0I,KAAK,GAAK,IACrBvsD,EAAM1nF,EAAE4+I,KAAK9pK,KAAK2Q,IAGbiiG,EAAIqhH,UAAUj0N,KACtB,EAEDs1N,EAAKprN,UAAUi6I,IAAM,SAAcr6I,EAAG8J,GACpC,GAAI9J,EAAEq5I,UAAYvvI,EAAEuvI,SAAU,OAAO,IAAI4N,EAAG,GAAGkjE,UAAUj0N,MAEzD,IAAI6Q,EAAI/G,EAAEq6I,IAAIvwI,GACVC,EAAIhD,EAAEqhJ,MAAMlyJ,KAAKo3F,OAAO+sD,IAAInkJ,KAAKy1N,MAAM1D,OAAO/xN,KAAKo3F,OAAO+sD,IAAInkJ,KAAK2Q,GACnEua,EAAIra,EAAE25M,KAAK32M,GAAGgrJ,OAAO7+J,KAAKo3F,OAC1Bwb,EAAM1nF,EAOV,OANIA,EAAEm3I,IAAIriK,KAAK2Q,IAAM,EACnBiiG,EAAM1nF,EAAEs/L,KAAKxqN,KAAK2Q,GACTua,EAAEi0I,KAAK,GAAK,IACrBvsD,EAAM1nF,EAAE4+I,KAAK9pK,KAAK2Q,IAGbiiG,EAAIqhH,UAAUj0N,KACtB,EAEDs1N,EAAKprN,UAAU6kK,KAAO,SAAejlK,GAGnC,OADU9J,KAAKu1N,KAAKzrN,EAAEwpN,OAAOtzN,KAAK2Q,GAAGwzI,IAAInkJ,KAAK4yN,KACnCqB,UAAUj0N,KACtB,CAp3GH,aAq3G4CA,6BC12G5CmjK,EAAOx3B,QAAU,EAAjBw3B,2CCGA,IAAI0yM,EAAKz8L,EAAQ,OACb08L,EAAU18L,EAAAA,OAAAA,QAOV28L,EAAsB,0BACtBC,EAAmB,WAyBvB,SAASC,EAAS5uW,GAChB,IAAKA,GAAwB,kBAATA,EAClB,OAAO,EAIT,IAAI3E,EAAQqzW,EAAoB35V,KAAK/U,GACjC6uW,EAAOxzW,GAASmzW,EAAGnzW,EAAM,GAAG6N,eAEhC,OAAI2lW,GAAQA,EAAKD,QACRC,EAAKD,WAIVvzW,IAASszW,EAAiBv4V,KAAK/a,EAAM,MAChC,OAIV,CArCDipI,EAAQsqO,QAAUA,EAClBtqO,EAAQwqO,SAAW,CAAEr7H,OAAQm7H,GAC7BtqO,EAAQ2sD,YA4CR,SAAsB1mB,GAEpB,IAAKA,GAAsB,kBAARA,EACjB,OAAO,EAGT,IAAIskM,GAA6B,IAAtBtkM,EAAI9uK,QAAQ,KACnB6oI,EAAQmvG,OAAOlpE,GACfA,EAEJ,IAAKskM,EACH,OAAO,EAIT,IAAiC,IAA7BA,EAAKpzW,QAAQ,WAAmB,CAClC,IAAImzW,EAAUtqO,EAAQsqO,QAAQC,GAC1BD,IAASC,GAAQ,aAAeD,EAAQ1lW,cAC7C,CAED,OAAO2lW,CACR,EAhEDvqO,EAAQljF,UAyER,SAAoBphD,GAClB,IAAKA,GAAwB,kBAATA,EAClB,OAAO,EAIT,IAAI3E,EAAQqzW,EAAoB35V,KAAK/U,GAGjC+uW,EAAO1zW,GAASipI,EAAQ96F,WAAWnuC,EAAM,GAAG6N,eAEhD,IAAK6lW,IAASA,EAAKx3W,OACjB,OAAO,EAGT,OAAOw3W,EAAK,EACb,EAxFDzqO,EAAQ96F,WAAa3vC,OAAO2J,OAAO,MACnC8gI,EAAQmvG,OAgGR,SAAiB36K,GACf,IAAKA,GAAwB,kBAATA,EAClB,OAAO,EAIT,IAAI1X,EAAYqtT,EAAQ,KAAO31S,GAC5B5vD,cACAokK,OAAO,GAEV,IAAKlsH,EACH,OAAO,EAGT,OAAOkjF,EAAQiP,MAAMnyF,KAAc,CACpC,EA9GDkjF,EAAQiP,MAAQ15I,OAAO2J,OAAO,MAqH9B,SAAuBgmC,EAAY+pG,GAEjC,IAAIy7N,EAAa,CAAC,QAAS,cAAUhtW,EAAW,QAEhDnI,OAAOQ,KAAKm0W,GAAIxzW,SAAQ,SAA0BgF,GAChD,IAAI6uW,EAAOL,EAAGxuW,GACV+uW,EAAOF,EAAKrlU,WAEhB,GAAKulU,GAASA,EAAKx3W,OAAnB,CAKAiyC,EAAWxpC,GAAQ+uW,EAGnB,IAAK,IAAIx4W,EAAI,EAAGA,EAAIw4W,EAAKx3W,OAAQhB,IAAK,CACpC,IAAI6qD,EAAY2tT,EAAKx4W,GAErB,GAAIg9I,EAAMnyF,GAAY,CACpB,IAAIppC,EAAOg3V,EAAWvzW,QAAQ+yW,EAAGj7N,EAAMnyF,IAAYrmD,QAC/C5C,EAAK62W,EAAWvzW,QAAQozW,EAAK9zW,QAEjC,GAAyB,6BAArBw4I,EAAMnyF,KACPppC,EAAO7f,GAAO6f,IAAS7f,GAAyC,iBAAnCo7I,EAAMnyF,GAAWksH,OAAO,EAAG,KAEzD,QAEH,CAGD/5B,EAAMnyF,GAAaphD,CACpB,CAtBA,CAuBF,GACF,CApJDivW,CAAa3qO,EAAQ96F,WAAY86F,EAAQiP,0BCrCzC,SAAS8iB,EAAOC,EAAKlvB,GACnB,IAAKkvB,EACH,MAAM,IAAIhsJ,MAAM88H,GAAO,mBAC1B,CALD00B,EAAOx3B,QAAU+xB,EAOjBA,EAAOE,MAAQ,SAAqBhuJ,EAAGyJ,EAAGo1H,GACxC,GAAI7+H,GAAKyJ,EACP,MAAM,IAAI1H,MAAM88H,GAAQ,qBAAuB7+H,EAAI,OAASyJ,EAC/D,oCCRD,IAAIyjE,EAAQ6uD,EAkCZ,SAASkyB,EAAMC,GACb,OAAoB,IAAhBA,EAAKl/J,OACA,IAAMk/J,EAENA,CACV,CAGD,SAASrL,EAAMhkB,GAEb,IADA,IAAI77B,EAAM,GACDh1G,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAC9Bg1G,GAAOirD,EAAMpvB,EAAI7wI,GAAG0M,SAAS,KAC/B,OAAOsoG,CACR,CAfD91B,EAAMxhD,QA9BN,SAAiBmzG,EAAKsvB,GACpB,GAAIlgK,MAAMC,QAAQ2wI,GAChB,OAAOA,EAAI9+H,QACb,IAAK8+H,EACH,MAAO,GACT,IAAI77B,EAAM,GACV,GAAmB,kBAAR67B,EAAkB,CAC3B,IAAK,IAAI7wI,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAC9Bg1G,EAAIh1G,GAAc,EAAT6wI,EAAI7wI,GACf,OAAOg1G,CACR,CACD,GAAY,QAARmrD,EAAe,EACjBtvB,EAAMA,EAAI9rE,QAAQ,eAAgB,KAC1B/jE,OAAS,IAAM,IACrB6vI,EAAM,IAAMA,GACd,IAAS7wI,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,GAAK,EACnCg1G,EAAIl0G,KAAK4d,SAASmyH,EAAI7wI,GAAK6wI,EAAI7wI,EAAI,GAAI,IAC1C,MACC,IAASA,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAAK,CACnC,IAAIiW,EAAI46H,EAAIohB,WAAWjyJ,GACnBogK,EAAKnqJ,GAAK,EACVoqJ,EAAS,IAAJpqJ,EACLmqJ,EACFprD,EAAIl0G,KAAKs/J,EAAIC,GAEbrrD,EAAIl0G,KAAKu/J,EACZ,CAEH,OAAOrrD,CACR,EASD91B,EAAM+gF,MAAQA,EAQd/gF,EAAM21E,MAAQA,EAEd31E,EAAMw9D,OAAS,SAAgB38I,EAAKogK,GAClC,MAAY,QAARA,EACKtL,EAAM90J,GAENA,CACV,qBCrDD,IAAI0V,EAAI,IACJ1C,EAAQ,GAAJ0C,EACJqF,EAAQ,GAAJ/H,EACJ4H,EAAQ,GAAJG,EACJzV,EAAQ,OAAJsV,EAuIR,SAASslV,EAAO10F,EAAIz4P,EAAG4J,GACrB,KAAI6uP,EAAKz4P,GAGT,OAAIy4P,EAAS,IAAJz4P,EACAvK,KAAKQ,MAAMwiQ,EAAKz4P,GAAK,IAAM4J,EAE7BnU,KAAK8K,KAAKk4P,EAAKz4P,GAAK,IAAM4J,EAAO,GACzC,CA/HD6oJ,EAAOx3B,QAAU,SAASgyB,EAAK79J,GAC7BA,EAAUA,GAAW,CAAC,EACtB,IAyGeqpQ,EAzGX9hQ,SAAcs2J,EAClB,GAAa,WAATt2J,GAAqBs2J,EAAI/+J,OAAS,EACpC,OAkBJ,SAAegzK,GAEb,IADAA,EAAMnkI,OAAOmkI,IACLhzK,OAAS,IACf,OAEF,IAAI8D,EAAQ,wHAAwH0Z,KAClIw1J,GAEF,IAAKlvK,EACH,OAEF,IAAIgO,EAAIyL,WAAWzZ,EAAM,IAEzB,QADYA,EAAM,IAAM,MAAM6N,eAE5B,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAOG,EAAIzN,EACb,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOyN,EAAI6H,EACb,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAO7H,EAAIgI,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOhI,EAAIC,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOD,EAAI2C,EACb,IAAK,eACL,IAAK,cACL,IAAK,QACL,IAAK,OACL,IAAK,KACH,OAAO3C,EACT,QACE,OAEL,CArEUuQ,CAAM08I,GACR,GAAa,WAATt2J,IAAoC,IAAf+hC,MAAMu0H,GACpC,OAAO79J,EAAQk+V,KAsGVH,EADQ10F,EArGiBxrG,EAsGdplJ,EAAG,QACnBslV,EAAO10F,EAAIzwP,EAAG,SACdmlV,EAAO10F,EAAIx4P,EAAG,WACdktV,EAAO10F,EAAI91P,EAAG,WACd81P,EAAK,MA7BT,SAAkBA,GAChB,GAAIA,GAAM5wP,EACR,OAAOpS,KAAK0L,MAAMs3P,EAAK5wP,GAAK,IAE9B,GAAI4wP,GAAMzwP,EACR,OAAOvS,KAAK0L,MAAMs3P,EAAKzwP,GAAK,IAE9B,GAAIywP,GAAMx4P,EACR,OAAOxK,KAAK0L,MAAMs3P,EAAKx4P,GAAK,IAE9B,GAAIw4P,GAAM91P,EACR,OAAOlN,KAAK0L,MAAMs3P,EAAK91P,GAAK,IAE9B,OAAO81P,EAAK,IACb,CA3FwC+0F,CAASvgM,GAEhD,MAAM,IAAIhsJ,MACR,wDACEqP,KAAKE,UAAUy8I,GAEpB,wBCZD,IAAIojL,EAAM3nK,EAAQ,MAClB,IAAIrkG,KAAKgsQ,EACR5zO,EAAAA,EAAOp4B,GAAKgsQ,EAAIhsQ,0BC1BjB,IAAIu0J,EAASlwD,EAAQ,OAErB,SAAS+zH,EAAKlsS,EAAKytG,EAAM0nK,GACvB,OAAO9sC,EAAOG,WAAW2sC,EAAWn1Q,GAAK6jB,OAAO4pF,GAAMi9D,OAAO,SAC9D,CAMD,SAAS4qM,EAAS3kM,GAChB,OAAOgY,mBAAmBhY,GACvBjvG,QAAQ,KAAK,OACbA,QAAQ,MAAM,OACdA,QAAQ,MAAM,OACdA,QAAQ,MAAM,OACdA,QAAQ,KAAK,MACjB,CAsBD,SAASsjK,EAASn8N,EAAG8J,GACnB,OAAO9J,EAAI8J,EAAI,EAAI9J,EAAI8J,GAAK,EAAI,CACjC,CAED,SAAS4iW,EAAcC,EAAYC,EAAUrjT,GAM3C,IAAI7sB,EA3BN,SAAcxlC,GACZ,IAAIC,EAAK08J,EAAKhgK,EAAM,GACpB,IAAKsD,KAAOD,EAEV,GADA28J,EAAM38J,EAAIC,GACNpD,MAAMC,QAAQ6/J,GAChB,IAAK,IAAI//J,EAAI,EAAGA,EAAI+/J,EAAI/+J,OAAQhB,IAC9BD,EAAIe,KAAK,CAACuC,EAAK08J,EAAI//J,UAClB,GAAmB,kBAAR+/J,EACd,IAAK,IAAIzf,KAAQyf,EACfhgK,EAAIe,KAAK,CAACuC,EAAM,IAAMi9I,EAAO,IAAKyf,EAAIzf,UAExCvgJ,EAAIe,KAAK,CAACuC,EAAK08J,IAEnB,OAAOhgK,CACR,CAakBiI,CAAIytD,GAEpBztD,KAAI,SAAU4V,GACb,MAAO,CAAE+6V,EAAQ/6V,EAAE,IAAK+6V,EAAQ/6V,EAAE,IAAM,IACzC,IAIAo+C,MAAK,SAAU9vD,EAAG8J,GACjB,OAAOqyN,EAAQn8N,EAAE,GAAI8J,EAAE,KAAOqyN,EAAQn8N,EAAE,GAAI8J,EAAE,GAC/C,IAIAhO,KAAI,SAAU4V,GAAK,OAAOA,EAAEqmD,KAAK,IAAM,IAIvCA,KAAK,KAQN,MANW,CACT00S,EAAQE,EAAaA,EAAW/0S,cAAgB,OAChD60S,EAAQG,GACRH,EAAQ/vU,IACRq7B,KAAK,IAGR,CAED,SAAS80S,EAAUF,EAAYC,EAAUrjT,EAAQujT,EAAiBC,GAChE,IAAI9sM,EAAOysM,EAAaC,EAAYC,EAAUrjT,GAM9C,OAAO85O,EALG,CACRypE,GAAmB,GACnBC,GAAgB,IAChBjxW,IAAI2wW,GAAS10S,KAAK,KAEJkoG,EAAM,OACvB,CAED,SAAS+sM,EAAaL,EAAYC,EAAUrjT,EAAQujT,EAAiBC,GACnE,IAAI9sM,EAAOysM,EAAaC,EAAYC,EAAUrjT,GAM9C,OAAO85O,EALG,CACRypE,GAAmB,GACnBC,GAAgB,IAChBjxW,IAAI2wW,GAAS10S,KAAK,KAEJkoG,EAAM,SACvB,CAED,SAASgtM,EAASN,EAAYC,EAAUrjT,EAAQ2jT,EAAaH,GAI3D,OAhGF,SAAc51W,EAAKytG,GACjB,OAAO46H,EAAOqtC,WAAW,YAAY7xP,OAAO4pF,GAAMp8E,KAAKrxB,EAAK,SAC7D,CA8FQg2W,CAFGD,GAAe,GADdR,EAAaC,EAAYC,EAAUrjT,GAI/C,CAED,SAASsjH,EAAWigM,EAAiBC,GAMnC,MALU,CACRD,GAAmB,GACnBC,GAAgB,IAChBjxW,IAAI2wW,GAAS10S,KAAK,IAGrB,CA2BD8pE,EAAQgrO,SAAWA,EACnBhrO,EAAQmrO,YAAcA,EACtBnrO,EAAQorO,QAAUA,EAClBprO,EAAQgrC,UAAYA,EACpBhrC,EAAQr5G,KA7BR,SAAe4kV,EAAYT,EAAYC,EAAUrjT,EAAQujT,EAAiBC,GACxE,IAAI79Q,EACAm+Q,EAAW,EAEf,OAAQD,GACN,IAAK,WACHl+Q,EAAS+9Q,EACT,MACF,IAAK,YACH/9Q,EAAS29Q,EACT,MACF,IAAK,cACH39Q,EAAS89Q,EACT,MACF,IAAK,YACH99Q,EAAS29E,EACTwgM,EAAW,EACX,MACF,QACC,MAAM,IAAIxlW,MAAM,mCAAqCulW,GAGxD,OAAOl+Q,EAAOh3F,MAAM,KAAM,GAAG2N,MAAMpR,KAAK4D,UAAWg1W,GACpD,EAODxrO,EAAQ4qO,QAAUA,EAClB5qO,EAAQ6qO,aAAeA,kCC/IvB,IAAI3xI,EAAc,SAAUlmO,GAC3B,OAAOA,IAAUA,CACjB,EAEDwkK,EAAOx3B,QAAU,SAAY7hI,EAAG8J,GAC/B,OAAU,IAAN9J,GAAiB,IAAN8J,EACP,EAAI9J,IAAM,EAAI8J,EAElB9J,IAAM8J,MAGNixN,EAAY/6N,KAAM+6N,EAAYjxN,GAIlC,sCCfD,IAAIurM,EAAS/lC,EAAQ,MACjBo4G,EAAWp4G,EAAQ,OAEnBypK,EAAiBzpK,EAAQ,OACzBq5K,EAAcr5K,EAAQ,OACtBs5K,EAAOt5K,EAAQ,OAEfknI,EAAW9uB,EAASihE,IAAevxV,QAEvCi+M,EAAOmhG,EAAU,CAChBmyC,YAAaA,EACb5P,eAAgBA,EAChB6P,KAAMA,IAGPvvL,EAAOx3B,QAAU20K,sCCfjB,IAAIuiC,EAAiBzpK,EAAQ,OAE7BjW,EAAOx3B,QAAU,WAChB,MAA4B,oBAAdzqI,OAAOw7N,GAAoBx7N,OAAOw7N,GAAKmmH,CACrD,sCCJD,IAAI4P,EAAcr5K,EAAQ,OACtB+lC,EAAS/lC,EAAQ,MAErBjW,EAAOx3B,QAAU,WAChB,IAAI20K,EAAWmyC,IAMf,OALAtzI,EAAOj+M,OAAQ,CAAEw7N,GAAI4jF,GAAY,CAChC5jF,GAAI,WACH,OAAOx7N,OAAOw7N,KAAO4jF,CACrB,IAEKA,CACP,sCCXD,IAAI82D,EACJ,IAAKl2W,OAAOQ,KAAM,CAEjB,IAAI6I,EAAMrJ,OAAOgJ,UAAU6jK,eACvBgjI,EAAQ7vS,OAAOgJ,UAAUI,SACzB+sW,EAASj+L,EAAQ,OACjBk+L,EAAep2W,OAAOgJ,UAAU66N,qBAChCwyI,GAAkBD,EAAa/4W,KAAK,CAAE+L,SAAU,MAAQ,YACxDktW,EAAkBF,EAAa/4W,MAAK,WAAc,GAAE,aACpDk5W,EAAY,CACf,WACA,iBACA,UACA,iBACA,gBACA,uBACA,eAEGC,EAA6B,SAAUltQ,GAC1C,IAAIiyD,EAAOjyD,EAAE5/F,YACb,OAAO6xJ,GAAQA,EAAKvyJ,YAAcsgG,CAClC,EACGmtQ,EAAe,CAClBC,mBAAmB,EACnBC,UAAU,EACVC,WAAW,EACXC,QAAQ,EACRC,eAAe,EACfC,SAAS,EACTC,cAAc,EACdC,aAAa,EACbC,wBAAwB,EACxBC,uBAAuB,EACvBC,cAAc,EACdC,aAAa,EACbC,cAAc,EACdC,cAAc,EACdC,SAAS,EACTC,aAAa,EACbC,YAAY,EACZC,UAAU,EACVC,UAAU,EACVC,OAAO,EACPC,kBAAkB,EAClBC,oBAAoB,EACpBC,SAAS,GAENC,EAA4B,WAE/B,GAAsB,qBAAXt2W,OAA0B,OAAO,EAC5C,IAAK,IAAIkyE,KAAKlyE,OACb,IACC,IAAK80W,EAAa,IAAM5iS,IAAMxqE,EAAIhM,KAAKsE,OAAQkyE,IAAoB,OAAdlyE,OAAOkyE,IAAoC,kBAAdlyE,OAAOkyE,GACxF,IACC2iS,EAA2B70W,OAAOkyE,GAGlC,CAFC,MAAO/tE,GACR,OAAO,CACP,CAIF,CAFC,MAAOA,GACR,OAAO,CACP,CAEF,OAAO,CACP,CAjB+B,GA8BhCowW,EAAW,SAAc51W,GACxB,IAAIs1O,EAAsB,OAAXt1O,GAAqC,kBAAXA,EACrC63O,EAAoC,sBAAvB03D,EAAMxyS,KAAKiD,GACxBswW,EAAcuF,EAAO71W,GACrB21O,EAAWL,GAAmC,oBAAvBi6D,EAAMxyS,KAAKiD,GAClC43W,EAAU,GAEd,IAAKtiI,IAAauC,IAAey4H,EAChC,MAAM,IAAI/yW,UAAU,sCAGrB,IAAIs6W,EAAY7B,GAAmBn+H,EACnC,GAAIlC,GAAY31O,EAAO5C,OAAS,IAAM2L,EAAIhM,KAAKiD,EAAQ,GACtD,IAAK,IAAI5D,EAAI,EAAGA,EAAI4D,EAAO5C,SAAUhB,EACpCw7W,EAAQ16W,KAAK+uC,OAAO7vC,IAItB,GAAIk0W,GAAetwW,EAAO5C,OAAS,EAClC,IAAK,IAAI8vB,EAAI,EAAGA,EAAIltB,EAAO5C,SAAU8vB,EACpC0qV,EAAQ16W,KAAK+uC,OAAO/e,SAGrB,IAAK,IAAIpU,KAAQ9Y,EACV63W,GAAsB,cAAT/+V,IAAyB/P,EAAIhM,KAAKiD,EAAQ8Y,IAC5D8+V,EAAQ16W,KAAK+uC,OAAOnzB,IAKvB,GAAIi9V,EAGH,IAFA,IAAI+B,EA3CqC,SAAU9uQ,GAEpD,GAAsB,qBAAX3nG,SAA2Bs2W,EACrC,OAAOzB,EAA2BltQ,GAEnC,IACC,OAAOktQ,EAA2BltQ,EAGlC,CAFC,MAAOxjG,GACR,OAAO,CACP,CACD,CAiCuBuyW,CAAqC/3W,GAElDuzE,EAAI,EAAGA,EAAI0iS,EAAU74W,SAAUm2E,EACjCukS,GAAoC,gBAAjB7B,EAAU1iS,KAAyBxqE,EAAIhM,KAAKiD,EAAQi2W,EAAU1iS,KACtFqkS,EAAQ16W,KAAK+4W,EAAU1iS,IAI1B,OAAOqkS,CACP,CACD,CACDj2M,EAAOx3B,QAAUyrO,sCCvHjB,IAAIznW,EAAQ9R,MAAMqM,UAAUyF,MACxB0nW,EAASj+L,EAAQ,OAEjBogM,EAAWt4W,OAAOQ,KAClB01W,EAAWoC,EAAW,SAAchvQ,GAAK,OAAOgvQ,EAAShvQ,EAAK,EAAG4uE,EAAQ,OAEzEqgM,EAAev4W,OAAOQ,KAE1B01W,EAAS1kB,KAAO,WACf,GAAIxxV,OAAOQ,KAAM,CAChB,IAAIg4W,EAA0B,WAE7B,IAAItwW,EAAOlI,OAAOQ,KAAKS,WACvB,OAAOiH,GAAQA,EAAKxK,SAAWuD,UAAUvD,MACzC,CAJ6B,CAI5B,EAAG,GACA86W,IACJx4W,OAAOQ,KAAO,SAAcF,GAC3B,OAAI61W,EAAO71W,GACHi4W,EAAa9pW,EAAMpR,KAAKiD,IAEzBi4W,EAAaj4W,EACpB,EAEF,MACAN,OAAOQ,KAAO01W,EAEf,OAAOl2W,OAAOQ,MAAQ01W,CACtB,EAEDj0M,EAAOx3B,QAAUyrO,kCC7BjB,IAAIrmE,EAAQ7vS,OAAOgJ,UAAUI,SAE7B64J,EAAOx3B,QAAU,SAAqBhtI,GACrC,IAAIizK,EAAMm/H,EAAMxyS,KAAKI,GACjB04W,EAAiB,uBAARzlM,EASb,OARKylM,IACJA,EAAiB,mBAARzlM,GACE,OAAVjzK,GACiB,kBAAVA,GACiB,kBAAjBA,EAAMC,QACbD,EAAMC,QAAU,GACa,sBAA7BmyS,EAAMxyS,KAAKI,EAAM6yV,SAEZ6lB,CACP,yBChBDl0M,EAAOx3B,QAAU,EAAjBw3B,2CCIA,IAAI87C,EAAO7lC,EAAQ,OAEnBztC,EAAQguO,YAAc,EAAtBhuO,OAEA,IAAIiuO,EAAgB36J,EAAKE,OAAO,iBAAiB,WAC/Cn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,WAAW44W,MACpB75W,KAAKiB,IAAI,WAAW44W,MACpB75W,KAAKiB,IAAI,kBAAkB44W,MAC3B75W,KAAKiB,IAAI,mBAAmB44W,MAC5B75W,KAAKiB,IAAI,UAAU44W,MACnB75W,KAAKiB,IAAI,UAAU44W,MACnB75W,KAAKiB,IAAI,aAAa44W,MACtB75W,KAAKiB,IAAI,aAAa44W,MACtB75W,KAAKiB,IAAI,eAAe44W,MAE3B,IACDluO,EAAQiuO,cAAgBA,EAExB,IAAIE,EAAe76J,EAAKE,OAAO,gBAAgB,WAC7Cn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,WAAW44W,MACpB75W,KAAKiB,IAAI,kBAAkB44W,MAE9B,IACDluO,EAAQmuO,aAAeA,EAEvB,IAAI7iE,EAAYh4F,EAAKE,OAAO,wBAAwB,WAClDn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,aAAa8/M,IAAIg5J,GAC1B/5W,KAAKiB,IAAI,oBAAoB+4W,SAEhC,IACDruO,EAAQsrK,UAAYA,EAEpB,IAAI8iE,EAAsB96J,EAAKE,OAAO,uBAAuB,WAC3Dn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,aAAaylN,QACtB1mN,KAAKiB,IAAI,QAAQg5W,QAAQp5J,WACzB7gN,KAAKiB,IAAI,SAASylN,QAAQ7F,WAC1B7gN,KAAKiB,IAAI,UAAU4+D,MAAM7+D,IACvBhB,KAAKiB,IAAI,KAAK44W,MACd75W,KAAKiB,IAAI,KAAK44W,MACd75W,KAAKiB,IAAI,KAAK44W,OACdh5J,WAEL,IAEGq5J,EAAiBj7J,EAAKE,OAAO,kBAAkB,WACjDn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,WAAW44W,MACpB75W,KAAKiB,IAAI,aAAa8/M,IAAIg5J,GAC1B/5W,KAAKiB,IAAI,qBAAqBk5W,SAEjC,IACDxuO,EAAQwrK,WAAa+iE,EACrB,IAAIE,EAA0Bn7J,EAAKE,OAAO,2BAA2B,WACnEn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,aAAa4+D,MAAM7+D,IAC1BhB,KAAKiB,IAAI,MAAMylN,QACf1mN,KAAKiB,IAAI,WAAW4+D,MAAM7+D,IACxBhB,KAAKiB,IAAI,OAAO4+D,MAAM7+D,IACpBhB,KAAKiB,IAAI,MAAMylN,QACf1mN,KAAKiB,IAAI,aAAa4+D,MAAM7+D,IAC1BhB,KAAKiB,IAAI,QAAQk5W,SACjBn6W,KAAKiB,IAAI,SAAS44W,QAGtB75W,KAAKiB,IAAI,UAAU4+D,MAAM7+D,IACvBhB,KAAKiB,IAAI,QAAQylN,QACjB1mN,KAAKiB,IAAI,MAAMk5W,YAIrBn6W,KAAKiB,IAAI,qBAAqBk5W,SAEjC,IAEDxuO,EAAQ0uO,oBAAsBD,EAE9B,IAAIE,EAAgBr7J,EAAKE,OAAO,iBAAiB,WAC/Cn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,WAAW44W,MACpB75W,KAAKiB,IAAI,KAAK44W,MACd75W,KAAKiB,IAAI,KAAK44W,MACd75W,KAAKiB,IAAI,KAAK44W,MACd75W,KAAKiB,IAAI,WAAW44W,MACpB75W,KAAKiB,IAAI,YAAY44W,MAExB,IACDluO,EAAQ2uO,cAAgBA,EAExB3uO,EAAQ4uO,SAAWt7J,EAAKE,OAAO,YAAY,WACzCn/M,KAAK65W,KACN,IAED,IAAIW,EAAev7J,EAAKE,OAAO,gBAAgB,WAC7Cn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,WAAW44W,MACpB75W,KAAKiB,IAAI,cAAck5W,SACvBn6W,KAAKiB,IAAI,cAAc4/M,WAAWI,SAAS,GAAGF,IAAI05J,GAClDz6W,KAAKiB,IAAI,aAAa4/M,WAAWI,SAAS,GAAG+4J,SAEhD,IACDruO,EAAQ6uO,aAAeA,EAEvB,IAAIC,EAAex7J,EAAKE,OAAO,gBAAgB,WAC7Cn/M,KAAK4gN,OAAO,CACV85J,WAAY16W,KAAK0mN,SAEpB,IAED/6E,EAAQ0M,UAAY4mE,EAAKE,OAAO,aAAa,WAC3Cn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,KAAK44W,MACd75W,KAAKiB,IAAI,KAAK44W,MAEjB,wCCpHD,IAAIc,EAAMvhM,EAAQ,OAEdwhM,EAAOD,EAAIx7J,OAAO,QAAQ,WAC5Bn/M,KAAK4gN,OAAO,CACVi6J,QAAS76W,KAAK86W,UACdC,YAAa/6W,KAAKg7W,WAErB,IAEGC,EAAqBN,EAAIx7J,OAAO,sBAAsB,WACxDn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,QAAQylN,QACjB1mN,KAAKiB,IAAI,SAAS6/M,MAErB,IAEGi5J,EAAsBY,EAAIx7J,OAAO,uBAAuB,WAC1Dn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,aAAaylN,QACtB1mN,KAAKiB,IAAI,cAAc4/M,WACvB7gN,KAAKiB,IAAI,SAASylN,QAAQ7F,WAE7B,IAEGq6J,EAAuBP,EAAIx7J,OAAO,wBAAwB,WAC5Dn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,aAAa8/M,IAAIg5J,GAC1B/5W,KAAKiB,IAAI,oBAAoB+4W,SAEhC,IAEGmB,EAA4BR,EAAIx7J,OAAO,6BAA6B,WACtEn/M,KAAKo7W,MAAMH,EACZ,IAEGI,EAAcV,EAAIx7J,OAAO,eAAe,WAC1Cn/M,KAAKs7W,MAAMH,EACZ,IAEGI,EAAOZ,EAAIx7J,OAAO,QAAQ,WAC5Bn/M,KAAK4gN,OAAO,CACV46J,YAAax7W,KAAK+gN,IAAIs6J,IAEzB,IAEGI,EAAWd,EAAIx7J,OAAO,YAAY,WACpCn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,aAAa8/M,IAAI65J,GAC1B56W,KAAKiB,IAAI,YAAY8/M,IAAI65J,GAE5B,IAEGc,EAAYf,EAAIx7J,OAAO,aAAa,WACtCn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,UAAUylN,QACnB1mN,KAAKiB,IAAI,YAAYo6N,OAAOp/F,KAAI,GAChCj8H,KAAKiB,IAAI,aAAak5W,SAEzB,IAEGwB,EAAiBhB,EAAIx7J,OAAO,kBAAkB,WAChDn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,WAAWggN,SAAS,GAAG44J,MAAMh5J,WACtC7gN,KAAKiB,IAAI,gBAAgB44W,MACzB75W,KAAKiB,IAAI,aAAa8/M,IAAIg5J,GAC1B/5W,KAAKiB,IAAI,UAAU8/M,IAAIw6J,GACvBv7W,KAAKiB,IAAI,YAAY8/M,IAAI06J,GACzBz7W,KAAKiB,IAAI,WAAW8/M,IAAIw6J,GACxBv7W,KAAKiB,IAAI,wBAAwB8/M,IAAIm6J,GACrCl7W,KAAKiB,IAAI,kBAAkBigN,SAAS,GAAG84J,SAASn5J,WAChD7gN,KAAKiB,IAAI,mBAAmBigN,SAAS,GAAG84J,SAASn5J,WACjD7gN,KAAKiB,IAAI,cAAcggN,SAAS,GAAGq6J,MAAMI,GAAW76J,WAEvD,IAEG+6J,EAAkBjB,EAAIx7J,OAAO,mBAAmB,WAClDn/M,KAAK6/D,MAAM7+D,IACThB,KAAKiB,IAAI,kBAAkB8/M,IAAI46J,GAC/B37W,KAAKiB,IAAI,sBAAsB8/M,IAAIg5J,GACnC/5W,KAAKiB,IAAI,kBAAkB+4W,SAE9B,IAED72M,EAAOx3B,QAAUiwO,uBCvFjB,IAAIC,EAAW,wHACXC,EAAa,8CACbC,EAAY,iFACZC,EAAM5iM,EAAQ,OACdi4F,EAAUj4F,EAAQ,OAClBxsC,EAASwsC,EAAAA,OAAAA,OACbjW,EAAOx3B,QAAU,SAAUswO,EAAMx2K,GAC/B,IAEIy2K,EAFAj7W,EAAMg7W,EAAK3xW,WACX5H,EAAQzB,EAAIyB,MAAMm5W,GAEtB,GAAKn5W,EAGE,CACL,IAAI8vQ,EAAQ,MAAQ9vQ,EAAM,GACtBw0K,EAAKtqC,EAAOvtH,KAAK3c,EAAM,GAAI,OAC3By5W,EAAavvO,EAAOvtH,KAAK3c,EAAM,GAAGigE,QAAQ,UAAW,IAAK,UAC1Dy5S,EAAYJ,EAAIv2K,EAAUvuB,EAAGvnK,MAAM,EAAG,GAAI2M,SAAS5Z,EAAM,GAAI,KAAKzB,IAClE4pL,EAAM,GACNg2I,EAASxvD,EAAQS,iBAAiBU,EAAO4pG,EAAWllM,GACxD2T,EAAInsL,KAAKmiU,EAAO/7S,OAAOq3V,IACvBtxL,EAAInsL,KAAKmiU,EAAO7vD,SAChBkrG,EAAYtvO,EAAOmQ,OAAO8tC,EAC3B,KAbW,CACV,IAAIwxL,EAASp7W,EAAIyB,MAAMq5W,GACvBG,EAAYtvO,EAAOvtH,KAAKg9V,EAAO,GAAG15S,QAAQ,UAAW,IAAK,SAC3D,CAYD,MAAO,CACLs0F,IAFQh2J,EAAIyB,MAAMo5W,GAAY,GAG9Bt9V,KAAM09V,EAET,yBC9BD,IAAIj9J,EAAO7lC,EAAQ,OACfkjM,EAAQljM,EAAQ,OAChBmjM,EAAUnjM,EAAQ,KAClBi4F,EAAUj4F,EAAQ,OAClBojM,EAASpjM,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OAGb,SAASy9F,EAAWv+N,GAClB,IAAImtJ,EACkB,kBAAXntJ,GAAwBs0F,EAAOk2D,SAASxqJ,KACjDmtJ,EAAWntJ,EAAOmkU,WAClBnkU,EAASA,EAAOr3C,KAEI,kBAAXq3C,IACTA,EAASs0F,EAAOvtH,KAAKi5B,IAGvB,IAIIogR,EAASgkD,EAJTC,EAAWJ,EAAQjkU,EAAQmtJ,GAE3Bp+L,EAAOs1W,EAAS1lN,IAChBz4I,EAAOm+V,EAASn+V,KAEpB,OAAQnX,GACN,IAAK,cACHq1W,EAAQz9J,EAAK06J,YAAYzpQ,OAAO1xF,EAAM,OAAOo+V,eAAeC,qBAE9D,IAAK,aAKH,OAJKH,IACHA,EAAQz9J,EAAKg4F,UAAU/mM,OAAO1xF,EAAM,QAEtCk6S,EAAUgkD,EAAMtmG,UAAUA,UAAUv0M,KAAK,MAEvC,IAAK,uBACH,OAAOo9I,EAAK66J,aAAa5pQ,OAAOwsQ,EAAMI,iBAAiBt+V,KAAM,OAC/D,IAAK,oBAEH,OADAk+V,EAAMzkG,kBAAoBykG,EAAMI,iBACzB,CACLz1W,KAAM,KACNmX,KAAMk+V,GAEV,IAAK,oBAEH,OADAA,EAAMtmG,UAAU/iN,OAAO8kN,QAAUl5D,EAAKs7J,SAASrqQ,OAAOwsQ,EAAMI,iBAAiBt+V,KAAM,OAC5E,CACLnX,KAAM,MACNmX,KAAMk+V,EAAMtmG,UAAU/iN,QAE1B,QAAS,MAAM,IAAI1hD,MAAM,kBAAoB+mT,GAGjD,IAAK,wBAEHl6S,EAyCN,SAAkBA,EAAMinL,GACtB,IAAIlrD,EAAO/7H,EAAK43P,UAAUx/F,QAAQmmM,IAAIC,UAAUziO,KAC5C0iO,EAAQ3gW,SAASkC,EAAK43P,UAAUx/F,QAAQmmM,IAAIC,UAAUC,MAAM3yW,WAAY,IACxEysQ,EAAOulG,EAAM99V,EAAK43P,UAAUx/F,QAAQiqJ,OAAO9pD,KAAKl1M,KAAK,MACrDq1G,EAAK14J,EAAK43P,UAAUx/F,QAAQiqJ,OAAO3pJ,GACnCilM,EAAa39V,EAAKy5P,kBAClBz7B,EAASlgO,SAASy6P,EAAKp1M,MAAM,KAAK,GAAI,IAAM,EAC5C1gE,EAAMu7W,EAAOjuE,WAAW9oG,EAAUlrD,EAAM0iO,EAAOzgI,EAAQ,QACvDqkF,EAASxvD,EAAQS,iBAAiBiF,EAAM91Q,EAAKi2K,GAC7C2T,EAAM,GAGV,OAFAA,EAAInsL,KAAKmiU,EAAO/7S,OAAOq3V,IACvBtxL,EAAInsL,KAAKmiU,EAAO7vD,SACTpkI,EAAOmQ,OAAO8tC,EACtB,CAtDYjU,CADPp4J,EAAOygM,EAAKo7J,oBAAoBnqQ,OAAO1xF,EAAM,OACxBinL,GAEvB,IAAK,cAGH,OADAizH,GADAgkD,EAAQz9J,EAAKk4F,WAAWjnM,OAAO1xF,EAAM,QACrB43P,UAAUA,UAAUv0M,KAAK,MAEvC,IAAK,uBACH,OAAOo9I,EAAK26J,cAAc1pQ,OAAOwsQ,EAAMzkG,kBAAmB,OAC5D,IAAK,oBACH,MAAO,CACLp3G,MAAO67M,EAAMtmG,UAAUv1G,MACvBmP,WAAYivC,EAAKu7J,aAAatqQ,OAAOwsQ,EAAMzkG,kBAAmB,OAAOjoG,YAEzE,IAAK,oBAEH,OADA0sM,EAAMtmG,UAAU/iN,OAAOukN,SAAW34D,EAAKs7J,SAASrqQ,OAAOwsQ,EAAMzkG,kBAAmB,OACzE,CACL5wQ,KAAM,MACNgsD,OAAQqpT,EAAMtmG,UAAU/iN,QAE5B,QAAS,MAAM,IAAI1hD,MAAM,kBAAoB+mT,GAGjD,IAAK,iBACH,OAAOz5G,EAAK66J,aAAa5pQ,OAAO1xF,EAAM,OACxC,IAAK,kBACH,OAAOygM,EAAK26J,cAAc1pQ,OAAO1xF,EAAM,OACzC,IAAK,kBACH,MAAO,CACLnX,KAAM,MACNgsD,OAAQ4rJ,EAAKq7J,cAAcpqQ,OAAO1xF,EAAM,QAE5C,IAAK,iBAEH,MAAO,CACLqiJ,OAFFriJ,EAAOygM,EAAKu7J,aAAatqQ,OAAO1xF,EAAM,QAExBud,WAAWp9B,MACvBqxK,WAAYxxJ,EAAKwxJ,YAErB,QAAS,MAAM,IAAIr+J,MAAM,oBAAsBtK,GAElD,CArFD87J,EAAOx3B,QAAUkrI,EAsFjBA,EAAUx+H,UAAY4mE,EAAK5mE,6BC5FE,oBAAlBn3I,OAAO2J,OAEhBs4J,EAAOx3B,QAAU,SAAkB8wB,EAAM2G,GACvC3G,EAAK4G,OAASD,EACd3G,EAAKvyJ,UAAYhJ,OAAO2J,OAAOu4J,EAAUl5J,UAAW,CAClDU,YAAa,CACXjM,MAAO89J,EACPr7J,YAAY,EACZE,UAAU,EACVD,cAAc,IAGnB,EAGD8hK,EAAOx3B,QAAU,SAAkB8wB,EAAM2G,GACvC3G,EAAK4G,OAASD,EACd,IAAIE,EAAW,WAAc,EAC7BA,EAASp5J,UAAYk5J,EAAUl5J,UAC/BuyJ,EAAKvyJ,UAAY,IAAIo5J,EACrB7G,EAAKvyJ,UAAUU,YAAc6xJ,CAC9B,qBCrBH0G,EAAOx3B,QAAU,SAAkB9iI,GACjC,OAAOA,GAAsB,kBAARA,GACI,oBAAbA,EAAIiT,MACS,oBAAbjT,EAAIurD,MACc,oBAAlBvrD,EAAIw7L,SACjB,uCCgBG64K,EAAe,WACnBvxO,EAAQ5rH,OAAS,SAASvH,GACxB,IAAK2+N,EAAS3+N,GAAI,CAEhB,IADA,IAAImuC,EAAU,GACL/oD,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IACpC+oD,EAAQjoD,KAAKmoK,EAAQ1kK,UAAUvE,KAEjC,OAAO+oD,EAAQkb,KAAK,IACrB,CAEGjkE,EAAI,EAmBR,IAnBA,IACIwL,EAAOjH,UACPmmB,EAAMlf,EAAKxK,OACXgzK,EAAMnkI,OAAOj1B,GAAGmqD,QAAQu6S,GAAc,SAASl6W,GACjD,GAAU,OAANA,EAAY,MAAO,IACvB,GAAIpF,GAAK0qB,EAAK,OAAOtlB,EACrB,OAAQA,GACN,IAAK,KAAM,OAAOyqC,OAAOrkC,EAAKxL,MAC9B,IAAK,KAAM,OAAOgF,OAAOwG,EAAKxL,MAC9B,IAAK,KACH,IACE,OAAOojB,KAAKE,UAAU9X,EAAKxL,KAG5B,CAFC,MAAO6tJ,GACP,MAAO,YACR,CACH,QACE,OAAOzoJ,EAEZ,IACQA,EAAIoG,EAAKxL,GAAIA,EAAI0qB,EAAKtlB,EAAIoG,IAAOxL,GACpCytS,EAAOroS,KAAO8zO,EAAS9zO,GACzB4uK,GAAO,IAAM5uK,EAEb4uK,GAAO,IAAM/K,EAAQ7jK,GAGzB,OAAO4uK,CACR,EAMDjmC,EAAQq0I,UAAY,SAAS92Q,EAAIulI,GAE/B,GAAI0iG,EAAYhkI,EAAAA,EAAOsiC,SACrB,OAAO,WACL,OAAO9D,EAAQq0I,UAAU92Q,EAAIulI,GAAKzsI,MAAMhC,KAAMmC,UAC/C,EAGH,IAA8B,IAA1BstI,EAAQ0tO,cACV,OAAOj0W,EAGT,IAAI2zN,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAIptF,EAAQ2tO,iBACV,MAAM,IAAIzrW,MAAM88H,GACPgB,EAAQ4tO,iBACjB5oW,QAAQ6Q,MAAMmpH,GAEdh6H,QAAQ1L,MAAM0lI,GAEhBouF,GAAS,CACV,CACD,OAAO3zN,EAAGlH,MAAMhC,KAAMmC,UACvB,CAGF,EAGD,IACIm7W,EADAC,EAAS,CAAC,EA6Bd,SAAS12M,EAAQ7lK,EAAK28K,GAEpB,IAAIo2C,EAAM,CACRssH,KAAM,GACNm9B,QAASC,GAkBX,OAfIt7W,UAAUvD,QAAU,IAAGm1N,EAAI3wM,MAAQjhB,UAAU,IAC7CA,UAAUvD,QAAU,IAAGm1N,EAAIu8E,OAASnuS,UAAU,IAC9CipS,EAAUztH,GAEZo2C,EAAIuN,WAAa3jD,EACRA,GAEThyC,EAAQ+xO,QAAQ3pJ,EAAKp2C,GAGnBwzD,EAAYpd,EAAIuN,cAAavN,EAAIuN,YAAa,GAC9C6P,EAAYpd,EAAI3wM,SAAQ2wM,EAAI3wM,MAAQ,GACpC+tN,EAAYpd,EAAIu8E,UAASv8E,EAAIu8E,QAAS,GACtCn/D,EAAYpd,EAAIqN,iBAAgBrN,EAAIqN,eAAgB,GACpDrN,EAAIu8E,SAAQv8E,EAAIypJ,QAAUG,GACvBC,EAAY7pJ,EAAK/yN,EAAK+yN,EAAI3wM,MAClC,CAmCD,SAASu6V,EAAiB/rM,EAAKisM,GAC7B,IAAIr9W,EAAQqmK,EAAQzjK,OAAOy6W,GAE3B,OAAIr9W,EACK,QAAYqmK,EAAQypI,OAAO9vS,GAAO,GAAK,IAAMoxK,EAC7C,QAAY/K,EAAQypI,OAAO9vS,GAAO,GAAK,IAEvCoxK,CAEV,CAGD,SAAS6rM,EAAe7rM,EAAKisM,GAC3B,OAAOjsM,CACR,CAcD,SAASgsM,EAAY7pJ,EAAKp1N,EAAO8kO,GAG/B,GAAI1P,EAAIqN,eACJziO,GACA06O,EAAW16O,EAAMkoK,UAEjBloK,EAAMkoK,UAAYl7B,EAAQk7B,WAExBloK,EAAMiM,aAAejM,EAAMiM,YAAYV,YAAcvL,GAAQ,CACjE,IAAIqqN,EAAMrqN,EAAMkoK,QAAQ48D,EAAc1P,GAItC,OAHKojB,EAASnuB,KACZA,EAAM40J,EAAY7pJ,EAAK/K,EAAKya,IAEvBza,CACR,CAGD,IAAIv0F,EA+FN,SAAyBs/F,EAAKp1N,GAC5B,GAAIwyO,EAAYxyO,GACd,OAAOo1N,EAAIypJ,QAAQ,YAAa,aAClC,GAAIrmI,EAASx4O,GAAQ,CACnB,IAAIm/W,EAAS,IAAO98V,KAAKE,UAAUviB,GAAOgkE,QAAQ,SAAU,IAClBA,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAAO,IACjE,OAAOoxJ,EAAIypJ,QAAQM,EAAQ,SAC5B,CACD,GAAI70L,EAAStqL,GACX,OAAOo1N,EAAIypJ,QAAQ,GAAK7+W,EAAO,UACjC,GAAIysS,EAAUzsS,GACZ,OAAOo1N,EAAIypJ,QAAQ,GAAK7+W,EAAO,WAEjC,GAAI0sS,EAAO1sS,GACT,OAAOo1N,EAAIypJ,QAAQ,OAAQ,OAC9B,CA/GiBO,CAAgBhqJ,EAAKp1N,GACrC,GAAI81H,EACF,OAAOA,EAIT,IAAI/yH,EAAOR,OAAOQ,KAAK/C,GACnBq/W,EApCN,SAAqBtuW,GACnB,IAAIy/D,EAAO,CAAC,EAMZ,OAJAz/D,EAAMrN,SAAQ,SAASs7J,EAAKmlM,GAC1B3zR,EAAKwuF,IAAO,CACb,IAEMxuF,CACR,CA4BmB8uS,CAAYv8W,GAQ9B,GANIqyN,EAAIuN,aACN5/N,EAAOR,OAAOm4N,oBAAoB16N,IAKhCmjN,EAAQnjN,KACJ+C,EAAKoB,QAAQ,YAAc,GAAKpB,EAAKoB,QAAQ,gBAAkB,GACrE,OAAOo7W,EAAYv/W,GAIrB,GAAoB,IAAhB+C,EAAK9C,OAAc,CACrB,GAAIy6O,EAAW16O,GAAQ,CACrB,IAAI2b,EAAO3b,EAAM2b,KAAO,KAAO3b,EAAM2b,KAAO,GAC5C,OAAOy5M,EAAIypJ,QAAQ,YAAcljW,EAAO,IAAK,UAC9C,CACD,GAAIiiN,EAAS59N,GACX,OAAOo1N,EAAIypJ,QAAQ3nQ,OAAO3rG,UAAUI,SAAS/L,KAAKI,GAAQ,UAE5D,GAAIwmO,EAAOxmO,GACT,OAAOo1N,EAAIypJ,QAAQh5W,KAAK0F,UAAUI,SAAS/L,KAAKI,GAAQ,QAE1D,GAAImjN,EAAQnjN,GACV,OAAOu/W,EAAYv/W,EAEtB,CAED,IA2CIqgB,EA3CA+qJ,EAAO,GAAIr6J,GAAQ,EAAOyuW,EAAS,CAAC,IAAK,MAGzCrgX,EAAQa,KACV+Q,GAAQ,EACRyuW,EAAS,CAAC,IAAK,MAIb9kI,EAAW16O,MAEborK,EAAO,cADCprK,EAAM2b,KAAO,KAAO3b,EAAM2b,KAAO,IACf,KAkB5B,OAdIiiN,EAAS59N,KACXorK,EAAO,IAAMl0D,OAAO3rG,UAAUI,SAAS/L,KAAKI,IAI1CwmO,EAAOxmO,KACTorK,EAAO,IAAMvlK,KAAK0F,UAAU6/N,YAAYxrO,KAAKI,IAI3CmjN,EAAQnjN,KACVorK,EAAO,IAAMm0M,EAAYv/W,IAGP,IAAhB+C,EAAK9C,QAAkB8Q,GAAyB,GAAhB/Q,EAAMC,OAItC6kO,EAAe,EACblH,EAAS59N,GACJo1N,EAAIypJ,QAAQ3nQ,OAAO3rG,UAAUI,SAAS/L,KAAKI,GAAQ,UAEnDo1N,EAAIypJ,QAAQ,WAAY,YAInCzpJ,EAAIssH,KAAK3hV,KAAKC,GAIZqgB,EADEtP,EAsCN,SAAqBqkN,EAAKp1N,EAAO8kO,EAAcu6I,EAAat8W,GAE1D,IADA,IAAIsd,EAAS,GACJphB,EAAI,EAAGgS,EAAIjR,EAAMC,OAAQhB,EAAIgS,IAAKhS,EACrCmwK,EAAepvK,EAAO8uC,OAAO7vC,IAC/BohB,EAAOtgB,KAAK0/W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EACjDvwU,OAAO7vC,IAAI,IAEfohB,EAAOtgB,KAAK,IAShB,OANAgD,EAAKW,SAAQ,SAASpB,GACfA,EAAIyB,MAAM,UACbsc,EAAOtgB,KAAK0/W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EACjD/8W,GAAK,GAEZ,IACM+d,CACR,CAtDYq/V,CAAYtqJ,EAAKp1N,EAAO8kO,EAAcu6I,EAAat8W,GAEnDA,EAAKkE,KAAI,SAAS3E,GACzB,OAAOm9W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EAAa/8W,EAAKyO,EACnE,IAGHqkN,EAAIssH,KAAKjzQ,MA6GX,SAA8BpuD,EAAQ+qJ,EAAMo0M,GAQ1C,GANan/V,EAAO2jI,QAAO,SAASuhE,EAAMye,GAGxC,OADIA,EAAI7/N,QAAQ,OAAS,GAAGw7W,EACrBp6J,EAAOye,EAAIhgK,QAAQ,kBAAmB,IAAI/jE,OAAS,CAC3D,GAAE,GAEU,GACX,OAAOu/W,EAAO,IACG,KAATp0M,EAAc,GAAKA,EAAO,OAC3B,IACA/qJ,EAAO6iD,KAAK,SACZ,IACAs8S,EAAO,GAGhB,OAAOA,EAAO,GAAKp0M,EAAO,IAAM/qJ,EAAO6iD,KAAK,MAAQ,IAAMs8S,EAAO,EAClE,CA7HQI,CAAqBv/V,EAAQ+qJ,EAAMo0M,IAxBjCA,EAAO,GAAKp0M,EAAOo0M,EAAO,EAyBpC,CAsBD,SAASD,EAAYv/W,GACnB,MAAO,IAAMgT,MAAMzH,UAAUI,SAAS/L,KAAKI,GAAS,GACrD,CAuBD,SAASy/W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EAAa/8W,EAAKyO,GAClE,IAAI4K,EAAMs3J,EAAKknE,EAsCf,IArCAA,EAAO53O,OAAOa,yBAAyBpD,EAAOsC,IAAQ,CAAEtC,MAAOA,EAAMsC,KAC5DuJ,IAELonK,EADEknE,EAAKruO,IACDspN,EAAIypJ,QAAQ,kBAAmB,WAE/BzpJ,EAAIypJ,QAAQ,WAAY,WAG5B1kI,EAAKruO,MACPmnK,EAAMmiD,EAAIypJ,QAAQ,WAAY,YAG7BzvM,EAAeiwM,EAAa/8W,KAC/BqZ,EAAO,IAAMrZ,EAAM,KAEhB2wK,IACCmiD,EAAIssH,KAAKv9U,QAAQg2O,EAAKn6O,OAAS,GAE/BizK,EADEy5H,EAAO5nE,GACHm6I,EAAY7pJ,EAAK+kB,EAAKn6O,MAAO,MAE7Bi/W,EAAY7pJ,EAAK+kB,EAAKn6O,MAAO8kO,EAAe,IAE5C3gO,QAAQ,OAAS,IAErB8uK,EADEliK,EACIkiK,EAAIjwG,MAAM,MAAM/7D,KAAI,SAASsvC,GACjC,MAAO,KAAOA,CACf,IAAE2sB,KAAK,MAAM8yG,OAAO,GAEf,KAAO/C,EAAIjwG,MAAM,MAAM/7D,KAAI,SAASsvC,GACxC,MAAO,MAAQA,CAChB,IAAE2sB,KAAK,OAIZ+vG,EAAMmiD,EAAIypJ,QAAQ,aAAc,YAGhCrsI,EAAY72N,GAAO,CACrB,GAAI5K,GAASzO,EAAIyB,MAAM,SACrB,OAAOkvK,GAETt3J,EAAO0G,KAAKE,UAAU,GAAKjgB,IAClByB,MAAM,iCACb4X,EAAOA,EAAKq6J,OAAO,EAAGr6J,EAAK1b,OAAS,GACpC0b,EAAOy5M,EAAIypJ,QAAQljW,EAAM,UAEzBA,EAAOA,EAAKqoD,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAChBA,QAAQ,WAAY,KAChCroD,EAAOy5M,EAAIypJ,QAAQljW,EAAM,UAE5B,CAED,OAAOA,EAAO,KAAOs3J,CACtB,CA0BD,SAAS9zK,EAAQ0gX,GACf,OAAO3gX,MAAMC,QAAQ0gX,EACtB,CAGD,SAASpzE,EAAUviS,GACjB,MAAsB,mBAARA,CACf,CAGD,SAASwiS,EAAOxiS,GACd,OAAe,OAARA,CACR,CAQD,SAASogL,EAASpgL,GAChB,MAAsB,kBAARA,CACf,CAGD,SAASsuO,EAAStuO,GAChB,MAAsB,kBAARA,CACf,CAQD,SAASsoO,EAAYtoO,GACnB,YAAe,IAARA,CACR,CAGD,SAAS0zN,EAASnW,GAChB,OAAO0wB,EAAS1wB,IAA8B,oBAAvB4e,EAAe5e,EACvC,CAGD,SAAS0wB,EAASjuO,GAChB,MAAsB,kBAARA,GAA4B,OAARA,CACnC,CAGD,SAASs8N,EAAO5sN,GACd,OAAOu+N,EAASv+N,IAA4B,kBAAtBysN,EAAezsN,EACtC,CAGD,SAASupM,EAAQ96M,GACf,OAAO8vO,EAAS9vO,KACW,mBAAtBg+N,EAAeh+N,IAA2BA,aAAa2K,MAC7D,CAGD,SAAS0nO,EAAWxwO,GAClB,MAAsB,oBAARA,CACf,CAeD,SAASm8N,EAAex6H,GACtB,OAAOtpG,OAAOgJ,UAAUI,SAAS/L,KAAKisG,EACvC,CAGD,SAASuuE,EAAIroK,GACX,OAAOA,EAAI,GAAK,IAAMA,EAAEpG,SAAS,IAAMoG,EAAEpG,SAAS,GACnD,CArbDqhI,EAAQ6tI,SAAW,SAAS/uQ,GAI1B,GAHI0mO,EAAYmsI,KACdA,EAAe7tO,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,YAAc,IAC3Ch0W,EAAMA,EAAIi3D,eACL67S,EAAO9yW,GACV,GAAI,IAAIorG,OAAO,MAAQprG,EAAM,MAAO,KAAKgT,KAAK6/V,GAAe,CAC3D,IAAIoB,EAAMjvO,EAAQivO,IAClBnB,EAAO9yW,GAAO,WACZ,IAAIgkI,EAAM9C,EAAQ5rH,OAAO/d,MAAM2pI,EAASxpI,WACxCsS,QAAQ1L,MAAM,YAAa0B,EAAKi0W,EAAKjwO,EACtC,CACF,MACC8uO,EAAO9yW,GAAO,WAAa,EAG/B,OAAO8yW,EAAO9yW,EACf,EAmCDkhI,EAAQk7B,QAAUA,EAIlBA,EAAQypI,OAAS,CACf,KAAS,CAAC,EAAG,IACb,OAAW,CAAC,EAAG,IACf,UAAc,CAAC,EAAG,IAClB,QAAY,CAAC,EAAG,IAChB,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,QAAY,CAAC,GAAI,IACjB,IAAQ,CAAC,GAAI,IACb,OAAW,CAAC,GAAI,KAIlBzpI,EAAQzjK,OAAS,CACf,QAAW,OACX,OAAU,SACV,QAAW,SACX,UAAa,OACb,KAAQ,OACR,OAAU,QACV,KAAQ,UAER,OAAU,OAkRZuoI,EAAQ7tI,QAAUA,EAKlB6tI,EAAQy/J,UAAYA,EAKpBz/J,EAAQ0/J,OAASA,EAKjB1/J,EAAQ2/J,kBAHR,SAA2BziS,GACzB,OAAc,MAAPA,CACR,EAMD8iI,EAAQs9C,SAAWA,EAKnBt9C,EAAQwrG,SAAWA,EAKnBxrG,EAAQ4/J,SAHR,SAAkB1iS,GAChB,MAAsB,kBAARA,CACf,EAMD8iI,EAAQwlG,YAAcA,EAKtBxlG,EAAQ4wF,SAAWA,EAKnB5wF,EAAQmrG,SAAWA,EAKnBnrG,EAAQw5F,OAASA,EAMjBx5F,EAAQm2E,QAAUA,EAKlBn2E,EAAQ0tG,WAAaA,EAUrB1tG,EAAQu/H,YARR,SAAqBriQ,GACnB,OAAe,OAARA,GACe,mBAARA,GACQ,kBAARA,GACQ,kBAARA,GACQ,kBAARA,GACQ,qBAARA,CACf,EAGD8iI,EAAQm3D,SAAW,EAAnBn3D,OAYA,IAAIgzO,EAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACxD,MAAO,MAAO,OAG5B,SAAS/lL,IACP,IAAIrgL,EAAI,IAAI/T,KACRE,EAAO,CAACq0K,EAAIxgK,EAAEqmW,YACN7lM,EAAIxgK,EAAEsmW,cACN9lM,EAAIxgK,EAAEumW,eAAej9S,KAAK,KACtC,MAAO,CAACtpD,EAAEg0N,UAAWoyI,EAAOpmW,EAAEwmW,YAAar6W,GAAMm9D,KAAK,IACvD,CAoCD,SAASksG,EAAe/sK,EAAKk9I,GAC3B,OAAOh9I,OAAOgJ,UAAU6jK,eAAexvK,KAAKyC,EAAKk9I,EAClD,CAlCDvS,EAAQz6H,IAAM,WACZuD,QAAQvD,IAAI,UAAW0nL,IAAajtD,EAAQ5rH,OAAO/d,MAAM2pI,EAASxpI,WACnE,EAgBDwpI,EAAQu4B,SAAW,EAAnBv4B,OAEAA,EAAQ+xO,QAAU,SAASrtV,EAAQtE,GAEjC,IAAKA,IAAQ+qN,EAAS/qN,GAAM,OAAOsE,EAInC,IAFA,IAAI3uB,EAAOR,OAAOQ,KAAKqqB,GACnBnuB,EAAI8D,EAAK9C,OACNhB,KACLyyB,EAAO3uB,EAAK9D,IAAMmuB,EAAIrqB,EAAK9D,IAE7B,OAAOyyB,CACR,oDC7iBG2uV,EAAiC,UAArBvvO,EAAQwvO,SACpBvlM,EAAON,EAAQ,OAOnB,SAAS8lM,EAAez8W,EAAO08W,GAE7B,IADA,IAAIvsQ,EAAM,GACDh1G,EAAI,EAAGA,EAAI6E,EAAM7D,OAAQhB,IAAK,CACrC,IAAI4d,EAAI/Y,EAAM7E,GAGT4d,GAAW,MAANA,IAGA,OAANA,EACEo3F,EAAIh0G,QAAkC,OAAxBg0G,EAAIA,EAAIh0G,OAAS,GACjCg0G,EAAIxlC,MACK+xS,GACTvsQ,EAAIl0G,KAAK,MAGXk0G,EAAIl0G,KAAK8c,GAEZ,CAED,OAAOo3F,CACR,CAID,SAASwsQ,EAAUzhX,GAGjB,IAFA,IAAI0iE,EAAY1iE,EAAIiB,OAAS,EACzBupC,EAAQ,EACLA,GAASk4B,IACV1iE,EAAIwqC,GADiBA,KAM3B,IADA,IAAIkN,EAAMgrB,EACHhrB,GAAO,IACR13C,EAAI03C,GADOA,KAKjB,OAAc,IAAVlN,GAAekN,IAAQgrB,EAClB1iE,EACLwqC,EAAQkN,EACH,GACF13C,EAAIgS,MAAMw4B,EAAOkN,EAAM,EAC/B,CAID,IAAIgqU,EACA,qEAGAC,EACA,gEAEAC,EAAQ,CAAC,EAGb,SAASC,EAAeC,GAEtB,IAAIrrS,EAASirS,EAAcjjW,KAAKqjW,GAC5BC,GAAUtrS,EAAO,IAAM,KAAOA,EAAO,IAAM,IAC3CwuK,EAAOxuK,EAAO,IAAM,GAEpBguK,EAAUk9H,EAAYljW,KAAKwmO,GAI/B,MAAO,CAAC88H,EAHEt9H,EAAQ,GACHA,EAAQ,GACbA,EAAQ,GAEnB,CAED,SAASu9H,EAAcx/S,GACrB,IAAIiU,EAASirS,EAAcjjW,KAAK+jD,GAC5Bu/S,EAAStrS,EAAO,IAAM,GACtBwrS,IAAUF,GAAwB,MAAdA,EAAO,GAC/B,MAAO,CACLA,OAAQA,EACRE,MAAOA,EACPC,WAAYD,KAAWxrS,EAAO,GAC9BwuK,KAAMxuK,EAAO,GAEhB,CAED,SAAS0rS,EAAiBJ,GACxB,MAAO,OAASA,EAAO/8S,QAAQ,WAAY,IAAIA,QAAQ,WAAY,KACpE,CAGD48S,EAAM92W,QAAU,WAKd,IAJA,IAAIs3W,EAAiB,GACjBC,EAAe,GACfC,GAAmB,EAEdriX,EAAIuE,UAAUvD,OAAS,EAAGhB,IAAM,EAAGA,IAAK,CAC/C,IAAIuiE,EAoBJ,GAnBIviE,GAAK,EACPuiE,EAAOh+D,UAAUvE,GACPmiX,GAOV5/S,EAAOsvE,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAY,IAAMswO,KAGZ5/S,EAAKw0G,OAAO,EAAG,GAAGpkK,gBAC3BwvW,EAAexvW,cAAgB,OACjC4vD,EAAO4/S,EAAiB,MAX1B5/S,EAAOsvE,EAAQywO,OAgBZxmM,EAAKy9D,SAASh3K,GACjB,MAAM,IAAIphE,UAAU,6CACf,GAAKohE,EAAL,CAIP,IAAIiU,EAASurS,EAAcx/S,GACvBu/S,EAAStrS,EAAOsrS,OAChBE,EAAQxrS,EAAOwrS,MACfC,EAAazrS,EAAOyrS,WACpBj9H,EAAOxuK,EAAOwuK,KAElB,KAAI88H,IACAK,GACAL,EAAOnvW,gBAAkBwvW,EAAexvW,iBAKvCwvW,IACHA,EAAiBL,GAEdO,IACHD,EAAep9H,EAAO,KAAOo9H,EAC7BC,EAAmBJ,GAGjBE,GAAkBE,GACpB,KAxBD,CA0BF,CAgBD,OAZIL,IACFG,EAAiBD,EAAiBC,IAW5BA,GAAkBE,EAAmB,KAAO,KAHpDD,EAAed,EAAec,EAAar+S,MAAM,YAClBs+S,GAAkBp+S,KAAK,QAG/C,GACR,EAGD09S,EAAM3tW,UAAY,SAASuuD,GACzB,IAAIiU,EAASurS,EAAcx/S,GACvBu/S,EAAStrS,EAAOsrS,OAChBE,EAAQxrS,EAAOwrS,MACfC,EAAazrS,EAAOyrS,WACpBj9H,EAAOxuK,EAAOwuK,KACdu9H,EAAgB,UAAU1iW,KAAKmlO,GAkBnC,OAfAA,EAAOs8H,EAAet8H,EAAKjhL,MAAM,YAAak+S,GAAYh+S,KAAK,QAEjDg+S,IACZj9H,EAAO,KAELA,GAAQu9H,IACVv9H,GAAQ,MAKNg9H,IACFF,EAASI,EAAiBJ,IAGrBA,GAAUG,EAAa,KAAO,IAAMj9H,CAC5C,EAGD28H,EAAMM,WAAa,SAAS1/S,GAC1B,OAAOw/S,EAAcx/S,GAAM0/S,UAC5B,EAEDN,EAAM19S,KAAO,WAEX,IADA,IAAI0nH,EAAQ,GACH3rL,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CACzC,IAAIiL,EAAM1G,UAAUvE,GACpB,IAAK87K,EAAKy9D,SAAStuO,GACjB,MAAM,IAAI9J,UAAU,0CAElB8J,GACF0gL,EAAM7qL,KAAKmK,EAEd,CAED,IAAIu3W,EAAS72L,EAAM1nH,KAAK,MAmBxB,MAJK,oBAAoBpkD,KAAK8rK,EAAM,MAClC62L,EAASA,EAAOz9S,QAAQ,cAAe,OAGlC48S,EAAM3tW,UAAUwuW,EACxB,EAQDb,EAAM75J,SAAW,SAASrmM,EAAM7f,GAC9B6f,EAAOkgW,EAAM92W,QAAQ4W,GACrB7f,EAAK+/W,EAAM92W,QAAQjJ,GAanB,IAVA,IAAI6gX,EAAYhhW,EAAK9O,cACjB+vW,EAAU9gX,EAAG+Q,cAEbgwW,EAAUnB,EAAU5/W,EAAGmiE,MAAM,OAE7B6+S,EAAiBpB,EAAUiB,EAAU1+S,MAAM,OAC3C8+S,EAAerB,EAAUkB,EAAQ3+S,MAAM,OAEvC/iE,EAASuH,KAAKC,IAAIo6W,EAAe5hX,OAAQ6hX,EAAa7hX,QACtD8hX,EAAkB9hX,EACbhB,EAAI,EAAGA,EAAIgB,EAAQhB,IAC1B,GAAI4iX,EAAe5iX,KAAO6iX,EAAa7iX,GAAI,CACzC8iX,EAAkB9iX,EAClB,KACD,CAGH,GAAuB,GAAnB8iX,EACF,OAAOlhX,EAGT,IAAImhX,EAAc,GAClB,IAAS/iX,EAAI8iX,EAAiB9iX,EAAI4iX,EAAe5hX,OAAQhB,IACvD+iX,EAAYjiX,KAAK,MAKnB,OAFAiiX,EAAcA,EAAY5jO,OAAOwjO,EAAQ5wW,MAAM+wW,KAE5B7+S,KAAK,KACzB,EAGD09S,EAAMqB,UAAY,SAASzgT,GAEzB,IAAKu5G,EAAKy9D,SAASh3K,GACjB,OAAOA,EAET,IAAKA,EACH,MAAO,GAGT,IAAI0gT,EAAetB,EAAM92W,QAAQ03D,GAEjC,MAAI,gBAAgB1iD,KAAKojW,GAGhB,UAAYA,EACV,aAAapjW,KAAKojW,GAGpB,eAAiBA,EAAa3nQ,UAAU,GAG1C/4C,CACR,EAGDo/S,EAAMuB,QAAU,SAAS3gT,GACvB,IAAIiU,EAASorS,EAAer/S,GACxB04C,EAAOzkC,EAAO,GACdhsD,EAAMgsD,EAAO,GAEjB,OAAKykC,GAASzwF,GAKVA,IAEFA,EAAMA,EAAIusJ,OAAO,EAAGvsJ,EAAIxpB,OAAS,IAG5Bi6G,EAAOzwF,GARL,GASV,EAGDm3V,EAAMwB,SAAW,SAAS5gT,EAAMg6D,GAC9B,IAAI3hH,EAAIgnW,EAAer/S,GAAM,GAK7B,OAHIg6D,GAAO3hH,EAAEm8J,QAAQ,EAAIx6C,EAAIv7H,UAAYu7H,IACvC3hH,EAAIA,EAAEm8J,OAAO,EAAGn8J,EAAE5Z,OAASu7H,EAAIv7H,SAE1B4Z,CACR,EAGD+mW,EAAMzJ,QAAU,SAAS31S,GACvB,OAAOq/S,EAAer/S,GAAM,EAC7B,EAGDo/S,EAAMx/V,OAAS,SAASihW,GACtB,IAAKtnM,EAAKo9D,SAASkqI,GACjB,MAAM,IAAIjiX,UACN,wDAA0DiiX,GAIhE,IAAInoQ,EAAOmoQ,EAAWnoQ,MAAQ,GAE9B,IAAK6gE,EAAKy9D,SAASt+H,GACjB,MAAM,IAAI95G,UACN,+DACOiiX,EAAWnoQ,MAIxB,IAAIzwF,EAAM44V,EAAW54V,IACjB2hJ,EAAOi3M,EAAWj3M,MAAQ,GAC9B,OAAK3hJ,EAGDA,EAAIA,EAAIxpB,OAAS,KAAO2gX,EAAM0B,IACzB74V,EAAM2hJ,EAER3hJ,EAAMm3V,EAAM0B,IAAMl3M,EALhBA,CAMV,EAGDw1M,EAAMt+V,MAAQ,SAASigW,GACrB,IAAKxnM,EAAKy9D,SAAS+pI,GACjB,MAAM,IAAIniX,UACN,uDAAyDmiX,GAG/D,IAAIC,EAAW3B,EAAe0B,GAC9B,IAAKC,GAAgC,IAApBA,EAASviX,OACxB,MAAM,IAAIG,UAAU,iBAAmBmiX,EAAa,KAEtD,MAAO,CACLroQ,KAAMsoQ,EAAS,GACf/4V,IAAK+4V,EAAS,GAAKA,EAAS,GAAGxxW,MAAM,GAAI,GACzCo6J,KAAMo3M,EAAS,GACfhnP,IAAKgnP,EAAS,GACd7mW,KAAM6mW,EAAS,GAAGxxW,MAAM,EAAGwxW,EAAS,GAAGviX,OAASuiX,EAAS,GAAGviX,QAE/D,EAGD2gX,EAAM0B,IAAM,KACZ1B,EAAM6B,UAAY,IAKlB,IAAIC,EACA,gEACAC,EAAQ,CAAC,EAGb,SAASC,EAAe9B,GACtB,OAAO4B,EAAYjlW,KAAKqjW,GAAU9vW,MAAM,EACzC,CAKD2xW,EAAM74W,QAAU,WAId,IAHA,IAAIo4W,EAAe,GACfZ,GAAmB,EAEdriX,EAAIuE,UAAUvD,OAAS,EAAGhB,IAAM,IAAMqiX,EAAkBriX,IAAK,CACpE,IAAIuiE,EAAQviE,GAAK,EAAKuE,UAAUvE,GAAK6xI,EAAQywO,MAG7C,IAAKxmM,EAAKy9D,SAASh3K,GACjB,MAAM,IAAIphE,UAAU,6CACVohE,IAIZ0gT,EAAe1gT,EAAO,IAAM0gT,EAC5BZ,EAA+B,MAAZ9/S,EAAK,GACzB,CASD,OAAS8/S,EAAmB,IAAM,KAHlCY,EAAe3B,EAAe2B,EAAal/S,MAAM,MAClBs+S,GAAkBp+S,KAAK,OAEG,GAC1D,EAIDy/S,EAAM1vW,UAAY,SAASuuD,GACzB,IAAI0/S,EAAayB,EAAMzB,WAAW1/S,GAC9BggT,EAAgBhgT,GAAkC,MAA1BA,EAAKA,EAAKvhE,OAAS,GAY/C,OATAuhE,EAAO++S,EAAe/+S,EAAKwB,MAAM,MAAOk+S,GAAYh+S,KAAK,OAE3Cg+S,IACZ1/S,EAAO,KAELA,GAAQggT,IACVhgT,GAAQ,MAGF0/S,EAAa,IAAM,IAAM1/S,CAClC,EAGDmhT,EAAMzB,WAAa,SAAS1/S,GAC1B,MAA0B,MAAnBA,EAAK1jD,OAAO,EACpB,EAGD6kW,EAAMz/S,KAAO,WAEX,IADA,IAAI1B,EAAO,GACFviE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CACzC,IAAI8rL,EAAUvnL,UAAUvE,GACxB,IAAK87K,EAAKy9D,SAASztD,GACjB,MAAM,IAAI3qL,UAAU,0CAElB2qL,IAIAvpH,GAHGA,EAGK,IAAMupH,EAFNA,EAKb,CACD,OAAO43L,EAAM1vW,UAAUuuD,EACxB,EAKDmhT,EAAM57J,SAAW,SAASrmM,EAAM7f,GAC9B6f,EAAOiiW,EAAM74W,QAAQ4W,GAAMs1J,OAAO,GAClCn1K,EAAK8hX,EAAM74W,QAAQjJ,GAAIm1K,OAAO,GAO9B,IALA,IAAI6sM,EAAYpC,EAAU//V,EAAKsiD,MAAM,MACjC4+S,EAAUnB,EAAU5/W,EAAGmiE,MAAM,MAE7B/iE,EAASuH,KAAKC,IAAIo7W,EAAU5iX,OAAQ2hX,EAAQ3hX,QAC5C8hX,EAAkB9hX,EACbhB,EAAI,EAAGA,EAAIgB,EAAQhB,IAC1B,GAAI4jX,EAAU5jX,KAAO2iX,EAAQ3iX,GAAI,CAC/B8iX,EAAkB9iX,EAClB,KACD,CAGH,IAAI+iX,EAAc,GAClB,IAAS/iX,EAAI8iX,EAAiB9iX,EAAI4jX,EAAU5iX,OAAQhB,IAClD+iX,EAAYjiX,KAAK,MAKnB,OAFAiiX,EAAcA,EAAY5jO,OAAOwjO,EAAQ5wW,MAAM+wW,KAE5B7+S,KAAK,IACzB,EAGDy/S,EAAMV,UAAY,SAASzgT,GACzB,OAAOA,CACR,EAGDmhT,EAAMR,QAAU,SAAS3gT,GACvB,IAAIiU,EAASmtS,EAAephT,GACxB04C,EAAOzkC,EAAO,GACdhsD,EAAMgsD,EAAO,GAEjB,OAAKykC,GAASzwF,GAKVA,IAEFA,EAAMA,EAAIusJ,OAAO,EAAGvsJ,EAAIxpB,OAAS,IAG5Bi6G,EAAOzwF,GARL,GASV,EAGDk5V,EAAMP,SAAW,SAAS5gT,EAAMg6D,GAC9B,IAAI3hH,EAAI+oW,EAAephT,GAAM,GAK7B,OAHIg6D,GAAO3hH,EAAEm8J,QAAQ,EAAIx6C,EAAIv7H,UAAYu7H,IACvC3hH,EAAIA,EAAEm8J,OAAO,EAAGn8J,EAAE5Z,OAASu7H,EAAIv7H,SAE1B4Z,CACR,EAGD8oW,EAAMxL,QAAU,SAAS31S,GACvB,OAAOohT,EAAephT,GAAM,EAC7B,EAGDmhT,EAAMvhW,OAAS,SAASihW,GACtB,IAAKtnM,EAAKo9D,SAASkqI,GACjB,MAAM,IAAIjiX,UACN,wDAA0DiiX,GAIhE,IAAInoQ,EAAOmoQ,EAAWnoQ,MAAQ,GAE9B,IAAK6gE,EAAKy9D,SAASt+H,GACjB,MAAM,IAAI95G,UACN,+DACOiiX,EAAWnoQ,MAMxB,OAFUmoQ,EAAW54V,IAAM44V,EAAW54V,IAAMk5V,EAAML,IAAM,KAC7CD,EAAWj3M,MAAQ,GAE/B,EAGDu3M,EAAMrgW,MAAQ,SAASigW,GACrB,IAAKxnM,EAAKy9D,SAAS+pI,GACjB,MAAM,IAAIniX,UACN,uDAAyDmiX,GAG/D,IAAIC,EAAWI,EAAeL,GAC9B,IAAKC,GAAgC,IAApBA,EAASviX,OACxB,MAAM,IAAIG,UAAU,iBAAmBmiX,EAAa,KAMtD,OAJAC,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAEtB,CACLtoQ,KAAMsoQ,EAAS,GACf/4V,IAAK+4V,EAAS,GAAKA,EAAS,GAAGxxW,MAAM,GAAI,GACzCo6J,KAAMo3M,EAAS,GACfhnP,IAAKgnP,EAAS,GACd7mW,KAAM6mW,EAAS,GAAGxxW,MAAM,EAAGwxW,EAAS,GAAGviX,OAASuiX,EAAS,GAAGviX,QAE/D,EAGD0iX,EAAML,IAAM,IACZK,EAAMF,UAAY,IAIhBj+M,EAAOx3B,QADLqzO,EACeO,EAEA+B,EAEnBn+M,EAAOx3B,QAAQ21O,MAAQA,EACvBn+M,EAAOx3B,QAAQ4zO,MAAQA,yBCnnBvB5zO,EAAQ2iK,OAAS,EAAjB3iK,OACAA,EAAQ4iK,WAAa,EAArB5iK,8BCDA,IAOI81O,EAkCAvjK,EAzCAtxE,EAASwsC,EAAAA,OAAAA,OAETsoM,EAAkBtoM,EAAQ,OAC1B6hG,EAAkB7hG,EAAQ,OAC1BshG,EAAOthG,EAAQ,OACfj8B,EAAWi8B,EAAQ,OAGnBuoM,EAASx0Q,EAAAA,EAAOm8H,QAAUn8H,EAAAA,EAAOm8H,OAAOq4I,OACxCC,EAAY,CACdz0E,IAAK,QACL,QAAS,QACTq5C,KAAM,QACNtoC,OAAQ,UACR,UAAW,UACXC,OAAQ,UACR,UAAW,UACX,UAAW,UACXC,OAAQ,WAENyjE,EAAS,GAsBb,SAASC,IACP,OAAI5jK,IAIFA,EADE/wG,EAAAA,EAAOsiC,SAAWtiC,EAAAA,EAAOsiC,QAAQyuE,SACxB/wG,EAAAA,EAAOsiC,QAAQyuE,SACjB/wG,EAAAA,EAAO40Q,eACL50Q,EAAAA,EAAO40Q,eACT50Q,EAAAA,EAAO8wG,aACL9wG,EAAAA,EAAO8wG,aAEP9wG,EAAAA,EAAOa,WAGrB,CACD,SAASg0Q,EAAev8K,EAAUlrD,EAAMy/K,EAAYp7T,EAAQm4Q,GAC1D,OAAO4qG,EAAOM,UACZ,MAAOx8K,EAAU,CAAEnrL,KAAM,WAAY,EAAO,CAAC,eAC7CrR,MAAK,SAAUhI,GACf,OAAO0gX,EAAOO,WAAW,CACvB5nW,KAAM,SACNigI,KAAMA,EACNy/K,WAAYA,EACZ7qP,KAAM,CACJ70D,KAAMy8P,IAEP91Q,EAAKrC,GAAU,EACnB,IAAEqK,MAAK,SAAU2pG,GAChB,OAAOg6B,EAAOvtH,KAAKuzF,EACpB,GACF,CAaDuwD,EAAOx3B,QAAU,SAAU85D,EAAUlrD,EAAMy/K,EAAYx9E,EAAQ7wE,EAAQtkJ,GAC/C,oBAAXskJ,IACTtkJ,EAAWskJ,EACXA,OAAStiK,GAIX,IAAI0tQ,EAAO6qG,GADXj2M,EAASA,GAAU,QACSp7J,eAE5B,GAAKwmQ,GAAkC,oBAAnB5pK,EAAAA,EAAOnkG,QAA3B,CAgBA,GAHA04W,EAAgB1nD,EAAYx9E,GAC5B/2C,EAAWtoD,EAASsoD,EAAUw1E,EAAiB,YAC/C1gI,EAAO4C,EAAS5C,EAAM0gI,EAAiB,QACf,oBAAb5zP,EAAyB,MAAM,IAAI1V,MAAM,mCApCtD,SAAyBisH,EAASv2G,GAChCu2G,EAAQ30H,MAAK,SAAU4hL,GACrBi3L,KAAc,WACZz6V,EAAS,KAAMwjK,EAChB,GACF,IAAE,SAAU7jL,GACX86W,KAAc,WACZz6V,EAASrgB,EACV,GACF,GACF,CA4BCwrO,CA3FF,SAAsBukC,GACpB,GAAI5pK,EAAAA,EAAOsiC,UAAYtiC,EAAAA,EAAOsiC,QAAQ21M,QACpC,OAAOp8U,QAAQP,SAAQ,GAEzB,IAAKk5W,IAAWA,EAAOM,YAAcN,EAAOO,WAC1C,OAAOl5W,QAAQP,SAAQ,GAEzB,QAAqBY,IAAjBw4W,EAAO9qG,GACT,OAAO8qG,EAAO9qG,GAGhB,IAAIorG,EAAOH,EADXP,EAAWA,GAAY70O,EAAOivD,MAAM,GACD4lL,EAAU,GAAI,IAAK1qG,GACnD9tQ,MAAK,WACJ,OAAO,CACR,IAAEknG,OAAM,WACP,OAAO,CACR,IAEH,OADA0xQ,EAAO9qG,GAAQorG,EACRA,CACR,CAwEgBC,CAAYrrG,GAAM9tQ,MAAK,SAAUspR,GAC9C,OAAIA,EAAayvF,EAAcv8K,EAAUlrD,EAAMy/K,EAAYx9E,EAAQu6B,GAE5D2D,EAAKj1E,EAAUlrD,EAAMy/K,EAAYx9E,EAAQ7wE,EACjD,IAAGtkJ,EAXH,MAVCy6V,KAAc,WACZ,IAAIj3L,EACJ,IACEA,EAAM6vF,EAAKj1E,EAAUlrD,EAAMy/K,EAAYx9E,EAAQ7wE,EAGhD,CAFC,MAAO3kK,GACP,OAAOqgB,EAASrgB,EACjB,CACDqgB,EAAS,KAAMwjK,EAChB,GAcJ,6BCrHGowF,YAEJ,GAAI9tK,EAAAA,EAAOsiC,SAAWtiC,EAAAA,EAAOsiC,QAAQ21M,QACnCnqE,EAAkB,aACb,GAAI9tK,EAAAA,EAAOsiC,SAAWtiC,EAAAA,EAAOsiC,QAAQ7wH,QAAS,CAGnDq8P,EAFoB3+P,SAASmzH,EAAQ7wH,QAAQ+iD,MAAM,KAAK,GAAGhyD,MAAM,GAAI,KAElC,EAAI,QAAU,QAClD,MACCsrQ,EAAkB,QAEpB93G,EAAOx3B,QAAUsvI,qBCXjB,IAAIonG,EAAYl8W,KAAK6K,IAAI,EAAG,IAAM,EAElCmyJ,EAAOx3B,QAAU,SAAUquL,EAAYx9E,GACrC,GAA0B,kBAAfw9E,EACT,MAAM,IAAIj7T,UAAU,2BAGtB,GAAIi7T,EAAa,EACf,MAAM,IAAIj7T,UAAU,kBAGtB,GAAsB,kBAAXy9O,EACT,MAAM,IAAIz9O,UAAU,2BAGtB,GAAIy9O,EAAS,GAAKA,EAAS6lI,GAAa7lI,IAAWA,EACjD,MAAM,IAAIz9O,UAAU,iBAEvB,yBClBD,IAAI+qO,EAAM1wD,EAAQ,OACd8zH,EAAY9zH,EAAQ,OACpB+zH,EAAM/zH,EAAQ,OACdxsC,EAASwsC,EAAAA,OAAAA,OAETsoM,EAAkBtoM,EAAQ,OAC1B6hG,EAAkB7hG,EAAQ,OAC1Bj8B,EAAWi8B,EAAQ,OAEnBm0H,EAAQ3gK,EAAOivD,MAAM,KACrBymL,EAAQ,CACVx4I,IAAK,GACL08G,KAAM,GACNC,OAAQ,GACRvoC,OAAQ,GACRC,OAAQ,GACRC,OAAQ,GACRmkE,OAAQ,GACR90D,UAAW,IAGb,SAASjgB,EAAMH,EAAKpsS,EAAKuhX,GACvB,IAAIrzS,EAkCN,SAAoBk+N,GAClB,SAASo1E,EAASjkW,GAChB,OAAO2uR,EAAIE,GAAKvoR,OAAOtG,GAAMmtJ,QAC9B,CACD,SAAS+2M,EAAYlkW,GACnB,OAAO,IAAI0uR,GAAYpoR,OAAOtG,GAAMmtJ,QACrC,CAED,MAAY,WAAR0hI,GAA4B,cAARA,EAA4Bq1E,EACxC,QAARr1E,EAAsBvjE,EACnB24I,CACR,CA7CYE,CAAUt1E,GACjBI,EAAqB,WAARJ,GAA4B,WAARA,EAAoB,IAAM,GAE3DpsS,EAAIrC,OAAS6uS,EACfxsS,EAAMkuE,EAAKluE,GACFA,EAAIrC,OAAS6uS,IACtBxsS,EAAM2rI,EAAOmQ,OAAO,CAAC97I,EAAKssS,GAAQE,IAKpC,IAFA,IAAIE,EAAO/gK,EAAOigI,YAAY4gC,EAAY60E,EAAMj1E,IAC5CQ,EAAOjhK,EAAOigI,YAAY4gC,EAAY60E,EAAMj1E,IACvCzvS,EAAI,EAAGA,EAAI6vS,EAAW7vS,IAC7B+vS,EAAK/vS,GAAc,GAATqD,EAAIrD,GACdiwS,EAAKjwS,GAAc,GAATqD,EAAIrD,GAGhB,IAAIglX,EAAQh2O,EAAOigI,YAAY4gC,EAAY+0E,EAAU,GACrD70E,EAAK7xR,KAAK8mW,EAAO,EAAG,EAAGn1E,GACvBztS,KAAK4iX,MAAQA,EACb5iX,KAAK6iX,MAAQl1E,EACb3tS,KAAK6tS,KAAOA,EACZ7tS,KAAKqtS,IAAMA,EACXrtS,KAAKytS,UAAYA,EACjBztS,KAAKmvE,KAAOA,EACZnvE,KAAKwc,KAAO8lW,EAAMj1E,EACnB,CAEDG,EAAKtjS,UAAUovJ,IAAM,SAAU96I,EAAMmvR,GAInC,OAHAnvR,EAAK1C,KAAK6xR,EAAM3tS,KAAKytS,WACbztS,KAAKmvE,KAAKw+N,GAChB7xR,KAAK9b,KAAK6tS,KAAM7tS,KAAKytS,WAChBztS,KAAKmvE,KAAKnvE,KAAK6tS,KACvB,EAkDD1qI,EAAOx3B,QAnCP,SAAiB85D,EAAUlrD,EAAMy/K,EAAYx9E,EAAQ7wE,GACnD+1M,EAAgB1nD,EAAYx9E,GAM5B,IAAI9R,EAAO,IAAI8iE,EAFf7hI,EAASA,GAAU,OAHnB85B,EAAWtoD,EAASsoD,EAAUw1E,EAAiB,aAC/C1gI,EAAO4C,EAAS5C,EAAM0gI,EAAiB,SAIIr8Q,QAEvCu7T,EAAKvtL,EAAOigI,YAAYrwB,GACxB49E,EAASxtL,EAAOigI,YAAYtyH,EAAK37I,OAAS,GAC9C27I,EAAKz+H,KAAKs+S,EAAQ,EAAG,EAAG7/K,EAAK37I,QAM7B,IAJA,IAAIy7T,EAAU,EACVH,EAAOooD,EAAM32M,GACb/7J,EAAIzJ,KAAK8K,KAAKurO,EAAS09E,GAElBt8T,EAAI,EAAGA,GAAKgS,EAAGhS,IAAK,CAC3Bw8T,EAAOx3H,cAAchlM,EAAG28I,EAAK37I,QAK7B,IAHA,IAAIqsQ,EAAIvgC,EAAKpxE,IAAI8gK,EAAQ1vF,EAAKk4I,OAC1B1oE,EAAIjvC,EAECv8O,EAAI,EAAGA,EAAIsrS,EAAYtrS,IAAK,CACnCwrR,EAAIxvE,EAAKpxE,IAAI4gJ,EAAGxvE,EAAKm4I,OACrB,IAAK,IAAI9tS,EAAI,EAAGA,EAAImlP,EAAMnlP,IAAKk2L,EAAEl2L,IAAMmlO,EAAEnlO,EAC1C,CAEDk2L,EAAEnvP,KAAKq+S,EAAIE,GACXA,GAAWH,CACZ,CAED,OAAOC,CACR,yBCtGD,IAAIvtL,EAASwsC,EAAAA,OAAAA,OAEbjW,EAAOx3B,QAAU,SAAUu4F,EAAOjkN,EAAU3F,GAC1C,GAAIsyH,EAAOk2D,SAASohC,GAClB,OAAOA,EACF,GAAqB,kBAAVA,EAChB,OAAOt3F,EAAOvtH,KAAK6kN,EAAOjkN,GACrB,GAAImjF,YAAYC,OAAO6gI,GAC5B,OAAOt3F,EAAOvtH,KAAK6kN,EAAM5rL,QAEzB,MAAM,IAAIv5C,UAAUub,EAAO,2DAE9B,wCCZD,2BAAG,qBAAAk5F,aAAA,OAAAA,aAAiBA,YAAY/uG,IAC9B0+J,EAAOx3B,QAAU,kBAAGn4B,YAAY/uG,KAAf,EACJ,qBAAPgrI,GAAO,UAAMA,EAAQqzO,QAC3B3/M,EAAOx3B,QAAU,kBAAIo3O,IAAmBC,GAAgB,GAAvC,EACjBF,EAASrzO,EAAQqzO,OAIjBG,GAHAF,EAAiB,WACf,IAAAG,SACQ,KADRA,EAAKJ,KACF,GAAWI,EAAG,EAFF,KAIjBC,EAA4B,IAAnB1zO,EAAQ2zO,SACjBJ,EAAeC,EAAiBE,GAC1B3+W,KAAKC,KACX0+J,EAAOx3B,QAAU,kBAAGnnI,KAAKC,MAAQ4+W,CAAhB,EACjBA,EAAW7+W,KAAKC,QAEhB0+J,EAAOx3B,QAAU,kBAAO,IAAAnnI,MAAOoiO,UAAYy8I,CAA1B,EACjBA,GAAe,IAAA7+W,MAAOoiO,UAhBxB,gCCCA,IAOI08I,EACAC,EARA9zO,EAAU0zB,EAAOx3B,QAAU,CAAC,EAUhC,SAAS63O,IACL,MAAM,IAAI7xW,MAAM,kCACnB,CACD,SAAS8xW,IACL,MAAM,IAAI9xW,MAAM,oCACnB,CAqBD,SAAS+xW,EAAWC,GAChB,GAAIL,IAAqBt1Q,WAErB,OAAOA,WAAW21Q,EAAK,GAG3B,IAAKL,IAAqBE,IAAqBF,IAAqBt1Q,WAEhE,OADAs1Q,EAAmBt1Q,WACZA,WAAW21Q,EAAK,GAE3B,IAEI,OAAOL,EAAiBK,EAAK,EAShC,CARC,MAAM38W,GACJ,IAEI,OAAOs8W,EAAiB/kX,KAAK,KAAMolX,EAAK,EAI3C,CAHC,MAAM38W,GAEJ,OAAOs8W,EAAiB/kX,KAAKyB,KAAM2jX,EAAK,EAC3C,CACJ,CAGJ,EA5CA,WACG,IAEQL,EADsB,oBAAft1Q,WACYA,WAEAw1Q,CAI1B,CAFC,MAAOx8W,GACLs8W,EAAmBE,CACtB,CACD,IAEQD,EADwB,oBAAjBv6G,aACcA,aAEAy6G,CAI5B,CAFC,MAAOz8W,GACLu8W,EAAqBE,CACxB,CAlBJ,IAwED,IAEIG,EAFAt2O,EAAQ,GACRu2O,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaD,IAGlBC,GAAW,EACPD,EAAahlX,OACb0uI,EAAQs2O,EAAa7mO,OAAOzP,GAE5Bw2O,GAAc,EAEdx2O,EAAM1uI,QACNolX,IAEP,CAED,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAIznO,EAAUsnO,EAAWK,GACzBF,GAAW,EAGX,IADA,IAAIv7V,EAAMglH,EAAM1uI,OACV0pB,GAAK,CAGP,IAFAs7V,EAAet2O,EACfA,EAAQ,KACCw2O,EAAax7V,GACds7V,GACAA,EAAaE,GAAYxqN,MAGjCwqN,GAAc,EACdx7V,EAAMglH,EAAM1uI,MACf,CACDglX,EAAe,KACfC,GAAW,EAnEf,SAAyBziB,GACrB,GAAImiB,IAAuBv6G,aAEvB,OAAOA,aAAao4F,GAGxB,IAAKmiB,IAAuBE,IAAwBF,IAAuBv6G,aAEvE,OADAu6G,EAAqBv6G,aACdA,aAAao4F,GAExB,IAEWmiB,EAAmBniB,EAU7B,CATC,MAAOp6V,GACL,IAEI,OAAOu8W,EAAmBhlX,KAAK,KAAM6iW,EAKxC,CAJC,MAAOp6V,GAGL,OAAOu8W,EAAmBhlX,KAAKyB,KAAMohW,EACxC,CACJ,CAIJ,CA0CG6iB,CAAgB7nO,EAlBf,CAmBJ,CAgBD,SAAS8nO,EAAKP,EAAKj0W,GACf1P,KAAK2jX,IAAMA,EACX3jX,KAAK0P,MAAQA,CAChB,CAWD,SAASkuK,IAAS,CA5BlBnuC,EAAQyuE,SAAW,SAAUylK,GACzB,IAAIv6W,EAAO,IAAIvL,MAAMsE,UAAUvD,OAAS,GACxC,GAAIuD,UAAUvD,OAAS,EACnB,IAAK,IAAIhB,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAClCwL,EAAKxL,EAAI,GAAKuE,UAAUvE,GAGhC0vI,EAAM5uI,KAAK,IAAIwlX,EAAKP,EAAKv6W,IACJ,IAAjBkkI,EAAM1uI,QAAiBilX,GACvBH,EAAWM,EAElB,EAODE,EAAKh6W,UAAUovJ,IAAM,WACjBt5J,KAAK2jX,IAAI3hX,MAAM,KAAMhC,KAAK0P,MAC7B,EACD+/H,EAAQwkH,MAAQ,UAChBxkH,EAAQ21M,SAAU,EAClB31M,EAAQi+F,IAAM,CAAC,EACfj+F,EAAQ00O,KAAO,GACf10O,EAAQ7wH,QAAU,GAClB6wH,EAAQ88H,SAAW,CAAC,EAIpB98H,EAAQlH,GAAKq1C,EACbnuC,EAAQmpB,YAAcglB,EACtBnuC,EAAQynB,KAAO0mB,EACfnuC,EAAQ2e,IAAMwvB,EACdnuC,EAAQymB,eAAiB0nB,EACzBnuC,EAAQ8pB,mBAAqBqkB,EAC7BnuC,EAAQ6E,KAAOspC,EACfnuC,EAAQ4uI,gBAAkBzgG,EAC1BnuC,EAAQm5J,oBAAsBhrH,EAE9BnuC,EAAQpgI,UAAY,SAAUiL,GAAQ,MAAO,EAAI,EAEjDm1H,EAAQ/7B,QAAU,SAAUp5F,GACxB,MAAM,IAAI3I,MAAM,mCACnB,EAED89H,EAAQywO,IAAM,WAAc,MAAO,GAAK,EACxCzwO,EAAQ20O,MAAQ,SAAUh8V,GACtB,MAAM,IAAIzW,MAAM,iCACnB,EACD89H,EAAQ40O,MAAQ,WAAa,OAAO,CAAI,sCC9KxC,IAAIC,EAAuBlrM,EAAQ,OAEnC,SAASmrM,IAAkB,CAC3B,SAASC,IAA2B,CACpCA,EAAuBC,kBAAoBF,EAE3CphN,EAAOx3B,QAAU,WACf,SAAS+mN,EAAKzyV,EAAOykX,EAAUC,EAAez5T,EAAU05T,EAAcl7I,GACpE,GAAIA,IAAW46I,EAAf,CAIA,IAAIzlX,EAAM,IAAI8S,MACZ,mLAKF,MADA9S,EAAIyb,KAAO,sBACLzb,CAPL,CAQF,CAED,SAASgmX,IACP,OAAOnyB,CACR,CAHDA,EAAKoyB,WAAapyB,EAMlB,IAAIqyB,EAAiB,CACnBr1W,MAAOgjV,EACP91L,OAAQ81L,EACRr3H,KAAMq3H,EACNt3N,KAAMs3N,EACN71L,OAAQ61L,EACRlxV,OAAQkxV,EACRx2U,OAAQw2U,EACR3pN,OAAQ2pN,EAER5xI,IAAK4xI,EACL9nB,QAASi6C,EACT/+W,QAAS4sV,EACTsyB,YAAatyB,EACbuyB,WAAYJ,EACZ7tQ,KAAM07O,EACNwyB,SAAUL,EACVxzL,MAAOwzL,EACPM,UAAWN,EACX7oV,MAAO6oV,EACPO,MAAOP,EAEPQ,eAAgBb,EAChBC,kBAAmBF,GAKrB,OAFAQ,EAAeO,UAAYP,EAEpBA,CACR,yBC/CC5hN,EAAOx3B,QAAUytC,EAAQ,MAARA,mCCNnBjW,EAAOx3B,QAFoB,mFCL3B,IAAI45O,EAAWnsM,EAAQ,OAGnBosM,EAAY,CAAC,EAMjBA,EAAUhsM,MAAQJ,EAAAA,MAAAA,KAAiC,SAAU8L,GAE3D,MAAO,CACLA,KAAMA,EACNk+E,OAAQl+E,EAAKviH,QAAQ,aAAc,IACnC8iT,YAAa,EACbC,SAA6B,MAAnBxgM,EAAKzoK,OAAO,GACtBuzR,UAA8B,MAAnB9qH,EAAKzoK,OAAO,GAE1B,IAMD+oW,EAAU/kJ,SAAW,SAAU7uD,EAAKwxF,GAElC,OAA4D,IAArDxxF,EAAI9uK,QAAQsgQ,EAAQxxF,EAAIhzK,OAASwkQ,EAAOxkQ,OAChD,EAMD4mX,EAAUG,SAAW,SAAU5qO,GAE7B,IAAI6qO,EAAaL,EAASM,QAAQ9qO,GAClC,OAAOyqO,EAAUhsM,MAAM72B,QAAO,SAAUolF,EAAM7iD,GAK5C,OAHyB,IAArBA,EAAKugM,aACPvgM,EAAKugM,WAAaF,EAASM,QAAQ3gM,EAAKk+E,SAErCoiH,EAAU/kJ,SAASmlJ,EAAY,IAAM1gM,EAAKugM,aAAeG,IAAe1gM,EAAKugM,WAY3EvgM,EAXE6iD,CAYV,GAAE,KACJ,EAMDp8F,EAAQm6O,WAAa,CACnBC,iBAAkB,yBAClBC,gBAAiB,6DACjBC,uBAAwB,+CACxBC,qBAAsB,6CACtBC,eAAgB,qDAChBC,gBAAiB,yDACjBC,oBAAqB,yEAuBvBb,EAAU77Q,SAAW,SAAUw4B,GAG7B,IAAImkP,EAAQf,EAASM,QAAQ1jP,GAE7B,GAAImkP,EAAM1nX,OAAS,EACjB,MAAO,mBAET,GAAI0nX,EAAM1nX,OAAS,IACjB,MAAO,kBAOT,IAHA,IACImxG,EADAw2Q,EAASD,EAAM3kT,MAAM,KAGhB/jE,EAAI,EAAGA,EAAI2oX,EAAO3nX,SAAUhB,EAAG,CAEtC,KADAmyG,EAAQw2Q,EAAO3oX,IACJgB,OACT,MAAO,kBAET,GAAImxG,EAAMnxG,OAAS,GACjB,MAAO,iBAET,GAAwB,MAApBmxG,EAAMtzF,OAAO,GACf,MAAO,yBAET,GAAuC,MAAnCszF,EAAMtzF,OAAOszF,EAAMnxG,OAAS,GAC9B,MAAO,uBAET,IAAK,gBAAgB6e,KAAKsyF,GACxB,MAAO,qBAEV,CACF,EAWD47B,EAAQ1qH,MAAQ,SAAUkhH,GAExB,GAAqB,kBAAVA,EACT,MAAM,IAAIpjI,UAAU,iCAItB,IAAIg8I,EAAS5Y,EAAMxyH,MAAM,GAAGY,cAIa,MAArCwqI,EAAOt+H,OAAOs+H,EAAOn8I,OAAS,KAChCm8I,EAASA,EAAOprI,MAAM,EAAGorI,EAAOn8I,OAAS,IAI3C,IAAImK,EAAQy8W,EAAU77Q,SAASoxC,GAC/B,GAAIhyI,EACF,MAAO,CACLo5H,MAAOA,EACPp5H,MAAO,CACLsuF,QAASs0C,EAAQm6O,WAAW/8W,GAC5BihE,KAAMjhE,IAKZ,IAAIgtJ,EAAS,CACX5zB,MAAOA,EACPqkP,IAAK,KACLC,IAAK,KACL1rO,OAAQ,KACR2rO,UAAW,KACXC,QAAQ,GAGNC,EAAc7rO,EAAOp5E,MAAM,KAG/B,GAA4C,UAAxCilT,EAAYA,EAAYhoX,OAAS,GACnC,OAAOm3J,EAGT,IAAI8wN,EAAiB,WAEnB,MAAK,OAAOppW,KAAKs9H,IAGbgb,EAAOhb,SACTgb,EAAOhb,OAASwqO,EAASM,QAAQ9vN,EAAOhb,SAEtCgb,EAAO2wN,YACT3wN,EAAO2wN,UAAYnB,EAASM,QAAQ9vN,EAAO2wN,YAEtC3wN,GAREA,CASV,EAEGmvB,EAAOsgM,EAAUG,SAAS5qO,GAG9B,IAAKmqC,EACH,OAAI0hM,EAAYhoX,OAAS,EAChBm3J,GAETA,EAAOywN,IAAMI,EAAYx5S,MACzB2oF,EAAO0wN,IAAMG,EAAYx5S,MACzB2oF,EAAOhb,OAAS,CAACgb,EAAO0wN,IAAK1wN,EAAOywN,KAAK3kT,KAAK,KAC1C+kT,EAAYhoX,SACdm3J,EAAO2wN,UAAYE,EAAYx5S,OAE1By5S,KAIT9wN,EAAO4wN,QAAS,EAEhB,IAAIG,EAAW5hM,EAAKk+E,OAAOzhM,MAAM,KAC7BolT,EAAeH,EAAYj3W,MAAM,EAAGi3W,EAAYhoX,OAASkoX,EAASloX,QAQtE,OANIsmL,EAAK8qH,WACP+2E,EAAaroX,KAAKooX,EAAS1vR,SAG7B2+D,EAAOywN,IAAMM,EAASjlT,KAAK,KAEtBklT,EAAanoX,QAIdsmL,EAAKwgM,WACPoB,EAASz+T,QAAQ0+T,EAAa35S,OAC9B2oF,EAAOywN,IAAMM,EAASjlT,KAAK,MAGxBklT,EAAanoX,QAIlBm3J,EAAO0wN,IAAMM,EAAa35S,MAC1B2oF,EAAOhb,OAAS,CAACgb,EAAO0wN,IAAM1wN,EAAOywN,KAAK3kT,KAAK,KAE3CklT,EAAanoX,SACfm3J,EAAO2wN,UAAYK,EAAallT,KAAK,MAGhCglT,KAVEA,KATAA,GAoBV,EAMDl7O,EAAQnhI,IAAM,SAAUuwI,GAEtB,OAAKA,GAGEpP,EAAQ1qH,MAAM85H,GAAQA,QAFpB,IAGV,EAMDpP,EAAQ6yN,QAAU,SAAUzjN,GAE1B,IAAIgb,EAASpqB,EAAQ1qH,MAAM85H,GAC3B,OAAOi8E,QAAQjhE,EAAOhb,QAAUgb,EAAO4wN,OACxC,yBC5QDh7O,EAAQojK,cAAgB,EAAxBpjK,OACAA,EAAQujK,eAAiB,EAAzBvjK,OAEAA,EAAQqjK,eAAiB,SAAyB/tS,EAAKksK,GACrD,OAAOxhC,EAAQojK,cAAc9tS,EAAKksK,GAAK,EACxC,EAEDxhC,EAAQsjK,cAAgB,SAAwBhuS,EAAKksK,GACnD,OAAOxhC,EAAQujK,eAAejuS,EAAKksK,GAAK,EACzC,yBCTD,IAAIw9D,EAAavxD,EAAQ,OACrBxsC,EAASwsC,EAAAA,OAAAA,OAab,SAAS4tM,EAAOnzW,GACd,IAAIg3K,EAAMj+C,EAAOigI,YAAY,GAE7B,OADAhiF,EAAI+X,cAAc/uL,EAAG,GACdg3K,CACR,CAfD1nB,EAAOx3B,QAAU,SAAU6/B,EAAMljJ,GAI/B,IAHA,IAEIzU,EAFAhD,EAAI+7H,EAAOivD,MAAM,GACjBj+L,EAAI,EAEDiT,EAAEjS,OAAS0pB,GAChBzU,EAAImzW,EAAMppX,KACViT,EAAI+7H,EAAOmQ,OAAO,CAAClsI,EAAG85N,EAAW,QAAQ7lN,OAAO0mJ,GAAM1mJ,OAAOjR,GAAG83J,WAElE,OAAO96J,EAAElB,MAAM,EAAG2Y,EACnB,wBCZD,SAAW66I,EAAQx3B,GACjB,aAGA,SAAS+xB,EAAQC,EAAKlvB,GACpB,IAAKkvB,EAAK,MAAM,IAAIhsJ,MAAM88H,GAAO,mBAClC,CAID,SAASy1B,EAAUzH,EAAM2G,GACvB3G,EAAK4G,OAASD,EACd,IAAIE,EAAW,WAAc,EAC7BA,EAASp5J,UAAYk5J,EAAUl5J,UAC/BuyJ,EAAKvyJ,UAAY,IAAIo5J,EACrB7G,EAAKvyJ,UAAUU,YAAc6xJ,CAC9B,CAID,SAAS1L,EAAI8L,EAAQkN,EAAMs9C,GACzB,GAAIt2D,EAAGu2D,KAAKzqD,GACV,OAAOA,EAGT78J,KAAK2lK,SAAW,EAChB3lK,KAAK25L,MAAQ,KACb35L,KAAKpB,OAAS,EAGdoB,KAAK4/J,IAAM,KAEI,OAAX/C,IACW,OAATkN,GAA0B,OAATA,IACnBs9C,EAASt9C,EACTA,EAAO,IAGT/pK,KAAKurK,MAAM1O,GAAU,EAAGkN,GAAQ,GAAIs9C,GAAU,MAEjD,CAUD,IAAIz6E,EATkB,kBAAXu2B,EACTA,EAAOx3B,QAAUolB,EAEjBplB,EAAQolB,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAGlP,SAAW,GAGd,IAEIjV,EADoB,qBAAX/pI,QAAmD,qBAAlBA,OAAO+pI,OACxC/pI,OAAO+pI,OAEPwsC,EAAAA,OAAAA,MAGZ,CADC,MAAOpyK,GACR,CA+HD,SAASugN,EAAerrM,EAAQ3M,GAC9B,IAAIsE,EAAIqI,EAAO2zI,WAAWtgJ,GAE1B,OAAIsE,GAAK,IAAMA,GAAK,GACXA,EAAI,GAEFA,GAAK,IAAMA,GAAK,IAClBA,EAAI,GAGHA,EAAI,GAAM,EAErB,CAED,SAAS2zM,EAActrM,EAAQurM,EAAYl4M,GACzC,IAAI8J,EAAIkuM,EAAcrrM,EAAQ3M,GAI9B,OAHIA,EAAQ,GAAKk4M,IACfpuM,GAAKkuM,EAAcrrM,EAAQ3M,EAAQ,IAAM,GAEpC8J,CACR,CA6CD,SAASquM,EAAW91C,EAAKzpI,EAAOkN,EAAK8uG,GAGnC,IAFA,IAAI9qI,EAAI,EACJiP,EAAMniB,KAAKC,IAAIwrK,EAAIhzK,OAAQy2C,GACtBz3C,EAAIuqC,EAAOvqC,EAAI0qB,EAAK1qB,IAAK,CAChC,IAAIiW,EAAI+9J,EAAI/hB,WAAWjyJ,GAAK,GAE5Byb,GAAK8qI,EAIH9qI,GADExF,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,CAER,CACD,OAAOwF,CACR,CApND03I,EAAGu2D,KAAO,SAAejpD,GACvB,OAAIA,aAAetN,GAIJ,OAARsN,GAA+B,kBAARA,GAC5BA,EAAIzzJ,YAAYi3I,WAAakP,EAAGlP,UAAYhkJ,MAAMC,QAAQugK,EAAIs7B,MACjE,EAED5oC,EAAG1qJ,IAAM,SAAclC,EAAMoC,GAC3B,OAAIpC,EAAKk+J,IAAI97J,GAAS,EAAUpC,EACzBoC,CACR,EAEDwqJ,EAAG3qJ,IAAM,SAAcjC,EAAMoC,GAC3B,OAAIpC,EAAKk+J,IAAI97J,GAAS,EAAUpC,EACzBoC,CACR,EAEDwqJ,EAAG7mJ,UAAUqhK,MAAQ,SAAe1O,EAAQkN,EAAMs9C,GAChD,GAAsB,kBAAXxqD,EACT,OAAO78J,KAAK2nN,YAAY9qD,EAAQkN,EAAMs9C,GAGxC,GAAsB,kBAAXxqD,EACT,OAAO78J,KAAK4nN,WAAW/qD,EAAQkN,EAAMs9C,GAG1B,QAATt9C,IACFA,EAAO,IAETrM,EAAOqM,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI5hI,EAAQ,EACM,OAFlB00H,EAASA,EAAOvyJ,WAAWq4D,QAAQ,OAAQ,KAEhC,KACTx6B,IACAnoC,KAAK2lK,SAAW,GAGdx9H,EAAQ00H,EAAOj+J,SACJ,KAATmrK,EACF/pK,KAAK6nN,UAAUhrD,EAAQ10H,EAAOk/K,IAE9BrnN,KAAK8nN,WAAWjrD,EAAQkN,EAAM5hI,GACf,OAAXk/K,GACFrnN,KAAK4nN,WAAW5nN,KAAKs7B,UAAWyuI,EAAMs9C,IAI7C,EAEDt2D,EAAG7mJ,UAAUy9M,YAAc,SAAsB9qD,EAAQkN,EAAMs9C,GACzDxqD,EAAS,IACX78J,KAAK2lK,SAAW,EAChB9I,GAAUA,GAERA,EAAS,UACX78J,KAAK25L,MAAQ,CAAW,SAAT98B,GACf78J,KAAKpB,OAAS,GACLi+J,EAAS,kBAClB78J,KAAK25L,MAAQ,CACF,SAAT98B,EACCA,EAAS,SAAa,UAEzB78J,KAAKpB,OAAS,IAEd8+J,EAAOb,EAAS,kBAChB78J,KAAK25L,MAAQ,CACF,SAAT98B,EACCA,EAAS,SAAa,SACvB,GAEF78J,KAAKpB,OAAS,GAGD,OAAXyoN,GAGJrnN,KAAK4nN,WAAW5nN,KAAKs7B,UAAWyuI,EAAMs9C,EACvC,EAEDt2D,EAAG7mJ,UAAU09M,WAAa,SAAqB/qD,EAAQkN,EAAMs9C,GAG3D,GADA3pD,EAAgC,kBAAlBb,EAAOj+J,QACjBi+J,EAAOj+J,QAAU,EAGnB,OAFAoB,KAAK25L,MAAQ,CAAE,GACf35L,KAAKpB,OAAS,EACPoB,KAGTA,KAAKpB,OAASuH,KAAK8K,KAAK4rJ,EAAOj+J,OAAS,GACxCoB,KAAK25L,MAAQ,IAAI97L,MAAMmC,KAAKpB,QAC5B,IAAK,IAAIhB,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC/BoC,KAAK25L,MAAM/7L,GAAK,EAGlB,IAAI8wB,EAAG7M,EACHusI,EAAM,EACV,GAAe,OAAXi5D,EACF,IAAKzpN,EAAIi/J,EAAOj+J,OAAS,EAAG8vB,EAAI,EAAG9wB,GAAK,EAAGA,GAAK,EAC9CikB,EAAIg7I,EAAOj/J,GAAMi/J,EAAOj/J,EAAI,IAAM,EAAMi/J,EAAOj/J,EAAI,IAAM,GACzDoC,KAAK25L,MAAMjrK,IAAO7M,GAAKusI,EAAO,SAC9BpuJ,KAAK25L,MAAMjrK,EAAI,GAAM7M,IAAO,GAAKusI,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP1/H,UAGC,GAAe,OAAX24L,EACT,IAAKzpN,EAAI,EAAG8wB,EAAI,EAAG9wB,EAAIi/J,EAAOj+J,OAAQhB,GAAK,EACzCikB,EAAIg7I,EAAOj/J,GAAMi/J,EAAOj/J,EAAI,IAAM,EAAMi/J,EAAOj/J,EAAI,IAAM,GACzDoC,KAAK25L,MAAMjrK,IAAO7M,GAAKusI,EAAO,SAC9BpuJ,KAAK25L,MAAMjrK,EAAI,GAAM7M,IAAO,GAAKusI,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP1/H,KAIN,OAAO1uB,KAAKi5K,OACb,EAwBDloB,EAAG7mJ,UAAU29M,UAAY,SAAoBhrD,EAAQ10H,EAAOk/K,GAE1DrnN,KAAKpB,OAASuH,KAAK8K,MAAM4rJ,EAAOj+J,OAASupC,GAAS,GAClDnoC,KAAK25L,MAAQ,IAAI97L,MAAMmC,KAAKpB,QAC5B,IAAK,IAAIhB,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC/BoC,KAAK25L,MAAM/7L,GAAK,EAIlB,IAGIikB,EAHAusI,EAAM,EACN1/H,EAAI,EAGR,GAAe,OAAX24L,EACF,IAAKzpN,EAAIi/J,EAAOj+J,OAAS,EAAGhB,GAAKuqC,EAAOvqC,GAAK,EAC3CikB,EAAI2lM,EAAa3qD,EAAQ10H,EAAOvqC,IAAMwwJ,EACtCpuJ,KAAK25L,MAAMjrK,IAAU,SAAJ7M,EACbusI,GAAO,IACTA,GAAO,GACP1/H,GAAK,EACL1uB,KAAK25L,MAAMjrK,IAAM7M,IAAM,IAEvBusI,GAAO,OAKX,IAAKxwJ,GADai/J,EAAOj+J,OAASupC,GACX,IAAM,EAAIA,EAAQ,EAAIA,EAAOvqC,EAAIi/J,EAAOj+J,OAAQhB,GAAK,EAC1EikB,EAAI2lM,EAAa3qD,EAAQ10H,EAAOvqC,IAAMwwJ,EACtCpuJ,KAAK25L,MAAMjrK,IAAU,SAAJ7M,EACbusI,GAAO,IACTA,GAAO,GACP1/H,GAAK,EACL1uB,KAAK25L,MAAMjrK,IAAM7M,IAAM,IAEvBusI,GAAO,EAKbpuJ,KAAKi5K,OACN,EA0BDloB,EAAG7mJ,UAAU49M,WAAa,SAAqBjrD,EAAQkN,EAAM5hI,GAE3DnoC,KAAK25L,MAAQ,CAAE,GACf35L,KAAKpB,OAAS,EAGd,IAAK,IAAImpN,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWj+C,EAClEg+C,IAEFA,IACAC,EAAWA,EAAUj+C,EAAQ,EAO7B,IALA,IAAIh7D,EAAQ8tD,EAAOj+J,OAASupC,EACxBs2H,EAAM1vD,EAAQg5G,EACd1yK,EAAMlvC,KAAKC,IAAI2oG,EAAOA,EAAQ0vD,GAAOt2H,EAErC21H,EAAO,EACFlgK,EAAIuqC,EAAOvqC,EAAIy3C,EAAKz3C,GAAKmqN,EAChCjqD,EAAO4pD,EAAU7qD,EAAQj/J,EAAGA,EAAImqN,EAASh+C,GAEzC/pK,KAAKioN,MAAMD,GACPhoN,KAAK25L,MAAM,GAAK77B,EAAO,SACzB99J,KAAK25L,MAAM,IAAM77B,EAEjB99J,KAAKkoN,OAAOpqD,GAIhB,GAAY,IAARW,EAAW,CACb,IAAIztJ,EAAM,EAGV,IAFA8sJ,EAAO4pD,EAAU7qD,EAAQj/J,EAAGi/J,EAAOj+J,OAAQmrK,GAEtCnsK,EAAI,EAAGA,EAAI6gK,EAAK7gK,IACnBoT,GAAO+4J,EAGT/pK,KAAKioN,MAAMj3M,GACPhR,KAAK25L,MAAM,GAAK77B,EAAO,SACzB99J,KAAK25L,MAAM,IAAM77B,EAEjB99J,KAAKkoN,OAAOpqD,EAEf,CAED99J,KAAKi5K,OACN,EAEDloB,EAAG7mJ,UAAU4R,KAAO,SAAe07F,GACjCA,EAAKmiF,MAAQ,IAAI97L,MAAMmC,KAAKpB,QAC5B,IAAK,IAAIhB,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC/B45G,EAAKmiF,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAE7B45G,EAAK54G,OAASoB,KAAKpB,OACnB44G,EAAKmuD,SAAW3lK,KAAK2lK,SACrBnuD,EAAKooD,IAAM5/J,KAAK4/J,GACjB,EAED7O,EAAG7mJ,UAAU4Z,MAAQ,WACnB,IAAIzK,EAAI,IAAI03I,EAAG,MAEf,OADA/wJ,KAAK8b,KAAKzC,GACHA,CACR,EAED03I,EAAG7mJ,UAAUi+M,QAAU,SAAkB3rM,GACvC,KAAOxc,KAAKpB,OAAS4d,GACnBxc,KAAK25L,MAAM35L,KAAKpB,UAAY,EAE9B,OAAOoB,IACR,EAGD+wJ,EAAG7mJ,UAAU+uK,MAAQ,WACnB,KAAOj5K,KAAKpB,OAAS,GAAqC,IAAhCoB,KAAK25L,MAAM35L,KAAKpB,OAAS,IACjDoB,KAAKpB,SAEP,OAAOoB,KAAKooN,WACb,EAEDr3D,EAAG7mJ,UAAUk+M,UAAY,WAKvB,OAHoB,IAAhBpoN,KAAKpB,QAAkC,IAAlBoB,KAAK25L,MAAM,KAClC35L,KAAK2lK,SAAW,GAEX3lK,IACR,EAED+wJ,EAAG7mJ,UAAU28J,QAAU,WACrB,OAAQ7mK,KAAK4/J,IAAM,UAAY,SAAW5/J,KAAKsK,SAAS,IAAM,GAC/D,EAgCD,IAAI+9M,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYr/M,EAAMk1J,EAAKwsB,GAC9BA,EAAIllB,SAAWtH,EAAIsH,SAAWx8J,EAAKw8J,SACnC,IAAIr9I,EAAOnf,EAAKvK,OAASy/J,EAAIz/J,OAAU,EACvCisL,EAAIjsL,OAAS0pB,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIxe,EAAoB,EAAhBX,EAAKwwL,MAAM,GACf/lL,EAAmB,EAAfyqJ,EAAIs7B,MAAM,GACdtgL,EAAIvP,EAAI8J,EAERqqJ,EAAS,SAAJ5kJ,EACLovM,EAASpvM,EAAI,SAAa,EAC9BwxK,EAAI8O,MAAM,GAAK17B,EAEf,IAAK,IAAIlpF,EAAI,EAAGA,EAAIzsD,EAAKysD,IAAK,CAM5B,IAHA,IAAI2zI,EAASD,IAAU,GACnBE,EAAgB,SAARF,EACRG,EAAOziN,KAAKC,IAAI2uE,EAAGspF,EAAIz/J,OAAS,GAC3B8vB,EAAIvoB,KAAKE,IAAI,EAAG0uE,EAAI5rE,EAAKvK,OAAS,GAAI8vB,GAAKk6L,EAAMl6L,IAAK,CAC7D,IAAI9wB,EAAKm3E,EAAIrmD,EAAK,EAIlBg6L,IADArvM,GAFAvP,EAAoB,EAAhBX,EAAKwwL,MAAM/7L,KACfgW,EAAmB,EAAfyqJ,EAAIs7B,MAAMjrK,IACFi6L,GACG,SAAa,EAC5BA,EAAY,SAAJtvM,CACT,CACDwxK,EAAI8O,MAAM5kH,GAAa,EAAR4zI,EACfF,EAAiB,EAATC,CACT,CAOD,OANc,IAAVD,EACF59B,EAAI8O,MAAM5kH,GAAa,EAAR0zI,EAEf59B,EAAIjsL,SAGCisL,EAAI5R,OACZ,CA1lBDloB,EAAG7mJ,UAAUI,SAAW,SAAmBy/J,EAAM8O,GAI/C,IAAIgS,EACJ,GAHAhS,EAAoB,EAAVA,GAAe,EAGZ,MAJb9O,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC8gB,EAAM,GAGN,IAFA,IAAIz8B,EAAM,EACNq6D,EAAQ,EACH7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CACpC,IAAIikB,EAAI7hB,KAAK25L,MAAM/7L,GACfkgK,GAA+B,UAArBj8I,GAAKusI,EAAOq6D,IAAmBn+M,SAAS,IAGpDugL,EADY,KADd49B,EAAS5mM,IAAO,GAAKusI,EAAQ,WACVxwJ,IAAMoC,KAAKpB,OAAS,EAC/BypN,EAAM,EAAIvqD,EAAKl/J,QAAUk/J,EAAO+sB,EAEhC/sB,EAAO+sB,GAEfz8B,GAAO,IACI,KACTA,GAAO,GACPxwJ,IAEH,CAID,IAHc,IAAV6qN,IACF59B,EAAM49B,EAAMn+M,SAAS,IAAMugL,GAEtBA,EAAIjsL,OAASi6K,IAAY,GAC9BgS,EAAM,IAAMA,EAKd,OAHsB,IAAlB7qL,KAAK2lK,WACPklB,EAAM,IAAMA,GAEPA,CACR,CAED,GAAI9gB,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAI8+C,EAAYP,EAAWv+C,GAEvB++C,EAAYP,EAAWx+C,GAC3B8gB,EAAM,GACN,IAAIh3K,EAAI7T,KAAK8jB,QAEb,IADAjQ,EAAE8xJ,SAAW,GACL9xJ,EAAEsvI,UAAU,CAClB,IAAI9pI,EAAIxF,EAAE4wJ,KAAKqkD,GAAWx+M,SAASy/J,GAMjC8gB,GALFh3K,EAAIA,EAAEk1M,MAAMD,IAEL3lE,SAGC9pI,EAAIwxK,EAFJw9B,EAAMQ,EAAYxvM,EAAEza,QAAUya,EAAIwxK,CAI3C,CAID,IAHI7qL,KAAKmjJ,WACP0nC,EAAM,IAAMA,GAEPA,EAAIjsL,OAASi6K,IAAY,GAC9BgS,EAAM,IAAMA,EAKd,OAHsB,IAAlB7qL,KAAK2lK,WACPklB,EAAM,IAAMA,GAEPA,CACR,CAEDntB,GAAO,EAAO,kCACf,EAED3M,EAAG7mJ,UAAUwuI,SAAW,WACtB,IAAIswE,EAAMhpN,KAAK25L,MAAM,GASrB,OARoB,IAAhB35L,KAAKpB,OACPoqN,GAAuB,SAAhBhpN,KAAK25L,MAAM,GACO,IAAhB35L,KAAKpB,QAAkC,IAAlBoB,KAAK25L,MAAM,GAEzCqvB,GAAO,iBAAoC,SAAhBhpN,KAAK25L,MAAM,GAC7B35L,KAAKpB,OAAS,GACvB8+J,GAAO,EAAO,8CAEU,IAAlB19J,KAAK2lK,UAAmBqjD,EAAMA,CACvC,EAEDj4D,EAAG7mJ,UAAUqX,OAAS,WACpB,OAAOvhB,KAAKsK,SAAS,GACtB,EAEDymJ,EAAG7mJ,UAAUizI,SAAW,SAAmBkqE,EAAQzoN,GAEjD,OADA8+J,EAAyB,qBAAX9wB,GACP5sI,KAAKipN,YAAYr8E,EAAQy6E,EAAQzoN,EACzC,EAEDmyJ,EAAG7mJ,UAAUoxB,QAAU,SAAkB+rL,EAAQzoN,GAC/C,OAAOoB,KAAKipN,YAAYprN,MAAOwpN,EAAQzoN,EACxC,EAEDmyJ,EAAG7mJ,UAAU++M,YAAc,SAAsBC,EAAW7B,EAAQzoN,GAClE,IAAIywG,EAAarvG,KAAKqvG,aAClB85G,EAAYvqN,GAAUuH,KAAKE,IAAI,EAAGgpG,GACtCquD,EAAOruD,GAAc85G,EAAW,yCAChCzrD,EAAOyrD,EAAY,EAAG,+BAEtBnpN,KAAKi5K,QACL,IAGIrlK,EAAGhW,EAHHwrN,EAA0B,OAAX/B,EACfz0G,EAAM,IAAIs2G,EAAUC,GAGpBxmN,EAAI3C,KAAK8jB,QACb,GAAKslM,EAYE,CACL,IAAKxrN,EAAI,GAAI+E,EAAEwgJ,SAAUvlJ,IACvBgW,EAAIjR,EAAE+7J,MAAM,KACZ/7J,EAAEk8J,OAAO,GAETjsD,EAAIh1G,GAAKgW,EAGX,KAAOhW,EAAIurN,EAAWvrN,IACpBg1G,EAAIh1G,GAAK,CAEZ,KAvBkB,CAEjB,IAAKA,EAAI,EAAGA,EAAIurN,EAAY95G,EAAYzxG,IACtCg1G,EAAIh1G,GAAK,EAGX,IAAKA,EAAI,GAAI+E,EAAEwgJ,SAAUvlJ,IACvBgW,EAAIjR,EAAE+7J,MAAM,KACZ/7J,EAAEk8J,OAAO,GAETjsD,EAAIu2G,EAAYvrN,EAAI,GAAKgW,CAE5B,CAaD,OAAOg/F,CACR,EAEGzsG,KAAKkjN,MACPt4D,EAAG7mJ,UAAUo/M,WAAa,SAAqBznM,GAC7C,OAAO,GAAK1b,KAAKkjN,MAAMxnM,EACxB,EAEDkvI,EAAG7mJ,UAAUo/M,WAAa,SAAqBznM,GAC7C,IAAIhR,EAAIgR,EACJxI,EAAI,EAiBR,OAhBIxI,GAAK,OACPwI,GAAK,GACLxI,KAAO,IAELA,GAAK,KACPwI,GAAK,EACLxI,KAAO,GAELA,GAAK,IACPwI,GAAK,EACLxI,KAAO,GAELA,GAAK,IACPwI,GAAK,EACLxI,KAAO,GAEFwI,EAAIxI,CACZ,EAGHkgJ,EAAG7mJ,UAAUq/M,UAAY,SAAoB1nM,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAIhR,EAAIgR,EACJxI,EAAI,EAoBR,OAnBqB,KAAZ,KAAJxI,KACHwI,GAAK,GACLxI,KAAO,IAEU,KAAV,IAAJA,KACHwI,GAAK,EACLxI,KAAO,GAES,KAAT,GAAJA,KACHwI,GAAK,EACLxI,KAAO,GAES,KAAT,EAAJA,KACHwI,GAAK,EACLxI,KAAO,GAES,KAAT,EAAJA,IACHwI,IAEKA,CACR,EAGD03I,EAAG7mJ,UAAUq0J,UAAY,WACvB,IAAI18I,EAAI7hB,KAAK25L,MAAM35L,KAAKpB,OAAS,GAC7Bo/J,EAAKh+J,KAAKspN,WAAWznM,GACzB,OAA2B,IAAnB7hB,KAAKpB,OAAS,GAAUo/J,CACjC,EAgBDjN,EAAG7mJ,UAAUs/M,SAAW,WACtB,GAAIxpN,KAAKmjJ,SAAU,OAAO,EAG1B,IADA,IAAI9pI,EAAI,EACCzb,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CACpC,IAAIgW,EAAI5T,KAAKupN,UAAUvpN,KAAK25L,MAAM/7L,IAElC,GADAyb,GAAKzF,EACK,KAANA,EAAU,KACf,CACD,OAAOyF,CACR,EAED03I,EAAG7mJ,UAAUmlG,WAAa,WACxB,OAAOlpG,KAAK8K,KAAKjR,KAAKu+J,YAAc,EACrC,EAEDxN,EAAG7mJ,UAAUo6I,OAAS,SAAiB1mI,GACrC,OAAsB,IAAlB5d,KAAK2lK,SACA3lK,KAAKsG,MAAMmjN,MAAM7rM,GAAO2wJ,MAAM,GAEhCvuK,KAAK8jB,OACb,EAEDitI,EAAG7mJ,UAAUq6I,SAAW,SAAmB3mI,GACzC,OAAI5d,KAAK0pN,MAAM9rM,EAAQ,GACd5d,KAAK2pN,KAAK/rM,GAAO2wJ,MAAM,GAAG/H,OAE5BxmK,KAAK8jB,OACb,EAEDitI,EAAG7mJ,UAAU0nJ,MAAQ,WACnB,OAAyB,IAAlB5xJ,KAAK2lK,QACb,EAGD5U,EAAG7mJ,UAAUq3J,IAAM,WACjB,OAAOvhK,KAAK8jB,QAAQ0iJ,MACrB,EAEDzV,EAAG7mJ,UAAUs8J,KAAO,WAKlB,OAJKxmK,KAAKmjJ,WACRnjJ,KAAK2lK,UAAY,GAGZ3lK,IACR,EAGD+wJ,EAAG7mJ,UAAU0/M,KAAO,SAAevrD,GACjC,KAAOr+J,KAAKpB,OAASy/J,EAAIz/J,QACvBoB,KAAK25L,MAAM35L,KAAKpB,UAAY,EAG9B,IAAK,IAAIhB,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAC9BoC,KAAK25L,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAAKygK,EAAIs7B,MAAM/7L,GAG5C,OAAOoC,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUy4C,IAAM,SAAc07G,GAE/B,OADAX,EAA0C,KAAlC19J,KAAK2lK,SAAWtH,EAAIsH,WACrB3lK,KAAK4pN,KAAKvrD,EAClB,EAGDtN,EAAG7mJ,UAAU8nJ,GAAK,SAAaqM,GAC7B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQ6+B,IAAI07G,GAC/CA,EAAIv6I,QAAQ6+B,IAAI3iD,KACxB,EAED+wJ,EAAG7mJ,UAAU2/M,IAAM,SAAcxrD,GAC/B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQ8lM,KAAKvrD,GAChDA,EAAIv6I,QAAQ8lM,KAAK5pN,KACzB,EAGD+wJ,EAAG7mJ,UAAU4/M,MAAQ,SAAgBzrD,GAEnC,IAAIzqJ,EAEFA,EADE5T,KAAKpB,OAASy/J,EAAIz/J,OAChBy/J,EAEAr+J,KAGN,IAAK,IAAIpC,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAC5BoC,KAAK25L,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAAKygK,EAAIs7B,MAAM/7L,GAK5C,OAFAoC,KAAKpB,OAASgV,EAAEhV,OAEToB,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAU6/M,KAAO,SAAe1rD,GAEjC,OADAX,EAA0C,KAAlC19J,KAAK2lK,SAAWtH,EAAIsH,WACrB3lK,KAAK8pN,MAAMzrD,EACnB,EAGDtN,EAAG7mJ,UAAU6nJ,IAAM,SAAcsM,GAC/B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQimM,KAAK1rD,GAChDA,EAAIv6I,QAAQimM,KAAK/pN,KACzB,EAED+wJ,EAAG7mJ,UAAU8/M,KAAO,SAAe3rD,GACjC,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQgmM,MAAMzrD,GACjDA,EAAIv6I,QAAQgmM,MAAM9pN,KAC1B,EAGD+wJ,EAAG7mJ,UAAU+/M,MAAQ,SAAgB5rD,GAEnC,IAAIv0J,EACA8J,EACA5T,KAAKpB,OAASy/J,EAAIz/J,QACpBkL,EAAI9J,KACJ4T,EAAIyqJ,IAEJv0J,EAAIu0J,EACJzqJ,EAAI5T,MAGN,IAAK,IAAIpC,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAC5BoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAAKgW,EAAE+lL,MAAM/7L,GAGvC,GAAIoC,OAAS8J,EACX,KAAOlM,EAAIkM,EAAElL,OAAQhB,IACnBoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAM5B,OAFAoC,KAAKpB,OAASkL,EAAElL,OAEToB,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUggN,KAAO,SAAe7rD,GAEjC,OADAX,EAA0C,KAAlC19J,KAAK2lK,SAAWtH,EAAIsH,WACrB3lK,KAAKiqN,MAAM5rD,EACnB,EAGDtN,EAAG7mJ,UAAU+nJ,IAAM,SAAcoM,GAC/B,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQomM,KAAK7rD,GAChDA,EAAIv6I,QAAQomM,KAAKlqN,KACzB,EAED+wJ,EAAG7mJ,UAAUigN,KAAO,SAAe9rD,GACjC,OAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQmmM,MAAM5rD,GACjDA,EAAIv6I,QAAQmmM,MAAMjqN,KAC1B,EAGD+wJ,EAAG7mJ,UAAUu/M,MAAQ,SAAgB7rM,GACnC8/I,EAAwB,kBAAV9/I,GAAsBA,GAAS,GAE7C,IAAIwsM,EAAsC,EAAxBjkN,KAAK8K,KAAK2M,EAAQ,IAChCysM,EAAWzsM,EAAQ,GAGvB5d,KAAKmoN,QAAQiC,GAETC,EAAW,GACbD,IAIF,IAAK,IAAIxsN,EAAI,EAAGA,EAAIwsN,EAAaxsN,IAC/BoC,KAAK25L,MAAM/7L,GAAsB,UAAhBoC,KAAK25L,MAAM/7L,GAS9B,OALIysN,EAAW,IACbrqN,KAAK25L,MAAM/7L,IAAMoC,KAAK25L,MAAM/7L,GAAM,UAAc,GAAKysN,GAIhDrqN,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUy/M,KAAO,SAAe/rM,GACjC,OAAO5d,KAAK8jB,QAAQ2lM,MAAM7rM,EAC3B,EAGDmzI,EAAG7mJ,UAAUogN,KAAO,SAAerwB,EAAKt8B,GACtCD,EAAsB,kBAARu8B,GAAoBA,GAAO,GAEzC,IAAI7rC,EAAO6rC,EAAM,GAAM,EACnBswB,EAAOtwB,EAAM,GAUjB,OARAj6L,KAAKmoN,QAAQ/5D,EAAM,GAGjBpuJ,KAAK25L,MAAMvrC,GADTuP,EACgB39J,KAAK25L,MAAMvrC,GAAQ,GAAKm8D,EAExBvqN,KAAK25L,MAAMvrC,KAAS,GAAKm8D,GAGtCvqN,KAAKi5K,OACb,EAGDloB,EAAG7mJ,UAAU4/J,KAAO,SAAezL,GACjC,IAAIhlJ,EAkBAvP,EAAG8J,EAfP,GAAsB,IAAlB5T,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAI7B,OAHA3lK,KAAK2lK,SAAW,EAChBtsJ,EAAIrZ,KAAKwqN,KAAKnsD,GACdr+J,KAAK2lK,UAAY,EACV3lK,KAAKooN,YAGP,GAAsB,IAAlBpoN,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAIpC,OAHAtH,EAAIsH,SAAW,EACftsJ,EAAIrZ,KAAKwqN,KAAKnsD,GACdA,EAAIsH,SAAW,EACRtsJ,EAAE+uM,YAKPpoN,KAAKpB,OAASy/J,EAAIz/J,QACpBkL,EAAI9J,KACJ4T,EAAIyqJ,IAEJv0J,EAAIu0J,EACJzqJ,EAAI5T,MAIN,IADA,IAAIyoN,EAAQ,EACH7qN,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAC5Byb,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,KAAwB,EAAbgW,EAAE+lL,MAAM/7L,IAAU6qN,EAC1CzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAChBovM,EAAQpvM,IAAM,GAEhB,KAAiB,IAAVovM,GAAe7qN,EAAIkM,EAAElL,OAAQhB,IAClCyb,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,IAAU6qN,EACvBzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAChBovM,EAAQpvM,IAAM,GAIhB,GADArZ,KAAKpB,OAASkL,EAAElL,OACF,IAAV6pN,EACFzoN,KAAK25L,MAAM35L,KAAKpB,QAAU6pN,EAC1BzoN,KAAKpB,cAEA,GAAIkL,IAAM9J,KACf,KAAOpC,EAAIkM,EAAElL,OAAQhB,IACnBoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAI5B,OAAOoC,IACR,EAGD+wJ,EAAG7mJ,UAAU6hB,IAAM,SAAcsyI,GAC/B,IAAIzrD,EACJ,OAAqB,IAAjByrD,EAAIsH,UAAoC,IAAlB3lK,KAAK2lK,UAC7BtH,EAAIsH,SAAW,EACf/yD,EAAM5yG,KAAKwqB,IAAI6zI,GACfA,EAAIsH,UAAY,EACT/yD,GACmB,IAAjByrD,EAAIsH,UAAoC,IAAlB3lK,KAAK2lK,UACpC3lK,KAAK2lK,SAAW,EAChB/yD,EAAMyrD,EAAI7zI,IAAIxqB,MACdA,KAAK2lK,SAAW,EACT/yD,GAGL5yG,KAAKpB,OAASy/J,EAAIz/J,OAAeoB,KAAK8jB,QAAQgmJ,KAAKzL,GAEhDA,EAAIv6I,QAAQgmJ,KAAK9pK,KACzB,EAGD+wJ,EAAG7mJ,UAAUsgN,KAAO,SAAensD,GAEjC,GAAqB,IAAjBA,EAAIsH,SAAgB,CACtBtH,EAAIsH,SAAW,EACf,IAAItsJ,EAAIrZ,KAAK8pK,KAAKzL,GAElB,OADAA,EAAIsH,SAAW,EACRtsJ,EAAE+uM,WAGV,CAAM,GAAsB,IAAlBpoN,KAAK2lK,SAId,OAHA3lK,KAAK2lK,SAAW,EAChB3lK,KAAK8pK,KAAKzL,GACVr+J,KAAK2lK,SAAW,EACT3lK,KAAKooN,YAId,IAWIt+M,EAAG8J,EAXHyuJ,EAAMriK,KAAKqiK,IAAIhE,GAGnB,GAAY,IAARgE,EAIF,OAHAriK,KAAK2lK,SAAW,EAChB3lK,KAAKpB,OAAS,EACdoB,KAAK25L,MAAM,GAAK,EACT35L,KAKLqiK,EAAM,GACRv4J,EAAI9J,KACJ4T,EAAIyqJ,IAEJv0J,EAAIu0J,EACJzqJ,EAAI5T,MAIN,IADA,IAAIyoN,EAAQ,EACH7qN,EAAI,EAAGA,EAAIgW,EAAEhV,OAAQhB,IAE5B6qN,GADApvM,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,KAAwB,EAAbgW,EAAE+lL,MAAM/7L,IAAU6qN,IAC7B,GACbzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAElB,KAAiB,IAAVovM,GAAe7qN,EAAIkM,EAAElL,OAAQhB,IAElC6qN,GADApvM,GAAkB,EAAbvP,EAAE6vL,MAAM/7L,IAAU6qN,IACV,GACbzoN,KAAK25L,MAAM/7L,GAAS,SAAJyb,EAIlB,GAAc,IAAVovM,GAAe7qN,EAAIkM,EAAElL,QAAUkL,IAAM9J,KACvC,KAAOpC,EAAIkM,EAAElL,OAAQhB,IACnBoC,KAAK25L,MAAM/7L,GAAKkM,EAAE6vL,MAAM/7L,GAU5B,OANAoC,KAAKpB,OAASuH,KAAKE,IAAIrG,KAAKpB,OAAQhB,GAEhCkM,IAAM9J,OACRA,KAAK2lK,SAAW,GAGX3lK,KAAKi5K,OACb,EAGDloB,EAAG7mJ,UAAUsgB,IAAM,SAAc6zI,GAC/B,OAAOr+J,KAAK8jB,QAAQ0mM,KAAKnsD,EAC1B,EA8CD,IAAIosD,EAAc,SAAsBthN,EAAMk1J,EAAKwsB,GACjD,IAII5sB,EACAj5D,EACAg5D,EANAl0J,EAAIX,EAAKwwL,MACT/lL,EAAIyqJ,EAAIs7B,MACRnvF,EAAIqgF,EAAI8O,MACR9lL,EAAI,EAIJwxJ,EAAY,EAAPv7J,EAAE,GACP4gN,EAAW,KAALrlD,EACNslD,EAAMtlD,IAAO,GACbnzJ,EAAY,EAAPpI,EAAE,GACP8gN,EAAW,KAAL14M,EACN24M,EAAM34M,IAAO,GACbC,EAAY,EAAPrI,EAAE,GACPghN,EAAW,KAAL34M,EACN44M,EAAM54M,IAAO,GACb64M,EAAY,EAAPlhN,EAAE,GACPmhN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrhN,EAAE,GACPshN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxhN,EAAE,GACPyhN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3hN,EAAE,GACP4hN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9hN,EAAE,GACP+hN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjiN,EAAE,GACPkiN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpiN,EAAE,GACPqiN,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbh7L,EAAY,EAAPtd,EAAE,GACPy4M,EAAW,KAALn7L,EACNo7L,EAAMp7L,IAAO,GACb9e,EAAY,EAAPwB,EAAE,GACP24M,EAAW,KAALn6M,EACNo6M,EAAMp6M,IAAO,GACbC,EAAY,EAAPuB,EAAE,GACP64M,EAAW,KAALp6M,EACNq6M,EAAMr6M,IAAO,GACbs6M,EAAY,EAAP/4M,EAAE,GACPg5M,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPl5M,EAAE,GACPm5M,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPr5M,EAAE,GACPs5M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPx5M,EAAE,GACPy5M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP35M,EAAE,GACP45M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP95M,EAAE,GACP+5M,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPj6M,EAAE,GACPk6M,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjBhjC,EAAIllB,SAAWx8J,EAAKw8J,SAAWtH,EAAIsH,SACnCklB,EAAIjsL,OAAS,GAMb,IAAImpB,IAAQlU,GAJZoqJ,EAAK93J,KAAKmN,KAAKo3M,EAAK2B,IAIE,KAAa,MAFnCrnH,GADAA,EAAM7+F,KAAKmN,KAAKo3M,EAAK4B,IACRnmN,KAAKmN,KAAKq3M,EAAK0B,GAAQ,KAEU,IAAO,EACrDx4M,IAFAmqJ,EAAK73J,KAAKmN,KAAKq3M,EAAK2B,KAEPtnH,IAAQ,IAAO,IAAMj9E,KAAO,IAAO,EAChDA,IAAM,SAENk2I,EAAK93J,KAAKmN,KAAKs3M,EAAKyB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKs3M,EAAK0B,IACRnmN,KAAKmN,KAAKu3M,EAAKwB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKu3M,EAAKyB,GAKpB,IAAInkM,IAAQtU,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK6B,GAAQ,GAIZ,KAAa,MAFnCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAK8B,GAAQ,GACvBrmN,KAAKmN,KAAKq3M,EAAK4B,GAAQ,KAEU,IAAO,EACrD14M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK6B,GAAQ,IAErBxnH,IAAQ,IAAO,IAAM78E,KAAO,IAAO,EAChDA,IAAM,SAEN81I,EAAK93J,KAAKmN,KAAKw3M,EAAKuB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKw3M,EAAKwB,IACRnmN,KAAKmN,KAAKy3M,EAAKsB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKy3M,EAAKuB,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK2B,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK4B,GAAQ,GACvBrmN,KAAKmN,KAAKu3M,EAAK0B,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK2B,GAAQ,EAKlC,IAAIwB,IAAQn6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK+B,GAAQ,GAIZ,KAAa,MAFnCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKgC,GAAQ,GACvBvmN,KAAKmN,KAAKq3M,EAAK8B,GAAQ,KAEU,IAAO,EACrD54M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK+B,GAAQ,IAErB1nH,IAAQ,IAAO,IAAMgpH,KAAO,IAAO,EAChDA,IAAM,SAEN/vD,EAAK93J,KAAKmN,KAAK23M,EAAKoB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK23M,EAAKqB,IACRnmN,KAAKmN,KAAK43M,EAAKmB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK43M,EAAKoB,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKyB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK0B,GAAQ,GACvBrmN,KAAKmN,KAAKy3M,EAAKwB,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKyB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK6B,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK8B,GAAQ,GACvBvmN,KAAKmN,KAAKu3M,EAAK4B,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK6B,GAAQ,EAKlC,IAAIuB,IAAQp6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKkC,GAAQ,GAIZ,KAAa,MAFnC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKmC,GAAQ,GACvB1mN,KAAKmN,KAAKq3M,EAAKiC,GAAQ,KAEU,IAAO,EACrD/4M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKkC,GAAQ,IAErB7nH,IAAQ,IAAO,IAAMipH,KAAO,IAAO,EAChDA,IAAM,SAENhwD,EAAK93J,KAAKmN,KAAK83M,EAAKiB,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK83M,EAAKkB,IACRnmN,KAAKmN,KAAK+3M,EAAKgB,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK+3M,EAAKiB,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKsB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKuB,GAAQ,GACvBrmN,KAAKmN,KAAK43M,EAAKqB,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKsB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK2B,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK4B,GAAQ,GACvBvmN,KAAKmN,KAAKy3M,EAAK0B,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK2B,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKgC,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKiC,GAAQ,GACvB1mN,KAAKmN,KAAKu3M,EAAK+B,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKgC,GAAQ,EAKlC,IAAIqB,IAAQr6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKqC,GAAQ,GAIZ,KAAa,MAFnC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKsC,IAAQ,GACvB7mN,KAAKmN,KAAKq3M,EAAKoC,GAAQ,KAEU,IAAO,EACrDl5M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKqC,IAAQ,IAErBhoH,IAAQ,IAAO,IAAMkpH,KAAO,IAAO,EAChDA,IAAM,SAENjwD,EAAK93J,KAAKmN,KAAKi4M,EAAKc,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKi4M,EAAKe,IACRnmN,KAAKmN,KAAKk4M,EAAKa,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKk4M,EAAKc,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKmB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKoB,GAAQ,GACvBrmN,KAAKmN,KAAK+3M,EAAKkB,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKmB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKwB,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKyB,GAAQ,GACvBvmN,KAAKmN,KAAK43M,EAAKuB,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKwB,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK8B,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK+B,GAAQ,GACvB1mN,KAAKmN,KAAKy3M,EAAK6B,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK8B,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKmC,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKoC,IAAQ,GACvB7mN,KAAKmN,KAAKu3M,EAAKkC,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKmC,IAAQ,EAKlC,IAAImB,IAAQt6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKwC,IAAQ,GAIZ,KAAa,MAFnCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKyC,IAAQ,GACvBhnN,KAAKmN,KAAKq3M,EAAKuC,IAAQ,KAEU,IAAO,EACrDr5M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKwC,IAAQ,IAErBnoH,IAAQ,IAAO,IAAMmpH,KAAO,IAAO,EAChDA,IAAM,SAENlwD,EAAK93J,KAAKmN,KAAKo4M,EAAKW,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKo4M,EAAKY,IACRnmN,KAAKmN,KAAKq4M,EAAKU,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKq4M,EAAKW,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKgB,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKiB,GAAQ,GACvBrmN,KAAKmN,KAAKk4M,EAAKe,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKgB,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKqB,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKsB,GAAQ,GACvBvmN,KAAKmN,KAAK+3M,EAAKoB,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKqB,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK2B,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK4B,GAAQ,GACvB1mN,KAAKmN,KAAK43M,EAAK0B,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK2B,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKiC,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKkC,IAAQ,GACvB7mN,KAAKmN,KAAKy3M,EAAKgC,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKiC,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKsC,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKuC,IAAQ,GACvBhnN,KAAKmN,KAAKu3M,EAAKqC,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKsC,IAAQ,EAKlC,IAAIiB,IAAQv6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK2C,IAAQ,GAIZ,KAAa,MAFnCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAK4C,IAAQ,GACvBnnN,KAAKmN,KAAKq3M,EAAK0C,IAAQ,KAEU,IAAO,EACrDx5M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK2C,IAAQ,IAErBtoH,IAAQ,IAAO,IAAMopH,KAAO,IAAO,EAChDA,IAAM,SAENnwD,EAAK93J,KAAKmN,KAAKu4M,EAAKQ,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAKu4M,EAAKS,IACRnmN,KAAKmN,KAAKw4M,EAAKO,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAKw4M,EAAKQ,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKa,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKc,GAAQ,GACvBrmN,KAAKmN,KAAKq4M,EAAKY,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKa,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKkB,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKmB,GAAQ,GACvBvmN,KAAKmN,KAAKk4M,EAAKiB,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKkB,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKwB,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKyB,GAAQ,GACvB1mN,KAAKmN,KAAK+3M,EAAKuB,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKwB,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK8B,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK+B,IAAQ,GACvB7mN,KAAKmN,KAAK43M,EAAK6B,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK8B,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKoC,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKqC,IAAQ,GACvBhnN,KAAKmN,KAAKy3M,EAAKmC,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKoC,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKyC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK0C,IAAQ,GACvBnnN,KAAKmN,KAAKu3M,EAAKwC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKyC,IAAQ,EAKlC,IAAIe,IAAQx6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAK8C,IAAQ,GAIZ,KAAa,MAFnCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAK+C,IAAQ,GACvBtnN,KAAKmN,KAAKq3M,EAAK6C,IAAQ,KAEU,IAAO,EACrD35M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAK8C,IAAQ,IAErBzoH,IAAQ,IAAO,IAAMqpH,KAAO,IAAO,EAChDA,IAAM,SAENpwD,EAAK93J,KAAKmN,KAAK04M,EAAKK,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK04M,EAAKM,IACRnmN,KAAKmN,KAAK24M,EAAKI,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK24M,EAAKK,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKU,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKW,GAAQ,GACvBrmN,KAAKmN,KAAKw4M,EAAKS,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKU,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKe,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKgB,GAAQ,GACvBvmN,KAAKmN,KAAKq4M,EAAKc,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKe,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKqB,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKsB,GAAQ,GACvB1mN,KAAKmN,KAAKk4M,EAAKoB,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKqB,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAK2B,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAK4B,IAAQ,GACvB7mN,KAAKmN,KAAK+3M,EAAK0B,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAK2B,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKiC,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKkC,IAAQ,GACvBhnN,KAAKmN,KAAK43M,EAAKgC,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKiC,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKuC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKwC,IAAQ,GACvBnnN,KAAKmN,KAAKy3M,EAAKsC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKuC,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK4C,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAK6C,IAAQ,GACvBtnN,KAAKmN,KAAKu3M,EAAK2C,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK4C,IAAQ,EAKlC,IAAIa,IAAQz6M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKiD,IAAQ,GAIZ,KAAa,MAFnC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKkD,IAAQ,GACvBznN,KAAKmN,KAAKq3M,EAAKgD,IAAQ,KAEU,IAAO,EACrD95M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKiD,IAAQ,IAErB5oH,IAAQ,IAAO,IAAMspH,KAAO,IAAO,EAChDA,IAAM,SAENrwD,EAAK93J,KAAKmN,KAAK64M,EAAKE,GAEpBrnH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKG,IACRnmN,KAAKmN,KAAK84M,EAAKC,GAAQ,EACpCruD,EAAK73J,KAAKmN,KAAK84M,EAAKE,GACpBruD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKO,GAAQ,EAElCvnH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKQ,GAAQ,GACvBrmN,KAAKmN,KAAK24M,EAAKM,GAAQ,EACpCvuD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKO,GAAQ,EAClCvuD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKY,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKa,GAAQ,GACvBvmN,KAAKmN,KAAKw4M,EAAKW,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKY,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKkB,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKmB,GAAQ,GACvB1mN,KAAKmN,KAAKq4M,EAAKiB,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKkB,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKwB,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKyB,IAAQ,GACvB7mN,KAAKmN,KAAKk4M,EAAKuB,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKwB,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAK8B,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAK+B,IAAQ,GACvBhnN,KAAKmN,KAAK+3M,EAAK6B,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAK8B,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKoC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKqC,IAAQ,GACvBnnN,KAAKmN,KAAK43M,EAAKmC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKoC,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK0C,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK2C,IAAQ,GACvBtnN,KAAKmN,KAAKy3M,EAAKyC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK0C,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAK+C,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKgD,IAAQ,GACvBznN,KAAKmN,KAAKu3M,EAAK8C,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAK+C,IAAQ,EAKlC,IAAIW,IAAQ16M,GAJZoqJ,EAAMA,EAAK93J,KAAKmN,KAAKo3M,EAAKoD,IAAQ,GAIZ,KAAa,MAFnC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo3M,EAAKqD,IAAQ,GACvB5nN,KAAKmN,KAAKq3M,EAAKmD,IAAQ,KAEU,IAAO,EACrDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq3M,EAAKoD,IAAQ,IAErB/oH,IAAQ,IAAO,IAAMupH,KAAO,IAAO,EAChDA,IAAM,SAENtwD,EAAK93J,KAAKmN,KAAK64M,EAAKI,GAEpBvnH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKK,IACRrmN,KAAKmN,KAAK84M,EAAKG,GAAQ,EACpCvuD,EAAK73J,KAAKmN,KAAK84M,EAAKI,GACpBvuD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKS,GAAQ,EAElCznH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKU,GAAQ,GACvBvmN,KAAKmN,KAAK24M,EAAKQ,GAAQ,EACpCzuD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKS,GAAQ,EAClCzuD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKe,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKgB,GAAQ,GACvB1mN,KAAKmN,KAAKw4M,EAAKc,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKe,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKqB,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKsB,IAAQ,GACvB7mN,KAAKmN,KAAKq4M,EAAKoB,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKqB,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAK2B,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAK4B,IAAQ,GACvBhnN,KAAKmN,KAAKk4M,EAAK0B,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAK2B,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKiC,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKkC,IAAQ,GACvBnnN,KAAKmN,KAAK+3M,EAAKgC,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKiC,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAKuC,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAKwC,IAAQ,GACvBtnN,KAAKmN,KAAK43M,EAAKsC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAKuC,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAK6C,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAK8C,IAAQ,GACvBznN,KAAKmN,KAAKy3M,EAAK4C,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAK6C,IAAQ,EAKlC,IAAIY,IAAS36M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKs3M,EAAKkD,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKs3M,EAAKmD,IAAQ,GACvB5nN,KAAKmN,KAAKu3M,EAAKiD,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKu3M,EAAKkD,IAAQ,IAErB/oH,IAAQ,IAAO,IAAMwpH,KAAQ,IAAO,EACjDA,IAAO,SAEPvwD,EAAK93J,KAAKmN,KAAK64M,EAAKM,GAEpBznH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKO,IACRvmN,KAAKmN,KAAK84M,EAAKK,GAAQ,EACpCzuD,EAAK73J,KAAKmN,KAAK84M,EAAKM,GACpBzuD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKY,GAAQ,EAElC5nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKa,GAAQ,GACvB1mN,KAAKmN,KAAK24M,EAAKW,GAAQ,EACpC5uD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKY,GAAQ,EAClC5uD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKkB,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKmB,IAAQ,GACvB7mN,KAAKmN,KAAKw4M,EAAKiB,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKkB,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKwB,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKyB,IAAQ,GACvBhnN,KAAKmN,KAAKq4M,EAAKuB,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKwB,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAK8B,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAK+B,IAAQ,GACvBnnN,KAAKmN,KAAKk4M,EAAK6B,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAK8B,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKoC,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKqC,IAAQ,GACvBtnN,KAAKmN,KAAK+3M,EAAKmC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKoC,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK0C,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK2C,IAAQ,GACvBznN,KAAKmN,KAAK43M,EAAKyC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK0C,IAAQ,EAKlC,IAAIa,IAAS56M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKw3M,EAAKgD,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKw3M,EAAKiD,IAAQ,GACvB5nN,KAAKmN,KAAKy3M,EAAK+C,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKy3M,EAAKgD,IAAQ,IAErB/oH,IAAQ,IAAO,IAAMypH,KAAQ,IAAO,EACjDA,IAAO,SAEPxwD,EAAK93J,KAAKmN,KAAK64M,EAAKS,GAEpB5nH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKU,IACR1mN,KAAKmN,KAAK84M,EAAKQ,GAAQ,EACpC5uD,EAAK73J,KAAKmN,KAAK84M,EAAKS,GACpB5uD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKe,GAAQ,EAElC/nH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKgB,IAAQ,GACvB7mN,KAAKmN,KAAK24M,EAAKc,GAAQ,EACpC/uD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKe,IAAQ,EAClC/uD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKqB,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKsB,IAAQ,GACvBhnN,KAAKmN,KAAKw4M,EAAKoB,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKqB,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAK2B,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAK4B,IAAQ,GACvBnnN,KAAKmN,KAAKq4M,EAAK0B,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAK2B,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKiC,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKkC,IAAQ,GACvBtnN,KAAKmN,KAAKk4M,EAAKgC,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKiC,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAKuC,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAKwC,IAAQ,GACvBznN,KAAKmN,KAAK+3M,EAAKsC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAKuC,IAAQ,EAKlC,IAAIc,IAAS76M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAK23M,EAAK6C,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK23M,EAAK8C,IAAQ,GACvB5nN,KAAKmN,KAAK43M,EAAK4C,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAK43M,EAAK6C,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM0pH,KAAQ,IAAO,EACjDA,IAAO,SAEPzwD,EAAK93J,KAAKmN,KAAK64M,EAAKY,GAEpB/nH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKa,KACR7mN,KAAKmN,KAAK84M,EAAKW,GAAQ,EACpC/uD,EAAK73J,KAAKmN,KAAK84M,EAAKY,IACpB/uD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKkB,IAAQ,EAElCloH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKmB,IAAQ,GACvBhnN,KAAKmN,KAAK24M,EAAKiB,IAAQ,EACpClvD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKkB,IAAQ,EAClClvD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKwB,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKyB,IAAQ,GACvBnnN,KAAKmN,KAAKw4M,EAAKuB,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKwB,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAK8B,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAK+B,IAAQ,GACvBtnN,KAAKmN,KAAKq4M,EAAK6B,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAK8B,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKoC,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKqC,IAAQ,GACvBznN,KAAKmN,KAAKk4M,EAAKmC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKoC,IAAQ,EAKlC,IAAIe,IAAS96M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAK83M,EAAK0C,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK83M,EAAK2C,IAAQ,GACvB5nN,KAAKmN,KAAK+3M,EAAKyC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAK+3M,EAAK0C,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM2pH,KAAQ,IAAO,EACjDA,IAAO,SAEP1wD,EAAK93J,KAAKmN,KAAK64M,EAAKe,IAEpBloH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKgB,KACRhnN,KAAKmN,KAAK84M,EAAKc,IAAQ,EACpClvD,EAAK73J,KAAKmN,KAAK84M,EAAKe,IACpBlvD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKqB,IAAQ,EAElCroH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKsB,IAAQ,GACvBnnN,KAAKmN,KAAK24M,EAAKoB,IAAQ,EACpCrvD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKqB,IAAQ,EAClCrvD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAK2B,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAK4B,IAAQ,GACvBtnN,KAAKmN,KAAKw4M,EAAK0B,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAK2B,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKiC,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKkC,IAAQ,GACvBznN,KAAKmN,KAAKq4M,EAAKgC,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKiC,IAAQ,EAKlC,IAAIgB,IAAS/6M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKi4M,EAAKuC,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKi4M,EAAKwC,IAAQ,GACvB5nN,KAAKmN,KAAKk4M,EAAKsC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKk4M,EAAKuC,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM4pH,KAAQ,IAAO,EACjDA,IAAO,SAEP3wD,EAAK93J,KAAKmN,KAAK64M,EAAKkB,IAEpBroH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKmB,KACRnnN,KAAKmN,KAAK84M,EAAKiB,IAAQ,EACpCrvD,EAAK73J,KAAKmN,KAAK84M,EAAKkB,IACpBrvD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAKwB,IAAQ,EAElCxoH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAKyB,IAAQ,GACvBtnN,KAAKmN,KAAK24M,EAAKuB,IAAQ,EACpCxvD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAKwB,IAAQ,EAClCxvD,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAK8B,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAK+B,IAAQ,GACvBznN,KAAKmN,KAAKw4M,EAAK6B,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAK8B,IAAQ,EAKlC,IAAIiB,IAASh7M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKo4M,EAAKoC,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKo4M,EAAKqC,IAAQ,GACvB5nN,KAAKmN,KAAKq4M,EAAKmC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKq4M,EAAKoC,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM6pH,KAAQ,IAAO,EACjDA,IAAO,SAEP5wD,EAAK93J,KAAKmN,KAAK64M,EAAKqB,IAEpBxoH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKsB,KACRtnN,KAAKmN,KAAK84M,EAAKoB,IAAQ,EACpCxvD,EAAK73J,KAAKmN,KAAK84M,EAAKqB,IACpBxvD,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAK2B,IAAQ,EAElC3oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAK4B,IAAQ,GACvBznN,KAAKmN,KAAK24M,EAAK0B,IAAQ,EACpC3vD,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAK2B,IAAQ,EAKlC,IAAIkB,IAASj7M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAKu4M,EAAKiC,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAKu4M,EAAKkC,IAAQ,GACvB5nN,KAAKmN,KAAKw4M,EAAKgC,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAKw4M,EAAKiC,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM8pH,KAAQ,IAAO,EACjDA,IAAO,SAEP7wD,EAAK93J,KAAKmN,KAAK64M,EAAKwB,IAEpB3oH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAKyB,KACRznN,KAAKmN,KAAK84M,EAAKuB,IAAQ,EACpC3vD,EAAK73J,KAAKmN,KAAK84M,EAAKwB,IAKpB,IAAImB,IAASl7M,GAJboqJ,EAAMA,EAAK93J,KAAKmN,KAAK04M,EAAK8B,IAAQ,GAIX,KAAa,MAFpC9oH,GADAA,EAAOA,EAAM7+F,KAAKmN,KAAK04M,EAAK+B,IAAQ,GACvB5nN,KAAKmN,KAAK24M,EAAK6B,IAAQ,KAEW,IAAO,EACtDj6M,IAFAmqJ,EAAMA,EAAK73J,KAAKmN,KAAK24M,EAAK8B,IAAQ,IAErB/oH,IAAQ,IAAO,IAAM+pH,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAASn7M,GAJboqJ,EAAK93J,KAAKmN,KAAK64M,EAAK2B,KAIG,KAAa,MAFpC9oH,GADAA,EAAM7+F,KAAKmN,KAAK64M,EAAK4B,KACR5nN,KAAKmN,KAAK84M,EAAK0B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAj6M,IAFAmqJ,EAAK73J,KAAKmN,KAAK84M,EAAK2B,MAEP/oH,IAAQ,IAAO,IAAMgqH,KAAQ,IAAO,EACjDA,IAAO,SACPxkH,EAAE,GAAKziF,GACPyiF,EAAE,GAAKriF,GACPqiF,EAAE,GAAKwjH,GACPxjH,EAAE,GAAKyjH,GACPzjH,EAAE,GAAK0jH,GACP1jH,EAAE,GAAK2jH,GACP3jH,EAAE,GAAK4jH,GACP5jH,EAAE,GAAK6jH,GACP7jH,EAAE,GAAK8jH,GACP9jH,EAAE,GAAK+jH,GACP/jH,EAAE,IAAMgkH,GACRhkH,EAAE,IAAMikH,GACRjkH,EAAE,IAAMkkH,GACRlkH,EAAE,IAAMmkH,GACRnkH,EAAE,IAAMokH,GACRpkH,EAAE,IAAMqkH,GACRrkH,EAAE,IAAMskH,GACRtkH,EAAE,IAAMukH,GACRvkH,EAAE,IAAMwkH,GACE,IAANn7M,IACF22F,EAAE,IAAM32F,EACRg3K,EAAIjsL,UAECisL,CACR,EAgDD,SAASokC,EAAY9lN,EAAMk1J,EAAKwsB,GAE9B,OADW,IAAIqkC,GACHC,KAAKhmN,EAAMk1J,EAAKwsB,EAC7B,CAqBD,SAASqkC,EAAMlsN,EAAGC,GAChBjD,KAAKgD,EAAIA,EACThD,KAAKiD,EAAIA,CACV,CAxEIkD,KAAKmN,OACRm3M,EAAcjC,GAiDhBz3D,EAAG7mJ,UAAUklN,MAAQ,SAAgB/wD,EAAKwsB,GACxC,IAAIj4E,EACAtqF,EAAMtoB,KAAKpB,OAASy/J,EAAIz/J,OAW5B,OATEg0G,EADkB,KAAhB5yG,KAAKpB,QAAgC,KAAfy/J,EAAIz/J,OACtB6rN,EAAYzqN,KAAMq+J,EAAKwsB,GACpBviK,EAAM,GACTkgM,EAAWxoN,KAAMq+J,EAAKwsB,GACnBviK,EAAM,KArDnB,SAAmBnf,EAAMk1J,EAAKwsB,GAC5BA,EAAIllB,SAAWtH,EAAIsH,SAAWx8J,EAAKw8J,SACnCklB,EAAIjsL,OAASuK,EAAKvK,OAASy/J,EAAIz/J,OAI/B,IAFA,IAAI6pN,EAAQ,EACR4G,EAAU,EACLt6I,EAAI,EAAGA,EAAI81G,EAAIjsL,OAAS,EAAGm2E,IAAK,CAGvC,IAAI2zI,EAAS2G,EACbA,EAAU,EAGV,IAFA,IAAI1G,EAAgB,SAARF,EACRG,EAAOziN,KAAKC,IAAI2uE,EAAGspF,EAAIz/J,OAAS,GAC3B8vB,EAAIvoB,KAAKE,IAAI,EAAG0uE,EAAI5rE,EAAKvK,OAAS,GAAI8vB,GAAKk6L,EAAMl6L,IAAK,CAC7D,IAAI9wB,EAAIm3E,EAAIrmD,EAGRrV,GAFoB,EAAhBlQ,EAAKwwL,MAAM/7L,KACI,EAAfygK,EAAIs7B,MAAMjrK,IAGduvI,EAAS,SAAJ5kJ,EAGTsvM,EAAa,UADb1qD,EAAMA,EAAK0qD,EAAS,GAIpB0G,IAFA3G,GAHAA,EAAUA,GAAWrvM,EAAI,SAAa,GAAM,IAGxB4kJ,IAAO,IAAO,KAEZ,GACtByqD,GAAU,QACX,CACD79B,EAAI8O,MAAM5kH,GAAK4zI,EACfF,EAAQC,EACRA,EAAS2G,CACV,CAOD,OANc,IAAV5G,EACF59B,EAAI8O,MAAM5kH,GAAK0zI,EAEf59B,EAAIjsL,SAGCisL,EAAI5R,OACZ,CAeSq2C,CAAStvN,KAAMq+J,EAAKwsB,GAEpBokC,EAAWjvN,KAAMq+J,EAAKwsB,GAGvBj4E,CACR,EAUDs8G,EAAKhlN,UAAUqlN,QAAU,SAAkBC,GAGzC,IAFA,IAAI3+M,EAAI,IAAIhT,MAAM2xN,GACd5/M,EAAImhJ,EAAG7mJ,UAAUo/M,WAAWkG,GAAK,EAC5B5xN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IACrBiT,EAAEjT,GAAKoC,KAAKyvN,OAAO7xN,EAAGgS,EAAG4/M,GAG3B,OAAO3+M,CACR,EAGDq+M,EAAKhlN,UAAUulN,OAAS,SAAiBzsN,EAAG4M,EAAG4/M,GAC7C,GAAU,IAANxsN,GAAWA,IAAMwsN,EAAI,EAAG,OAAOxsN,EAGnC,IADA,IAAI0sN,EAAK,EACA9xN,EAAI,EAAGA,EAAIgS,EAAGhS,IACrB8xN,IAAW,EAAJ1sN,IAAW4M,EAAIhS,EAAI,EAC1BoF,IAAM,EAGR,OAAO0sN,CACR,EAIDR,EAAKhlN,UAAUylN,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI5xN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IACrBmyN,EAAKnyN,GAAKiyN,EAAID,EAAIhyN,IAClBoyN,EAAKpyN,GAAKkyN,EAAIF,EAAIhyN,GAErB,EAEDsxN,EAAKhlN,UAAUrC,UAAY,SAAoBgoN,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE5vN,KAAK2vN,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIn8M,EAAI,EAAGA,EAAIm8M,EAAGn8M,IAAM,EAM3B,IALA,IAAIzD,EAAIyD,GAAK,EAET48M,EAAQ9pN,KAAK4N,IAAI,EAAI5N,KAAK6J,GAAKJ,GAC/BsgN,EAAQ/pN,KAAK6N,IAAI,EAAI7N,KAAK6J,GAAKJ,GAE1B4L,EAAI,EAAGA,EAAIg0M,EAAGh0M,GAAK5L,EAI1B,IAHA,IAAIugN,EAASF,EACTG,EAASF,EAEJxhM,EAAI,EAAGA,EAAIrb,EAAGqb,IAAK,CAC1B,IAAI03L,EAAK2J,EAAKv0M,EAAIkT,GACd2hM,EAAKL,EAAKx0M,EAAIkT,GAEd2mI,EAAK06D,EAAKv0M,EAAIkT,EAAIrb,GAClBi9M,EAAKN,EAAKx0M,EAAIkT,EAAIrb,GAElBu2J,EAAKumD,EAAS96D,EAAK+6D,EAASE,EAEhCA,EAAKH,EAASG,EAAKF,EAAS/6D,EAC5BA,EAAKuU,EAELmmD,EAAKv0M,EAAIkT,GAAK03L,EAAK/wD,EACnB26D,EAAKx0M,EAAIkT,GAAK2hM,EAAKC,EAEnBP,EAAKv0M,EAAIkT,EAAIrb,GAAK+yM,EAAK/wD,EACvB26D,EAAKx0M,EAAIkT,EAAIrb,GAAKg9M,EAAKC,EAGnB5hM,IAAM9e,IACRg6J,EAAKqmD,EAAQE,EAASD,EAAQE,EAE9BA,EAASH,EAAQG,EAASF,EAAQC,EAClCA,EAASvmD,EAEZ,CAGN,EAEDslD,EAAKhlN,UAAUqmN,YAAc,SAAsB7/M,EAAGC,GACpD,IAAI6+M,EAAqB,EAAjBrpN,KAAKE,IAAIsK,EAAGD,GAChBs1J,EAAU,EAAJwpD,EACN5xN,EAAI,EACR,IAAK4xN,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B5xN,IAGF,OAAO,GAAKA,EAAI,EAAIooK,CACrB,EAEDkpD,EAAKhlN,UAAU4b,UAAY,SAAoB+pM,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI5xN,EAAI,EAAGA,EAAI4xN,EAAI,EAAG5xN,IAAK,CAC9B,IAAIiT,EAAIg/M,EAAIjyN,GAEZiyN,EAAIjyN,GAAKiyN,EAAIL,EAAI5xN,EAAI,GACrBiyN,EAAIL,EAAI5xN,EAAI,GAAKiT,EAEjBA,EAAIi/M,EAAIlyN,GAERkyN,EAAIlyN,IAAMkyN,EAAIN,EAAI5xN,EAAI,GACtBkyN,EAAIN,EAAI5xN,EAAI,IAAMiT,CACnB,CACF,EAEDq+M,EAAKhlN,UAAUsmN,aAAe,SAAuBhyD,EAAIgxD,GAEvD,IADA,IAAI/G,EAAQ,EACH7qN,EAAI,EAAGA,EAAI4xN,EAAI,EAAG5xN,IAAK,CAC9B,IAAIikB,EAAoC,KAAhC1b,KAAK0L,MAAM2sJ,EAAG,EAAI5gK,EAAI,GAAK4xN,GACjCrpN,KAAK0L,MAAM2sJ,EAAG,EAAI5gK,GAAK4xN,GACvB/G,EAEFjqD,EAAG5gK,GAAS,SAAJikB,EAGN4mM,EADE5mM,EAAI,SACE,EAEAA,EAAI,SAAY,CAE3B,CAED,OAAO28I,CACR,EAED0wD,EAAKhlN,UAAUumN,WAAa,SAAqBjyD,EAAIl2I,EAAKunM,EAAKL,GAE7D,IADA,IAAI/G,EAAQ,EACH7qN,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACvB6qN,GAAyB,EAARjqD,EAAG5gK,GAEpBiyN,EAAI,EAAIjyN,GAAa,KAAR6qN,EAAgBA,KAAkB,GAC/CoH,EAAI,EAAIjyN,EAAI,GAAa,KAAR6qN,EAAgBA,KAAkB,GAIrD,IAAK7qN,EAAI,EAAI0qB,EAAK1qB,EAAI4xN,IAAK5xN,EACzBiyN,EAAIjyN,GAAK,EAGX8/J,EAAiB,IAAV+qD,GACP/qD,EAA6B,MAAb,KAAR+qD,GACT,EAEDyG,EAAKhlN,UAAUwmN,KAAO,SAAelB,GAEnC,IADA,IAAImB,EAAK,IAAI9yN,MAAM2xN,GACV5xN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IACrB+yN,EAAG/yN,GAAK,EAGV,OAAO+yN,CACR,EAEDzB,EAAKhlN,UAAUilN,KAAO,SAAensN,EAAGC,EAAG4nL,GACzC,IAAI2kC,EAAI,EAAIxvN,KAAKuwN,YAAYvtN,EAAEpE,OAAQqE,EAAErE,QAErCgxN,EAAM5vN,KAAKuvN,QAAQC,GAEnB/jE,EAAIzrJ,KAAK0wN,KAAKlB,GAEdK,EAAM,IAAIhyN,MAAM2xN,GAChBoB,EAAO,IAAI/yN,MAAM2xN,GACjBqB,EAAO,IAAIhzN,MAAM2xN,GAEjBsB,EAAO,IAAIjzN,MAAM2xN,GACjBuB,EAAQ,IAAIlzN,MAAM2xN,GAClBwB,EAAQ,IAAInzN,MAAM2xN,GAElByB,EAAOpmC,EAAI8O,MACfs3B,EAAKryN,OAAS4wN,EAEdxvN,KAAKywN,WAAWztN,EAAE22L,MAAO32L,EAAEpE,OAAQixN,EAAKL,GACxCxvN,KAAKywN,WAAWxtN,EAAE02L,MAAO12L,EAAErE,OAAQkyN,EAAMtB,GAEzCxvN,KAAK6H,UAAUgoN,EAAKpkE,EAAGmlE,EAAMC,EAAMrB,EAAGI,GACtC5vN,KAAK6H,UAAUipN,EAAMrlE,EAAGslE,EAAOC,EAAOxB,EAAGI,GAEzC,IAAK,IAAIhyN,EAAI,EAAGA,EAAI4xN,EAAG5xN,IAAK,CAC1B,IAAIgsK,EAAKgnD,EAAKhzN,GAAKmzN,EAAMnzN,GAAKizN,EAAKjzN,GAAKozN,EAAMpzN,GAC9CizN,EAAKjzN,GAAKgzN,EAAKhzN,GAAKozN,EAAMpzN,GAAKizN,EAAKjzN,GAAKmzN,EAAMnzN,GAC/CgzN,EAAKhzN,GAAKgsK,CACX,CASD,OAPA5pK,KAAK8lB,UAAU8qM,EAAMC,EAAMrB,GAC3BxvN,KAAK6H,UAAU+oN,EAAMC,EAAMI,EAAMxlE,EAAG+jE,EAAGI,GACvC5vN,KAAK8lB,UAAUmrM,EAAMxlE,EAAG+jE,GACxBxvN,KAAKwwN,aAAaS,EAAMzB,GAExB3kC,EAAIllB,SAAW3iK,EAAE2iK,SAAW1iK,EAAE0iK,SAC9BklB,EAAIjsL,OAASoE,EAAEpE,OAASqE,EAAErE,OACnBisL,EAAI5R,OACZ,EAGDloB,EAAG7mJ,UAAUi6I,IAAM,SAAcka,GAC/B,IAAIwsB,EAAM,IAAI95B,EAAG,MAEjB,OADA85B,EAAI8O,MAAQ,IAAI97L,MAAMmC,KAAKpB,OAASy/J,EAAIz/J,QACjCoB,KAAKovN,MAAM/wD,EAAKwsB,EACxB,EAGD95B,EAAG7mJ,UAAUgnN,KAAO,SAAe7yD,GACjC,IAAIwsB,EAAM,IAAI95B,EAAG,MAEjB,OADA85B,EAAI8O,MAAQ,IAAI97L,MAAMmC,KAAKpB,OAASy/J,EAAIz/J,QACjCqwN,EAAWjvN,KAAMq+J,EAAKwsB,EAC9B,EAGD95B,EAAG7mJ,UAAUoJ,KAAO,SAAe+qJ,GACjC,OAAOr+J,KAAK8jB,QAAQsrM,MAAM/wD,EAAKr+J,KAChC,EAED+wJ,EAAG7mJ,UAAU+9M,MAAQ,SAAgB5pD,GACnCX,EAAsB,kBAARW,GACdX,EAAOW,EAAM,UAIb,IADA,IAAIoqD,EAAQ,EACH7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CACpC,IAAIikB,GAAqB,EAAhB7hB,KAAK25L,MAAM/7L,IAAUygK,EAC1BJ,GAAU,SAAJp8I,IAA0B,SAAR4mM,GAC5BA,IAAU,GACVA,GAAU5mM,EAAI,SAAa,EAE3B4mM,GAASxqD,IAAO,GAChBj+J,KAAK25L,MAAM/7L,GAAU,SAALqgK,CACjB,CAOD,OALc,IAAVwqD,IACFzoN,KAAK25L,MAAM/7L,GAAK6qN,EAChBzoN,KAAKpB,UAGAoB,IACR,EAED+wJ,EAAG7mJ,UAAUinN,KAAO,SAAe9yD,GACjC,OAAOr+J,KAAK8jB,QAAQmkM,MAAM5pD,EAC3B,EAGDtN,EAAG7mJ,UAAUw7J,IAAM,WACjB,OAAO1lK,KAAKmkJ,IAAInkJ,KACjB,EAGD+wJ,EAAG7mJ,UAAUknN,KAAO,WAClB,OAAOpxN,KAAKsT,KAAKtT,KAAK8jB,QACvB,EAGDitI,EAAG7mJ,UAAU8G,IAAM,SAAcqtJ,GAC/B,IAAIx8I,EAxxCN,SAAqBw8I,GAGnB,IAFA,IAAIx8I,EAAI,IAAIhkB,MAAMwgK,EAAIE,aAEb07B,EAAM,EAAGA,EAAMp4K,EAAEjjB,OAAQq7L,IAAO,CACvC,IAAI7rC,EAAO6rC,EAAM,GAAM,EACnBswB,EAAOtwB,EAAM,GAEjBp4K,EAAEo4K,IAAQ57B,EAAIs7B,MAAMvrC,GAAQ,GAAKm8D,KAAWA,CAC7C,CAED,OAAO1oM,CACR,CA6wCSwvM,CAAWhzD,GACnB,GAAiB,IAAbx8I,EAAEjjB,OAAc,OAAO,IAAImyJ,EAAG,GAIlC,IADA,IAAIn+C,EAAM5yG,KACDpC,EAAI,EAAGA,EAAIikB,EAAEjjB,QACP,IAATijB,EAAEjkB,GADsBA,IAAKg1G,EAAMA,EAAI8yD,OAI7C,KAAM9nK,EAAIikB,EAAEjjB,OACV,IAAK,IAAI+D,EAAIiwG,EAAI8yD,MAAO9nK,EAAIikB,EAAEjjB,OAAQhB,IAAK+E,EAAIA,EAAE+iK,MAClC,IAAT7jJ,EAAEjkB,KAENg1G,EAAMA,EAAIuxC,IAAIxhJ,IAIlB,OAAOiwG,CACR,EAGDm+C,EAAG7mJ,UAAUonN,OAAS,SAAiBp4H,GACrCwkE,EAAuB,kBAATxkE,GAAqBA,GAAQ,GAC3C,IAGIt7F,EAHAyb,EAAI6/E,EAAO,GACX7lF,GAAK6lF,EAAO7/E,GAAK,GACjBk4M,EAAa,WAAe,GAAKl4M,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAIovM,EAAQ,EAEZ,IAAK7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAAK,CAChC,IAAI4zN,EAAWxxN,KAAK25L,MAAM/7L,GAAK2zN,EAC3B19M,GAAsB,EAAhB7T,KAAK25L,MAAM/7L,IAAU4zN,GAAan4M,EAC5CrZ,KAAK25L,MAAM/7L,GAAKiW,EAAI40M,EACpBA,EAAQ+I,IAAc,GAAKn4M,CAC5B,CAEGovM,IACFzoN,KAAK25L,MAAM/7L,GAAK6qN,EAChBzoN,KAAKpB,SAER,CAED,GAAU,IAANyU,EAAS,CACX,IAAKzV,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IAChCoC,KAAK25L,MAAM/7L,EAAIyV,GAAKrT,KAAK25L,MAAM/7L,GAGjC,IAAKA,EAAI,EAAGA,EAAIyV,EAAGzV,IACjBoC,KAAK25L,MAAM/7L,GAAK,EAGlBoC,KAAKpB,QAAUyU,CAChB,CAED,OAAOrT,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUunN,MAAQ,SAAgBv4H,GAGnC,OADAwkE,EAAyB,IAAlB19J,KAAK2lK,UACL3lK,KAAKsxN,OAAOp4H,EACpB,EAKD63D,EAAG7mJ,UAAU20J,OAAS,SAAiB3lE,EAAMw4H,EAAMC,GAEjD,IAAIj5M,EADJglJ,EAAuB,kBAATxkE,GAAqBA,GAAQ,GAGzCxgF,EADEg5M,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAIr4M,EAAI6/E,EAAO,GACX7lF,EAAIlN,KAAKC,KAAK8yF,EAAO7/E,GAAK,GAAIrZ,KAAKpB,QACnC44B,EAAO,SAAc,WAAcne,GAAMA,EACzCu4M,EAAcD,EAMlB,GAJAj5M,GAAKrF,EACLqF,EAAIvS,KAAKE,IAAI,EAAGqS,GAGZk5M,EAAa,CACf,IAAK,IAAIh0N,EAAI,EAAGA,EAAIyV,EAAGzV,IACrBg0N,EAAYj4B,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,GAEpCg0N,EAAYhzN,OAASyU,CACtB,CAED,GAAU,IAANA,QAEG,GAAIrT,KAAKpB,OAASyU,EAEvB,IADArT,KAAKpB,QAAUyU,EACVzV,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAC3BoC,KAAK25L,MAAM/7L,GAAKoC,KAAK25L,MAAM/7L,EAAIyV,QAGjCrT,KAAK25L,MAAM,GAAK,EAChB35L,KAAKpB,OAAS,EAGhB,IAAI6pN,EAAQ,EACZ,IAAK7qN,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,IAAgB,IAAV6qN,GAAe7qN,GAAK8a,GAAI9a,IAAK,CAChE,IAAIkgK,EAAuB,EAAhB99J,KAAK25L,MAAM/7L,GACtBoC,KAAK25L,MAAM/7L,GAAM6qN,GAAU,GAAKpvM,EAAOykJ,IAASzkJ,EAChDovM,EAAQ3qD,EAAOtmI,CAChB,CAYD,OATIo6L,GAAyB,IAAVnJ,IACjBmJ,EAAYj4B,MAAMi4B,EAAYhzN,UAAY6pN,GAGxB,IAAhBzoN,KAAKpB,SACPoB,KAAK25L,MAAM,GAAK,EAChB35L,KAAKpB,OAAS,GAGToB,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAU2nN,MAAQ,SAAgB34H,EAAMw4H,EAAMC,GAG/C,OADAj0D,EAAyB,IAAlB19J,KAAK2lK,UACL3lK,KAAK6+J,OAAO3lE,EAAMw4H,EAAMC,EAChC,EAGD5gE,EAAG7mJ,UAAUioJ,KAAO,SAAej5D,GACjC,OAAOl5F,KAAK8jB,QAAQ2tM,MAAMv4H,EAC3B,EAED63D,EAAG7mJ,UAAU4nN,MAAQ,SAAgB54H,GACnC,OAAOl5F,KAAK8jB,QAAQwtM,OAAOp4H,EAC5B,EAGD63D,EAAG7mJ,UAAUkoJ,KAAO,SAAel5D,GACjC,OAAOl5F,KAAK8jB,QAAQ+tM,MAAM34H,EAC3B,EAED63D,EAAG7mJ,UAAUs7J,MAAQ,SAAgBtsE,GACnC,OAAOl5F,KAAK8jB,QAAQ+6I,OAAO3lE,EAC5B,EAGD63D,EAAG7mJ,UAAUw/M,MAAQ,SAAgBzvB,GACnCv8B,EAAsB,kBAARu8B,GAAoBA,GAAO,GACzC,IAAI5gL,EAAI4gL,EAAM,GACV5mL,GAAK4mL,EAAM5gL,GAAK,GAChB1W,EAAI,GAAK0W,EAGb,QAAIrZ,KAAKpB,QAAUyU,OAGXrT,KAAK25L,MAAMtmL,GAEL1Q,EACf,EAGDouJ,EAAG7mJ,UAAU6nN,OAAS,SAAiB74H,GACrCwkE,EAAuB,kBAATxkE,GAAqBA,GAAQ,GAC3C,IAAI7/E,EAAI6/E,EAAO,GACX7lF,GAAK6lF,EAAO7/E,GAAK,GAIrB,GAFAqkJ,EAAyB,IAAlB19J,KAAK2lK,SAAgB,2CAExB3lK,KAAKpB,QAAUyU,EACjB,OAAOrT,KAQT,GALU,IAANqZ,GACFhG,IAEFrT,KAAKpB,OAASuH,KAAKC,IAAIiN,EAAGrT,KAAKpB,QAErB,IAANya,EAAS,CACX,IAAIme,EAAO,SAAc,WAAcne,GAAMA,EAC7CrZ,KAAK25L,MAAM35L,KAAKpB,OAAS,IAAM44B,CAChC,CAED,OAAOx3B,KAAKi5K,OACb,EAGDloB,EAAG7mJ,UAAUgoJ,MAAQ,SAAgBh5D,GACnC,OAAOl5F,KAAK8jB,QAAQiuM,OAAO74H,EAC5B,EAGD63D,EAAG7mJ,UAAUqkK,MAAQ,SAAgBlQ,GAGnC,OAFAX,EAAsB,kBAARW,GACdX,EAAOW,EAAM,UACTA,EAAM,EAAUr+J,KAAK4+J,OAAOP,GAGV,IAAlBr+J,KAAK2lK,SACa,IAAhB3lK,KAAKpB,SAAiC,EAAhBoB,KAAK25L,MAAM,IAAUt7B,GAC7Cr+J,KAAK25L,MAAM,GAAKt7B,GAAuB,EAAhBr+J,KAAK25L,MAAM,IAClC35L,KAAK2lK,SAAW,EACT3lK,OAGTA,KAAK2lK,SAAW,EAChB3lK,KAAK4+J,MAAMP,GACXr+J,KAAK2lK,SAAW,EACT3lK,MAIFA,KAAKkoN,OAAO7pD,EACpB,EAEDtN,EAAG7mJ,UAAUg+M,OAAS,SAAiB7pD,GACrCr+J,KAAK25L,MAAM,IAAMt7B,EAGjB,IAAK,IAAIzgK,EAAI,EAAGA,EAAIoC,KAAKpB,QAAUoB,KAAK25L,MAAM/7L,IAAM,SAAWA,IAC7DoC,KAAK25L,MAAM/7L,IAAM,SACbA,IAAMoC,KAAKpB,OAAS,EACtBoB,KAAK25L,MAAM/7L,EAAI,GAAK,EAEpBoC,KAAK25L,MAAM/7L,EAAI,KAKnB,OAFAoC,KAAKpB,OAASuH,KAAKE,IAAIrG,KAAKpB,OAAQhB,EAAI,GAEjCoC,IACR,EAGD+wJ,EAAG7mJ,UAAU00J,MAAQ,SAAgBP,GAGnC,GAFAX,EAAsB,kBAARW,GACdX,EAAOW,EAAM,UACTA,EAAM,EAAG,OAAOr+J,KAAKuuK,OAAOlQ,GAEhC,GAAsB,IAAlBr+J,KAAK2lK,SAIP,OAHA3lK,KAAK2lK,SAAW,EAChB3lK,KAAKuuK,MAAMlQ,GACXr+J,KAAK2lK,SAAW,EACT3lK,KAKT,GAFAA,KAAK25L,MAAM,IAAMt7B,EAEG,IAAhBr+J,KAAKpB,QAAgBoB,KAAK25L,MAAM,GAAK,EACvC35L,KAAK25L,MAAM,IAAM35L,KAAK25L,MAAM,GAC5B35L,KAAK2lK,SAAW,OAGhB,IAAK,IAAI/nK,EAAI,EAAGA,EAAIoC,KAAKpB,QAAUoB,KAAK25L,MAAM/7L,GAAK,EAAGA,IACpDoC,KAAK25L,MAAM/7L,IAAM,SACjBoC,KAAK25L,MAAM/7L,EAAI,IAAM,EAIzB,OAAOoC,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAU8nN,KAAO,SAAe3zD,GACjC,OAAOr+J,KAAK8jB,QAAQyqJ,MAAMlQ,EAC3B,EAEDtN,EAAG7mJ,UAAU+nN,KAAO,SAAe5zD,GACjC,OAAOr+J,KAAK8jB,QAAQ86I,MAAMP,EAC3B,EAEDtN,EAAG7mJ,UAAUgoN,KAAO,WAGlB,OAFAlyN,KAAK2lK,SAAW,EAET3lK,IACR,EAED+wJ,EAAG7mJ,UAAU5D,IAAM,WACjB,OAAOtG,KAAK8jB,QAAQouM,MACrB,EAEDnhE,EAAG7mJ,UAAUioN,aAAe,SAAuB9zD,EAAKla,EAAK/sD,GAC3D,IACIx5F,EAIAikB,EALAyG,EAAM+1I,EAAIz/J,OAASw4F,EAGvBp3F,KAAKmoN,QAAQ7/L,GAGb,IAAImgM,EAAQ,EACZ,IAAK7qN,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAAK,CAC/BikB,GAA6B,EAAxB7hB,KAAK25L,MAAM/7L,EAAIw5F,IAAcqxH,EAClC,IAAIliN,GAAwB,EAAf83J,EAAIs7B,MAAM/7L,IAAUumJ,EAEjCskE,IADA5mM,GAAa,SAARtb,IACS,KAAQA,EAAQ,SAAa,GAC3CvG,KAAK25L,MAAM/7L,EAAIw5F,GAAa,SAAJv1E,CACzB,CACD,KAAOjkB,EAAIoC,KAAKpB,OAASw4F,EAAOx5F,IAE9B6qN,GADA5mM,GAA6B,EAAxB7hB,KAAK25L,MAAM/7L,EAAIw5F,IAAcqxH,IACrB,GACbzoN,KAAK25L,MAAM/7L,EAAIw5F,GAAa,SAAJv1E,EAG1B,GAAc,IAAV4mM,EAAa,OAAOzoN,KAAKi5K,QAK7B,IAFAvb,GAAkB,IAAX+qD,GACPA,EAAQ,EACH7qN,EAAI,EAAGA,EAAIoC,KAAKpB,OAAQhB,IAE3B6qN,GADA5mM,IAAsB,EAAhB7hB,KAAK25L,MAAM/7L,IAAU6qN,IACd,GACbzoN,KAAK25L,MAAM/7L,GAAS,SAAJikB,EAIlB,OAFA7hB,KAAK2lK,SAAW,EAET3lK,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUkoN,SAAW,SAAmB/zD,EAAK9xG,GAC9C,IAAI6qC,GAAQp3F,KAAKpB,OAASy/J,EAAIz/J,QAE1BkL,EAAI9J,KAAK8jB,QACTlQ,EAAIyqJ,EAGJg0D,EAA8B,EAAxBz+M,EAAE+lL,MAAM/lL,EAAEhV,OAAS,GAGf,KADdw4F,EAAQ,GADMp3F,KAAKspN,WAAW+I,MAG5Bz+M,EAAIA,EAAEk+M,MAAM16H,GACZttF,EAAEwnN,OAAOl6H,GACTi7H,EAA8B,EAAxBz+M,EAAE+lL,MAAM/lL,EAAEhV,OAAS,IAI3B,IACI+D,EADAgO,EAAI7G,EAAElL,OAASgV,EAAEhV,OAGrB,GAAa,QAAT2tD,EAAgB,EAClB5pD,EAAI,IAAIouJ,EAAG,OACTnyJ,OAAS+R,EAAI,EACfhO,EAAEg3L,MAAQ,IAAI97L,MAAM8E,EAAE/D,QACtB,IAAK,IAAIhB,EAAI,EAAGA,EAAI+E,EAAE/D,OAAQhB,IAC5B+E,EAAEg3L,MAAM/7L,GAAK,CAEhB,CAED,IAAI01G,EAAOxpG,EAAEga,QAAQquM,aAAav+M,EAAG,EAAGjD,GAClB,IAAlB2iG,EAAKqyD,WACP77J,EAAIwpG,EACA3wG,IACFA,EAAEg3L,MAAMhpL,GAAK,IAIjB,IAAK,IAAI+d,EAAI/d,EAAI,EAAG+d,GAAK,EAAGA,IAAK,CAC/B,IAAI4jM,EAAmC,UAAL,EAAxBxoN,EAAE6vL,MAAM/lL,EAAEhV,OAAS8vB,KACE,EAA5B5kB,EAAE6vL,MAAM/lL,EAAEhV,OAAS8vB,EAAI,IAO1B,IAHA4jM,EAAKnsN,KAAKC,IAAKksN,EAAKD,EAAO,EAAG,UAE9BvoN,EAAEqoN,aAAav+M,EAAG0+M,EAAI5jM,GACA,IAAf5kB,EAAE67J,UACP2sD,IACAxoN,EAAE67J,SAAW,EACb77J,EAAEqoN,aAAav+M,EAAG,EAAG8a,GAChB5kB,EAAEq5I,WACLr5I,EAAE67J,UAAY,GAGdhjK,IACFA,EAAEg3L,MAAMjrK,GAAK4jM,EAEhB,CAWD,OAVI3vN,GACFA,EAAEs2K,QAEJnvK,EAAEmvK,QAGW,QAAT1sH,GAA4B,IAAV6qC,GACpBttF,EAAE+0J,OAAOznE,GAGJ,CACLu6D,IAAKhvJ,GAAK,KACV87J,IAAK30J,EAER,EAMDinJ,EAAG7mJ,UAAUqoN,OAAS,SAAiBl0D,EAAK9xG,EAAMimK,GAGhD,OAFA90D,GAAQW,EAAIlb,UAERnjJ,KAAKmjJ,SACA,CACLwO,IAAK,IAAIZ,EAAG,GACZ0N,IAAK,IAAI1N,EAAG,IAKM,IAAlB/wJ,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,UAC7B/yD,EAAM5yG,KAAKuhK,MAAMgxD,OAAOl0D,EAAK9xG,GAEhB,QAATA,IACFolG,EAAM/+C,EAAI++C,IAAI4P,OAGH,QAATh1G,IACFkyG,EAAM7rD,EAAI6rD,IAAI8C,MACVixD,GAA6B,IAAjB/zD,EAAIkH,UAClBlH,EAAIqL,KAAKzL,IAIN,CACL1M,IAAKA,EACL8M,IAAKA,IAIa,IAAlBz+J,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,UAC7B/yD,EAAM5yG,KAAKuyN,OAAOl0D,EAAIkD,MAAOh1G,GAEhB,QAATA,IACFolG,EAAM/+C,EAAI++C,IAAI4P,OAGT,CACL5P,IAAKA,EACL8M,IAAK7rD,EAAI6rD,MAI0B,KAAlCz+J,KAAK2lK,SAAWtH,EAAIsH,WACvB/yD,EAAM5yG,KAAKuhK,MAAMgxD,OAAOl0D,EAAIkD,MAAOh1G,GAEtB,QAATA,IACFkyG,EAAM7rD,EAAI6rD,IAAI8C,MACVixD,GAA6B,IAAjB/zD,EAAIkH,UAClBlH,EAAI+rD,KAAKnsD,IAIN,CACL1M,IAAK/+C,EAAI++C,IACT8M,IAAKA,IAOLJ,EAAIz/J,OAASoB,KAAKpB,QAAUoB,KAAKqiK,IAAIhE,GAAO,EACvC,CACL1M,IAAK,IAAIZ,EAAG,GACZ0N,IAAKz+J,MAKU,IAAfq+J,EAAIz/J,OACO,QAAT2tD,EACK,CACLolG,IAAK3xJ,KAAKyyN,KAAKp0D,EAAIs7B,MAAM,IACzBl7B,IAAK,MAII,QAATlyG,EACK,CACLolG,IAAK,KACL8M,IAAK,IAAI1N,EAAG/wJ,KAAKykK,KAAKpG,EAAIs7B,MAAM,MAI7B,CACLhoC,IAAK3xJ,KAAKyyN,KAAKp0D,EAAIs7B,MAAM,IACzBl7B,IAAK,IAAI1N,EAAG/wJ,KAAKykK,KAAKpG,EAAIs7B,MAAM,MAI7B35L,KAAKoyN,SAAS/zD,EAAK9xG,GAlF1B,IAAIolG,EAAK8M,EAAK7rD,CAmFf,EAGDm+C,EAAG7mJ,UAAUynJ,IAAM,SAAc0M,GAC/B,OAAOr+J,KAAKuyN,OAAOl0D,EAAK,OAAO,GAAO1M,GACvC,EAGDZ,EAAG7mJ,UAAUu0J,IAAM,SAAcJ,GAC/B,OAAOr+J,KAAKuyN,OAAOl0D,EAAK,OAAO,GAAOI,GACvC,EAED1N,EAAG7mJ,UAAU2nJ,KAAO,SAAewM,GACjC,OAAOr+J,KAAKuyN,OAAOl0D,EAAK,OAAO,GAAMI,GACtC,EAGD1N,EAAG7mJ,UAAU27J,SAAW,SAAmBxH,GACzC,IAAIq0D,EAAK1yN,KAAKuyN,OAAOl0D,GAGrB,GAAIq0D,EAAGj0D,IAAItb,SAAU,OAAOuvE,EAAG/gE,IAE/B,IAAI8M,EAA0B,IAApBi0D,EAAG/gE,IAAIgU,SAAiB+sD,EAAGj0D,IAAI+rD,KAAKnsD,GAAOq0D,EAAGj0D,IAEpDk0D,EAAOt0D,EAAImH,MAAM,GACjBotD,EAAKv0D,EAAIK,MAAM,GACf2D,EAAM5D,EAAI4D,IAAIswD,GAGlB,OAAItwD,EAAM,GAAY,IAAPuwD,GAAoB,IAARvwD,EAAkBqwD,EAAG/gE,IAGrB,IAApB+gE,EAAG/gE,IAAIgU,SAAiB+sD,EAAG/gE,IAAIiN,MAAM,GAAK8zD,EAAG/gE,IAAI4c,MAAM,EAC/D,EAEDxd,EAAG7mJ,UAAUu6J,KAAO,SAAepG,GACjCX,EAAOW,GAAO,UAId,IAHA,IAAI7iJ,GAAK,GAAK,IAAM6iJ,EAEhBwD,EAAM,EACDjkK,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IACpCikK,GAAOrmJ,EAAIqmJ,GAAuB,EAAhB7hK,KAAK25L,MAAM/7L,KAAWygK,EAG1C,OAAOwD,CACR,EAGD9Q,EAAG7mJ,UAAU6+M,MAAQ,SAAgB1qD,GACnCX,EAAOW,GAAO,UAGd,IADA,IAAIoqD,EAAQ,EACH7qN,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IAAK,CACzC,IAAIikB,GAAqB,EAAhB7hB,KAAK25L,MAAM/7L,IAAkB,SAAR6qN,EAC9BzoN,KAAK25L,MAAM/7L,GAAMikB,EAAIw8I,EAAO,EAC5BoqD,EAAQ5mM,EAAIw8I,CACb,CAED,OAAOr+J,KAAKi5K,OACb,EAEDloB,EAAG7mJ,UAAUuoN,KAAO,SAAep0D,GACjC,OAAOr+J,KAAK8jB,QAAQilM,MAAM1qD,EAC3B,EAEDtN,EAAG7mJ,UAAU2oN,KAAO,SAAer3M,GACjCkiJ,EAAsB,IAAfliJ,EAAEmqJ,UACTjI,GAAQliJ,EAAE2nI,UAEV,IAAIngJ,EAAIhD,KACJiD,EAAIuY,EAAEsI,QAGR9gB,EADiB,IAAfA,EAAE2iK,SACA3iK,EAAE6uJ,KAAKr2I,GAEPxY,EAAE8gB,QAaR,IATA,IAAIgvM,EAAI,IAAI/hE,EAAG,GACXgiE,EAAI,IAAIhiE,EAAG,GAGXiqC,EAAI,IAAIjqC,EAAG,GACXiiE,EAAI,IAAIjiE,EAAG,GAEXt4I,EAAI,EAEDzV,EAAE6/J,UAAY5/J,EAAE4/J,UACrB7/J,EAAE67J,OAAO,GACT57J,EAAE47J,OAAO,KACPpmJ,EAMJ,IAHA,IAAIw6M,EAAKhwN,EAAE6gB,QACPovM,EAAKlwN,EAAE8gB,SAEH9gB,EAAEmgJ,UAAU,CAClB,IAAK,IAAIvlJ,EAAI,EAAGu1N,EAAK,EAAyB,KAArBnwN,EAAE22L,MAAM,GAAKw5B,IAAav1N,EAAI,KAAMA,EAAGu1N,IAAO,GACvE,GAAIv1N,EAAI,EAEN,IADAoF,EAAE67J,OAAOjhK,GACFA,KAAM,IACPk1N,EAAEn0D,SAAWo0D,EAAEp0D,WACjBm0D,EAAEhpD,KAAKmpD,GACPF,EAAEvI,KAAK0I,IAGTJ,EAAEj0D,OAAO,GACTk0D,EAAEl0D,OAAO,GAIb,IAAK,IAAInwI,EAAI,EAAG0kM,EAAK,EAAyB,KAArBnwN,EAAE02L,MAAM,GAAKy5B,IAAa1kM,EAAI,KAAMA,EAAG0kM,IAAO,GACvE,GAAI1kM,EAAI,EAEN,IADAzrB,EAAE47J,OAAOnwI,GACFA,KAAM,IACPssK,EAAEr8B,SAAWq0D,EAAEr0D,WACjBq8B,EAAElxB,KAAKmpD,GACPD,EAAExI,KAAK0I,IAGTl4B,EAAEn8B,OAAO,GACTm0D,EAAEn0D,OAAO,GAIT77J,EAAEq/J,IAAIp/J,IAAM,GACdD,EAAEwnN,KAAKvnN,GACP6vN,EAAEtI,KAAKxvB,GACP+3B,EAAEvI,KAAKwI,KAEP/vN,EAAEunN,KAAKxnN,GACPg4L,EAAEwvB,KAAKsI,GACPE,EAAExI,KAAKuI,GAEV,CAED,MAAO,CACLjpN,EAAGkxL,EACHpnL,EAAGo/M,EACHK,IAAKpwN,EAAEquN,OAAO74M,GAEjB,EAKDs4I,EAAG7mJ,UAAUopN,OAAS,SAAiB93M,GACrCkiJ,EAAsB,IAAfliJ,EAAEmqJ,UACTjI,GAAQliJ,EAAE2nI,UAEV,IAAIr5I,EAAI9J,KACJ4T,EAAI4H,EAAEsI,QAGRha,EADiB,IAAfA,EAAE67J,SACA77J,EAAE+nJ,KAAKr2I,GAEP1R,EAAEga,QAQR,IALA,IAuCI8uF,EAvCA5qF,EAAK,IAAI+oI,EAAG,GACZj7H,EAAK,IAAIi7H,EAAG,GAEZ9zI,EAAQrJ,EAAEkQ,QAEPha,EAAEq1J,KAAK,GAAK,GAAKvrJ,EAAEurJ,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIvhK,EAAI,EAAGu1N,EAAK,EAAyB,KAArBrpN,EAAE6vL,MAAM,GAAKw5B,IAAav1N,EAAI,KAAMA,EAAGu1N,IAAO,GACvE,GAAIv1N,EAAI,EAEN,IADAkM,EAAE+0J,OAAOjhK,GACFA,KAAM,GACPoqB,EAAG22I,SACL32I,EAAG8hJ,KAAK7sJ,GAGV+K,EAAG62I,OAAO,GAId,IAAK,IAAInwI,EAAI,EAAG0kM,EAAK,EAAyB,KAArBx/M,EAAE+lL,MAAM,GAAKy5B,IAAa1kM,EAAI,KAAMA,EAAG0kM,IAAO,GACvE,GAAI1kM,EAAI,EAEN,IADA9a,EAAEirJ,OAAOnwI,GACFA,KAAM,GACPoH,EAAG6oI,SACL7oI,EAAGg0I,KAAK7sJ,GAGV6Y,EAAG+oI,OAAO,GAIV/0J,EAAEu4J,IAAIzuJ,IAAM,GACd9J,EAAE0gN,KAAK52M,GACPoU,EAAGwiM,KAAK10L,KAERliB,EAAE42M,KAAK1gN,GACPgsB,EAAG00L,KAAKxiM,GAEX,CAaD,OATE4qF,EADgB,IAAd9oG,EAAEq1J,KAAK,GACHn3I,EAEA8N,GAGAqpI,KAAK,GAAK,GAChBvsD,EAAIk3D,KAAKtuJ,GAGJo3F,CACR,EAEDm+C,EAAG7mJ,UAAUmpN,IAAM,SAAch1D,GAC/B,GAAIr+J,KAAKmjJ,SAAU,OAAOkb,EAAI/3J,MAC9B,GAAI+3J,EAAIlb,SAAU,OAAOnjJ,KAAKsG,MAE9B,IAAIwD,EAAI9J,KAAK8jB,QACTlQ,EAAIyqJ,EAAIv6I,QACZha,EAAE67J,SAAW,EACb/xJ,EAAE+xJ,SAAW,EAGb,IAAK,IAAIvuE,EAAQ,EAAGttF,EAAE+4J,UAAYjvJ,EAAEivJ,SAAUzrE,IAC5CttF,EAAE+0J,OAAO,GACTjrJ,EAAEirJ,OAAO,GAGX,OAAG,CACD,KAAO/0J,EAAE+4J,UACP/4J,EAAE+0J,OAAO,GAEX,KAAOjrJ,EAAEivJ,UACPjvJ,EAAEirJ,OAAO,GAGX,IAAIxlJ,EAAIvP,EAAEu4J,IAAIzuJ,GACd,GAAIyF,EAAI,EAAG,CAET,IAAIxI,EAAI/G,EACRA,EAAI8J,EACJA,EAAI/C,CACL,MAAM,GAAU,IAANwI,GAAyB,IAAdzF,EAAEurJ,KAAK,GAC3B,MAGFr1J,EAAE0gN,KAAK52M,EACR,CAED,OAAOA,EAAE09M,OAAOl6H,EACjB,EAGD25D,EAAG7mJ,UAAU6kK,KAAO,SAAe1Q,GACjC,OAAOr+J,KAAK6yN,KAAKx0D,GAAKv0J,EAAE+nJ,KAAKwM,EAC9B,EAEDtN,EAAG7mJ,UAAU24J,OAAS,WACpB,OAA+B,KAAP,EAAhB7iK,KAAK25L,MAAM,GACpB,EAED5oC,EAAG7mJ,UAAUy0J,MAAQ,WACnB,OAA+B,KAAP,EAAhB3+J,KAAK25L,MAAM,GACpB,EAGD5oC,EAAG7mJ,UAAUw0J,MAAQ,SAAgBL,GACnC,OAAOr+J,KAAK25L,MAAM,GAAKt7B,CACxB,EAGDtN,EAAG7mJ,UAAUqpN,MAAQ,SAAgBt5B,GACnCv8B,EAAsB,kBAARu8B,GACd,IAAI5gL,EAAI4gL,EAAM,GACV5mL,GAAK4mL,EAAM5gL,GAAK,GAChB1W,EAAI,GAAK0W,EAGb,GAAIrZ,KAAKpB,QAAUyU,EAGjB,OAFArT,KAAKmoN,QAAQ90M,EAAI,GACjBrT,KAAK25L,MAAMtmL,IAAM1Q,EACV3C,KAKT,IADA,IAAIyoN,EAAQ9lN,EACH/E,EAAIyV,EAAa,IAAVo1M,GAAe7qN,EAAIoC,KAAKpB,OAAQhB,IAAK,CACnD,IAAIikB,EAAoB,EAAhB7hB,KAAK25L,MAAM/7L,GAEnB6qN,GADA5mM,GAAK4mM,KACS,GACd5mM,GAAK,SACL7hB,KAAK25L,MAAM/7L,GAAKikB,CACjB,CAKD,OAJc,IAAV4mM,IACFzoN,KAAK25L,MAAM/7L,GAAK6qN,EAChBzoN,KAAKpB,UAEAoB,IACR,EAED+wJ,EAAG7mJ,UAAUi5I,OAAS,WACpB,OAAuB,IAAhBnjJ,KAAKpB,QAAkC,IAAlBoB,KAAK25L,MAAM,EACxC,EAED5oC,EAAG7mJ,UAAUi1J,KAAO,SAAed,GACjC,IAOIzrD,EAPA+yD,EAAWtH,EAAM,EAErB,GAAsB,IAAlBr+J,KAAK2lK,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB3lK,KAAK2lK,UAAkBA,EAAU,OAAO,EAK5C,GAHA3lK,KAAKi5K,QAGDj5K,KAAKpB,OAAS,EAChBg0G,EAAM,MACD,CACD+yD,IACFtH,GAAOA,GAGTX,EAAOW,GAAO,SAAW,qBAEzB,IAAIx8I,EAAoB,EAAhB7hB,KAAK25L,MAAM,GACnB/mF,EAAM/wF,IAAMw8I,EAAM,EAAIx8I,EAAIw8I,GAAO,EAAI,CACtC,CACD,OAAsB,IAAlBr+J,KAAK2lK,SAA8B,GAAN/yD,EAC1BA,CACR,EAMDm+C,EAAG7mJ,UAAUm4J,IAAM,SAAchE,GAC/B,GAAsB,IAAlBr+J,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAAgB,OAAQ,EACvD,GAAsB,IAAlB3lK,KAAK2lK,UAAmC,IAAjBtH,EAAIsH,SAAgB,OAAO,EAEtD,IAAI/yD,EAAM5yG,KAAKwzN,KAAKn1D,GACpB,OAAsB,IAAlBr+J,KAAK2lK,SAA8B,GAAN/yD,EAC1BA,CACR,EAGDm+C,EAAG7mJ,UAAUspN,KAAO,SAAen1D,GAEjC,GAAIr+J,KAAKpB,OAASy/J,EAAIz/J,OAAQ,OAAO,EACrC,GAAIoB,KAAKpB,OAASy/J,EAAIz/J,OAAQ,OAAQ,EAGtC,IADA,IAAIg0G,EAAM,EACDh1G,EAAIoC,KAAKpB,OAAS,EAAGhB,GAAK,EAAGA,IAAK,CACzC,IAAIkM,EAAoB,EAAhB9J,KAAK25L,MAAM/7L,GACfgW,EAAmB,EAAfyqJ,EAAIs7B,MAAM/7L,GAElB,GAAIkM,IAAM8J,EAAV,CACI9J,EAAI8J,EACNg/F,GAAO,EACE9oG,EAAI8J,IACbg/F,EAAM,GAER,KANqB,CAOtB,CACD,OAAOA,CACR,EAEDm+C,EAAG7mJ,UAAUupN,IAAM,SAAcp1D,GAC/B,OAA0B,IAAnBr+J,KAAKm/J,KAAKd,EAClB,EAEDtN,EAAG7mJ,UAAU85I,GAAK,SAAaqa,GAC7B,OAAyB,IAAlBr+J,KAAKqiK,IAAIhE,EACjB,EAEDtN,EAAG7mJ,UAAUwpN,KAAO,SAAer1D,GACjC,OAAOr+J,KAAKm/J,KAAKd,IAAQ,CAC1B,EAEDtN,EAAG7mJ,UAAUqoJ,IAAM,SAAc8L,GAC/B,OAAOr+J,KAAKqiK,IAAIhE,IAAQ,CACzB,EAEDtN,EAAG7mJ,UAAUypN,IAAM,SAAct1D,GAC/B,OAA2B,IAApBr+J,KAAKm/J,KAAKd,EAClB,EAEDtN,EAAG7mJ,UAAU+5I,GAAK,SAAaoa,GAC7B,OAA0B,IAAnBr+J,KAAKqiK,IAAIhE,EACjB,EAEDtN,EAAG7mJ,UAAU0pN,KAAO,SAAev1D,GACjC,OAAOr+J,KAAKm/J,KAAKd,IAAQ,CAC1B,EAEDtN,EAAG7mJ,UAAUooJ,IAAM,SAAc+L,GAC/B,OAAOr+J,KAAKqiK,IAAIhE,IAAQ,CACzB,EAEDtN,EAAG7mJ,UAAU2pN,IAAM,SAAcx1D,GAC/B,OAA0B,IAAnBr+J,KAAKm/J,KAAKd,EAClB,EAEDtN,EAAG7mJ,UAAUmoJ,GAAK,SAAagM,GAC7B,OAAyB,IAAlBr+J,KAAKqiK,IAAIhE,EACjB,EAMDtN,EAAG6O,IAAM,SAAcvB,GACrB,OAAO,IAAIy1D,EAAIz1D,EAChB,EAEDtN,EAAG7mJ,UAAU61J,MAAQ,SAAgBg0D,GAGnC,OAFAr2D,GAAQ19J,KAAK4/J,IAAK,yCAClBlC,EAAyB,IAAlB19J,KAAK2lK,SAAgB,iCACrBouD,EAAIC,UAAUh0N,MAAMi0N,UAAUF,EACtC,EAEDhjE,EAAG7mJ,UAAU05J,QAAU,WAErB,OADAlG,EAAO19J,KAAK4/J,IAAK,wDACV5/J,KAAK4/J,IAAIs0D,YAAYl0N,KAC7B,EAED+wJ,EAAG7mJ,UAAU+pN,UAAY,SAAoBF,GAE3C,OADA/zN,KAAK4/J,IAAMm0D,EACJ/zN,IACR,EAED+wJ,EAAG7mJ,UAAUo6J,SAAW,SAAmByvD,GAEzC,OADAr2D,GAAQ19J,KAAK4/J,IAAK,yCACX5/J,KAAKi0N,UAAUF,EACvB,EAEDhjE,EAAG7mJ,UAAUi7J,OAAS,SAAiB9G,GAErC,OADAX,EAAO19J,KAAK4/J,IAAK,sCACV5/J,KAAK4/J,IAAI7zI,IAAI/rB,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAUg8J,QAAU,SAAkB7H,GAEvC,OADAX,EAAO19J,KAAK4/J,IAAK,uCACV5/J,KAAK4/J,IAAIkK,KAAK9pK,KAAMq+J,EAC5B,EAEDtN,EAAG7mJ,UAAUk7J,OAAS,SAAiB/G,GAErC,OADAX,EAAO19J,KAAK4/J,IAAK,sCACV5/J,KAAK4/J,IAAIp1I,IAAIxqB,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAUk8J,QAAU,SAAkB/H,GAEvC,OADAX,EAAO19J,KAAK4/J,IAAK,uCACV5/J,KAAK4/J,IAAI4qD,KAAKxqN,KAAMq+J,EAC5B,EAEDtN,EAAG7mJ,UAAUiqN,OAAS,SAAiB91D,GAErC,OADAX,EAAO19J,KAAK4/J,IAAK,sCACV5/J,KAAK4/J,IAAIw0D,IAAIp0N,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAU26J,OAAS,SAAiBxG,GAGrC,OAFAX,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAIy0D,SAASr0N,KAAMq+J,GACjBr+J,KAAK4/J,IAAIzb,IAAInkJ,KAAMq+J,EAC3B,EAEDtN,EAAG7mJ,UAAUoqN,QAAU,SAAkBj2D,GAGvC,OAFAX,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAIy0D,SAASr0N,KAAMq+J,GACjBr+J,KAAK4/J,IAAItsJ,KAAKtT,KAAMq+J,EAC5B,EAEDtN,EAAG7mJ,UAAU+7J,OAAS,WAGpB,OAFAvI,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAI8F,IAAI1lK,KACrB,EAED+wJ,EAAG7mJ,UAAUsqN,QAAU,WAGrB,OAFA92D,EAAO19J,KAAK4/J,IAAK,uCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAIwxD,KAAKpxN,KACtB,EAGD+wJ,EAAG7mJ,UAAUg7J,QAAU,WAGrB,OAFAxH,EAAO19J,KAAK4/J,IAAK,uCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAIxqJ,KAAKpV,KACtB,EAED+wJ,EAAG7mJ,UAAUw5J,QAAU,WAGrB,OAFAhG,EAAO19J,KAAK4/J,IAAK,uCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAImP,KAAK/uK,KACtB,EAGD+wJ,EAAG7mJ,UAAUq4J,OAAS,WAGpB,OAFA7E,EAAO19J,KAAK4/J,IAAK,sCACjB5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAI2B,IAAIvhK,KACrB,EAED+wJ,EAAG7mJ,UAAUuqN,OAAS,SAAiBp2D,GAGrC,OAFAX,EAAO19J,KAAK4/J,MAAQvB,EAAIuB,IAAK,qBAC7B5/J,KAAK4/J,IAAI20D,SAASv0N,MACXA,KAAK4/J,IAAI5uJ,IAAIhR,KAAMq+J,EAC3B,EAGD,IAAIq2D,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQz6M,EAAMkB,GAErBxb,KAAKsa,KAAOA,EACZta,KAAKwb,EAAI,IAAIu1I,EAAGv1I,EAAG,IACnBxb,KAAK0Q,EAAI1Q,KAAKwb,EAAE+iJ,YAChBv+J,KAAK+0E,EAAI,IAAIg8E,EAAG,GAAGugE,OAAOtxN,KAAK0Q,GAAG85M,KAAKxqN,KAAKwb,GAE5Cxb,KAAKgZ,IAAMhZ,KAAKg1N,MACjB,CAgDD,SAASC,IACPF,EAAOx2N,KACLyB,KACA,OACA,0EACH,CA8DD,SAASk1N,IACPH,EAAOx2N,KACLyB,KACA,OACA,iEACH,CAGD,SAASm1N,IACPJ,EAAOx2N,KACLyB,KACA,OACA,wDACH,CAGD,SAASo1N,IAEPL,EAAOx2N,KACLyB,KACA,QACA,sEACH,CA6CD,SAAS8zN,EAAKnjN,GACZ,GAAiB,kBAANA,EAAgB,CACzB,IAAIkvJ,EAAQ9O,EAAGskE,OAAO1kN,GACtB3Q,KAAK2Q,EAAIkvJ,EAAMrkJ,EACfxb,KAAK6/J,MAAQA,CACd,MACCnC,EAAO/sJ,EAAE8iN,IAAI,GAAI,kCACjBzzN,KAAK2Q,EAAIA,EACT3Q,KAAK6/J,MAAQ,IAEhB,CAgOD,SAASy1D,EAAM3kN,GACbmjN,EAAIv1N,KAAKyB,KAAM2Q,GAEf3Q,KAAKo3F,MAAQp3F,KAAK2Q,EAAE4tJ,YAChBv+J,KAAKo3F,MAAQ,KAAO,IACtBp3F,KAAKo3F,OAAS,GAAMp3F,KAAKo3F,MAAQ,IAGnCp3F,KAAKqZ,EAAI,IAAI03I,EAAG,GAAGugE,OAAOtxN,KAAKo3F,OAC/Bp3F,KAAK4yN,GAAK5yN,KAAKu1N,KAAKv1N,KAAKqZ,EAAEqsJ,OAC3B1lK,KAAKw1N,KAAOx1N,KAAKqZ,EAAEi6M,OAAOtzN,KAAK2Q,GAE/B3Q,KAAKy1N,KAAOz1N,KAAKw1N,KAAKrxE,IAAInkJ,KAAKqZ,GAAGulJ,MAAM,GAAGjN,IAAI3xJ,KAAK2Q,GACpD3Q,KAAKy1N,KAAOz1N,KAAKy1N,KAAK5jE,KAAK7xJ,KAAKqZ,GAChCrZ,KAAKy1N,KAAOz1N,KAAKqZ,EAAEmR,IAAIxqB,KAAKy1N,KAC7B,CA7aDV,EAAO7qN,UAAU8qN,KAAO,WACtB,IAAIh8M,EAAM,IAAI+3I,EAAG,MAEjB,OADA/3I,EAAI2gL,MAAQ,IAAI97L,MAAMsI,KAAK8K,KAAKjR,KAAK0Q,EAAI,KAClCsI,CACR,EAED+7M,EAAO7qN,UAAUwrN,QAAU,SAAkBr3D,GAG3C,IACIoP,EADAp0J,EAAIglJ,EAGR,GACEr+J,KAAK2hE,MAAMtoD,EAAGrZ,KAAKgZ,KAGnBy0J,GADAp0J,GADAA,EAAIrZ,KAAK21N,MAAMt8M,IACTywJ,KAAK9pK,KAAKgZ,MACPulJ,kBACFkP,EAAOztK,KAAK0Q,GAErB,IAAI2xJ,EAAMoL,EAAOztK,KAAK0Q,GAAK,EAAI2I,EAAEm6M,KAAKxzN,KAAKwb,GAgB3C,OAfY,IAAR6mJ,GACFhpJ,EAAEsgL,MAAM,GAAK,EACbtgL,EAAEza,OAAS,GACFyjK,EAAM,EACfhpJ,EAAEmxM,KAAKxqN,KAAKwb,QAEInS,IAAZgQ,EAAE4/J,MAEJ5/J,EAAE4/J,QAGF5/J,EAAEu8M,SAICv8M,CACR,EAED07M,EAAO7qN,UAAUy3D,MAAQ,SAAgBwgE,EAAO0oD,GAC9C1oD,EAAM08B,OAAO7+J,KAAK0Q,EAAG,EAAGm6K,EACzB,EAEDkqC,EAAO7qN,UAAUyrN,MAAQ,SAAgBt3D,GACvC,OAAOA,EAAI/qJ,KAAKtT,KAAK+0E,EACtB,EAQDmvF,EAAS+wD,EAAMF,GAEfE,EAAK/qN,UAAUy3D,MAAQ,SAAgBwgE,EAAOnjH,GAK5C,IAHA,IAAIwY,EAAO,QAEPkzI,EAASvkK,KAAKC,IAAI+7H,EAAMvjI,OAAQ,GAC3BhB,EAAI,EAAGA,EAAI8sK,EAAQ9sK,IAC1BohB,EAAO26K,MAAM/7L,GAAKukI,EAAMw3D,MAAM/7L,GAIhC,GAFAohB,EAAOpgB,OAAS8rK,EAEZvoC,EAAMvjI,QAAU,EAGlB,OAFAujI,EAAMw3D,MAAM,GAAK,OACjBx3D,EAAMvjI,OAAS,GAKjB,IAAIslN,EAAO/hF,EAAMw3D,MAAM,GAGvB,IAFA36K,EAAO26K,MAAM36K,EAAOpgB,UAAYslN,EAAO1sL,EAElC55B,EAAI,GAAIA,EAAIukI,EAAMvjI,OAAQhB,IAAK,CAClC,IAAIY,EAAwB,EAAjB2jI,EAAMw3D,MAAM/7L,GACvBukI,EAAMw3D,MAAM/7L,EAAI,KAAQY,EAAOg5B,IAAS,EAAM0sL,IAAS,GACvDA,EAAO1lN,CACR,CACD0lN,KAAU,GACV/hF,EAAMw3D,MAAM/7L,EAAI,IAAMsmN,EACT,IAATA,GAAc/hF,EAAMvjI,OAAS,GAC/BujI,EAAMvjI,QAAU,GAEhBujI,EAAMvjI,QAAU,CAEnB,EAEDq2N,EAAK/qN,UAAUyrN,MAAQ,SAAgBt3D,GAErCA,EAAIs7B,MAAMt7B,EAAIz/J,QAAU,EACxBy/J,EAAIs7B,MAAMt7B,EAAIz/J,OAAS,GAAK,EAC5By/J,EAAIz/J,QAAU,EAId,IADA,IAAIq/J,EAAK,EACArgK,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAAK,CACnC,IAAIikB,EAAmB,EAAfw8I,EAAIs7B,MAAM/7L,GAClBqgK,GAAU,IAAJp8I,EACNw8I,EAAIs7B,MAAM/7L,GAAU,SAALqgK,EACfA,EAAS,GAAJp8I,GAAao8I,EAAK,SAAa,EACrC,CASD,OANkC,IAA9BI,EAAIs7B,MAAMt7B,EAAIz/J,OAAS,KACzBy/J,EAAIz/J,SAC8B,IAA9By/J,EAAIs7B,MAAMt7B,EAAIz/J,OAAS,IACzBy/J,EAAIz/J,UAGDy/J,CACR,EAQD6F,EAASgxD,EAAMH,GAQf7wD,EAASixD,EAAMJ,GASf7wD,EAASkxD,EAAQL,GAEjBK,EAAOlrN,UAAUyrN,MAAQ,SAAgBt3D,GAGvC,IADA,IAAIoqD,EAAQ,EACH7qN,EAAI,EAAGA,EAAIygK,EAAIz/J,OAAQhB,IAAK,CACnC,IAAIogK,EAA0B,IAAL,EAAfK,EAAIs7B,MAAM/7L,IAAiB6qN,EACjCxqD,EAAU,SAALD,EACTA,KAAQ,GAERK,EAAIs7B,MAAM/7L,GAAKqgK,EACfwqD,EAAQzqD,CACT,CAID,OAHc,IAAVyqD,IACFpqD,EAAIs7B,MAAMt7B,EAAIz/J,UAAY6pN,GAErBpqD,CACR,EAGDtN,EAAGskE,OAAS,SAAgB/6M,GAE1B,GAAIo6M,EAAOp6M,GAAO,OAAOo6M,EAAOp6M,GAEhC,IAAIulJ,EACJ,GAAa,SAATvlJ,EACFulJ,EAAQ,IAAIo1D,OACP,GAAa,SAAT36M,EACTulJ,EAAQ,IAAIq1D,OACP,GAAa,SAAT56M,EACTulJ,EAAQ,IAAIs1D,MACP,IAAa,WAAT76M,EAGT,MAAM,IAAI3I,MAAM,iBAAmB2I,GAFnCulJ,EAAQ,IAAIu1D,CAGb,CAGD,OAFAV,EAAOp6M,GAAQulJ,EAERA,CACR,EAiBDi0D,EAAI5pN,UAAUqqN,SAAW,SAAmBzqN,GAC1C4zJ,EAAsB,IAAf5zJ,EAAE67J,SAAgB,iCACzBjI,EAAO5zJ,EAAE81J,IAAK,kCACf,EAEDk0D,EAAI5pN,UAAUmqN,SAAW,SAAmBvqN,EAAG8J,GAC7C8pJ,EAAqC,KAA7B5zJ,EAAE67J,SAAW/xJ,EAAE+xJ,UAAiB,iCACxCjI,EAAO5zJ,EAAE81J,KAAO91J,EAAE81J,MAAQhsJ,EAAEgsJ,IAC1B,kCACH,EAEDk0D,EAAI5pN,UAAUqrN,KAAO,SAAezrN,GAClC,OAAI9J,KAAK6/J,MAAc7/J,KAAK6/J,MAAM61D,QAAQ5rN,GAAGmqN,UAAUj0N,MAChD8J,EAAE+nJ,KAAK7xJ,KAAK2Q,GAAGsjN,UAAUj0N,KACjC,EAED8zN,EAAI5pN,UAAUq3J,IAAM,SAAcz3J,GAChC,OAAIA,EAAEq5I,SACGr5I,EAAEga,QAGJ9jB,KAAK2Q,EAAE6Z,IAAI1gB,GAAGmqN,UAAUj0N,KAChC,EAED8zN,EAAI5pN,UAAU6hB,IAAM,SAAcjiB,EAAG8J,GACnC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAEiiB,IAAInY,GAIhB,OAHIg/F,EAAIyvD,IAAIriK,KAAK2Q,IAAM,GACrBiiG,EAAI43G,KAAKxqN,KAAK2Q,GAETiiG,EAAIqhH,UAAUj0N,KACtB,EAED8zN,EAAI5pN,UAAU4/J,KAAO,SAAehgK,EAAG8J,GACrC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAEggK,KAAKl2J,GAIjB,OAHIg/F,EAAIyvD,IAAIriK,KAAK2Q,IAAM,GACrBiiG,EAAI43G,KAAKxqN,KAAK2Q,GAETiiG,CACR,EAEDkhH,EAAI5pN,UAAUsgB,IAAM,SAAc1gB,EAAG8J,GACnC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAE0gB,IAAI5W,GAIhB,OAHIg/F,EAAIusD,KAAK,GAAK,GAChBvsD,EAAIk3D,KAAK9pK,KAAK2Q,GAETiiG,EAAIqhH,UAAUj0N,KACtB,EAED8zN,EAAI5pN,UAAUsgN,KAAO,SAAe1gN,EAAG8J,GACrC5T,KAAKq0N,SAASvqN,EAAG8J,GAEjB,IAAIg/F,EAAM9oG,EAAE0gN,KAAK52M,GAIjB,OAHIg/F,EAAIusD,KAAK,GAAK,GAChBvsD,EAAIk3D,KAAK9pK,KAAK2Q,GAETiiG,CACR,EAEDkhH,EAAI5pN,UAAUkqN,IAAM,SAActqN,EAAGu0J,GAEnC,OADAr+J,KAAKu0N,SAASzqN,GACP9J,KAAKu1N,KAAKzrN,EAAEgoN,MAAMzzD,GAC1B,EAEDy1D,EAAI5pN,UAAUoJ,KAAO,SAAexJ,EAAG8J,GAErC,OADA5T,KAAKq0N,SAASvqN,EAAG8J,GACV5T,KAAKu1N,KAAKzrN,EAAEwJ,KAAKM,GACzB,EAEDkgN,EAAI5pN,UAAUi6I,IAAM,SAAcr6I,EAAG8J,GAEnC,OADA5T,KAAKq0N,SAASvqN,EAAG8J,GACV5T,KAAKu1N,KAAKzrN,EAAEq6I,IAAIvwI,GACxB,EAEDkgN,EAAI5pN,UAAUknN,KAAO,SAAetnN,GAClC,OAAO9J,KAAKsT,KAAKxJ,EAAGA,EAAEga,QACvB,EAEDgwM,EAAI5pN,UAAUw7J,IAAM,SAAc57J,GAChC,OAAO9J,KAAKmkJ,IAAIr6I,EAAGA,EACpB,EAEDgqN,EAAI5pN,UAAUkL,KAAO,SAAetL,GAClC,GAAIA,EAAEq5I,SAAU,OAAOr5I,EAAEga,QAEzB,IAAI+xM,EAAO71N,KAAK2Q,EAAE+tJ,MAAM,GAIxB,GAHAhB,EAAOm4D,EAAO,IAAM,GAGP,IAATA,EAAY,CACd,IAAI7kN,EAAMhR,KAAK2Q,EAAEob,IAAI,IAAIglI,EAAG,IAAI8N,OAAO,GACvC,OAAO7+J,KAAKgR,IAAIlH,EAAGkH,EACpB,CAOD,IAFA,IAAIrO,EAAI3C,KAAK2Q,EAAEshN,KAAK,GAChB5+M,EAAI,GACA1Q,EAAEwgJ,UAA2B,IAAfxgJ,EAAE+7J,MAAM,IAC5BrrJ,IACA1Q,EAAEk8J,OAAO,GAEXnB,GAAQ/6J,EAAEwgJ,UAEV,IAAI6c,EAAM,IAAIjP,EAAG,GAAGgP,MAAM//J,MACtB81N,EAAO91D,EAAIuC,SAIXwzD,EAAO/1N,KAAK2Q,EAAEshN,KAAK,GAAGpzD,OAAO,GAC7Bx7J,EAAIrD,KAAK2Q,EAAE4tJ,YAGf,IAFAl7J,EAAI,IAAI0tJ,EAAG,EAAI1tJ,EAAIA,GAAG08J,MAAM//J,MAEW,IAAhCA,KAAKgR,IAAI3N,EAAG0yN,GAAM1zD,IAAIyzD,IAC3BzyN,EAAE6iK,QAAQ4vD,GAOZ,IAJA,IAAIjiN,EAAI7T,KAAKgR,IAAI3N,EAAGV,GAChB0W,EAAIrZ,KAAKgR,IAAIlH,EAAGnH,EAAEqvN,KAAK,GAAGnzD,OAAO,IACjChuJ,EAAI7Q,KAAKgR,IAAIlH,EAAGnH,GAChBgO,EAAI0C,EACc,IAAfxC,EAAEwxJ,IAAIrC,IAAY,CAEvB,IADA,IAAIhnJ,EAAMnI,EACDjT,EAAI,EAAoB,IAAjBob,EAAIqpJ,IAAIrC,GAAYpiK,IAClCob,EAAMA,EAAIitJ,SAEZvI,EAAO9/J,EAAI+S,GACX,IAAIiD,EAAI5T,KAAKgR,IAAI6C,EAAG,IAAIk9I,EAAG,GAAGugE,OAAO3gN,EAAI/S,EAAI,IAE7Cyb,EAAIA,EAAEwrJ,OAAOjxJ,GACbC,EAAID,EAAEqyJ,SACNp1J,EAAIA,EAAEg0J,OAAOhxJ,GACblD,EAAI/S,CACL,CAED,OAAOyb,CACR,EAEDy6M,EAAI5pN,UAAU6kK,KAAO,SAAejlK,GAClC,IAAIksN,EAAMlsN,EAAEwpN,OAAOtzN,KAAK2Q,GACxB,OAAqB,IAAjBqlN,EAAIrwD,UACNqwD,EAAIrwD,SAAW,EACR3lK,KAAKu1N,KAAKS,GAAKzzD,UAEfviK,KAAKu1N,KAAKS,EAEpB,EAEDlC,EAAI5pN,UAAU8G,IAAM,SAAclH,EAAGu0J,GACnC,GAAIA,EAAIlb,SAAU,OAAO,IAAI4N,EAAG,GAAGgP,MAAM//J,MACzC,GAAoB,IAAhBq+J,EAAIc,KAAK,GAAU,OAAOr1J,EAAEga,QAEhC,IACI89I,EAAM,IAAI/jK,MAAM,IACpB+jK,EAAI,GAAK,IAAI7Q,EAAG,GAAGgP,MAAM//J,MACzB4hK,EAAI,GAAK93J,EACT,IAAK,IAAIlM,EAAI,EAAGA,EAAIgkK,EAAIhjK,OAAQhB,IAC9BgkK,EAAIhkK,GAAKoC,KAAKmkJ,IAAIyd,EAAIhkK,EAAI,GAAIkM,GAGhC,IAAI8oG,EAAMgvD,EAAI,GACVr8J,EAAU,EACV0wN,EAAa,EACb9tL,EAAQk2H,EAAIE,YAAc,GAK9B,IAJc,IAAVp2H,IACFA,EAAQ,IAGLvqC,EAAIygK,EAAIz/J,OAAS,EAAGhB,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAIkgK,EAAOO,EAAIs7B,MAAM/7L,GACZ8wB,EAAIyZ,EAAQ,EAAGzZ,GAAK,EAAGA,IAAK,CACnC,IAAIurK,EAAOn8B,GAAQpvI,EAAK,EACpBkkF,IAAQgvD,EAAI,KACdhvD,EAAM5yG,KAAK0lK,IAAI9yD,IAGL,IAARqnF,GAAyB,IAAZ10L,GAKjBA,IAAY,EACZA,GAAW00L,GA9BE,MA+Bbg8B,GACwC,IAANr4N,GAAiB,IAAN8wB,KAE7CkkF,EAAM5yG,KAAKmkJ,IAAIvxC,EAAKgvD,EAAIr8J,IACxB0wN,EAAa,EACb1wN,EAAU,IAXR0wN,EAAa,CAYhB,CACD9tL,EAAQ,EACT,CAED,OAAOyqE,CACR,EAEDkhH,EAAI5pN,UAAU8pN,UAAY,SAAoB31D,GAC5C,IAAIhlJ,EAAIglJ,EAAIxM,KAAK7xJ,KAAK2Q,GAEtB,OAAO0I,IAAMglJ,EAAMhlJ,EAAEyK,QAAUzK,CAChC,EAEDy6M,EAAI5pN,UAAUgqN,YAAc,SAAsB71D,GAChD,IAAIzrD,EAAMyrD,EAAIv6I,QAEd,OADA8uF,EAAIgtD,IAAM,KACHhtD,CACR,EAMDm+C,EAAGoZ,KAAO,SAAe9L,GACvB,OAAO,IAAIi3D,EAAKj3D,EACjB,EAkBD6F,EAASoxD,EAAMxB,GAEfwB,EAAKprN,UAAU8pN,UAAY,SAAoB31D,GAC7C,OAAOr+J,KAAKu1N,KAAKl3D,EAAIyzD,MAAM9xN,KAAKo3F,OACjC,EAEDk+H,EAAKprN,UAAUgqN,YAAc,SAAsB71D,GACjD,IAAIhlJ,EAAIrZ,KAAKu1N,KAAKl3D,EAAIla,IAAInkJ,KAAKw1N,OAE/B,OADAn8M,EAAEumJ,IAAM,KACDvmJ,CACR,EAEDi8M,EAAKprN,UAAUoJ,KAAO,SAAexJ,EAAG8J,GACtC,GAAI9J,EAAEq5I,UAAYvvI,EAAEuvI,SAGlB,OAFAr5I,EAAE6vL,MAAM,GAAK,EACb7vL,EAAElL,OAAS,EACJkL,EAGT,IAAI+G,EAAI/G,EAAEwJ,KAAKM,GACXC,EAAIhD,EAAEqhJ,MAAMlyJ,KAAKo3F,OAAO+sD,IAAInkJ,KAAKy1N,MAAM1D,OAAO/xN,KAAKo3F,OAAO+sD,IAAInkJ,KAAK2Q,GACnEua,EAAIra,EAAE25M,KAAK32M,GAAGgrJ,OAAO7+J,KAAKo3F,OAC1Bwb,EAAM1nF,EAQV,OANIA,EAAEm3I,IAAIriK,KAAK2Q,IAAM,EACnBiiG,EAAM1nF,EAAEs/L,KAAKxqN,KAAK2Q,GACTua,EAAEi0I,KAAK,GAAK,IACrBvsD,EAAM1nF,EAAE4+I,KAAK9pK,KAAK2Q,IAGbiiG,EAAIqhH,UAAUj0N,KACtB,EAEDs1N,EAAKprN,UAAUi6I,IAAM,SAAcr6I,EAAG8J,GACpC,GAAI9J,EAAEq5I,UAAYvvI,EAAEuvI,SAAU,OAAO,IAAI4N,EAAG,GAAGkjE,UAAUj0N,MAEzD,IAAI6Q,EAAI/G,EAAEq6I,IAAIvwI,GACVC,EAAIhD,EAAEqhJ,MAAMlyJ,KAAKo3F,OAAO+sD,IAAInkJ,KAAKy1N,MAAM1D,OAAO/xN,KAAKo3F,OAAO+sD,IAAInkJ,KAAK2Q,GACnEua,EAAIra,EAAE25M,KAAK32M,GAAGgrJ,OAAO7+J,KAAKo3F,OAC1Bwb,EAAM1nF,EAOV,OANIA,EAAEm3I,IAAIriK,KAAK2Q,IAAM,EACnBiiG,EAAM1nF,EAAEs/L,KAAKxqN,KAAK2Q,GACTua,EAAEi0I,KAAK,GAAK,IACrBvsD,EAAM1nF,EAAE4+I,KAAK9pK,KAAK2Q,IAGbiiG,EAAIqhH,UAAUj0N,KACtB,EAEDs1N,EAAKprN,UAAU6kK,KAAO,SAAejlK,GAGnC,OADU9J,KAAKu1N,KAAKzrN,EAAEwpN,OAAOtzN,KAAK2Q,GAAGwzI,IAAInkJ,KAAK4yN,KACnCqB,UAAUj0N,KACtB,CAp3GH,aAq3G4CA,6BCr3G5C,IAAI62Q,EAAYz9F,EAAQ,OACpB6tM,EAAM7tM,EAAQ,OACdnnB,EAAMmnB,EAAQ,OACdroB,EAAKqoB,EAAQ,KACbk8F,EAAMl8F,EAAQ,OACduxD,EAAavxD,EAAQ,OACrB8tM,EAAa9tM,EAAQ,MACrBxsC,EAASwsC,EAAAA,OAAAA,OAEbjW,EAAOx3B,QAAU,SAAyBqkC,EAAYjS,EAAKwmD,GACzD,IAAI1rC,EAEFA,EADE7I,EAAW6I,QACH7I,EAAW6I,QACZ0rC,EACC,EAEA,EAGZ,IAKI91E,EALAxtI,EAAM41Q,EAAU7mG,GAChBj7F,EAAI9zE,EAAIk0Q,QAAQ9lK,aACpB,GAAI0uD,EAAIn/J,OAASm2E,GAAK,IAAIg8E,EAAGgN,GAAKsE,IAAIphK,EAAIk0Q,UAAY,EACpD,MAAM,IAAIxjQ,MAAM,oBAIhB88H,EADE81E,EACI2iK,EAAW,IAAIn2N,EAAGgN,GAAM98J,GAExBq0Q,EAAIv3G,EAAK98J,GAEjB,IAAIkmX,EAAUv6O,EAAOivD,MAAM9mH,EAAI05D,EAAI7vI,QAEnC,GADA6vI,EAAM7B,EAAOmQ,OAAO,CAACoqO,EAAS14O,GAAM15D,GACpB,IAAZ8jG,EACF,OAUJ,SAAe53K,EAAKwtI,GAClB,IAAI15D,EAAI9zE,EAAIk0Q,QAAQ9lK,aAChB+3Q,EAAQz8I,EAAW,QAAQ7lN,OAAO8nH,EAAOivD,MAAM,IAAIlwB,SACnDuuJ,EAAOktD,EAAMxoX,OACjB,GAAe,IAAX6vI,EAAI,GACN,MAAM,IAAI98H,MAAM,oBAElB,IAAI01W,EAAa54O,EAAI9+H,MAAM,EAAGuqT,EAAO,GACjCotD,EAAW74O,EAAI9+H,MAAMuqT,EAAO,GAC5B1uJ,EAAOvZ,EAAIo1N,EAAYJ,EAAIK,EAAUptD,IACrC27C,EAAK5jN,EAAIq1N,EAAUL,EAAIz7M,EAAMz2F,EAAImlP,EAAO,IAC5C,GAoCF,SAAkBpwT,EAAG8J,GACnB9J,EAAI8iI,EAAOvtH,KAAKvV,GAChB8J,EAAIg5H,EAAOvtH,KAAKzL,GAChB,IAAI2zW,EAAM,EACNj/V,EAAMxe,EAAElL,OACRkL,EAAElL,SAAWgV,EAAEhV,SACjB2oX,IACAj/V,EAAMniB,KAAKC,IAAI0D,EAAElL,OAAQgV,EAAEhV,SAE7B,IAAIhB,GAAK,EACT,OAASA,EAAI0qB,GACXi/V,GAAQz9W,EAAElM,GAAKgW,EAAEhW,GAEnB,OAAO2pX,CACR,CAlDKthJ,CAAQmhJ,EAAOvR,EAAGlmW,MAAM,EAAGuqT,IAC7B,MAAM,IAAIvoT,MAAM,oBAElB,IAAI/T,EAAIs8T,EACR,KAAiB,IAAV27C,EAAGj4W,IACRA,IAEF,GAAgB,IAAZi4W,EAAGj4W,KACL,MAAM,IAAI+T,MAAM,oBAElB,OAAOkkW,EAAGlmW,MAAM/R,EACjB,CAhCU4pX,CAAKvmX,EAAKwtI,GACZ,GAAgB,IAAZoqC,EACT,OAgCJ,SAAgB53K,EAAKwtI,EAAK81E,GACxB,IAAI31L,EAAK6/G,EAAI9+H,MAAM,EAAG,GAClB/R,EAAI,EACJujE,EAAS,EACb,KAAoB,IAAbstE,EAAI7wI,MACT,GAAIA,GAAK6wI,EAAI7vI,OAAQ,CACnBuiE,IACA,KACD,CAEH,IAAIslS,EAAKh4N,EAAI9+H,MAAM,EAAG/R,EAAI,IAEE,SAAvBgxB,EAAGtkB,SAAS,SAAsBi6M,GAAoC,SAAvB31L,EAAGtkB,SAAS,QAAqBi6M,IACnFpjJ,IAEEslS,EAAG7nW,OAAS,GACduiE,IAEF,GAAIA,EACF,MAAM,IAAIxvD,MAAM,oBAElB,OAAO88H,EAAI9+H,MAAM/R,EAClB,CAtDU6pX,CAAMxmX,EAAKwtI,EAAK81E,GAClB,GAAgB,IAAZ1rC,EACT,OAAOpqC,EAEP,MAAM,IAAI98H,MAAM,kBAEnB,yBCzCD,IAAIklQ,EAAYz9F,EAAQ,OACpBm0F,EAAcn0F,EAAQ,OACtBuxD,EAAavxD,EAAQ,OACrB6tM,EAAM7tM,EAAQ,OACdnnB,EAAMmnB,EAAQ,OACdroB,EAAKqoB,EAAQ,KACb8tM,EAAa9tM,EAAQ,MACrBk8F,EAAMl8F,EAAQ,OACdxsC,EAASwsC,EAAAA,OAAAA,OAEbjW,EAAOx3B,QAAU,SAAwBskC,EAAWxhC,EAAK81E,GACvD,IAAI1rC,EAEFA,EADE5I,EAAU4I,QACF5I,EAAU4I,QACX0rC,EACC,EAEA,EAEZ,IACImjK,EADAzmX,EAAM41Q,EAAU5mG,GAEpB,GAAgB,IAAZ4I,EACF6uM,EAkBJ,SAAezmX,EAAKwtI,GAClB,IAAI15D,EAAI9zE,EAAIk0Q,QAAQ9lK,aAChBshP,EAAOliN,EAAI7vI,OACXwoX,EAAQz8I,EAAW,QAAQ7lN,OAAO8nH,EAAOivD,MAAM,IAAIlwB,SACnDuuJ,EAAOktD,EAAMxoX,OACb+oX,EAAQ,EAAIztD,EAChB,GAAIy2B,EAAO57Q,EAAI4yS,EAAQ,EACrB,MAAM,IAAIh2W,MAAM,oBAElB,IAAI80V,EAAK75N,EAAOivD,MAAM9mH,EAAI47Q,EAAOg3B,EAAQ,GACrCC,EAAQ7yS,EAAImlP,EAAO,EACnB1uJ,EAAO+hG,EAAY2sD,GACnBotD,EAAWr1N,EAAIrlB,EAAOmQ,OAAO,CAACqqO,EAAO3gB,EAAI75N,EAAOivD,MAAM,EAAG,GAAIptD,GAAMm5O,GAAQX,EAAIz7M,EAAMo8M,IACrFP,EAAap1N,EAAIuZ,EAAMy7M,EAAIK,EAAUptD,IACzC,OAAO,IAAInpK,EAAGnkB,EAAOmQ,OAAO,CAACnQ,EAAOivD,MAAM,GAAIwrL,EAAYC,GAAWvyS,GACtE,CAjCeyyS,CAAKvmX,EAAKwtI,QACjB,GAAgB,IAAZoqC,EACT6uM,EAgCJ,SAAgBzmX,EAAKwtI,EAAK81E,GACxB,IAKIkiJ,EALA9V,EAAOliN,EAAI7vI,OACXm2E,EAAI9zE,EAAIk0Q,QAAQ9lK,aACpB,GAAIshP,EAAO57Q,EAAI,GACb,MAAM,IAAIpjE,MAAM,oBAIhB80V,EADEliJ,EACG33E,EAAOivD,MAAM9mH,EAAI47Q,EAAO,EAAG,KAMpC,SAAkBroU,GAChB,IAII+1I,EAJAwsB,EAAMj+C,EAAOigI,YAAYvkP,GACzB1qB,EAAI,EACJ6+B,EAAQ8wO,EAAkB,EAANjlP,GACpBq6M,EAAM,EAEV,KAAO/kO,EAAI0qB,GACLq6M,IAAQlmM,EAAM79B,SAChB69B,EAAQ8wO,EAAkB,EAANjlP,GACpBq6M,EAAM,IAERtkE,EAAM5hI,EAAMkmM,QAEV93C,EAAIjtL,KAAOygK,GAGf,OAAOwsB,CACR,CArBQg9L,CAAQ9yS,EAAI47Q,EAAO,GAE1B,OAAO,IAAI5/L,EAAGnkB,EAAOmQ,OAAO,CAACnQ,EAAOvtH,KAAK,CAAC,EAAGklM,EAAU,EAAI,IAAKkiJ,EAAI75N,EAAOivD,MAAM,GAAIptD,GAAM15D,GAC5F,CA7Ce0yS,CAAMxmX,EAAKwtI,EAAK81E,OACvB,IAAgB,IAAZ1rC,EAMT,MAAM,IAAIlnK,MAAM,mBAJhB,IADA+1W,EAAY,IAAI32N,EAAGtiB,IACL4zB,IAAIphK,EAAIk0Q,UAAY,EAChC,MAAM,IAAIxjQ,MAAM,4BAInB,CACD,OAAI4yM,EACK+wD,EAAIoyG,EAAWzmX,GAEfimX,EAAWQ,EAAWzmX,EAEhC,wBCtCD,IAAI8vJ,EAAKqoB,EAAQ,KACbxsC,EAASwsC,EAAAA,OAAAA,OAUbjW,EAAOx3B,QARP,SAAqB+7O,EAAWzmX,GAC9B,OAAO2rI,EAAOvtH,KAAKqoW,EAChB3nN,MAAMhP,EAAGoZ,KAAKlpK,EAAIk0Q,UAClB1gD,OAAO,IAAI1jE,EAAG9vJ,EAAIw0Q,iBAClB7xG,UACAtoI,UACJ,qBCTD6nI,EAAOx3B,QAAU,SAAc7hI,EAAG8J,GAGhC,IAFA,IAAI0U,EAAMxe,EAAElL,OACRhB,GAAK,IACAA,EAAI0qB,GACXxe,EAAElM,IAAMgW,EAAEhW,GAEZ,OAAOkM,CACR,oQCJKg+W,EAAS,WAGT/9M,EAAO,GAUPg+M,EAAgB,QAChBC,EAAgB,aAChBC,EAAkB,4BAGlB5mT,EAAS,CACd,SAAY,kDACZ,YAAa,iDACb,gBAAiB,iBAKZ16D,EAAQR,KAAKQ,MACbuhX,EAAqBz6U,OAAO2kE,aAUlC,SAASrpG,EAAM1B,GACd,MAAM,IAAIg9N,WAAWhjK,EAAOh6D,GAC5B,CA6BD,SAAS8gX,EAAUjsW,EAAQhT,GAC1B,IAAMzG,EAAQyZ,EAAOylD,MAAM,KACvByS,EAAS,GACT3xE,EAAM7D,OAAS,IAGlBw1E,EAAS3xE,EAAM,GAAK,IACpByZ,EAASzZ,EAAM,IAIhB,IACM2lX,EA/BP,SAAa14W,EAAOxG,GAGnB,IAFA,IAAMkrE,EAAS,GACXx1E,EAAS8Q,EAAM9Q,OACZA,KACNw1E,EAAOx1E,GAAUsK,EAAGwG,EAAM9Q,IAE3B,OAAOw1E,CACP,CAwBgBxuE,EAFhBsW,EAASA,EAAOymD,QAAQslT,EAAiB,MACnBtmT,MAAM,KACAz4D,GAAI24D,KAAK,KACrC,OAAOuS,EAASg0S,CAChB,CAeD,SAASC,EAAWnsW,GAInB,IAHA,IAAM8C,EAAS,GACXk5J,EAAU,EACRt5K,EAASsd,EAAOtd,OACfs5K,EAAUt5K,GAAQ,CACxB,IAAMD,EAAQud,EAAO2zI,WAAWqoB,KAChC,GAAIv5K,GAAS,OAAUA,GAAS,OAAUu5K,EAAUt5K,EAAQ,CAE3D,IAAM0pX,EAAQpsW,EAAO2zI,WAAWqoB,KACR,QAAX,MAARowM,GACJtpW,EAAOtgB,OAAe,KAARC,IAAkB,KAAe,KAAR2pX,GAAiB,QAIxDtpW,EAAOtgB,KAAKC,GACZu5K,IAED,MACAl5J,EAAOtgB,KAAKC,EAEb,CACD,OAAOqgB,CACP,CAUD,IAAMupW,EAAa,SAAA74W,GAAK,OAAI+9B,OAAOy5R,cAAP,MAAAz5R,QAAM,OAAkB/9B,GAA5B,EAmClB84W,EAAe,SAASC,EAAOnsO,GAGpC,OAAOmsO,EAAQ,GAAK,IAAMA,EAAQ,MAAgB,GAARnsO,IAAc,EACxD,EAOKosO,EAAQ,SAASzrW,EAAO0rW,EAAWC,GACxC,IAAI7zS,EAAI,EAGR,IAFA93D,EAAQ2rW,EAAYjiX,EAAMsW,EA1Kd,KA0K8BA,GAAS,EACnDA,GAAStW,EAAMsW,EAAQ0rW,GACO1rW,EAAQ4rW,IAA2B9zS,GAAKg1F,EACrE9sJ,EAAQtW,EAAMsW,EA3JM8sJ,IA6JrB,OAAOpjK,EAAMouE,EAAI,GAAsB93D,GAASA,EAhLpC,IAiLZ,EASKizF,EAAS,SAASiyB,GAEvB,IAtD6B8vC,EAsDvBjzJ,EAAS,GACTkjN,EAAc//F,EAAMvjI,OACtBhB,EAAI,EACJ8S,EA5LY,IA6LZqgE,EA9Le,GAoMftrB,EAAQ08E,EAAM5vB,YAlMD,KAmMb9sD,EAAQ,IACXA,EAAQ,GAGT,IAAK,IAAI/2B,EAAI,EAAGA,EAAI+2B,IAAS/2B,EAExByzG,EAAM0tB,WAAWnhI,IAAM,KAC1B3lB,EAAM,aAEPiW,EAAOtgB,KAAKyjI,EAAM0tB,WAAWnhI,IAM9B,IAAK,IAAInf,EAAQk2C,EAAQ,EAAIA,EAAQ,EAAI,EAAGl2C,EAAQ2yN,GAAwC,CAQ3F,IADA,IAAI4mJ,EAAOlrX,EACFikB,EAAI,EAAGkzD,EAAIg1F,GAA0Bh1F,GAAKg1F,EAAM,CAEpDx6J,GAAS2yN,GACZn5N,EAAM,iBAGP,IAAM0/W,GA9FqBx2M,EA8FA9vC,EAAM0tB,WAAWtgJ,MA7F9B,GAAO,GACf0iK,EAAY,GAEhBA,EAAY,GAAO,GACfA,EAAY,GAEhBA,EAAY,GAAO,GACfA,EAAY,GAEblI,GAsFD0+M,GAAS1+M,GAAQ0+M,EAAQ9hX,GAAOmhX,EAASlqX,GAAKikB,KACjD9Y,EAAM,YAGPnL,GAAK6qX,EAAQ5mW,EACb,IAAMhR,EAAIkkE,GAAKhE,EA7OL,EA6OoBgE,GAAKhE,EA5OzB,MA4O8CgE,EAAIhE,EAE5D,GAAI03S,EAAQ53W,EACX,MAGD,IAAMk4W,EAAah/M,EAAOl5J,EACtBgR,EAAIlb,EAAMmhX,EAASiB,IACtBhgX,EAAM,YAGP8Y,GAAKknW,CAEL,CAED,IAAMl+L,EAAM7rK,EAAOpgB,OAAS,EAC5BmyE,EAAO23S,EAAM9qX,EAAIkrX,EAAMj+L,EAAa,GAARi+L,GAIxBniX,EAAM/I,EAAIitL,GAAOi9L,EAASp3W,GAC7B3H,EAAM,YAGP2H,GAAK/J,EAAM/I,EAAIitL,GACfjtL,GAAKitL,EAGL7rK,EAAOxP,OAAO5R,IAAK,EAAG8S,EAEtB,CAED,OAAO+8B,OAAOy5R,cAAP,MAAAz5R,OAAwBzuB,EAC/B,EASKs7H,EAAS,SAASnY,GACvB,IAD8B,EACxBnjH,EAAS,GAMXkjN,GAHJ//F,EAAQkmP,EAAWlmP,IAGKvjI,OAGpB8R,EA5RY,IA6RZuM,EAAQ,EACR8zD,EA/Re,GAmRW,UAeHoxD,GAfG,IAe9B,IAAK,EAAL,qBAAkC,KAAvBtgG,EAAuB,QAC7BA,EAAe,KAClB7iB,EAAOtgB,KAAKwpX,EAAmBrmV,GAEhC,CAnB6B,+BAqB9B,IAAImnV,EAAchqW,EAAOpgB,OACrBqqX,EAAiBD,EAWrB,IALIA,GACHhqW,EAAOtgB,KA9SS,KAkTVuqX,EAAiB/mJ,GAAa,CAIpC,IAJoC,EAIhCvxN,EAAIm3W,EAJ4B,UAKT3lP,GALS,IAKpC,IAAK,EAAL,qBAAkC,KAAvBtgG,EAAuB,QAC7BA,GAAgBnxB,GAAKmxB,EAAelxB,IACvCA,EAAIkxB,EAEL,CATmC,+BAapC,IAAMqnV,EAAwBD,EAAiB,EAC3Ct4W,EAAID,EAAI/J,GAAOmhX,EAAS7qW,GAASisW,IACpCngX,EAAM,YAGPkU,IAAUtM,EAAID,GAAKw4W,EACnBx4W,EAAIC,EAnBgC,gBAqBTwxH,GArBS,IAqBpC,IAAK,EAAL,qBAAkC,KAAvBtgG,EAAuB,QAIjC,GAHIA,EAAenxB,KAAOuM,EAAQ6qW,GACjC/+W,EAAM,YAEH84B,GAAgBnxB,EAAG,CAGtB,IADA,IAAI/N,EAAIsa,EACC83D,EAAIg1F,GAA0Bh1F,GAAKg1F,EAAM,CACjD,IAAMl5J,EAAIkkE,GAAKhE,EArVP,EAqVsBgE,GAAKhE,EApV3B,MAoVgDgE,EAAIhE,EAC5D,GAAIpuE,EAAIkO,EACP,MAED,IAAMs4W,EAAUxmX,EAAIkO,EACdk4W,EAAah/M,EAAOl5J,EAC1BmO,EAAOtgB,KACNwpX,EAAmBM,EAAa33W,EAAIs4W,EAAUJ,EAAY,KAE3DpmX,EAAIgE,EAAMwiX,EAAUJ,EACpB,CAED/pW,EAAOtgB,KAAKwpX,EAAmBM,EAAa7lX,EAAG,KAC/CouE,EAAO23S,EAAMzrW,EAAOisW,EAAuBD,GAAkBD,GAC7D/rW,EAAQ,IACNgsW,CACF,CACD,CA9CmC,iCAgDlChsW,IACAvM,CAEF,CACD,OAAOsO,EAAO6iD,KAAK,GACnB,EAaKunT,EAAY,SAASjnP,GAC1B,OAAOgmP,EAAUhmP,GAAO,SAASjmH,GAChC,OAAO6rW,EAActqW,KAAKvB,GACvBg0F,EAAOh0F,EAAOvM,MAAM,GAAGY,eACvB2L,CACH,GACD,EAaK2pW,EAAU,SAAS1jP,GACxB,OAAOgmP,EAAUhmP,GAAO,SAASjmH,GAChC,OAAO8rW,EAAcvqW,KAAKvB,GACvB,OAASo+H,EAAOp+H,GAChBA,CACH,GACD,EAKKmtW,EAAW,CAMhB,QAAW,QAQX,KAAQ,CACP,OAAUhB,EACV,OAAUE,GAEX,OAAUr4Q,EACV,OAAUoqC,EACV,QAAWurO,EACX,UAAauD,GAId,4CCtbA,IAAIzmT,EAAUl1B,OAAOvjC,UAAUy4D,QAC3B2mT,EAAkB,OAEtBnmN,EAAOx3B,QAAU,CACb,QAAW,UACX4kK,WAAY,CACRg5E,QAAS,SAAU5qX,GACf,OAAOgkE,EAAQpkE,KAAKI,EAAO2qX,EAAiB,IAC/C,EACDE,QAAS,SAAU7qX,GACf,OAAO8uC,OAAO9uC,EACjB,GAEL4qX,QAAS,UACTC,QAAS,+CCdb,IAAItoW,EAAYk4J,EAAQ,OACpBn4J,EAAQm4J,EAAQ,MAChBG,EAAUH,EAAQ,OAEtBjW,EAAOx3B,QAAU,CACb4tC,QAASA,EACTt4J,MAAOA,EACPC,UAAWA,sCCPf,IAAI47D,EAAQs8F,EAAQ,OAEhB7uK,EAAMrJ,OAAOgJ,UAAU6jK,eAEvBiV,EAAW,CACXymM,WAAW,EACXC,iBAAiB,EACjBC,WAAY,GACZ35Q,QAASlzB,EAAMozB,OACfkxQ,UAAW,IACXh+V,MAAO,EACPwmW,eAAgB,IAChBC,cAAc,EACdC,oBAAoB,GAoEpBjzG,EAAY,SAA8BkzG,EAAUpsN,EAAK79J,GACzD,GAAKiqX,EAAL,CAKA,IAAI9oX,EAAMnB,EAAQ2pX,UAAYM,EAASpnT,QAAQ,cAAe,QAAUonT,EAKpEpvV,EAAQ,gBAIR+uJ,EALW,eAKQttK,KAAKnb,GACxBy3B,EAASgxJ,EAAUzoL,EAAI0O,MAAM,EAAG+5K,EAAQn6K,OAAStO,EAIjDS,EAAO,GACX,GAAIg3B,EAAQ,CAGR,IAAK54B,EAAQ+pX,cAAgBt/W,EAAIhM,KAAK2C,OAAOgJ,UAAWwuB,KAC/C54B,EAAQ4pX,gBACT,OAIRhoX,EAAKhD,KAAKg6B,EACb,CAKD,IADA,IAAI96B,EAAI,EAC+B,QAA/B8rL,EAAU/uJ,EAAMve,KAAKnb,KAAkBrD,EAAIkC,EAAQsjB,OAAO,CAE9D,GADAxlB,GAAK,GACAkC,EAAQ+pX,cAAgBt/W,EAAIhM,KAAK2C,OAAOgJ,UAAWw/K,EAAQ,GAAG/5K,MAAM,GAAI,MACpE7P,EAAQ4pX,gBACT,OAGRhoX,EAAKhD,KAAKgrL,EAAQ,GACrB,CAQD,OAJIA,GACAhoL,EAAKhD,KAAK,IAAMuC,EAAI0O,MAAM+5K,EAAQn6K,OAAS,KApFjC,SAAUwkO,EAAOp2E,EAAK79J,GAGpC,IAFA,IAAIkqX,EAAOrsN,EAEF//J,EAAIm2O,EAAMn1O,OAAS,EAAGhB,GAAK,IAAKA,EAAG,CACxC,IAAIoD,EACA63G,EAAOk7H,EAAMn2O,GAEjB,GAAa,OAATi7G,GAAiB/4G,EAAQmqX,YACzBjpX,EAAM,GAAG+7I,OAAOitO,OACb,CACHhpX,EAAMlB,EAAQ+pX,aAAe3oX,OAAO2J,OAAO,MAAQ,CAAC,EACpD,IAAIq/W,EAA+B,MAAnBrxQ,EAAKp8F,OAAO,IAA+C,MAAjCo8F,EAAKp8F,OAAOo8F,EAAKj6G,OAAS,GAAai6G,EAAKlpG,MAAM,GAAI,GAAKkpG,EACjGtpG,EAAQ+M,SAAS4tW,EAAW,IAC3BpqX,EAAQmqX,aAA6B,KAAdC,GAGvB9gV,MAAM75B,IACJspG,IAASqxQ,GACTz8U,OAAOl+B,KAAW26W,GAClB36W,GAAS,GACRzP,EAAQmqX,aAAe16W,GAASzP,EAAQ6pX,YAE5C3oX,EAAM,IACFuO,GAASy6W,EACQ,cAAdE,IACPlpX,EAAIkpX,GAAaF,GAXjBhpX,EAAM,CAAE,EAAGgpX,EAalB,CAEDA,EAAOhpX,CACV,CAED,OAAOgpX,CACV,CAsDUG,CAAYzoX,EAAMi8J,EAAK79J,EAjD7B,CAkDJ,EAEDqjK,EAAOx3B,QAAU,SAAUimC,EAAK+L,GAC5B,IAAI79K,EAAU69K,EAAO7gG,EAAM/4D,OAAO,CAAC,EAAG45J,GAAQ,CAAC,EAE/C,GAAwB,OAApB79K,EAAQkwG,cAAwC3mG,IAApBvJ,EAAQkwG,SAAoD,oBAApBlwG,EAAQkwG,QAC5E,MAAM,IAAIjxG,UAAU,iCAexB,GAZAe,EAAQsqX,mBAAkD,IAA9BtqX,EAAQsqX,kBACpCtqX,EAAQshX,UAAyC,kBAAtBthX,EAAQshX,WAA0BtkS,EAAMy/I,SAASz8N,EAAQshX,WAAathX,EAAQshX,UAAYp+L,EAASo+L,UAC9HthX,EAAQsjB,MAAiC,kBAAlBtjB,EAAQsjB,MAAqBtjB,EAAQsjB,MAAQ4/J,EAAS5/J,MAC7EtjB,EAAQ6pX,WAA2C,kBAAvB7pX,EAAQ6pX,WAA0B7pX,EAAQ6pX,WAAa3mM,EAAS2mM,WAC5F7pX,EAAQmqX,aAAsC,IAAxBnqX,EAAQmqX,YAC9BnqX,EAAQkwG,QAAqC,oBAApBlwG,EAAQkwG,QAAyBlwG,EAAQkwG,QAAUgzE,EAAShzE,QACrFlwG,EAAQ2pX,UAAyC,mBAAtB3pX,EAAQ2pX,UAA0B3pX,EAAQ2pX,UAAYzmM,EAASymM,UAC1F3pX,EAAQ+pX,aAA+C,mBAAzB/pX,EAAQ+pX,aAA6B/pX,EAAQ+pX,aAAe7mM,EAAS6mM,aACnG/pX,EAAQ4pX,gBAAqD,mBAA5B5pX,EAAQ4pX,gBAAgC5pX,EAAQ4pX,gBAAkB1mM,EAAS0mM,gBAC5G5pX,EAAQ8pX,eAAmD,kBAA3B9pX,EAAQ8pX,eAA8B9pX,EAAQ8pX,eAAiB5mM,EAAS4mM,eACxG9pX,EAAQgqX,mBAA2D,mBAA/BhqX,EAAQgqX,mBAAmChqX,EAAQgqX,mBAAqB9mM,EAAS8mM,mBAEzG,KAARl4M,GAAsB,OAARA,GAA+B,qBAARA,EACrC,OAAO9xK,EAAQ+pX,aAAe3oX,OAAO2J,OAAO,MAAQ,CAAC,EASzD,IANA,IAAIw/W,EAAyB,kBAARz4M,EA/IP,SAAgCA,EAAK9xK,GAMnD,IALA,IAAIkB,EAAM,CAAC,EACPspX,EAAWxqX,EAAQsqX,kBAAoBx4M,EAAIjvG,QAAQ,MAAO,IAAMivG,EAChEmV,EAAQjnL,EAAQ8pX,iBAAmBx+V,SAAW/hB,EAAYvJ,EAAQ8pX,eAClEnnX,EAAQ6nX,EAAS3oT,MAAM7hE,EAAQshX,UAAWr6L,GAErCnpL,EAAI,EAAGA,EAAI6E,EAAM7D,SAAUhB,EAAG,CACnC,IAKIqD,EAAK08J,EALLipB,EAAOnkL,EAAM7E,GAEb2sX,EAAmB3jM,EAAK9jL,QAAQ,MAChCsE,GAA4B,IAAtBmjX,EAA0B3jM,EAAK9jL,QAAQ,KAAOynX,EAAmB,GAG9D,IAATnjX,GACAnG,EAAMnB,EAAQkwG,QAAQ42E,EAAM5D,EAAShzE,SACrC2tD,EAAM79J,EAAQgqX,mBAAqB,KAAO,KAE1C7oX,EAAMnB,EAAQkwG,QAAQ42E,EAAKj3K,MAAM,EAAGvI,GAAM47K,EAAShzE,SACnD2tD,EAAM79J,EAAQkwG,QAAQ42E,EAAKj3K,MAAMvI,EAAM,GAAI47K,EAAShzE,UAEpDzlG,EAAIhM,KAAKyC,EAAKC,GACdD,EAAIC,GAAO,GAAG87I,OAAO/7I,EAAIC,IAAM87I,OAAO4gB,GAEtC38J,EAAIC,GAAO08J,CAElB,CAED,OAAO38J,CACV,CAmH2CwpX,CAAY54M,EAAK9xK,GAAW8xK,EAChE5wK,EAAMlB,EAAQ+pX,aAAe3oX,OAAO2J,OAAO,MAAQ,CAAC,EAIpDnJ,EAAOR,OAAOQ,KAAK2oX,GACdzsX,EAAI,EAAGA,EAAI8D,EAAK9C,SAAUhB,EAAG,CAClC,IAAIqD,EAAMS,EAAK9D,GACX6sX,EAAS5zG,EAAU51Q,EAAKopX,EAAQppX,GAAMnB,GAC1CkB,EAAM87E,EAAM1sC,MAAMpvC,EAAKypX,EAAQ3qX,EAClC,CAED,OAAOg9E,EAAMg3E,QAAQ9yJ,EACxB,sCC5KD,IAAI87E,EAAQs8F,EAAQ,OAChBG,EAAUH,EAAQ,OAElBsxM,EAAwB,CACxBC,SAAU,SAAkB5hT,GACxB,OAAOA,EAAS,IACnB,EACDz/B,QAAS,SAAiBy/B,EAAQ9nE,GAC9B,OAAO8nE,EAAS,IAAM9nE,EAAM,GAC/B,EACDof,OAAQ,SAAgB0oD,GACpB,OAAOA,CACV,GAGDjrE,EAAUD,MAAMC,QAChBY,EAAOb,MAAMqM,UAAUxL,KACvBksX,EAAc,SAAUjtX,EAAKktX,GAC7BnsX,EAAKsD,MAAMrE,EAAKG,EAAQ+sX,GAAgBA,EAAe,CAACA,GAC3D,EAEGC,EAAQtmX,KAAK0F,UAAUoiO,YAEvBtpD,EAAW,CACXo+L,UAAW,IACX9mO,QAAQ,EACR48F,QAASp6J,EAAMw9D,OACfywO,kBAAkB,EAClBC,cAAe,SAAuBhqM,GAClC,OAAO8pM,EAAMvsX,KAAKyiL,EACrB,EACDiqM,WAAW,EACXnB,oBAAoB,GAGpB5oW,EAAY,SAASA,EACrB1f,EACAunE,EACAmiT,EACApB,EACAmB,EACA/zI,EACAr1O,EACA+3D,EACA6vT,EACAuB,EACAt6E,EACAq6E,GAEA,IAAI/pX,EAAMQ,EAOV,GANsB,oBAAXK,EACPb,EAAMa,EAAOknE,EAAQ/nE,GACdA,aAAewD,OACtBxD,EAAMgqX,EAAchqX,IAGZ,OAARA,EAAc,CACd,GAAI8oX,EACA,OAAO5yI,IAAY6zI,EAAmB7zI,EAAQnuK,EAAQi6G,EAASk0D,SAAWnuK,EAG9E/nE,EAAM,EACT,CAED,GAAmB,kBAARA,GAAmC,kBAARA,GAAmC,mBAARA,GAAqB87E,EAAMgmH,SAAS9hM,GACjG,OAAIk2O,EAEO,CAACw5D,EADOq6E,EAAmBhiT,EAASmuK,EAAQnuK,EAAQi6G,EAASk0D,UACtC,IAAMw5D,EAAUx5D,EAAQl2O,EAAKgiL,EAASk0D,WAEjE,CAACw5D,EAAU3nO,GAAU,IAAM2nO,EAAUjjQ,OAAOzsC,KAGvD,IAMImqX,EANAzuV,EAAS,GAEb,GAAmB,qBAAR17B,EACP,OAAO07B,EAIX,GAAI5+B,EAAQ+D,GACRspX,EAAUtpX,MACP,CACH,IAAIH,EAAOR,OAAOQ,KAAKV,GACvBmqX,EAAUvxT,EAAOl4D,EAAKk4D,KAAKA,GAAQl4D,CACtC,CAED,IAAK,IAAI9D,EAAI,EAAGA,EAAIutX,EAAQvsX,SAAUhB,EAAG,CACrC,IAAIqD,EAAMkqX,EAAQvtX,GAEdqtX,GAA0B,OAAbjqX,EAAIC,KAIjBnD,EAAQkD,GACR4pX,EAAYluV,EAAQxb,EAChBlgB,EAAIC,GACJiqX,EAAoBniT,EAAQ9nE,GAC5BiqX,EACApB,EACAmB,EACA/zI,EACAr1O,EACA+3D,EACA6vT,EACAuB,EACAt6E,EACAq6E,IAGJH,EAAYluV,EAAQxb,EAChBlgB,EAAIC,GACJ8nE,GAAU0gT,EAAY,IAAMxoX,EAAM,IAAMA,EAAM,KAC9CiqX,EACApB,EACAmB,EACA/zI,EACAr1O,EACA+3D,EACA6vT,EACAuB,EACAt6E,EACAq6E,IAGX,CAED,OAAOruV,CACV,EAEDymI,EAAOx3B,QAAU,SAAUnqI,EAAQm8K,GAC/B,IAAI38K,EAAMQ,EACN1B,EAAU69K,EAAO7gG,EAAM/4D,OAAO,CAAC,EAAG45J,GAAQ,CAAC,EAE/C,GAAwB,OAApB79K,EAAQo3O,SAA+C,qBAApBp3O,EAAQo3O,SAAsD,oBAApBp3O,EAAQo3O,QACrF,MAAM,IAAIn4O,UAAU,iCAGxB,IAAIqiX,EAAyC,qBAAtBthX,EAAQshX,UAA4Bp+L,EAASo+L,UAAYthX,EAAQshX,UACpF0I,EAA2D,mBAA/BhqX,EAAQgqX,mBAAmChqX,EAAQgqX,mBAAqB9mM,EAAS8mM,mBAC7GmB,EAAyC,mBAAtBnrX,EAAQmrX,UAA0BnrX,EAAQmrX,UAAYjoM,EAASioM,UAClF3wO,EAAmC,mBAAnBx6I,EAAQw6I,OAAuBx6I,EAAQw6I,OAAS0oC,EAAS1oC,OACzE48F,EAAqC,oBAApBp3O,EAAQo3O,QAAyBp3O,EAAQo3O,QAAUl0D,EAASk0D,QAC7Et9K,EAA+B,oBAAjB95D,EAAQ85D,KAAsB95D,EAAQ85D,KAAO,KAC3D6vT,EAAyC,qBAAtB3pX,EAAQ2pX,WAAoC3pX,EAAQ2pX,UACvEuB,EAAiD,oBAA1BlrX,EAAQkrX,cAA+BlrX,EAAQkrX,cAAgBhoM,EAASgoM,cAC/FD,EAAuD,mBAA7BjrX,EAAQirX,iBAAiCjrX,EAAQirX,iBAAmB/nM,EAAS+nM,iBAC3G,GAA8B,qBAAnBjrX,EAAQigB,OACfjgB,EAAQigB,OAASw5J,EAAO,aACrB,IAAKr4K,OAAOgJ,UAAU6jK,eAAexvK,KAAKg7K,EAAQg3H,WAAYzwS,EAAQigB,QACzE,MAAM,IAAIhhB,UAAU,mCAExB,IACIosX,EACAtpX,EAFA6uS,EAAYn3H,EAAQg3H,WAAWzwS,EAAQigB,QAIb,oBAAnBjgB,EAAQ+B,OAEfb,GADAa,EAAS/B,EAAQ+B,QACJ,GAAIb,GACVlD,EAAQgC,EAAQ+B,UAEvBspX,EADAtpX,EAAS/B,EAAQ+B,QAIrB,IAMIupX,EANA1pX,EAAO,GAEX,GAAmB,kBAARV,GAA4B,OAARA,EAC3B,MAAO,GAKPoqX,EADAtrX,EAAQsrX,eAAeV,EACT5qX,EAAQsrX,YACf,YAAatrX,EACNA,EAAQwpC,QAAU,UAAY,SAE9B,UAGlB,IAAI4hV,EAAsBR,EAAsBU,GAE3CD,IACDA,EAAUjqX,OAAOQ,KAAKV,IAGtB44D,GACAuxT,EAAQvxT,KAAKA,GAGjB,IAAK,IAAIh8D,EAAI,EAAGA,EAAIutX,EAAQvsX,SAAUhB,EAAG,CACrC,IAAIqD,EAAMkqX,EAAQvtX,GAEdqtX,GAA0B,OAAbjqX,EAAIC,IAGrB2pX,EAAYlpX,EAAMwf,EACdlgB,EAAIC,GACJA,EACAiqX,EACApB,EACAmB,EACA3wO,EAAS48F,EAAU,KACnBr1O,EACA+3D,EACA6vT,EACAuB,EACAt6E,EACAq6E,GAEP,CAED,IAAI3K,EAAS1+W,EAAKmgE,KAAKu/S,GACnBr4S,GAAoC,IAA3BjpE,EAAQurX,eAA0B,IAAM,GAErD,OAAOjL,EAAOxhX,OAAS,EAAImqE,EAASq3S,EAAS,EAChD,kCCtND,IAAI71W,EAAMrJ,OAAOgJ,UAAU6jK,eAEvBu9M,EAAY,WAEZ,IADA,IAAI57W,EAAQ,GACH9R,EAAI,EAAGA,EAAI,MAAOA,EACvB8R,EAAMhR,KAAK,MAAQd,EAAI,GAAK,IAAM,IAAMA,EAAE0M,SAAS,KAAKo3D,eAG5D,OAAOhyD,CACV,CAPe,GAgCZ67W,EAAgB,SAAuBnpX,EAAQtC,GAE/C,IADA,IAAIkB,EAAMlB,GAAWA,EAAQ+pX,aAAe3oX,OAAO2J,OAAO,MAAQ,CAAC,EAC1DjN,EAAI,EAAGA,EAAIwE,EAAOxD,SAAUhB,EACR,qBAAdwE,EAAOxE,KACdoD,EAAIpD,GAAKwE,EAAOxE,IAIxB,OAAOoD,CACV,EAgKDmiK,EAAOx3B,QAAU,CACb4/O,cAAeA,EACfxnW,OAxGS,SAA4B7hB,EAAQE,GAC7C,OAAOlB,OAAOQ,KAAKU,GAAQugJ,QAAO,SAAUkf,EAAK5gK,GAE7C,OADA4gK,EAAI5gK,GAAOmB,EAAOnB,GACX4gK,CACV,GAAE3/J,EACN,EAoGG4xJ,QArCU,SAAiBn1J,GAI3B,IAHA,IAAI2uI,EAAQ,CAAC,CAAEtsI,IAAK,CAAEwpG,EAAG7rG,GAASu/I,KAAM,MACpC1uB,EAAO,GAEF5xH,EAAI,EAAGA,EAAI0vI,EAAM1uI,SAAUhB,EAKhC,IAJA,IAAIiI,EAAOynI,EAAM1vI,GACboD,EAAM6E,EAAK7E,IAAI6E,EAAKq4I,MAEpBx8I,EAAOR,OAAOQ,KAAKV,GACd0tB,EAAI,EAAGA,EAAIhtB,EAAK9C,SAAU8vB,EAAG,CAClC,IAAIztB,EAAMS,EAAKgtB,GACXivI,EAAM38J,EAAIC,GACK,kBAAR08J,GAA4B,OAARA,IAAuC,IAAvBnuC,EAAK1sH,QAAQ66J,KACxDrwB,EAAM5uI,KAAK,CAAEsC,IAAKA,EAAKk9I,KAAMj9I,IAC7BuuH,EAAK9wH,KAAKi/J,GAEjB,CAGL,OAjLe,SAAsBrwB,GAGrC,IAFA,IAAItsI,EAEGssI,EAAM1uI,QAAQ,CACjB,IAAIiH,EAAOynI,EAAMlgE,MAGjB,GAFApsE,EAAM6E,EAAK7E,IAAI6E,EAAKq4I,MAEhBrgJ,MAAMC,QAAQkD,GAAM,CAGpB,IAFA,IAAIwqX,EAAY,GAEP98V,EAAI,EAAGA,EAAI1tB,EAAIpC,SAAU8vB,EACR,qBAAX1tB,EAAI0tB,IACX88V,EAAU9sX,KAAKsC,EAAI0tB,IAI3B7oB,EAAK7E,IAAI6E,EAAKq4I,MAAQstO,CACzB,CACJ,CAED,OAAOxqX,CACV,CA4JUyqX,CAAan+O,EACvB,EAkBGp9B,OAnGS,SAAU0hE,GACnB,IACI,OAAOv/D,mBAAmBu/D,EAAIjvG,QAAQ,MAAO,KAGhD,CAFC,MAAO37D,GACL,OAAO4qK,CACV,CACJ,EA8FGt3B,OA5FS,SAAgBs3B,GAGzB,GAAmB,IAAfA,EAAIhzK,OACJ,OAAOgzK,EAMX,IAHA,IAAI11J,EAAwB,kBAAR01J,EAAmBA,EAAMnkI,OAAOmkI,GAEhDiZ,EAAM,GACDjtL,EAAI,EAAGA,EAAIse,EAAOtd,SAAUhB,EAAG,CACpC,IAAIiW,EAAIqI,EAAO2zI,WAAWjyJ,GAGhB,KAANiW,GACS,KAANA,GACM,KAANA,GACM,MAANA,GACCA,GAAK,IAAQA,GAAK,IAClBA,GAAK,IAAQA,GAAK,IAClBA,GAAK,IAAQA,GAAK,IAEtBg3K,GAAO3uK,EAAOO,OAAO7e,GAIrBiW,EAAI,IACJg3K,GAAYygM,EAASz3W,GAIrBA,EAAI,KACJg3K,GAAaygM,EAAS,IAAQz3W,GAAK,GAAMy3W,EAAS,IAAY,GAAJz3W,GAI1DA,EAAI,OAAUA,GAAK,MACnBg3K,GAAaygM,EAAS,IAAQz3W,GAAK,IAAOy3W,EAAS,IAASz3W,GAAK,EAAK,IAASy3W,EAAS,IAAY,GAAJz3W,IAIpGjW,GAAK,EACLiW,EAAI,QAAiB,KAAJA,IAAc,GAA8B,KAAvBqI,EAAO2zI,WAAWjyJ,IAExDitL,GAAOygM,EAAS,IAAQz3W,GAAK,IACvBy3W,EAAS,IAASz3W,GAAK,GAAM,IAC7By3W,EAAS,IAASz3W,GAAK,EAAK,IAC5By3W,EAAS,IAAY,GAAJz3W,GAC1B,CAED,OAAOg3K,CACV,EA0CGiY,SAdW,SAAkB9hM,GAC7B,OAAY,OAARA,GAA+B,qBAARA,MAIjBA,EAAI4J,aAAe5J,EAAI4J,YAAYk4L,UAAY9hM,EAAI4J,YAAYk4L,SAAS9hM,GACrF,EASGu7N,SAnBW,SAAkBv7N,GAC7B,MAA+C,oBAAxCE,OAAOgJ,UAAUI,SAAS/L,KAAKyC,EACzC,EAkBGovC,MAtKQ,SAASA,EAAMluC,EAAQE,EAAQtC,GACvC,IAAKsC,EACD,OAAOF,EAGX,GAAsB,kBAAXE,EAAqB,CAC5B,GAAIvE,MAAMC,QAAQoE,GACdA,EAAOxD,KAAK0D,OACT,KAAIF,GAA4B,kBAAXA,EAKxB,MAAO,CAACA,EAAQE,IAJXtC,IAAYA,EAAQ+pX,cAAgB/pX,EAAQ4pX,mBAAsBn/W,EAAIhM,KAAK2C,OAAOgJ,UAAW9H,MAC9FF,EAAOE,IAAU,EAIxB,CAED,OAAOF,CACV,CAED,IAAKA,GAA4B,kBAAXA,EAClB,MAAO,CAACA,GAAQ66I,OAAO36I,GAG3B,IAAIspX,EAAcxpX,EAKlB,OAJIrE,MAAMC,QAAQoE,KAAYrE,MAAMC,QAAQsE,KACxCspX,EAAcH,EAAcrpX,EAAQpC,IAGpCjC,MAAMC,QAAQoE,IAAWrE,MAAMC,QAAQsE,IACvCA,EAAOC,SAAQ,SAAUwD,EAAMjI,GAC3B,GAAI2M,EAAIhM,KAAK2D,EAAQtE,GAAI,CACrB,IAAI+tX,EAAazpX,EAAOtE,GACpB+tX,GAAoC,kBAAfA,GAA2B9lX,GAAwB,kBAATA,EAC/D3D,EAAOtE,GAAKwyC,EAAMu7U,EAAY9lX,EAAM/F,GAEpCoC,EAAOxD,KAAKmH,EAEnB,MACG3D,EAAOtE,GAAKiI,CAEnB,IACM3D,GAGJhB,OAAOQ,KAAKU,GAAQugJ,QAAO,SAAUkf,EAAK5gK,GAC7C,IAAItC,EAAQyD,EAAOnB,GAOnB,OALIsJ,EAAIhM,KAAKsjK,EAAK5gK,GACd4gK,EAAI5gK,GAAOmvC,EAAMyxH,EAAI5gK,GAAMtC,EAAOmB,GAElC+hK,EAAI5gK,GAAOtC,EAERkjK,CACV,GAAE6pN,EACN,mCC3ED,SAAS39M,EAAe/sK,EAAKk9I,GAC3B,OAAOh9I,OAAOgJ,UAAU6jK,eAAexvK,KAAKyC,EAAKk9I,EAClD,CAEDilB,EAAOx3B,QAAU,SAASigP,EAAI3K,EAAK5uN,EAAIvyJ,GACrCmhX,EAAMA,GAAO,IACb5uN,EAAKA,GAAM,IACX,IAAIrxJ,EAAM,CAAC,EAEX,GAAkB,kBAAP4qX,GAAiC,IAAdA,EAAGhtX,OAC/B,OAAOoC,EAGT,IAAIu6N,EAAS,MACbqwJ,EAAKA,EAAGjqT,MAAMs/S,GAEd,IAAI4K,EAAU,IACV/rX,GAAsC,kBAApBA,EAAQ+rX,UAC5BA,EAAU/rX,EAAQ+rX,SAGpB,IAAIvjW,EAAMsjW,EAAGhtX,OAETitX,EAAU,GAAKvjW,EAAMujW,IACvBvjW,EAAMujW,GAGR,IAAK,IAAIjuX,EAAI,EAAGA,EAAI0qB,IAAO1qB,EAAG,CAC5B,IAEIkuX,EAAMC,EAAMh3S,EAAGjgE,EAFf9R,EAAI4oX,EAAGhuX,GAAG+kE,QAAQ44J,EAAQ,OAC1BunI,EAAM9/V,EAAEF,QAAQuvJ,GAGhBywM,GAAO,GACTgpB,EAAO9oX,EAAE2xK,OAAO,EAAGmuL,GACnBipB,EAAO/oX,EAAE2xK,OAAOmuL,EAAM,KAEtBgpB,EAAO9oX,EACP+oX,EAAO,IAGTh3S,EAAIs9B,mBAAmBy5Q,GACvBh3W,EAAIu9F,mBAAmB05Q,GAElBh+M,EAAe/sK,EAAK+zE,GAEdl3E,MAAMC,QAAQkD,EAAI+zE,IAC3B/zE,EAAI+zE,GAAGr2E,KAAKoW,GAEZ9T,EAAI+zE,GAAK,CAAC/zE,EAAI+zE,GAAIjgE,GAJlB9T,EAAI+zE,GAAKjgE,CAMZ,CAED,OAAO9T,CACR,kCCxDD,IAAIgrX,EAAqB,SAASl3W,GAChC,cAAeA,GACb,IAAK,SACH,OAAOA,EAET,IAAK,UACH,OAAOA,EAAI,OAAS,QAEtB,IAAK,SACH,OAAO81B,SAAS91B,GAAKA,EAAI,GAE3B,QACE,MAAO,GAEZ,EAEDquJ,EAAOx3B,QAAU,SAAS3qI,EAAKigX,EAAK5uN,EAAI/3I,GAOtC,OANA2mW,EAAMA,GAAO,IACb5uN,EAAKA,GAAM,IACC,OAARrxJ,IACFA,OAAMqI,GAGW,kBAARrI,EACFE,OAAOQ,KAAKV,GAAK4E,KAAI,SAASmvE,GACnC,IAAIk3S,EAAKriM,mBAAmBoiM,EAAmBj3S,IAAMs9E,EACrD,OAAIx0J,MAAMC,QAAQkD,EAAI+zE,IACb/zE,EAAI+zE,GAAGnvE,KAAI,SAASkP,GACzB,OAAOm3W,EAAKriM,mBAAmBoiM,EAAmBl3W,GACnD,IAAE+sD,KAAKo/S,GAEDgL,EAAKriM,mBAAmBoiM,EAAmBhrX,EAAI+zE,IAEzD,IAAElT,KAAKo/S,GAIL3mW,EACEsvK,mBAAmBoiM,EAAmB1xW,IAAS+3I,EAC/Cu3B,mBAAmBoiM,EAAmBhrX,IAF3B,EAGnB,sCC7DD2qI,EAAQz7B,OAASy7B,EAAQ1qH,MAAQ,EAAhB0qH,OACjBA,EAAQ2O,OAAS3O,EAAQzqH,UAAY,EAApByqH,yCCDjB,IAAIphI,EAAMrJ,OAAOgJ,UAAU6jK,eAU3B,SAAS79D,EAAOiyB,GACd,IACE,OAAO9vB,mBAAmB8vB,EAAMx/D,QAAQ,MAAO,KAGhD,CAFC,MAAO37D,GACP,OAAO,IACR,CACF,CASD,SAASszI,EAAOnY,GACd,IACE,OAAOynD,mBAAmBznD,EAG3B,CAFC,MAAOn7H,GACP,OAAO,IACR,CACF,CAmFD2kI,EAAQzqH,UA1CR,SAAwBlgB,EAAK+nE,GAC3BA,EAASA,GAAU,GAEnB,IACIpqE,EACAsC,EAFAirX,EAAQ,GASZ,IAAKjrX,IAFD,kBAAoB8nE,IAAQA,EAAS,KAE7B/nE,EACV,GAAIuJ,EAAIhM,KAAKyC,EAAKC,GAAM,CAkBtB,IAjBAtC,EAAQqC,EAAIC,KAMa,OAAVtC,GA3FjBwtX,YA2FmCxtX,IAAmByqC,MAAMzqC,KACxDA,EAAQ,IAGVsC,EAAMq5I,EAAOr5I,GACbtC,EAAQ27I,EAAO37I,GAMH,OAARsC,GAA0B,OAAVtC,EAAgB,SACpCutX,EAAMxtX,KAAKuC,EAAK,IAAKtC,EACtB,CAGH,OAAOutX,EAAMttX,OAASmqE,EAASmjT,EAAMrqT,KAAK,KAAO,EAClD,EAMD8pE,EAAQ1qH,MA3ER,SAAqB2jL,GAKnB,IAJA,IAEIhe,EAFA/6D,EAAS,uBACTz3C,EAAS,CAAC,EAGPwyG,EAAO/6D,EAAOzvG,KAAKwoL,IAAQ,CAChC,IAAI3jM,EAAMivG,EAAO02E,EAAK,IAClBjoL,EAAQuxG,EAAO02E,EAAK,IAUZ,OAAR3lL,GAA0B,OAAVtC,GAAkBsC,KAAOmzE,IAC7CA,EAAOnzE,GAAOtC,EACf,CAED,OAAOy1E,CACR,oDC5DGg4S,EAAY,MAIZC,EAAa,WAMjB,IAAIz/O,EAASwsC,EAAAA,OAAAA,OACTkwD,EAASn8H,EAAAA,EAAOm8H,QAAUn8H,EAAAA,EAAOmgK,SAEjChkC,GAAUA,EAAO+jC,gBACnBlqG,EAAOx3B,QAKT,SAAsBnvH,EAAM6uB,GAE1B,GAAI7uB,EAAO6vW,EAAY,MAAM,IAAIhoJ,WAAW,mCAE5C,IAAIj+E,EAAQxZ,EAAOigI,YAAYrwP,GAE/B,GAAIA,EAAO,EACT,GAAIA,EAAO4vW,EAET,IAAK,IAAIE,EAAY,EAAGA,EAAY9vW,EAAM8vW,GAAaF,EAGrD9iJ,EAAO+jC,gBAAgBjnH,EAAMz2I,MAAM28W,EAAWA,EAAYF,SAG5D9iJ,EAAO+jC,gBAAgBjnH,GAI3B,GAAkB,oBAAP/6G,EACT,OAAOokG,EAAQyuE,UAAS,WACtB7yK,EAAG,KAAM+6G,EACV,IAGH,OAAOA,CACR,EA7BC+c,EAAOx3B,QAVT,WACE,MAAM,IAAIh6H,MAAM,iHACjB,oDCVD,SAAS46W,IACP,MAAM,IAAI56W,MAAM,6GACjB,CACD,IAAI66W,EAAapzM,EAAQ,OACrBsnI,EAActnI,EAAQ,OACtBxsC,EAAS4/O,EAAW5/O,OACpB6/O,EAAmBD,EAAWr/F,WAC9B7jD,EAASn8H,EAAAA,EAAOm8H,QAAUn8H,EAAAA,EAAOmgK,SACjCo/G,EAAavmX,KAAK6K,IAAI,EAAG,IAAM,EACnC,SAAS27W,EAAchtX,EAAQf,GAC7B,GAAsB,kBAAXe,GAAuBA,IAAWA,EAC3C,MAAM,IAAIZ,UAAU,2BAGtB,GAAIY,EAAS+sX,GAAc/sX,EAAS,EAClC,MAAM,IAAIZ,UAAU,2BAGtB,GAAIY,EAAS8sX,GAAoB9sX,EAASf,EACxC,MAAM,IAAIylO,WAAW,sBAExB,CAED,SAASymD,EAAYtuQ,EAAM7c,EAAQf,GACjC,GAAoB,kBAAT4d,GAAqBA,IAASA,EACvC,MAAM,IAAIzd,UAAU,yBAGtB,GAAIyd,EAAOkwW,GAAclwW,EAAO,EAC9B,MAAM,IAAIzd,UAAU,yBAGtB,GAAIyd,EAAO7c,EAASf,GAAU4d,EAAOiwW,EACnC,MAAM,IAAIpoJ,WAAW,mBAExB,CA4BD,SAASuoJ,EAAYz/M,EAAKxtK,EAAQ6c,EAAM6uB,GACtC,GAAIokG,EAAQ21M,QAAS,CACnB,IAAIynC,EAAS1/M,EAAI70H,OACbw0U,EAAO,IAAIt7W,WAAWq7W,EAAQltX,EAAQ6c,GAE1C,OADA8sN,EAAO+jC,gBAAgBy/G,GACnBzhV,OACFokG,EAAQyuE,UAAS,WACf7yK,EAAG,KAAM8hI,EACV,IAGIA,CACR,CACD,IAAI9hI,EAYJ,OAFYq1Q,EAAYlkS,GAClBV,KAAKqxJ,EAAKxtK,GACTwtK,EAXLuzI,EAAYlkS,GAAM,SAAU3d,EAAKunJ,GAC/B,GAAIvnJ,EACF,OAAOwsC,EAAGxsC,GAEZunJ,EAAMtqI,KAAKqxJ,EAAKxtK,GAChB0rC,EAAG,KAAM8hI,EACV,GAMJ,CArDIm8D,GAAUA,EAAO+jC,kBAAqB59H,EAAQ21M,SACjDz5M,EAAQyjK,WAMV,SAAqBjiI,EAAKxtK,EAAQ6c,EAAM6uB,GACtC,IAAKuhG,EAAOk2D,SAAS31B,MAAUA,aAAehgE,EAAAA,EAAO37F,YACnD,MAAM,IAAIzS,UAAU,iDAGtB,GAAsB,oBAAXY,EACT0rC,EAAK1rC,EACLA,EAAS,EACT6c,EAAO2wJ,EAAIvuK,YACN,GAAoB,oBAAT4d,EAChB6uB,EAAK7uB,EACLA,EAAO2wJ,EAAIvuK,OAASe,OACf,GAAkB,oBAAP0rC,EAChB,MAAM,IAAItsC,UAAU,oCAItB,OAFA4tX,EAAahtX,EAAQwtK,EAAIvuK,QACzBksR,EAAWtuQ,EAAM7c,EAAQwtK,EAAIvuK,QACtBguX,EAAWz/M,EAAKxtK,EAAQ6c,EAAM6uB,EACtC,EAvBCsgG,EAAQ0jK,eAoDV,SAAyBliI,EAAKxtK,EAAQ6c,GACd,qBAAX7c,IACTA,EAAS,GAEX,IAAKitI,EAAOk2D,SAAS31B,MAAUA,aAAehgE,EAAAA,EAAO37F,YACnD,MAAM,IAAIzS,UAAU,iDAGtB4tX,EAAahtX,EAAQwtK,EAAIvuK,aAEZyK,IAATmT,IAAoBA,EAAO2wJ,EAAIvuK,OAASe,GAI5C,OAFAmrR,EAAWtuQ,EAAM7c,EAAQwtK,EAAIvuK,QAEtBguX,EAAWz/M,EAAKxtK,EAAQ6c,EAChC,IAjECmvH,EAAQyjK,WAAam9E,EACrB5gP,EAAQ0jK,eAAiBk9E,uCC/Bd,IAAI1uE,EAAGzkI,EAAQ,OAAS2zM,EAAG3zM,EAAQ,OAAa,SAAS59J,EAAE1R,GAAG,IAAI,IAAI8J,EAAE,yDAAyD9J,EAAE+J,EAAE,EAAEA,EAAE1R,UAAUvD,OAAOiV,IAAID,GAAG,WAAWg2K,mBAAmBznL,UAAU0R,IAAI,MAAM,yBAAyB/J,EAAE,WAAW8J,EAAE,gHAAiH,KAAIoqS,EAAG,IAAI/zO,IAAI+iT,EAAG,CAAC,EAAE,SAASC,EAAGnjX,EAAE8J,GAAGs5W,EAAGpjX,EAAE8J,GAAGs5W,EAAGpjX,EAAE,UAAU8J,EAAG,CACzb,SAASs5W,EAAGpjX,EAAE8J,GAAW,IAARo5W,EAAGljX,GAAG8J,EAAM9J,EAAE,EAAEA,EAAE8J,EAAEhV,OAAOkL,IAAIk0S,EAAGjyR,IAAInY,EAAE9J,GAAI,CAC7D,IAAIqjX,IAAK,qBAAqBtqX,QAAQ,qBAAqBA,OAAOY,UAAU,qBAAqBZ,OAAOY,SAASy0O,eAAe11E,EAAGthK,OAAOgJ,UAAU6jK,eAAeq/M,EAAG,8VAA8VC,EACpgB,CAAC,EAAEC,EAAG,CAAC,EACiN,SAASx4W,EAAEhL,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,GAAGzY,KAAKutX,gBAAgB,IAAI35W,GAAG,IAAIA,GAAG,IAAIA,EAAE5T,KAAK+0H,cAAcx8G,EAAEvY,KAAKwtX,mBAAmBxmX,EAAEhH,KAAKytX,gBAAgB55W,EAAE7T,KAAKirG,aAAanhG,EAAE9J,KAAKqH,KAAKuM,EAAE5T,KAAK0tX,YAAYl1W,EAAExY,KAAK2tX,kBAAkBl1W,CAAE,KAAIpV,EAAE,CAAC,EACpb,uIAAuIs+D,MAAM,KAAKt/D,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAI,IAAE,CAAC,CAAC,gBAAgB,kBAAkB,CAAC,YAAY,SAAS,CAAC,UAAU,OAAO,CAAC,YAAY,eAAezH,SAAQ,SAASyH,GAAG,IAAI8J,EAAE9J,EAAE,GAAGzG,EAAEuQ,GAAG,IAAIkB,EAAElB,EAAE,GAAE,EAAG9J,EAAE,GAAG,MAAK,GAAG,EAAI,IAAE,CAAC,kBAAkB,YAAY,aAAa,SAASzH,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAEyG,cAAc,MAAK,GAAG,EAAI,IAC3e,CAAC,cAAc,4BAA4B,YAAY,iBAAiBlO,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAI,IAAE,8OAA8O63D,MAAM,KAAKt/D,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAEyG,cAAc,MAAK,GAAG,EAAI,IACzb,CAAC,UAAU,WAAW,QAAQ,YAAYlO,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAI,IAAE,CAAC,UAAU,YAAYzH,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAI,IAAE,CAAC,OAAO,OAAO,OAAO,QAAQzH,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAI,IAAE,CAAC,UAAU,SAASzH,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAEyG,cAAc,MAAK,GAAG,EAAI,IAAE,IAAIq9W,EAAG,gBAAgB,SAASC,EAAG/jX,GAAG,OAAOA,EAAE,GAAG43D,aAAc,CAIzZ,SAASosT,EAAGhkX,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAE3D,EAAE0qK,eAAen6J,GAAGvQ,EAAEuQ,GAAG,MAAQ,OAAO5M,EAAE,IAAIA,EAAEK,KAAKkR,KAAK,EAAE3E,EAAEhV,SAAS,MAAMgV,EAAE,IAAI,MAAMA,EAAE,IAAI,MAAMA,EAAE,IAAI,MAAMA,EAAE,MAP9I,SAAY9J,EAAE8J,EAAEC,EAAE0E,GAAG,GAAG,OAAO3E,GAAG,qBAAqBA,GADqE,SAAY9J,EAAE8J,EAAEC,EAAE0E,GAAG,GAAG,OAAO1E,GAAG,IAAIA,EAAExM,KAAK,OAAM,EAAG,cAAcuM,GAAG,IAAK,WAAW,IAAK,SAAS,OAAM,EAAG,IAAK,UAAU,OAAG2E,IAAc,OAAO1E,GAASA,EAAE05W,gBAAmD,WAAnCzjX,EAAEA,EAAEyG,cAAcZ,MAAM,EAAE,KAAsB,UAAU7F,GAAE,QAAQ,OAAM,EAAI,CAChUikX,CAAGjkX,EAAE8J,EAAEC,EAAE0E,GAAG,OAAM,EAAG,GAAGA,EAAE,OAAM,EAAG,GAAG,OAAO1E,EAAE,OAAOA,EAAExM,MAAM,KAAK,EAAE,OAAOuM,EAAE,KAAK,EAAE,OAAM,IAAKA,EAAE,KAAK,EAAE,OAAOw1B,MAAMx1B,GAAG,KAAK,EAAE,OAAOw1B,MAAMx1B,IAAI,EAAEA,EAAE,OAAM,CAAG,CAOvEmT,CAAGnT,EAAEC,EAAE7M,EAAEuR,KAAK1E,EAAE,MAAM0E,GAAG,OAAOvR,EARxK,SAAY8C,GAAG,QAAG04J,EAAGjkK,KAAK+uX,EAAGxjX,KAAe04J,EAAGjkK,KAAK8uX,EAAGvjX,KAAesjX,EAAG3vW,KAAK3T,GAAUwjX,EAAGxjX,IAAG,GAAGujX,EAAGvjX,IAAG,GAAS,GAAG,CAQuDkkX,CAAGp6W,KAAK,OAAOC,EAAE/J,EAAEmkX,gBAAgBr6W,GAAG9J,EAAEi/B,aAAan1B,EAAE,GAAGC,IAAI7M,EAAEymX,gBAAgB3jX,EAAE9C,EAAEikG,cAAc,OAAOp3F,EAAE,IAAI7M,EAAEK,MAAQ,GAAGwM,GAAGD,EAAE5M,EAAE+tH,cAAcx8G,EAAEvR,EAAEwmX,mBAAmB,OAAO35W,EAAE/J,EAAEmkX,gBAAgBr6W,IAAaC,EAAE,KAAX7M,EAAEA,EAAEK,OAAc,IAAIL,IAAG,IAAK6M,EAAE,GAAG,GAAGA,EAAE0E,EAAEzO,EAAEokX,eAAe31W,EAAE3E,EAAEC,GAAG/J,EAAEi/B,aAAan1B,EAAEC,KAAK,CAHld,0jCAA0jC8tD,MAAM,KAAKt/D,SAAQ,SAASyH,GAAG,IAAI8J,EAAE9J,EAAE64D,QAAQirT,EACzmCC,GAAIxqX,EAAEuQ,GAAG,IAAIkB,EAAElB,EAAE,GAAE,EAAG9J,EAAE,MAAK,GAAG,EAAI,IAAE,2EAA2E63D,MAAM,KAAKt/D,SAAQ,SAASyH,GAAG,IAAI8J,EAAE9J,EAAE64D,QAAQirT,EAAGC,GAAIxqX,EAAEuQ,GAAG,IAAIkB,EAAElB,EAAE,GAAE,EAAG9J,EAAE,gCAA+B,GAAG,EAAI,IAAE,CAAC,WAAW,WAAW,aAAazH,SAAQ,SAASyH,GAAG,IAAI8J,EAAE9J,EAAE64D,QAAQirT,EAAGC,GAAIxqX,EAAEuQ,GAAG,IAAIkB,EAAElB,EAAE,GAAE,EAAG9J,EAAE,wCAAuC,GAAG,EAAI,IAAE,CAAC,WAAW,eAAezH,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAEyG,cAAc,MAAK,GAAG,EAAI,IACndlN,EAAE8qX,UAAU,IAAIr5W,EAAE,YAAY,GAAE,EAAG,aAAa,gCAA+B,GAAG,GAAI,CAAC,MAAM,OAAO,SAAS,cAAczS,SAAQ,SAASyH,GAAGzG,EAAEyG,GAAG,IAAIgL,EAAEhL,EAAE,GAAE,EAAGA,EAAEyG,cAAc,MAAK,GAAG,EAAI,IAE7L,IAAIoqV,EAAG98C,EAAGuwE,mDAAmD1vV,EAAG1gC,OAAO2uQ,IAAI,iBAAiB0hH,EAAGrwX,OAAO2uQ,IAAI,gBAAgB2hH,EAAGtwX,OAAO2uQ,IAAI,kBAAkB4hH,EAAGvwX,OAAO2uQ,IAAI,qBAAqB6hH,EAAGxwX,OAAO2uQ,IAAI,kBAAkB8hH,EAAGzwX,OAAO2uQ,IAAI,kBAAkB+hH,EAAG1wX,OAAO2uQ,IAAI,iBAAiBgiH,EAAG3wX,OAAO2uQ,IAAI,qBAAqBiiH,EAAG5wX,OAAO2uQ,IAAI,kBAAkBkiH,EAAG7wX,OAAO2uQ,IAAI,uBAAuBmiH,EAAG9wX,OAAO2uQ,IAAI,cAAcoiH,EAAG/wX,OAAO2uQ,IAAI,cAAc3uQ,OAAO2uQ,IAAI,eAAe3uQ,OAAO2uQ,IAAI,0BACje,IAAIqiH,EAAGhxX,OAAO2uQ,IAAI,mBAAmB3uQ,OAAO2uQ,IAAI,uBAAuB3uQ,OAAO2uQ,IAAI,eAAe3uQ,OAAO2uQ,IAAI,wBAAwB,IAAIsiH,EAAGjxX,OAAOC,SAAS,SAASixX,EAAGplX,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAwC,oBAAnCA,EAAEmlX,GAAInlX,EAAEmlX,IAAKnlX,EAAE,eAA0CA,EAAE,IAAK,KAAoBqlX,EAAhBr8J,EAAE5xN,OAAO6iB,OAAU,SAASqrW,EAAGtlX,GAAG,QAAG,IAASqlX,EAAG,IAAI,MAAMx9W,OAA4E,CAAnE,MAAMkC,GAAG,IAAID,EAAEC,EAAEqnL,MAAM35H,OAAO7+D,MAAM,gBAAgBysX,EAAGv7W,GAAGA,EAAE,IAAI,EAAG,OAAM,KAAKu7W,EAAGrlX,CAAE,KAAIulX,GAAG,EACzb,SAASC,EAAGxlX,EAAE8J,GAAG,IAAI9J,GAAGulX,EAAG,MAAM,GAAGA,GAAG,EAAG,IAAIx7W,EAAElC,MAAM49W,kBAAkB59W,MAAM49W,uBAAkB,EAAO,IAAI,GAAG37W,EAAE,GAAGA,EAAE,WAAW,MAAMjC,OAAS,EAACzQ,OAAOC,eAAeyS,EAAE1J,UAAU,QAAQ,CAACO,IAAI,WAAW,MAAMkH,OAAS,IAAG,kBAAkBhI,SAASA,QAAQC,UAAU,CAAC,IAAID,QAAQC,UAAUgK,EAAE,GAAqB,CAAjB,MAAMhE,GAAG,IAAI2I,EAAE3I,CAAE,CAAAjG,QAAQC,UAAUE,EAAE,GAAG8J,EAAG,KAAI,CAAC,IAAIA,EAAErV,MAAoB,CAAb,MAAMqR,GAAG2I,EAAE3I,CAAE,CAAA9F,EAAEvL,KAAKqV,EAAE1J,UAAW,KAAI,CAAC,IAAI,MAAMyH,OAAsB,CAAb,MAAM/B,GAAG2I,EAAE3I,CAAE,CAAA9F,GAAI,CAC5D,CAD6D,MAAM8F,GAAG,GAAGA,GAAG2I,GAAG,kBAAkB3I,EAAEsrL,MAAM,CAAC,IAAI,IAAIl0L,EAAE4I,EAAEsrL,MAAMv5H,MAAM,MACnfnpD,EAAED,EAAE2iL,MAAMv5H,MAAM,MAAMlpD,EAAEzR,EAAEpI,OAAO,EAAE8Z,EAAEF,EAAE5Z,OAAO,EAAE,GAAG6Z,GAAG,GAAGC,GAAG1R,EAAEyR,KAAKD,EAAEE,IAAIA,IAAI,KAAK,GAAGD,GAAG,GAAGC,EAAED,IAAIC,IAAI,GAAG1R,EAAEyR,KAAKD,EAAEE,GAAG,CAAC,GAAG,IAAID,GAAG,IAAIC,EAAG,GAAG,GAAGD,IAAQ,IAAJC,GAAS1R,EAAEyR,KAAKD,EAAEE,GAAG,CAAC,IAAIq8D,EAAE,KAAK/tE,EAAEyR,GAAGkqD,QAAQ,WAAW,QAA6F,OAArF74D,EAAE0lX,aAAaz6S,EAAEioE,SAAS,iBAAiBjoE,EAAEA,EAAEpS,QAAQ,cAAc74D,EAAE0lX,cAAqBz6S,CAAE,QAAM,GAAGt8D,GAAG,GAAGC,GAAG,KAAM,CAAC,CAAC,CADlO,QAC0O22W,GAAG,EAAG19W,MAAM49W,kBAAkB17W,CAAE,QAAO/J,EAAEA,EAAEA,EAAE0lX,aAAa1lX,EAAEwQ,KAAK,IAAI80W,EAAGtlX,GAAG,EAAG,CAC/Z,SAAS2lX,EAAG3lX,GAAG,OAAOA,EAAEmtJ,KAAK,KAAK,EAAE,OAAOm4N,EAAGtlX,EAAEzC,MAAM,KAAK,GAAG,OAAO+nX,EAAG,QAAQ,KAAK,GAAG,OAAOA,EAAG,YAAY,KAAK,GAAG,OAAOA,EAAG,gBAAgB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAOtlX,EAAEwlX,EAAGxlX,EAAEzC,MAAK,GAAM,KAAK,GAAG,OAAOyC,EAAEwlX,EAAGxlX,EAAEzC,KAAK2sC,QAAO,GAAM,KAAK,EAAE,OAAOlqC,EAAEwlX,EAAGxlX,EAAEzC,MAAK,GAAM,QAAQ,MAAM,GAAI,CACzR,SAASqoX,EAAG5lX,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,oBAAoBA,EAAE,OAAOA,EAAE0lX,aAAa1lX,EAAEwQ,MAAM,KAAK,GAAG,kBAAkBxQ,EAAE,OAAOA,EAAE,OAAOA,GAAG,KAAKwkX,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,SAAS,KAAKG,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,aAAa,KAAKK,EAAG,MAAM,WAAW,KAAKC,EAAG,MAAM,eAAe,GAAG,kBAAkB/kX,EAAE,OAAOA,EAAE6lX,UAAU,KAAKjB,EAAG,OAAO5kX,EAAE0lX,aAAa,WAAW,YAAY,KAAKf,EAAG,OAAO3kX,EAAE8pF,SAAS47R,aAAa,WAAW,YAAY,KAAKb,EAAG,IAAI/6W,EAAE9J,EAAEkqC,OAC7Z,OADoalqC,EAAEA,EAAE0lX,eACnd1lX,EAAE,MADieA,EAAE8J,EAAE47W,aAClf57W,EAAE0G,MAAM,IAAY,cAAcxQ,EAAE,IAAI,cAAqBA,EAAE,KAAKglX,EAAG,OAA6B,QAAtBl7W,EAAE9J,EAAE0lX,aAAa,MAAc57W,EAAE87W,EAAG5lX,EAAEzC,OAAO,OAAO,KAAK0nX,EAAGn7W,EAAE9J,EAAE8lX,SAAS9lX,EAAEA,EAAEyhK,MAAM,IAAI,OAAOmkN,EAAG5lX,EAAE8J,GAAc,CAAV,MAAMC,GAAI,EAAC,OAAO,IAAK,CAC5M,SAASg8W,EAAG/lX,GAAG,IAAI8J,EAAE9J,EAAEzC,KAAK,OAAOyC,EAAEmtJ,KAAK,KAAK,GAAG,MAAM,QAAQ,KAAK,EAAE,OAAOrjJ,EAAE47W,aAAa,WAAW,YAAY,KAAK,GAAG,OAAO57W,EAAEggF,SAAS47R,aAAa,WAAW,YAAY,KAAK,GAAG,MAAM,qBAAqB,KAAK,GAAG,OAAkB1lX,GAAXA,EAAE8J,EAAEogC,QAAWw7U,aAAa1lX,EAAEwQ,MAAM,GAAG1G,EAAE47W,cAAc,KAAK1lX,EAAE,cAAcA,EAAE,IAAI,cAAc,KAAK,EAAE,MAAM,WAAW,KAAK,EAAE,OAAO8J,EAAE,KAAK,EAAE,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,KAAK,EAAE,MAAM,OAAO,KAAK,GAAG,OAAO87W,EAAG97W,GAAG,KAAK,EAAE,OAAOA,IAAI26W,EAAG,aAAa,OAAO,KAAK,GAAG,MAAM,YACtf,KAAK,GAAG,MAAM,WAAW,KAAK,GAAG,MAAM,QAAQ,KAAK,GAAG,MAAM,WAAW,KAAK,GAAG,MAAM,eAAe,KAAK,GAAG,MAAM,gBAAgB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,GAAG,oBAAoB36W,EAAE,OAAOA,EAAE47W,aAAa57W,EAAE0G,MAAM,KAAK,GAAG,kBAAkB1G,EAAE,OAAOA,EAAE,OAAO,IAAK,UAASk8W,EAAGhmX,GAAG,cAAcA,GAAG,IAAK,UAAU,IAAK,SAAS,IAAK,SAAS,IAAK,YAAqB,IAAK,SAAS,OAAOA,EAAE,QAAQ,MAAM,GAAI,CACta,SAASimX,EAAGjmX,GAAG,IAAI8J,EAAE9J,EAAEzC,KAAK,OAAOyC,EAAEA,EAAEotG,WAAW,UAAUptG,EAAEyG,gBAAgB,aAAaqD,GAAG,UAAUA,EAAG,CAEvF,SAASo8W,EAAGlmX,GAAGA,EAAEmmX,gBAAgBnmX,EAAEmmX,cADvD,SAAYnmX,GAAG,IAAI8J,EAAEm8W,EAAGjmX,GAAG,UAAU,QAAQ+J,EAAE3S,OAAOa,yBAAyB+H,EAAEc,YAAYV,UAAU0J,GAAG2E,EAAE,GAAGzO,EAAE8J,GAAG,IAAI9J,EAAEikK,eAAen6J,IAAI,qBAAqBC,GAAG,oBAAoBA,EAAErJ,KAAK,oBAAoBqJ,EAAEpJ,IAAI,CAAC,IAAIzD,EAAE6M,EAAErJ,IAAIgO,EAAE3E,EAAEpJ,IAAiL,OAA7KvJ,OAAOC,eAAe2I,EAAE8J,EAAE,CAACvS,cAAa,EAAGmJ,IAAI,WAAW,OAAOxD,EAAEzI,KAAKyB,KAAM,EAACyK,IAAI,SAASX,GAAGyO,EAAE,GAAGzO,EAAE0O,EAAEja,KAAKyB,KAAK8J,EAAG,IAAG5I,OAAOC,eAAe2I,EAAE8J,EAAE,CAACxS,WAAWyS,EAAEzS,aAAmB,CAACi0G,SAAS,WAAW,OAAO98F,CAAE,EAACmhD,SAAS,SAAS5vD,GAAGyO,EAAE,GAAGzO,CAAE,EAAComX,aAAa,WAAWpmX,EAAEmmX,cACxf,YAAYnmX,EAAE8J,EAAG,EAAE,CAAC,CAAiDu8W,CAAGrmX,GAAI,UAASsmX,EAAGtmX,GAAG,IAAIA,EAAE,OAAM,EAAG,IAAI8J,EAAE9J,EAAEmmX,cAAc,IAAIr8W,EAAE,OAAM,EAAG,IAAIC,EAAED,EAAEyhG,WAAe98F,EAAE,GAAqD,OAAlDzO,IAAIyO,EAAEw3W,EAAGjmX,GAAGA,EAAE8gR,QAAQ,OAAO,QAAQ9gR,EAAEnL,QAAOmL,EAAEyO,KAAa1E,IAAGD,EAAE8lD,SAAS5vD,IAAG,EAAO,UAASumX,EAAGvmX,GAAwD,GAAG,qBAAxDA,EAAEA,IAAI,qBAAqBrG,SAASA,cAAS,IAAkC,OAAO,KAAK,IAAI,OAAOqG,EAAEwmX,eAAexmX,EAAE4kG,IAA4B,CAAvB,MAAM96F,GAAG,OAAO9J,EAAE4kG,IAAK,CAAC,CACra,SAAS6hR,EAAGzmX,EAAE8J,GAAG,IAAIC,EAAED,EAAEg3Q,QAAQ,OAAO93D,EAAE,CAAC,EAAEl/M,EAAE,CAAC48W,oBAAe,EAAOvvO,kBAAa,EAAOtiJ,WAAM,EAAOisR,QAAQ,MAAM/2Q,EAAEA,EAAE/J,EAAE2mX,cAAcC,gBAAiB,UAASC,EAAG7mX,EAAE8J,GAAG,IAAIC,EAAE,MAAMD,EAAEqtI,aAAa,GAAGrtI,EAAEqtI,aAAa1oI,EAAE,MAAM3E,EAAEg3Q,QAAQh3Q,EAAEg3Q,QAAQh3Q,EAAE48W,eAAe38W,EAAEi8W,EAAG,MAAMl8W,EAAEjV,MAAMiV,EAAEjV,MAAMkV,GAAG/J,EAAE2mX,cAAc,CAACC,eAAen4W,EAAEs/J,aAAahkK,EAAE+8W,WAAW,aAAah9W,EAAEvM,MAAM,UAAUuM,EAAEvM,KAAK,MAAMuM,EAAEg3Q,QAAQ,MAAMh3Q,EAAEjV,MAAO,UAAS2sC,EAAGxhC,EAAE8J,GAAe,OAAZA,EAAEA,EAAEg3Q,UAAiBkjG,EAAGhkX,EAAE,UAAU8J,GAAE,EAAI,CAC/d,SAASkqS,EAAGh0S,EAAE8J,GAAG03B,EAAGxhC,EAAE8J,GAAG,IAAIC,EAAEi8W,EAAGl8W,EAAEjV,OAAO4Z,EAAE3E,EAAEvM,KAAK,GAAG,MAAMwM,EAAK,WAAW0E,GAAM,IAAI1E,GAAG,KAAK/J,EAAEnL,OAAOmL,EAAEnL,OAAOkV,KAAE/J,EAAEnL,MAAM,GAAGkV,GAAO/J,EAAEnL,QAAQ,GAAGkV,IAAI/J,EAAEnL,MAAM,GAAGkV,QAAQ,GAAG,WAAW0E,GAAG,UAAUA,EAA8B,YAA3BzO,EAAEmkX,gBAAgB,SAAgBr6W,EAAEm6J,eAAe,SAAS1iI,GAAGvhC,EAAE8J,EAAEvM,KAAKwM,GAAGD,EAAEm6J,eAAe,iBAAiB1iI,GAAGvhC,EAAE8J,EAAEvM,KAAKyoX,EAAGl8W,EAAEqtI,eAAe,MAAMrtI,EAAEg3Q,SAAS,MAAMh3Q,EAAE48W,iBAAiB1mX,EAAE0mX,iBAAiB58W,EAAE48W,eAAgB,CACna,SAAS3a,GAAG/rW,EAAE8J,EAAEC,GAAG,GAAGD,EAAEm6J,eAAe,UAAUn6J,EAAEm6J,eAAe,gBAAgB,CAAC,IAAIx1J,EAAE3E,EAAEvM,KAAK,KAAK,WAAWkR,GAAG,UAAUA,QAAG,IAAS3E,EAAEjV,OAAO,OAAOiV,EAAEjV,OAAO,OAAOiV,EAAE,GAAG9J,EAAE2mX,cAAc54M,aAAahkK,GAAGD,IAAI9J,EAAEnL,QAAQmL,EAAEnL,MAAMiV,GAAG9J,EAAEm3I,aAAartI,CAAE,CAAS,MAATC,EAAE/J,EAAEwQ,QAAcxQ,EAAEwQ,KAAK,IAAIxQ,EAAE0mX,iBAAiB1mX,EAAE2mX,cAAcC,eAAe,KAAK78W,IAAI/J,EAAEwQ,KAAKzG,EAAG,CAC1V,SAASw3B,GAAGvhC,EAAE8J,EAAEC,GAAM,WAAWD,GAAGy8W,EAAGvmX,EAAE+mX,iBAAiB/mX,IAAE,MAAM+J,EAAE/J,EAAEm3I,aAAa,GAAGn3I,EAAE2mX,cAAc54M,aAAa/tK,EAAEm3I,eAAe,GAAGptI,IAAI/J,EAAEm3I,aAAa,GAAGptI,GAAG,KAAIi9W,GAAGjzX,MAAMC,QAC7K,SAAS25N,GAAG3tN,EAAE8J,EAAEC,EAAE0E,GAAe,GAAZzO,EAAEA,EAAEhK,QAAW8T,EAAE,CAACA,EAAE,CAAC,EAAE,IAAI,IAAI5M,EAAE,EAAEA,EAAE6M,EAAEjV,OAAOoI,IAAI4M,EAAE,IAAIC,EAAE7M,KAAI,EAAG,IAAI6M,EAAE,EAAEA,EAAE/J,EAAElL,OAAOiV,IAAI7M,EAAE4M,EAAEm6J,eAAe,IAAIjkK,EAAE+J,GAAGlV,OAAOmL,EAAE+J,GAAGk9W,WAAW/pX,IAAI8C,EAAE+J,GAAGk9W,SAAS/pX,GAAGA,GAAGuR,IAAIzO,EAAE+J,GAAGm9W,iBAAgB,EAAI,KAAI,CAAmB,IAAlBn9W,EAAE,GAAGi8W,EAAGj8W,GAAGD,EAAE,KAAS5M,EAAE,EAAEA,EAAE8C,EAAElL,OAAOoI,IAAI,CAAC,GAAG8C,EAAE9C,GAAGrI,QAAQkV,EAAiD,OAA9C/J,EAAE9C,GAAG+pX,UAAS,OAAGx4W,IAAIzO,EAAE9C,GAAGgqX,iBAAgB,IAAW,OAAOp9W,GAAG9J,EAAE9C,GAAGiqX,WAAWr9W,EAAE9J,EAAE9C,GAAI,QAAO4M,IAAIA,EAAEm9W,UAAS,EAAI,CAAC,CACzY,SAASG,GAAGpnX,EAAE8J,GAAG,GAAG,MAAMA,EAAEu9W,wBAAwB,MAAMx/W,MAAM6J,EAAE,KAAK,OAAOs3M,EAAE,CAAC,EAAEl/M,EAAE,CAACjV,WAAM,EAAOsiJ,kBAAa,EAAOh0H,SAAS,GAAGnjB,EAAE2mX,cAAc54M,cAAe,UAASyyB,GAAGxgM,EAAE8J,GAAG,IAAIC,EAAED,EAAEjV,MAAM,GAAG,MAAMkV,EAAE,CAA+B,GAA9BA,EAAED,EAAEqZ,SAASrZ,EAAEA,EAAEqtI,aAAgB,MAAMptI,EAAE,CAAC,GAAG,MAAMD,EAAE,MAAMjC,MAAM6J,EAAE,KAAK,GAAGs1W,GAAGj9W,GAAG,CAAC,GAAG,EAAEA,EAAEjV,OAAO,MAAM+S,MAAM6J,EAAE,KAAK3H,EAAEA,EAAE,EAAG,CAAAD,EAAEC,CAAE,OAAMD,IAAIA,EAAE,IAAIC,EAAED,CAAE,CAAA9J,EAAE2mX,cAAc,CAAC54M,aAAai4M,EAAGj8W,GAAI,CACpY,SAAS+qF,GAAG90F,EAAE8J,GAAG,IAAIC,EAAEi8W,EAAGl8W,EAAEjV,OAAO4Z,EAAEu3W,EAAGl8W,EAAEqtI,cAAc,MAAMptI,KAAIA,EAAE,GAAGA,KAAM/J,EAAEnL,QAAQmL,EAAEnL,MAAMkV,GAAG,MAAMD,EAAEqtI,cAAcn3I,EAAEm3I,eAAeptI,IAAI/J,EAAEm3I,aAAaptI,IAAI,MAAM0E,IAAIzO,EAAEm3I,aAAa,GAAG1oI,EAAG,UAASkqJ,GAAG34J,GAAG,IAAI8J,EAAE9J,EAAEsnX,YAAYx9W,IAAI9J,EAAE2mX,cAAc54M,cAAc,KAAKjkK,GAAG,OAAOA,IAAI9J,EAAEnL,MAAMiV,EAAG,UAASy9W,GAAGvnX,GAAG,OAAOA,GAAG,IAAK,MAAM,MAAM,6BAA6B,IAAK,OAAO,MAAM,qCAAqC,QAAQ,MAAM,+BAAgC,CAC9c,SAASwnX,GAAGxnX,EAAE8J,GAAG,OAAO,MAAM9J,GAAG,iCAAiCA,EAAEunX,GAAGz9W,GAAG,+BAA+B9J,GAAG,kBAAkB8J,EAAE,+BAA+B9J,CAAE,CACjK,IAAIynX,GAAeznX,GAAZu6Q,IAAYv6Q,GAAsJ,SAASA,EAAE8J,GAAG,GAAG,+BAA+B9J,EAAE0nX,cAAc,cAAc1nX,EAAEA,EAAE2nX,UAAU79W,MAAM,CAA2F,KAA1F29W,GAAGA,IAAI9tX,SAASy0O,cAAc,QAAUu5I,UAAU,QAAQ79W,EAAEqzN,UAAU38N,WAAW,SAAasJ,EAAE29W,GAAGG,WAAW5nX,EAAE4nX,YAAY5nX,EAAE6nX,YAAY7nX,EAAE4nX,YAAY,KAAK99W,EAAE89W,YAAY5nX,EAAE07H,YAAY5xH,EAAE89W,WAAY,CAAC,EAAxb,qBAAqBE,OAAOA,MAAMC,wBAAwB,SAASj+W,EAAEC,EAAE0E,EAAEvR,GAAG4qX,MAAMC,yBAAwB,WAAW,OAAO/nX,GAAE8J,EAAEC,EAAO,GAAE,EAAC/J,IACtK,SAASgoX,GAAGhoX,EAAE8J,GAAG,GAAGA,EAAE,CAAC,IAAIC,EAAE/J,EAAE4nX,WAAW,GAAG79W,GAAGA,IAAI/J,EAAEioX,WAAW,IAAIl+W,EAAEm+W,SAAwB,YAAdn+W,EAAEo+W,UAAUr+W,EAAU,CAAA9J,EAAEsnX,YAAYx9W,CAAE,CACvH,IAAIs+W,GAAG,CAACC,yBAAwB,EAAGjxP,aAAY,EAAGkxP,mBAAkB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,SAAQ,EAAGC,cAAa,EAAGC,iBAAgB,EAAGC,aAAY,EAAGrwJ,SAAQ,EAAGswJ,MAAK,EAAGC,UAAS,EAAGC,cAAa,EAAGC,YAAW,EAAGC,cAAa,EAAGC,WAAU,EAAGC,UAAS,EAAGC,SAAQ,EAAGC,YAAW,EAAGC,aAAY,EAAGC,cAAa,EAAGC,YAAW,EAAGC,eAAc,EAAGC,gBAAe,EAAGC,iBAAgB,EAAGC,YAAW,EAAGC,WAAU,EAAGC,YAAW,EAAGl0V,SAAQ,EAAG5rB,OAAM,EAAG+/W,SAAQ,EAAGC,SAAQ,EAAGC,QAAO,EAAG5sX,QAAO,EAClfyqC,MAAK,EAAGoiV,aAAY,EAAGC,cAAa,EAAGC,aAAY,EAAGC,iBAAgB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,eAAc,EAAGC,aAAY,GAAI/tW,GAAG,CAAC,SAAS,KAAK,MAAM,KAA6H,SAASkpM,GAAG5lN,EAAE8J,EAAEC,GAAG,OAAO,MAAMD,GAAG,mBAAmBA,GAAG,KAAKA,EAAE,GAAGC,GAAG,kBAAkBD,GAAG,IAAIA,GAAGs+W,GAAGnkN,eAAejkK,IAAIooX,GAAGpoX,IAAI,GAAG8J,GAAG2tD,OAAO3tD,EAAE,IAAK,CAC1b,SAAS4gX,GAAG1qX,EAAE8J,GAAa,IAAI,IAAIC,KAAlB/J,EAAEA,EAAEtJ,MAAmBoT,EAAE,GAAGA,EAAEm6J,eAAel6J,GAAG,CAAC,IAAI0E,EAAE,IAAI1E,EAAE/Q,QAAQ,MAAMkE,EAAE0oN,GAAG77M,EAAED,EAAEC,GAAG0E,GAAG,UAAU1E,IAAIA,EAAE,YAAY0E,EAAEzO,EAAEm1U,YAAYprU,EAAE7M,GAAG8C,EAAE+J,GAAG7M,CAAE,CAAC,CADW9F,OAAOQ,KAAKwwX,IAAI7vX,SAAQ,SAASyH,GAAG0c,GAAGnkB,SAAQ,SAASuR,GAAGA,EAAEA,EAAE9J,EAAE2S,OAAO,GAAGilD,cAAc53D,EAAEovG,UAAU,GAAGg5Q,GAAGt+W,GAAGs+W,GAAGpoX,EAAG,GAAE,IACjI,IAAI2qX,GAAG3hK,EAAE,CAAC4hK,UAAS,GAAI,CAACC,MAAK,EAAG5qN,MAAK,EAAG6qN,IAAG,EAAG1/T,KAAI,EAAG2/T,OAAM,EAAG3R,IAAG,EAAG4R,KAAI,EAAG3yP,OAAM,EAAG4yP,QAAO,EAAGznD,MAAK,EAAGzuT,MAAK,EAAGomI,OAAM,EAAG7iJ,QAAO,EAAGwmG,OAAM,EAAGosR,KAAI,IAClT,SAASC,GAAGnrX,EAAE8J,GAAG,GAAGA,EAAE,CAAC,GAAG6gX,GAAG3qX,KAAK,MAAM8J,EAAEqZ,UAAU,MAAMrZ,EAAEu9W,yBAAyB,MAAMx/W,MAAM6J,EAAE,IAAI1R,IAAI,GAAG,MAAM8J,EAAEu9W,wBAAwB,CAAC,GAAG,MAAMv9W,EAAEqZ,SAAS,MAAMtb,MAAM6J,EAAE,KAAK,GAAG,kBAAkB5H,EAAEu9W,2BAA2B,WAAWv9W,EAAEu9W,yBAAyB,MAAMx/W,MAAM6J,EAAE,IAAM,IAAG,MAAM5H,EAAEpT,OAAO,kBAAkBoT,EAAEpT,MAAM,MAAMmR,MAAM6J,EAAE,IAAM,CAAC,CACnW,SAASijB,GAAG30B,EAAE8J,GAAG,IAAI,IAAI9J,EAAEhH,QAAQ,KAAK,MAAM,kBAAkB8Q,EAAE8oN,GAAG,OAAO5yN,GAAG,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,YAAY,IAAK,gBAAgB,IAAK,gBAAgB,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,gBAAgB,OAAM,EAAG,QAAQ,OAAM,EAAI,KAAIorX,GAAG,KAAK,SAASC,GAAGrrX,GAA6F,OAA1FA,EAAEA,EAAE5H,QAAQ4H,EAAEsrX,YAAYvyX,QAASwyX,0BAA0BvrX,EAAEA,EAAEurX,yBAAgC,IAAIvrX,EAAEkoX,SAASloX,EAAEwrX,WAAWxrX,CAAE,KAAIyrX,GAAG,KAAKC,GAAG,KAAKC,GAAG,KACpc,SAASC,GAAG5rX,GAAG,GAAGA,EAAE6rX,GAAG7rX,GAAG,CAAC,GAAG,oBAAoByrX,GAAG,MAAM5jX,MAAM6J,EAAE,MAAM,IAAI5H,EAAE9J,EAAE8rX,UAAUhiX,IAAIA,EAAEiiX,GAAGjiX,GAAG2hX,GAAGzrX,EAAE8rX,UAAU9rX,EAAEzC,KAAKuM,GAAI,CAAC,UAASkiX,GAAGhsX,GAAG0rX,GAAGC,GAAGA,GAAG/2X,KAAKoL,GAAG2rX,GAAG,CAAC3rX,GAAG0rX,GAAG1rX,CAAE,UAASisX,KAAK,GAAGP,GAAG,CAAC,IAAI1rX,EAAE0rX,GAAG5hX,EAAE6hX,GAAoB,GAAjBA,GAAGD,GAAG,KAAKE,GAAG5rX,GAAM8J,EAAE,IAAI9J,EAAE,EAAEA,EAAE8J,EAAEhV,OAAOkL,IAAI4rX,GAAG9hX,EAAE9J,GAAI,CAAC,UAASksX,GAAGlsX,EAAE8J,GAAG,OAAO9J,EAAE8J,EAAG,UAASqiX,KAAM,KAAIC,IAAG,EAAG,SAASC,GAAGrsX,EAAE8J,EAAEC,GAAG,GAAGqiX,GAAG,OAAOpsX,EAAE8J,EAAEC,GAAGqiX,IAAG,EAAG,IAAI,OAAOF,GAAGlsX,EAAE8J,EAAEC,EAAmD,CAArE,QAAgCqiX,IAAG,GAAG,OAAOV,IAAI,OAAOC,MAAGQ,KAAKF,KAAK,CAAC,CACjb,SAASK,GAAGtsX,EAAE8J,GAAG,IAAIC,EAAE/J,EAAE8rX,UAAU,GAAG,OAAO/hX,EAAE,OAAO,KAAK,IAAI0E,EAAEs9W,GAAGhiX,GAAG,GAAG,OAAO0E,EAAE,OAAO,KAAK1E,EAAE0E,EAAE3E,GAAG9J,EAAE,OAAO8J,GAAG,IAAK,UAAU,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,uBAAuB,IAAK,cAAc,IAAK,qBAAqB,IAAK,cAAc,IAAK,qBAAqB,IAAK,YAAY,IAAK,mBAAmB,IAAK,gBAAgB2E,GAAGA,EAAE04W,YAAqB14W,IAAI,YAAbzO,EAAEA,EAAEzC,OAAuB,UAAUyC,GAAG,WAAWA,GAAG,aAAaA,IAAIA,GAAGyO,EAAE,MAAMzO,EAAE,QAAQA,GAAE,EAAG,GAAGA,EAAE,OAAO,KAAK,GAAG+J,GAAG,oBACleA,EAAE,MAAMlC,MAAM6J,EAAE,IAAI5H,SAASC,IAAI,OAAOA,CAAE,KAAIwiX,IAAG,EAAG,GAAGlJ,EAAG,IAAI,IAAImJ,GAAG,CAAC,EAAEp1X,OAAOC,eAAem1X,GAAG,UAAU,CAAC9rX,IAAI,WAAW6rX,IAAG,CAAG,IAAGxzX,OAAO4E,iBAAiB,OAAO6uX,GAAGA,IAAIzzX,OAAO+E,oBAAoB,OAAO0uX,GAAGA,GAAmB,CAAf,MAAMxsX,IAAGusX,IAAG,CAAG,UAASE,GAAGzsX,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,EAAEC,EAAEq8D,GAAG,IAAInlE,EAAE/R,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAU,GAAG,IAAIyR,EAAE5R,MAAM6R,EAAEjE,EAA4B,CAAzB,MAAMe,GAAG3Q,KAAKksG,QAAQv7F,EAAG,CAAC,KAAI6lX,IAAG,EAAGC,GAAG,KAAKC,IAAG,EAAGC,GAAG,KAAKC,GAAG,CAAC1qR,QAAQ,SAASpiG,GAAG0sX,IAAG,EAAGC,GAAG3sX,CAAE,GAAE,SAAS+sX,GAAG/sX,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,EAAEC,EAAEq8D,GAAGyhT,IAAG,EAAGC,GAAG,KAAKF,GAAGv0X,MAAM40X,GAAGz0X,UAAW,CAClW,SAAS20X,GAAGhtX,GAAG,IAAI8J,EAAE9J,EAAE+J,EAAE/J,EAAE,GAAGA,EAAEitX,UAAU,KAAKnjX,EAAEojX,QAAQpjX,EAAEA,EAAEojX,WAAW,CAACltX,EAAE8J,EAAE,GAAO,KAAa,MAAjBA,EAAE9J,GAAS4nM,SAAc79L,EAAED,EAAEojX,QAAQltX,EAAE8J,EAAEojX,aAAaltX,EAAG,QAAO,IAAI8J,EAAEqjJ,IAAIpjJ,EAAE,IAAK,UAASojX,GAAGntX,GAAG,GAAG,KAAKA,EAAEmtJ,IAAI,CAAC,IAAIrjJ,EAAE9J,EAAEotX,cAAsE,GAAxD,OAAOtjX,IAAkB,QAAd9J,EAAEA,EAAEitX,aAAqBnjX,EAAE9J,EAAEotX,gBAAmB,OAAOtjX,EAAE,OAAOA,EAAEujX,UAAW,QAAO,IAAK,UAASC,GAAGttX,GAAG,GAAGgtX,GAAGhtX,KAAKA,EAAE,MAAM6H,MAAM6J,EAAE,KAAO,CAE3S,SAAS67W,GAAGvtX,GAAW,OAAO,QAAfA,EADtN,SAAYA,GAAG,IAAI8J,EAAE9J,EAAEitX,UAAU,IAAInjX,EAAE,CAAS,GAAG,QAAXA,EAAEkjX,GAAGhtX,IAAe,MAAM6H,MAAM6J,EAAE,MAAM,OAAO5H,IAAI9J,EAAE,KAAKA,CAAE,KAAI,IAAI+J,EAAE/J,EAAEyO,EAAE3E,IAAI,CAAC,IAAI5M,EAAE6M,EAAEmjX,OAAO,GAAG,OAAOhwX,EAAE,MAAM,IAAIwR,EAAExR,EAAE+vX,UAAU,GAAG,OAAOv+W,EAAE,CAAY,GAAG,QAAdD,EAAEvR,EAAEgwX,QAAmB,CAACnjX,EAAE0E,EAAE,QAAS,MAAM,IAAGvR,EAAE2zB,QAAQniB,EAAEmiB,MAAM,CAAC,IAAIniB,EAAExR,EAAE2zB,MAAMniB,GAAG,CAAC,GAAGA,IAAI3E,EAAE,OAAOujX,GAAGpwX,GAAG8C,EAAE,GAAG0O,IAAID,EAAE,OAAO6+W,GAAGpwX,GAAG4M,EAAE4E,EAAEA,EAAE4vI,OAAQ,OAAMz2I,MAAM6J,EAAE,KAAO,IAAG3H,EAAEmjX,SAASz+W,EAAEy+W,OAAOnjX,EAAE7M,EAAEuR,EAAEC,MAAM,CAAC,IAAI,IAAIC,GAAE,EAAGC,EAAE1R,EAAE2zB,MAAMjiB,GAAG,CAAC,GAAGA,IAAI7E,EAAE,CAAC4E,GAAE,EAAG5E,EAAE7M,EAAEuR,EAAEC,EAAE,KAAM,IAAGE,IAAIH,EAAE,CAACE,GAAE,EAAGF,EAAEvR,EAAE6M,EAAE2E,EAAE,KAAM,CAAAE,EAAEA,EAAE0vI,OAAQ,KAAI3vI,EAAE,CAAC,IAAIC,EAAEF,EAAEmiB,MAAMjiB,GAAG,CAAC,GAAGA,IAC5f7E,EAAE,CAAC4E,GAAE,EAAG5E,EAAE2E,EAAED,EAAEvR,EAAE,KAAM,IAAG0R,IAAIH,EAAE,CAACE,GAAE,EAAGF,EAAEC,EAAE3E,EAAE7M,EAAE,KAAM,CAAA0R,EAAEA,EAAE0vI,OAAQ,KAAI3vI,EAAE,MAAM9G,MAAM6J,EAAE,KAAO,CAAC,IAAG3H,EAAEkjX,YAAYx+W,EAAE,MAAM5G,MAAM6J,EAAE,KAAO,IAAG,IAAI3H,EAAEojJ,IAAI,MAAMtlJ,MAAM6J,EAAE,MAAM,OAAO3H,EAAE+hX,UAAUrwX,UAAUsO,EAAE/J,EAAE8J,CAAE,CAAiB0jX,CAAGxtX,IAAmBytX,GAAGztX,GAAG,IAAK,UAASytX,GAAGztX,GAAG,GAAG,IAAIA,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,IAAI,OAAOntJ,EAAE,IAAIA,EAAEA,EAAE6wB,MAAM,OAAO7wB,GAAG,CAAC,IAAI8J,EAAE2jX,GAAGztX,GAAG,GAAG,OAAO8J,EAAE,OAAOA,EAAE9J,EAAEA,EAAEs+I,OAAQ,QAAO,IAAK,CAC3X,IAAIp0H,GAAG+4V,EAAGyK,0BAA0BtjW,GAAG64V,EAAG0K,wBAAwB1/L,GAAGg1L,EAAG2K,qBAAqBC,GAAG5K,EAAG6K,sBAAsB7kK,GAAEg6J,EAAG8K,aAAa5rN,GAAG8gN,EAAG+K,iCAAiCC,GAAGhL,EAAGiL,2BAA2BC,GAAGlL,EAAGmL,8BAA8BC,GAAGpL,EAAGqL,wBAAwBrsH,GAAGghH,EAAGsL,qBAAqBC,GAAGvL,EAAGwL,sBAAsBC,GAAG,KAAKC,GAAG,KACvV,IAAIC,GAAGvyX,KAAKkjN,MAAMljN,KAAKkjN,MAAiC,SAAYv/M,GAAU,OAAO,KAAdA,KAAK,GAAe,GAAG,IAAI6uX,GAAG7uX,GAAG8uX,GAAG,GAAG,CAAE,EAAhFD,GAAGxyX,KAAK+K,IAAI0nX,GAAGzyX,KAAKgL,IAA4D,IAAI0nX,GAAG,GAAGC,GAAG,QAC7H,SAASC,GAAGjvX,GAAG,OAAOA,GAAGA,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAS,QAAFA,EAAU,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,OAAS,UAAFA,EAAY,KAAK,UAAU,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,KAAK,WAAW,OAAO,WACzgB,QAAQ,OAAOA,EAAG,UAASkvX,GAAGlvX,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEmvX,aAAa,GAAG,IAAIplX,EAAE,OAAO,EAAE,IAAI0E,EAAE,EAAEvR,EAAE8C,EAAEovX,eAAe1gX,EAAE1O,EAAEqvX,YAAY1gX,EAAI,UAAF5E,EAAY,GAAG,IAAI4E,EAAE,CAAC,IAAIC,EAAED,GAAGzR,EAAE,IAAI0R,EAAEH,EAAEwgX,GAAGrgX,GAAS,KAALF,GAAGC,KAAUF,EAAEwgX,GAAGvgX,GAAK,MAAY,KAAPC,EAAE5E,GAAG7M,GAAQuR,EAAEwgX,GAAGtgX,GAAG,IAAID,IAAID,EAAEwgX,GAAGvgX,IAAI,GAAG,IAAID,EAAE,OAAO,EAAE,GAAG,IAAI3E,GAAGA,IAAI2E,GAAG,KAAK3E,EAAE5M,MAAKA,EAAEuR,GAAGA,KAAEC,EAAE5E,GAAGA,IAAQ,KAAK5M,GAAG,KAAO,QAAFwR,IAAY,OAAO5E,EAA0C,GAAxC,KAAO,EAAF2E,KAAOA,GAAK,GAAF1E,GAA4B,KAAtBD,EAAE9J,EAAEsvX,gBAAwB,IAAItvX,EAAEA,EAAEuvX,cAAczlX,GAAG2E,EAAE,EAAE3E,GAAc5M,EAAE,IAAb6M,EAAE,GAAG6kX,GAAG9kX,IAAU2E,GAAGzO,EAAE+J,GAAGD,IAAI5M,EAAE,OAAOuR,CAAE,CACxc,SAAS8lB,GAAGv0B,EAAE8J,GAAG,OAAO9J,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO8J,EAAE,IAAI,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAOA,EAAE,IAAuJ,QAAQ,OAAO,EAAG,CACtN,SAASi2J,GAAG//J,GAAgC,OAAO,KAApCA,GAAkB,WAAhBA,EAAEmvX,cAAsCnvX,EAAI,WAAFA,EAAa,WAAW,CAAE,UAASwvX,KAAK,IAAIxvX,EAAE+uX,GAAoC,OAA1B,KAAQ,SAAfA,KAAK,MAAqBA,GAAG,IAAW/uX,CAAE,UAASyvX,GAAGzvX,GAAG,IAAI,IAAI8J,EAAE,GAAGC,EAAE,EAAE,GAAGA,EAAEA,IAAID,EAAElV,KAAKoL,GAAG,OAAO8J,CAAE,CAC5a,SAAS4lX,GAAG1vX,EAAE8J,EAAEC,GAAG/J,EAAEmvX,cAAcrlX,EAAE,YAAYA,IAAI9J,EAAEovX,eAAe,EAAEpvX,EAAEqvX,YAAY,IAAGrvX,EAAEA,EAAE2vX,YAAW7lX,EAAE,GAAG8kX,GAAG9kX,IAAQC,CAAE,CAC1H,SAAS6lX,GAAG5vX,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEsvX,gBAAgBxlX,EAAE,IAAI9J,EAAEA,EAAEuvX,cAAcxlX,GAAG,CAAC,IAAI0E,EAAE,GAAGmgX,GAAG7kX,GAAG7M,EAAE,GAAGuR,EAAEvR,EAAE4M,EAAE9J,EAAEyO,GAAG3E,IAAI9J,EAAEyO,IAAI3E,GAAGC,IAAI7M,CAAE,CAAC,KAAIg0L,GAAE,EAAE,SAAS2+L,GAAG7vX,GAAS,OAAO,GAAbA,IAAIA,GAAa,EAAEA,EAAE,KAAO,UAAFA,GAAa,GAAG,UAAU,EAAE,CAAE,KAAI8vX,GAAGC,GAAGC,GAAGC,GAAGC,GAAGC,IAAG,EAAGC,GAAG,GAAGC,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIjwX,IAAIkwX,GAAG,IAAIlwX,IAAImwX,GAAG,GAAGC,GAAG,6PAA6P94T,MAAM,KAChiB,SAAS+4T,GAAG5wX,EAAE8J,GAAG,OAAO9J,GAAG,IAAK,UAAU,IAAK,WAAWqwX,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,YAAYC,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,WAAWC,GAAG,KAAK,MAAM,IAAK,cAAc,IAAK,aAAaC,GAAG/hV,OAAO3kC,EAAEo2G,WAAW,MAAM,IAAK,oBAAoB,IAAK,qBAAqBuwQ,GAAGhiV,OAAO3kC,EAAEo2G,WAAY,CACpT,SAAS2wQ,GAAG7wX,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,GAAG,OAAG,OAAO1O,GAAGA,EAAE8wX,cAAcpiX,GAAS1O,EAAE,CAAC+wX,UAAUjnX,EAAEknX,aAAajnX,EAAEknX,iBAAiBxiX,EAAEqiX,YAAYpiX,EAAEwiX,iBAAiB,CAACh0X,IAAI,OAAO4M,IAAY,QAARA,EAAE+hX,GAAG/hX,KAAaimX,GAAGjmX,IAAI9J,IAAEA,EAAEixX,kBAAkBxiX,EAAE3E,EAAE9J,EAAEkxX,iBAAiB,OAAOh0X,IAAI,IAAI4M,EAAE9Q,QAAQkE,IAAI4M,EAAElV,KAAKsI,GAAU8C,EAAE,CAErR,SAASmxX,GAAGnxX,GAAG,IAAI8J,EAAEsnX,GAAGpxX,EAAE5H,QAAQ,GAAG,OAAO0R,EAAE,CAAC,IAAIC,EAAEijX,GAAGljX,GAAG,GAAG,OAAOC,EAAE,GAAW,MAARD,EAAEC,EAAEojJ,MAAY,GAAW,QAARrjJ,EAAEqjX,GAAGpjX,IAA4D,OAA/C/J,EAAE+wX,UAAUjnX,OAAEomX,GAAGlwX,EAAE0uL,UAAS,WAAWshM,GAAGjmX,EAAG,SAAe,GAAG,IAAID,GAAGC,EAAE+hX,UAAUrwX,QAAQ2xX,cAAciE,aAAmE,YAArDrxX,EAAE+wX,UAAU,IAAIhnX,EAAEojJ,IAAIpjJ,EAAE+hX,UAAUwF,cAAc,KAAa,CAAAtxX,EAAE+wX,UAAU,IAAK,CACnT,SAASQ,GAAGvxX,GAAG,GAAG,OAAOA,EAAE+wX,UAAU,OAAM,EAAG,IAAI,IAAIjnX,EAAE9J,EAAEkxX,iBAAiB,EAAEpnX,EAAEhV,QAAQ,CAAC,IAAIiV,EAAEynX,GAAGxxX,EAAEgxX,aAAahxX,EAAEixX,iBAAiBnnX,EAAE,GAAG9J,EAAE8wX,aAAa,GAAG,OAAO/mX,EAAiG,OAAe,QAARD,EAAE+hX,GAAG9hX,KAAagmX,GAAGjmX,GAAG9J,EAAE+wX,UAAUhnX,GAAE,EAA3H,IAAI0E,EAAE,IAAtB1E,EAAE/J,EAAE8wX,aAAwBhwX,YAAYiJ,EAAExM,KAAKwM,GAAGqhX,GAAG38W,EAAE1E,EAAE3R,OAAOuf,cAAclJ,GAAG28W,GAAG,KAA0DthX,EAAEwjF,OAAQ,QAAM,CAAG,UAASmkS,GAAGzxX,EAAE8J,EAAEC,GAAGwnX,GAAGvxX,IAAI+J,EAAE0kC,OAAO3kC,EAAG,UAAS4nX,KAAKvB,IAAG,EAAG,OAAOE,IAAIkB,GAAGlB,MAAMA,GAAG,MAAM,OAAOC,IAAIiB,GAAGjB,MAAMA,GAAG,MAAM,OAAOC,IAAIgB,GAAGhB,MAAMA,GAAG,MAAMC,GAAGj4X,QAAQk5X,IAAIhB,GAAGl4X,QAAQk5X,GAAI,CACpf,SAAStnW,GAAGnqB,EAAE8J,GAAG9J,EAAE+wX,YAAYjnX,IAAI9J,EAAE+wX,UAAU,KAAKZ,KAAKA,IAAG,EAAGlN,EAAGyK,0BAA0BzK,EAAGqL,wBAAwBoD,KAAM,CAC7H,SAASrnW,GAAGrqB,GAAG,SAAS8J,EAAEA,GAAG,OAAOqgB,GAAGrgB,EAAE9J,EAAG,IAAG,EAAEowX,GAAGt7X,OAAO,CAACq1B,GAAGimW,GAAG,GAAGpwX,GAAG,IAAI,IAAI+J,EAAE,EAAEA,EAAEqmX,GAAGt7X,OAAOiV,IAAI,CAAC,IAAI0E,EAAE2hX,GAAGrmX,GAAG0E,EAAEsiX,YAAY/wX,IAAIyO,EAAEsiX,UAAU,KAAM,CAAC,CAAwF,IAAxF,OAAOV,IAAIlmW,GAAGkmW,GAAGrwX,GAAG,OAAOswX,IAAInmW,GAAGmmW,GAAGtwX,GAAG,OAAOuwX,IAAIpmW,GAAGomW,GAAGvwX,GAAGwwX,GAAGj4X,QAAQuR,GAAG2mX,GAAGl4X,QAAQuR,GAAOC,EAAE,EAAEA,EAAE2mX,GAAG57X,OAAOiV,KAAI0E,EAAEiiX,GAAG3mX,IAAKgnX,YAAY/wX,IAAIyO,EAAEsiX,UAAU,MAAM,KAAK,EAAEL,GAAG57X,QAAiB,QAARiV,EAAE2mX,GAAG,IAAYK,WAAYI,GAAGpnX,GAAG,OAAOA,EAAEgnX,WAAWL,GAAGpjS,OAAQ,KAAIqkS,GAAG9gC,EAAG+gC,wBAAwB1+E,IAAG,EAC5a,SAAS2+E,GAAG7xX,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAEg0L,GAAExiL,EAAEijX,GAAGj1X,WAAWi1X,GAAGj1X,WAAW,KAAK,IAAIw0L,GAAE,EAAE4gM,GAAG9xX,EAAE8J,EAAEC,EAAE0E,EAA+B,CAAhD,QAA4ByiL,GAAEh0L,EAAEy0X,GAAGj1X,WAAWgS,CAAE,CAAC,UAASqjX,GAAG/xX,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAEg0L,GAAExiL,EAAEijX,GAAGj1X,WAAWi1X,GAAGj1X,WAAW,KAAK,IAAIw0L,GAAE,EAAE4gM,GAAG9xX,EAAE8J,EAAEC,EAAE0E,EAA+B,CAAhD,QAA4ByiL,GAAEh0L,EAAEy0X,GAAGj1X,WAAWgS,CAAE,CAAC,CAClO,SAASojX,GAAG9xX,EAAE8J,EAAEC,EAAE0E,GAAG,GAAGykS,GAAG,CAAC,IAAIh2S,EAAEs0X,GAAGxxX,EAAE8J,EAAEC,EAAE0E,GAAG,GAAG,OAAOvR,EAAE80X,GAAGhyX,EAAE8J,EAAE2E,EAAE1X,GAAGgT,GAAG6mX,GAAG5wX,EAAEyO,QAAQ,GANtF,SAAYzO,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,OAAO4M,GAAG,IAAK,UAAU,OAAOumX,GAAGQ,GAAGR,GAAGrwX,EAAE8J,EAAEC,EAAE0E,EAAEvR,IAAG,EAAG,IAAK,YAAY,OAAOozX,GAAGO,GAAGP,GAAGtwX,EAAE8J,EAAEC,EAAE0E,EAAEvR,IAAG,EAAG,IAAK,YAAY,OAAOqzX,GAAGM,GAAGN,GAAGvwX,EAAE8J,EAAEC,EAAE0E,EAAEvR,IAAG,EAAG,IAAK,cAAc,IAAIwR,EAAExR,EAAEgjH,UAAkD,OAAxCswQ,GAAG7vX,IAAI+N,EAAEmiX,GAAGL,GAAG9vX,IAAIgO,IAAI,KAAK1O,EAAE8J,EAAEC,EAAE0E,EAAEvR,KAAU,EAAG,IAAK,oBAAoB,OAAOwR,EAAExR,EAAEgjH,UAAUuwQ,GAAG9vX,IAAI+N,EAAEmiX,GAAGJ,GAAG/vX,IAAIgO,IAAI,KAAK1O,EAAE8J,EAAEC,EAAE0E,EAAEvR,KAAI,EAAG,OAAM,CAAG,CAM3Q+0X,CAAG/0X,EAAE8C,EAAE8J,EAAEC,EAAE0E,GAAGA,EAAEyjX,uBAAuB,GAAGtB,GAAG5wX,EAAEyO,GAAK,EAAF3E,IAAM,EAAE6mX,GAAG33X,QAAQgH,GAAG,CAAC,KAAK,OAAO9C,GAAG,CAAC,IAAIwR,EAAEm9W,GAAG3uX,GAA0D,GAAvD,OAAOwR,GAAGohX,GAAGphX,GAAiB,QAAdA,EAAE8iX,GAAGxxX,EAAE8J,EAAEC,EAAE0E,KAAaujX,GAAGhyX,EAAE8J,EAAE2E,EAAE1X,GAAGgT,GAAM2E,IAAIxR,EAAE,MAAMA,EAAEwR,CAAE,QAAOxR,GAAGuR,EAAEyjX,iBAAkB,MAAKF,GAAGhyX,EAAE8J,EAAE2E,EAAE,KAAK1E,EAAG,CAAC,KAAIhT,GAAG,KACpU,SAASy6X,GAAGxxX,EAAE8J,EAAEC,EAAE0E,GAA2B,GAAxB1X,GAAG,KAAwB,QAAXiJ,EAAEoxX,GAAVpxX,EAAEqrX,GAAG58W,KAAuB,GAAW,QAAR3E,EAAEkjX,GAAGhtX,IAAYA,EAAE,UAAU,GAAW,MAAR+J,EAAED,EAAEqjJ,KAAW,CAAS,GAAG,QAAXntJ,EAAEmtX,GAAGrjX,IAAe,OAAO9J,EAAEA,EAAE,IAAK,MAAK,GAAG,IAAI+J,EAAE,CAAC,GAAGD,EAAEgiX,UAAUrwX,QAAQ2xX,cAAciE,aAAa,OAAO,IAAIvnX,EAAEqjJ,IAAIrjJ,EAAEgiX,UAAUwF,cAAc,KAAKtxX,EAAE,IAAK,MAAK8J,IAAI9J,IAAIA,EAAE,MAAW,OAALjJ,GAAGiJ,EAAS,IAAK,CAC9S,SAASmyX,GAAGnyX,GAAG,OAAOA,GAAG,IAAK,SAAS,IAAK,QAAQ,IAAK,QAAQ,IAAK,cAAc,IAAK,OAAO,IAAK,MAAM,IAAK,WAAW,IAAK,WAAW,IAAK,UAAU,IAAK,YAAY,IAAK,OAAO,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,UAAU,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,YAAY,IAAK,UAAU,IAAK,QAAQ,IAAK,QAAQ,IAAK,OAAO,IAAK,gBAAgB,IAAK,cAAc,IAAK,YAAY,IAAK,aAAa,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,SAAS,IAAK,cAAc,IAAK,WAAW,IAAK,aAAa,IAAK,eAAe,IAAK,SAAS,IAAK,kBAAkB,IAAK,YAAY,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,oBAAoB,IAAK,aAAa,IAAK,YAAY,IAAK,cAAc,IAAK,OAAO,IAAK,mBAAmB,IAAK,QAAQ,IAAK,aAAa,IAAK,WAAW,IAAK,SAAS,IAAK,cAAc,OAAO,EAAE,IAAK,OAAO,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,SAAS,IAAK,SAAS,IAAK,YAAY,IAAK,QAAQ,IAAK,aAAa,IAAK,aAAa,IAAK,eAAe,IAAK,eAAe,OAAO,EACpqC,IAAK,UAAU,OAAOmiK,MAAM,KAAK8rN,GAAG,OAAO,EAAE,KAAKE,GAAG,OAAO,EAAE,KAAKE,GAAG,KAAKpsH,GAAG,OAAO,GAAG,KAAKusH,GAAG,OAAO,UAAU,QAAQ,OAAO,GAAG,QAAQ,OAAO,GAAI,KAAI4D,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,KAAK,GAAGD,GAAG,OAAOA,GAAG,IAAItyX,EAAkByO,EAAhB3E,EAAEuoX,GAAGtoX,EAAED,EAAEhV,OAASoI,EAAE,UAAUk1X,GAAGA,GAAGv9X,MAAMu9X,GAAG9K,YAAY54W,EAAExR,EAAEpI,OAAO,IAAIkL,EAAE,EAAEA,EAAE+J,GAAGD,EAAE9J,KAAK9C,EAAE8C,GAAGA,KAAK,IAAI2O,EAAE5E,EAAE/J,EAAE,IAAIyO,EAAE,EAAEA,GAAGE,GAAG7E,EAAEC,EAAE0E,KAAKvR,EAAEwR,EAAED,GAAGA,KAAK,OAAO6jX,GAAGp1X,EAAE2I,MAAM7F,EAAE,EAAEyO,EAAE,EAAEA,OAAE,EAAQ,CACzY,SAAS+jX,GAAGxyX,GAAG,IAAI8J,EAAE9J,EAAEyyX,QAA+E,MAAvE,aAAazyX,EAAgB,KAAbA,EAAEA,EAAE0yX,WAAgB,KAAK5oX,IAAI9J,EAAE,IAAKA,EAAE8J,EAAE,KAAK9J,IAAIA,EAAE,IAAW,IAAIA,GAAG,KAAKA,EAAEA,EAAE,CAAE,UAAS2yX,KAAK,OAAM,CAAG,UAAShkC,KAAK,OAAM,CAAG,CAC7K,SAASikC,GAAG5yX,GAAG,SAAS8J,EAAEA,EAAE2E,EAAEvR,EAAEwR,EAAEC,GAA6G,IAAI,IAAI5E,KAAlH7T,KAAK28X,WAAW/oX,EAAE5T,KAAK48X,YAAY51X,EAAEhH,KAAKqH,KAAKkR,EAAEvY,KAAK46X,YAAYpiX,EAAExY,KAAKkC,OAAOuW,EAAEzY,KAAKiH,cAAc,KAAkB6C,EAAEA,EAAEikK,eAAel6J,KAAKD,EAAE9J,EAAE+J,GAAG7T,KAAK6T,GAAGD,EAAEA,EAAE4E,GAAGA,EAAE3E,IAAgI,OAA5H7T,KAAK68X,oBAAoB,MAAMrkX,EAAEskX,iBAAiBtkX,EAAEskX,kBAAiB,IAAKtkX,EAAEm9O,aAAa8mI,GAAGhkC,GAAGz4V,KAAK+8X,qBAAqBtkC,GAAUz4V,IAAK,CAC/E,OAD+E8yN,EAAEl/M,EAAE1J,UAAU,CAACqtF,eAAe,WAAWv3F,KAAK88X,kBAAiB,EAAG,IAAIhzX,EAAE9J,KAAK46X,YAAY9wX,IAAIA,EAAEytF,eAAeztF,EAAEytF,iBAAiB,mBAAmBztF,EAAE6rP,cAC7e7rP,EAAE6rP,aAAY,GAAI31P,KAAK68X,mBAAmBJ,GAAI,EAACT,gBAAgB,WAAW,IAAIlyX,EAAE9J,KAAK46X,YAAY9wX,IAAIA,EAAEkyX,gBAAgBlyX,EAAEkyX,kBAAkB,mBAAmBlyX,EAAEkzX,eAAelzX,EAAEkzX,cAAa,GAAIh9X,KAAK+8X,qBAAqBN,GAAI,EAACQ,QAAQ,WAAY,EAACC,aAAaT,KAAY7oX,CAAE,CAClR,IAAoLupX,GAAGC,GAAGC,GAAtLC,GAAG,CAACC,WAAW,EAAEC,QAAQ,EAAExsI,WAAW,EAAEmoF,UAAU,SAASrvU,GAAG,OAAOA,EAAEqvU,WAAW30U,KAAKC,KAAM,EAACq4X,iBAAiB,EAAEW,UAAU,GAAGzmQ,GAAG0lQ,GAAGY,IAAII,GAAG5qK,EAAE,CAAC,EAAEwqK,GAAG,CAACxrV,KAAK,EAAEusD,OAAO,IAAIs/R,GAAGjB,GAAGgB,IAAaE,GAAG9qK,EAAE,CAAC,EAAE4qK,GAAG,CAACG,QAAQ,EAAEC,QAAQ,EAAEx2X,QAAQ,EAAEE,QAAQ,EAAE+hH,MAAM,EAAEC,MAAM,EAAEe,QAAQ,EAAEE,SAAS,EAAEszQ,OAAO,EAAEvzQ,QAAQ,EAAEwzQ,iBAAiBC,GAAG5zQ,OAAO,EAAE6zQ,QAAQ,EAAEC,cAAc,SAASr0X,GAAG,YAAO,IAASA,EAAEq0X,cAAcr0X,EAAEs0X,cAAct0X,EAAEsrX,WAAWtrX,EAAEu0X,UAAUv0X,EAAEs0X,YAAYt0X,EAAEq0X,aAAc,EAACG,UAAU,SAASx0X,GAAG,MAAG,cAC3eA,EAASA,EAAEw0X,WAAUx0X,IAAIuzX,KAAKA,IAAI,cAAcvzX,EAAEzC,MAAM81X,GAAGrzX,EAAE+zX,QAAQR,GAAGQ,QAAQT,GAAGtzX,EAAEg0X,QAAQT,GAAGS,SAASV,GAAGD,GAAG,EAAEE,GAAGvzX,GAAUqzX,GAAG,EAACoB,UAAU,SAASz0X,GAAG,MAAM,cAAcA,EAAEA,EAAEy0X,UAAUnB,EAAG,IAAGoB,GAAG9B,GAAGkB,IAAiCa,GAAG/B,GAA7B5pK,EAAE,CAAC,EAAE8qK,GAAG,CAACc,aAAa,KAA4CC,GAAGjC,GAA9B5pK,EAAE,CAAC,EAAE4qK,GAAG,CAACS,cAAc,KAA0ES,GAAGlC,GAA5D5pK,EAAE,CAAC,EAAEwqK,GAAG,CAACuB,cAAc,EAAE3rR,YAAY,EAAE4rR,cAAc,KAAcC,GAAGjsK,EAAE,CAAC,EAAEwqK,GAAG,CAAC0B,cAAc,SAASl1X,GAAG,MAAM,kBAAkBA,EAAEA,EAAEk1X,cAAcn8X,OAAOm8X,aAAc,IAAGC,GAAGvC,GAAGqC,IAAyBG,GAAGxC,GAArB5pK,EAAE,CAAC,EAAEwqK,GAAG,CAAC9+W,KAAK,KAAc2gX,GAAG,CAACC,IAAI,SACxfC,SAAS,IAAIC,KAAK,YAAYC,GAAG,UAAUC,MAAM,aAAaC,KAAK,YAAYC,IAAI,SAASC,IAAI,KAAKC,KAAK,cAAcC,KAAK,cAAcC,OAAO,aAAaC,gBAAgB,gBAAgBC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KACtf,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,UAAU,IAAI,aAAa,IAAI,QAAQC,GAAG,CAACC,IAAI,SAASC,QAAQ,UAAUC,KAAK,UAAUC,MAAM,YAAY,SAASC,GAAGx2X,GAAG,IAAI8J,EAAE5T,KAAK46X,YAAY,OAAOhnX,EAAEoqX,iBAAiBpqX,EAAEoqX,iBAAiBl0X,MAAIA,EAAEm2X,GAAGn2X,OAAM8J,EAAE9J,EAAM,UAASm0X,KAAK,OAAOqC,EAAG,CACjS,IAAIC,GAAGztK,EAAE,CAAC,EAAE4qK,GAAG,CAACz8X,IAAI,SAAS6I,GAAG,GAAGA,EAAE7I,IAAI,CAAC,IAAI2S,EAAEurX,GAAGr1X,EAAE7I,MAAM6I,EAAE7I,IAAI,GAAG,iBAAiB2S,EAAE,OAAOA,CAAE,OAAM,aAAa9J,EAAEzC,KAAc,MAARyC,EAAEwyX,GAAGxyX,IAAU,QAAQ2jC,OAAO2kE,aAAatoG,GAAI,YAAYA,EAAEzC,MAAM,UAAUyC,EAAEzC,KAAK24X,GAAGl2X,EAAEyyX,UAAU,eAAe,EAAG,EAACvyT,KAAK,EAAE9e,SAAS,EAAEq/D,QAAQ,EAAEE,SAAS,EAAEszQ,OAAO,EAAEvzQ,QAAQ,EAAEnqG,OAAO,EAAE4kL,OAAO,EAAE+4L,iBAAiBC,GAAGzB,SAAS,SAAS1yX,GAAG,MAAM,aAAaA,EAAEzC,KAAKi1X,GAAGxyX,GAAG,CAAE,EAACyyX,QAAQ,SAASzyX,GAAG,MAAM,YAAYA,EAAEzC,MAAM,UAAUyC,EAAEzC,KAAKyC,EAAEyyX,QAAQ,CAAE,EAACiE,MAAM,SAAS12X,GAAG,MAAM,aAC7eA,EAAEzC,KAAKi1X,GAAGxyX,GAAG,YAAYA,EAAEzC,MAAM,UAAUyC,EAAEzC,KAAKyC,EAAEyyX,QAAQ,CAAE,IAAGkE,GAAG/D,GAAG6D,IAAiIG,GAAGhE,GAA7H5pK,EAAE,CAAC,EAAE8qK,GAAG,CAAC5zQ,UAAU,EAAEpsG,MAAM,EAAEC,OAAO,EAAE8iX,SAAS,EAAEC,mBAAmB,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAE72Q,YAAY,EAAE82Q,UAAU,KAAmIC,GAAGvE,GAArH5pK,EAAE,CAAC,EAAE4qK,GAAG,CAACn2X,QAAQ,EAAE25X,cAAc,EAAEC,eAAe,EAAEpD,OAAO,EAAEvzQ,QAAQ,EAAED,QAAQ,EAAEE,SAAS,EAAEuzQ,iBAAiBC,MAA0EmD,GAAG1E,GAA3D5pK,EAAE,CAAC,EAAEwqK,GAAG,CAACryR,aAAa,EAAEiI,YAAY,EAAE4rR,cAAc,KAAcuC,GAAGvuK,EAAE,CAAC,EAAE8qK,GAAG,CAAC90Q,OAAO,SAASh/G,GAAG,MAAM,WAAWA,EAAEA,EAAEg/G,OAAO,gBAAgBh/G,GAAGA,EAAEw3X,YAAY,CAAE,EACpfv4Q,OAAO,SAASj/G,GAAG,MAAM,WAAWA,EAAEA,EAAEi/G,OAAO,gBAAgBj/G,GAAGA,EAAEy3X,YAAY,eAAez3X,GAAGA,EAAE03X,WAAW,CAAE,EAACC,OAAO,EAAEC,UAAU,IAAIC,GAAGjF,GAAG2E,IAAIO,GAAG,CAAC,EAAE,GAAG,GAAG,IAAIzqX,GAAGg2W,GAAI,qBAAqBtqX,OAAOuU,GAAG,KAAK+1W,GAAI,iBAAiB1pX,WAAW2T,GAAG3T,SAASo+X,cAAc,IAAIjuW,GAAGu5V,GAAI,cAActqX,SAASuU,GAAG0c,GAAGq5V,KAAMh2W,IAAIC,IAAI,EAAEA,IAAI,IAAIA,IAAIiyJ,GAAG57H,OAAO2kE,aAAa,IAAI0vR,IAAG,EAC1W,SAASC,GAAGj4X,EAAE8J,GAAG,OAAO9J,GAAG,IAAK,QAAQ,OAAO,IAAI83X,GAAG9+X,QAAQ8Q,EAAE2oX,SAAS,IAAK,UAAU,OAAO,MAAM3oX,EAAE2oX,QAAQ,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,OAAM,EAAG,QAAQ,OAAM,EAAI,UAASyF,GAAGl4X,GAAc,MAAM,kBAAjBA,EAAEA,EAAEu0F,SAAkC,SAASv0F,EAAEA,EAAE0U,KAAK,IAAK,KAAI6xM,IAAG,EAE9Q,IAAI4xK,GAAG,CAAC1+X,OAAM,EAAGy9K,MAAK,EAAG6qD,UAAS,EAAG,kBAAiB,EAAGnqD,OAAM,EAAGR,OAAM,EAAGrkB,QAAO,EAAG4oC,UAAS,EAAGtyL,OAAM,EAAGmrH,QAAO,EAAG4jQ,KAAI,EAAGtyR,MAAK,EAAGlrG,MAAK,EAAGua,KAAI,EAAGkjX,MAAK,GAAI,SAAStrX,GAAG/M,GAAG,IAAI8J,EAAE9J,GAAGA,EAAEotG,UAAUptG,EAAEotG,SAAS3mG,cAAc,MAAM,UAAUqD,IAAIquX,GAAGn4X,EAAEzC,MAAM,aAAauM,CAAQ,UAASwuX,GAAGt4X,EAAE8J,EAAEC,EAAE0E,GAAGu9W,GAAGv9W,GAAsB,GAAnB3E,EAAEyuX,GAAGzuX,EAAE,aAAgBhV,SAASiV,EAAE,IAAImjH,GAAG,WAAW,SAAS,KAAKnjH,EAAE0E,GAAGzO,EAAEpL,KAAK,CAAC+Q,MAAMoE,EAAExE,UAAUuE,IAAK,KAAI0uX,GAAG,KAAKC,GAAG,KAAK,SAASn8K,GAAGt8M,GAAG04X,GAAG14X,EAAE,EAAG,UAAS8M,GAAG9M,GAAe,GAAGsmX,EAATqS,GAAG34X,IAAY,OAAOA,CAAE,CACre,SAAS44X,GAAG54X,EAAE8J,GAAG,GAAG,WAAW9J,EAAE,OAAO8J,CAAE,KAAI+uX,IAAG,EAAG,GAAGxV,EAAG,CAAC,IAAIyV,GAAG,GAAGzV,EAAG,CAAC,IAAI0V,GAAG,YAAYp/X,SAAS,IAAIo/X,GAAG,CAAC,IAAIC,GAAGr/X,SAASy0O,cAAc,OAAO4qJ,GAAG/5V,aAAa,UAAU,WAAW85V,GAAG,oBAAoBC,GAAGC,OAAQ,CAAAH,GAAGC,EAAG,MAAKD,IAAG,EAAGD,GAAGC,MAAMn/X,SAASo+X,cAAc,EAAEp+X,SAASo+X,aAAc,UAASmB,KAAKV,KAAKA,GAAGW,YAAY,mBAAmBC,IAAIX,GAAGD,GAAG,KAAM,UAASY,GAAGp5X,GAAG,GAAG,UAAUA,EAAEmhG,cAAcr0F,GAAG2rX,IAAI,CAAC,IAAI3uX,EAAE,GAAGwuX,GAAGxuX,EAAE2uX,GAAGz4X,EAAEqrX,GAAGrrX,IAAIqsX,GAAG/vK,GAAGxyM,EAAG,CAAC,CAChc,SAASuvX,GAAGr5X,EAAE8J,EAAEC,GAAG,YAAY/J,GAAGk5X,KAAUT,GAAG1uX,GAARyuX,GAAG1uX,GAAUwvX,YAAY,mBAAmBF,KAAK,aAAap5X,GAAGk5X,IAAK,UAASK,GAAGv5X,GAAG,GAAG,oBAAoBA,GAAG,UAAUA,GAAG,YAAYA,EAAE,OAAO8M,GAAG2rX,GAAI,UAASe,GAAGx5X,EAAE8J,GAAG,GAAG,UAAU9J,EAAE,OAAO8M,GAAGhD,EAAG,UAAS2vX,GAAGz5X,EAAE8J,GAAG,GAAG,UAAU9J,GAAG,WAAWA,EAAE,OAAO8M,GAAGhD,EAAG,CAAgE,IAAI4vX,GAAG,oBAAoBtiY,OAAOw7N,GAAGx7N,OAAOw7N,GAA5G,SAAY5yN,EAAE8J,GAAG,OAAO9J,IAAI8J,IAAI,IAAI9J,GAAG,EAAEA,IAAI,EAAE8J,IAAI9J,IAAIA,GAAG8J,IAAIA,CAAE,EACvW,SAAS6vX,GAAG35X,EAAE8J,GAAG,GAAG4vX,GAAG15X,EAAE8J,GAAG,OAAM,EAAG,GAAG,kBAAkB9J,GAAG,OAAOA,GAAG,kBAAkB8J,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAIC,EAAE3S,OAAOQ,KAAKoI,GAAGyO,EAAErX,OAAOQ,KAAKkS,GAAG,GAAGC,EAAEjV,SAAS2Z,EAAE3Z,OAAO,OAAM,EAAG,IAAI2Z,EAAE,EAAEA,EAAE1E,EAAEjV,OAAO2Z,IAAI,CAAC,IAAIvR,EAAE6M,EAAE0E,GAAG,IAAIiqJ,EAAGjkK,KAAKqV,EAAE5M,KAAKw8X,GAAG15X,EAAE9C,GAAG4M,EAAE5M,IAAI,OAAM,CAAG,QAAM,CAAG,UAAS08X,GAAG55X,GAAG,KAAKA,GAAGA,EAAE4nX,YAAY5nX,EAAEA,EAAE4nX,WAAW,OAAO5nX,CAAE,CACvU,SAAS65X,GAAG75X,EAAE8J,GAAG,IAAwB2E,EAApB1E,EAAE6vX,GAAG55X,GAAO,IAAJA,EAAE,EAAY+J,GAAG,CAAC,GAAG,IAAIA,EAAEm+W,SAAS,CAA0B,GAAzBz5W,EAAEzO,EAAE+J,EAAEu9W,YAAYxyX,OAAUkL,GAAG8J,GAAG2E,GAAG3E,EAAE,MAAM,CAACojG,KAAKnjG,EAAElU,OAAOiU,EAAE9J,GAAGA,EAAEyO,CAAE,CAAAzO,EAAE,CAAC,KAAK+J,GAAG,CAAC,GAAGA,EAAE+vX,YAAY,CAAC/vX,EAAEA,EAAE+vX,YAAY,MAAM95X,CAAE,CAAA+J,EAAEA,EAAEyhX,UAAW,CAAAzhX,OAAE,CAAO,CAAAA,EAAE6vX,GAAG7vX,EAAG,CAAC,UAASgwX,GAAG/5X,EAAE8J,GAAG,SAAO9J,IAAG8J,KAAE9J,IAAI8J,KAAK9J,GAAG,IAAIA,EAAEkoX,YAAYp+W,GAAG,IAAIA,EAAEo+W,SAAS6R,GAAG/5X,EAAE8J,EAAE0hX,YAAY,aAAaxrX,EAAEA,EAAE8mL,SAASh9K,KAAG9J,EAAEg6X,4BAAwD,GAA7Bh6X,EAAEg6X,wBAAwBlwX,KAAa,CAC/Z,SAASmwX,KAAK,IAAI,IAAIj6X,EAAEjH,OAAO+Q,EAAEy8W,IAAKz8W,aAAa9J,EAAEk6X,mBAAmB,CAAC,IAAI,IAAInwX,EAAE,kBAAkBD,EAAEqwX,cAAc/4U,SAAS0+E,IAAmB,CAAd,MAAMrxH,GAAG1E,GAAE,CAAG,KAAGA,EAAyB,MAAMD,EAAEy8W,GAA/BvmX,EAAE8J,EAAEqwX,eAAgCxgY,SAAU,QAAOmQ,CAAE,UAASswX,GAAGp6X,GAAG,IAAI8J,EAAE9J,GAAGA,EAAEotG,UAAUptG,EAAEotG,SAAS3mG,cAAc,OAAOqD,IAAI,UAAUA,IAAI,SAAS9J,EAAEzC,MAAM,WAAWyC,EAAEzC,MAAM,QAAQyC,EAAEzC,MAAM,QAAQyC,EAAEzC,MAAM,aAAayC,EAAEzC,OAAO,aAAauM,GAAG,SAAS9J,EAAEq6X,gBAAiB,CACza,SAASC,GAAGt6X,GAAG,IAAI8J,EAAEmwX,KAAKlwX,EAAE/J,EAAEu6X,YAAY9rX,EAAEzO,EAAEw6X,eAAe,GAAG1wX,IAAIC,GAAGA,GAAGA,EAAEg9W,eAAegT,GAAGhwX,EAAEg9W,cAAcntX,gBAAgBmQ,GAAG,CAAC,GAAG,OAAO0E,GAAG2rX,GAAGrwX,GAAG,GAAGD,EAAE2E,EAAE4vB,WAAc,KAARr+B,EAAEyO,EAAE88B,OAAiBvrC,EAAE8J,GAAG,mBAAmBC,EAAEA,EAAE0wX,eAAe3wX,EAAEC,EAAE2wX,aAAar+X,KAAKC,IAAI0D,EAAE+J,EAAElV,MAAMC,aAAa,IAAGkL,GAAG8J,EAAEC,EAAEg9W,eAAeptX,WAAWmQ,EAAE6wX,aAAa5hY,QAAS6hY,aAAa,CAAC56X,EAAEA,EAAE46X,eAAe,IAAI19X,EAAE6M,EAAEu9W,YAAYxyX,OAAO4Z,EAAErS,KAAKC,IAAImS,EAAE4vB,MAAMnhC,GAAGuR,OAAE,IAASA,EAAE88B,IAAI78B,EAAErS,KAAKC,IAAImS,EAAE88B,IAAIruC,IAAI8C,EAAEgoO,QAAQt5N,EAAED,IAAIvR,EAAEuR,EAAEA,EAAEC,EAAEA,EAAExR,GAAGA,EAAE28X,GAAG9vX,EAAE2E,GAAG,IAAIC,EAAEkrX,GAAG9vX,EACvf0E,GAAGvR,GAAGyR,IAAI,IAAI3O,EAAE2vF,YAAY3vF,EAAE66X,aAAa39X,EAAEgwG,MAAMltG,EAAE86X,eAAe59X,EAAErH,QAAQmK,EAAE+6X,YAAYpsX,EAAEu+F,MAAMltG,EAAEg7X,cAAcrsX,EAAE9Y,WAAUiU,EAAEA,EAAEmxX,eAAgBC,SAASh+X,EAAEgwG,KAAKhwG,EAAErH,QAAQmK,EAAEm7X,kBAAkBzsX,EAAED,GAAGzO,EAAEo7X,SAAStxX,GAAG9J,EAAEgoO,OAAOr5N,EAAEu+F,KAAKv+F,EAAE9Y,UAAUiU,EAAEuxX,OAAO1sX,EAAEu+F,KAAKv+F,EAAE9Y,QAAQmK,EAAEo7X,SAAStxX,IAAK,CAAK,IAALA,EAAE,GAAO9J,EAAE+J,EAAE/J,EAAEA,EAAEwrX,YAAY,IAAIxrX,EAAEkoX,UAAUp+W,EAAElV,KAAK,CAACoH,QAAQgE,EAAE3F,KAAK2F,EAAEs7X,WAAWlhY,IAAI4F,EAAEu7X,YAAmD,IAAvC,oBAAoBxxX,EAAEg+B,OAAOh+B,EAAEg+B,QAAYh+B,EAAE,EAAEA,EAAED,EAAEhV,OAAOiV,KAAI/J,EAAE8J,EAAEC,IAAK/N,QAAQs/X,WAAWt7X,EAAE3F,KAAK2F,EAAEhE,QAAQu/X,UAAUv7X,EAAE5F,GAAI,CAAC,CAC1f,IAAIohY,GAAGnY,GAAI,iBAAiB1pX,UAAU,IAAIA,SAASo+X,aAAa0D,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,IAAG,EAC3F,SAASC,GAAG77X,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE1E,EAAEhR,SAASgR,EAAEA,EAAEpQ,SAAS,IAAIoQ,EAAEm+W,SAASn+W,EAAEA,EAAEg9W,cAAc6U,IAAI,MAAMH,IAAIA,KAAKlV,EAAG93W,KAAU,mBAALA,EAAEgtX,KAAyBrB,GAAG3rX,GAAGA,EAAE,CAAC4vB,MAAM5vB,EAAEgsX,eAAelvV,IAAI98B,EAAEisX,cAAuFjsX,EAAE,CAACosX,YAA3EpsX,GAAGA,EAAEs4W,eAAet4W,EAAEs4W,cAAc4T,aAAa5hY,QAAQ6hY,gBAA+BC,WAAWC,aAAarsX,EAAEqsX,aAAaC,UAAUtsX,EAAEssX,UAAUC,YAAYvsX,EAAEusX,aAAcW,IAAIhC,GAAGgC,GAAGltX,KAAKktX,GAAGltX,EAAsB,GAApBA,EAAE8pX,GAAGmD,GAAG,aAAgB5mY,SAASgV,EAAE,IAAIojH,GAAG,WAAW,SAAS,KAAKpjH,EAAEC,GAAG/J,EAAEpL,KAAK,CAAC+Q,MAAMmE,EAAEvE,UAAUkJ,IAAI3E,EAAE1R,OAAOqjY,KAAM,CACvf,SAASK,GAAG97X,EAAE8J,GAAG,IAAIC,EAAE,CAAC,EAAiF,OAA/EA,EAAE/J,EAAEyG,eAAeqD,EAAErD,cAAcsD,EAAE,SAAS/J,GAAG,SAAS8J,EAAEC,EAAE,MAAM/J,GAAG,MAAM8J,EAASC,CAAE,KAAIgyX,GAAG,CAACC,aAAaF,GAAG,YAAY,gBAAgBG,mBAAmBH,GAAG,YAAY,sBAAsBI,eAAeJ,GAAG,YAAY,kBAAkBK,cAAcL,GAAG,aAAa,kBAAkBM,GAAG,CAAC,EAAEC,GAAG,CAAC,EACpF,SAASC,GAAGt8X,GAAG,GAAGo8X,GAAGp8X,GAAG,OAAOo8X,GAAGp8X,GAAG,IAAI+7X,GAAG/7X,GAAG,OAAOA,EAAE,IAAY+J,EAARD,EAAEiyX,GAAG/7X,GAAK,IAAI+J,KAAKD,EAAE,GAAGA,EAAEm6J,eAAel6J,IAAIA,KAAKsyX,GAAG,OAAOD,GAAGp8X,GAAG8J,EAAEC,GAAG,OAAO/J,CAAE,CAAhYqjX,IAAKgZ,GAAG1iY,SAASy0O,cAAc,OAAO13O,MAAM,mBAAmBqC,gBAAgBgjY,GAAGC,aAAavpW,iBAAiBspW,GAAGE,mBAAmBxpW,iBAAiBspW,GAAGG,eAAezpW,WAAW,oBAAoB15B,eAAegjY,GAAGI,cAAcz/X,YAAwJ,IAAI6/X,GAAGD,GAAG,gBAAgB1yW,GAAG0yW,GAAG,sBAAsBzyW,GAAGyyW,GAAG,kBAAkBvyW,GAAGuyW,GAAG,iBAAiBryW,GAAG,IAAI1pB,IAAIi8X,GAAG,smBAAsmB3kU,MAAM,KAC/lC,SAAS4kU,GAAGz8X,EAAE8J,GAAGmgB,GAAGtpB,IAAIX,EAAE8J,GAAGq5W,EAAGr5W,EAAE,CAAC9J,GAAI,KAAI,IAAI08X,GAAG,EAAEA,GAAGF,GAAG1nY,OAAO4nY,KAAK,CAAC,IAAIC,GAAGH,GAAGE,IAA2DD,GAApDE,GAAGl2X,cAAuD,MAAtCk2X,GAAG,GAAG/kU,cAAc+kU,GAAG92X,MAAM,IAAkB,CAAA42X,GAAGF,GAAG,kBAAkBE,GAAG7yW,GAAG,wBAAwB6yW,GAAG5yW,GAAG,oBAAoB4yW,GAAG,WAAW,iBAAiBA,GAAG,UAAU,WAAWA,GAAG,WAAW,UAAUA,GAAG1yW,GAAG,mBAAmBq5V,EAAG,eAAe,CAAC,WAAW,cAAcA,EAAG,eAAe,CAAC,WAAW,cAAcA,EAAG,iBAAiB,CAAC,aAAa,gBAC7cA,EAAG,iBAAiB,CAAC,aAAa,gBAAgBD,EAAG,WAAW,oEAAoEtrT,MAAM,MAAMsrT,EAAG,WAAW,uFAAuFtrT,MAAM,MAAMsrT,EAAG,gBAAgB,CAAC,iBAAiB,WAAW,YAAY,UAAUA,EAAG,mBAAmB,2DAA2DtrT,MAAM,MAAMsrT,EAAG,qBAAqB,6DAA6DtrT,MAAM,MAC/fsrT,EAAG,sBAAsB,8DAA8DtrT,MAAM,MAAM,IAAI+kU,GAAG,6NAA6N/kU,MAAM,KAAKglU,GAAG,IAAI18T,IAAI,0CAA0CtI,MAAM,KAAKo7E,OAAO2pP,KACzZ,SAASE,GAAG98X,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAEzC,MAAM,gBAAgByC,EAAE7C,cAAc4M,EAlDjE,SAAY/J,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,EAAEC,EAAEq8D,GAA4B,GAAzB8hT,GAAG70X,MAAMhC,KAAKmC,WAAcq0X,GAAG,CAAC,IAAGA,GAAgC,MAAM7kX,MAAM6J,EAAE,MAA1C,IAAI5L,EAAE6mX,GAAGD,IAAG,EAAGC,GAAG,KAA8BC,KAAKA,IAAG,EAAGC,GAAG/mX,EAAG,CAAC,CAkDrEi3X,CAAGtuX,EAAE3E,OAAE,EAAO9J,GAAGA,EAAE7C,cAAc,IAAK,CACzG,SAASu7X,GAAG14X,EAAE8J,GAAGA,EAAE,KAAO,EAAFA,GAAK,IAAI,IAAIC,EAAE,EAAEA,EAAE/J,EAAElL,OAAOiV,IAAI,CAAC,IAAI0E,EAAEzO,EAAE+J,GAAG7M,EAAEuR,EAAE9I,MAAM8I,EAAEA,EAAElJ,UAAUvF,EAAE,CAAC,IAAI0O,OAAE,EAAO,GAAG5E,EAAE,IAAI,IAAI6E,EAAEF,EAAE3Z,OAAO,EAAE,GAAG6Z,EAAEA,IAAI,CAAC,IAAIC,EAAEH,EAAEE,GAAGs8D,EAAEr8D,EAAE3O,SAAS6F,EAAE8I,EAAEzR,cAA2B,GAAbyR,EAAEA,EAAEvJ,SAAY4lE,IAAIv8D,GAAGxR,EAAE+1X,uBAAuB,MAAMjzX,EAAE88X,GAAG5/X,EAAE0R,EAAE9I,GAAG4I,EAAEu8D,CAAE,MAAK,IAAIt8D,EAAE,EAAEA,EAAEF,EAAE3Z,OAAO6Z,IAAI,CAAoD,GAA5Cs8D,GAAPr8D,EAAEH,EAAEE,IAAO1O,SAAS6F,EAAE8I,EAAEzR,cAAcyR,EAAEA,EAAEvJ,SAAY4lE,IAAIv8D,GAAGxR,EAAE+1X,uBAAuB,MAAMjzX,EAAE88X,GAAG5/X,EAAE0R,EAAE9I,GAAG4I,EAAEu8D,CAAE,CAAC,CAAC,IAAG2hT,GAAG,MAAM5sX,EAAE6sX,GAAGD,IAAG,EAAGC,GAAG,KAAK7sX,CAAG,CAC7a,SAASkpN,GAAElpN,EAAE8J,GAAG,IAAIC,EAAED,EAAEkzX,SAAI,IAASjzX,IAAIA,EAAED,EAAEkzX,IAAI,IAAI78T,KAAK,IAAI1xD,EAAEzO,EAAE,WAAW+J,EAAEtJ,IAAIgO,KAAKwuX,GAAGnzX,EAAE9J,EAAE,GAAE,GAAI+J,EAAEkY,IAAIxT,GAAI,UAASyuX,GAAGl9X,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE,EAAE3E,IAAI2E,GAAG,GAAGwuX,GAAGlzX,EAAE/J,EAAEyO,EAAE3E,EAAG,KAAIu7R,GAAG,kBAAkBhpS,KAAKS,SAAS0D,SAAS,IAAIqF,MAAM,GAAG,SAASs3X,GAAGn9X,GAAG,IAAIA,EAAEqlS,IAAI,CAACrlS,EAAEqlS,KAAI,EAAG6O,EAAG37S,SAAQ,SAASuR,GAAG,oBAAoBA,IAAI+yX,GAAGp8X,IAAIqJ,IAAIozX,GAAGpzX,GAAE,EAAG9J,GAAGk9X,GAAGpzX,GAAE,EAAG9J,GAAI,IAAE,IAAI8J,EAAE,IAAI9J,EAAEkoX,SAASloX,EAAEA,EAAE+mX,cAAc,OAAOj9W,GAAGA,EAAEu7R,MAAMv7R,EAAEu7R,KAAI,EAAG63F,GAAG,mBAAkB,EAAGpzX,GAAI,CAAC,CAClb,SAASmzX,GAAGj9X,EAAE8J,EAAEC,EAAE0E,GAAG,OAAO0jX,GAAGroX,IAAI,KAAK,EAAE,IAAI5M,EAAE20X,GAAG,MAAM,KAAK,EAAE30X,EAAE60X,GAAG,MAAM,QAAQ70X,EAAE40X,GAAG/nX,EAAE7M,EAAE6C,KAAK,KAAK+J,EAAEC,EAAE/J,GAAG9C,OAAE,GAAQqvX,IAAI,eAAeziX,GAAG,cAAcA,GAAG,UAAUA,IAAI5M,GAAE,GAAIuR,OAAE,IAASvR,EAAE8C,EAAErC,iBAAiBmM,EAAEC,EAAE,CAACqzX,SAAQ,EAAG57Q,QAAQtkH,IAAI8C,EAAErC,iBAAiBmM,EAAEC,GAAE,QAAI,IAAS7M,EAAE8C,EAAErC,iBAAiBmM,EAAEC,EAAE,CAACy3G,QAAQtkH,IAAI8C,EAAErC,iBAAiBmM,EAAEC,GAAE,EAAI,CACnV,SAASioX,GAAGhyX,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,IAAIwR,EAAED,EAAE,GAAG,KAAO,EAAF3E,IAAM,KAAO,EAAFA,IAAM,OAAO2E,EAAEzO,EAAE,OAAO,CAAC,GAAG,OAAOyO,EAAE,OAAO,IAAIE,EAAEF,EAAE0+I,IAAI,GAAG,IAAIx+I,GAAG,IAAIA,EAAE,CAAC,IAAIC,EAAEH,EAAEq9W,UAAUwF,cAAc,GAAG1iX,IAAI1R,GAAG,IAAI0R,EAAEs5W,UAAUt5W,EAAE48W,aAAatuX,EAAE,MAAM,GAAG,IAAIyR,EAAE,IAAIA,EAAEF,EAAEy+W,OAAO,OAAOv+W,GAAG,CAAC,IAAIs8D,EAAEt8D,EAAEw+I,IAAI,IAAG,IAAIliF,GAAG,IAAIA,MAAKA,EAAEt8D,EAAEm9W,UAAUwF,iBAAkBp0X,GAAG,IAAI+tE,EAAEi9S,UAAUj9S,EAAEugT,aAAatuX,GAAE,OAAOyR,EAAEA,EAAEu+W,MAAO,MAAK,OAAOt+W,GAAG,CAAS,GAAG,QAAXD,EAAEyiX,GAAGxiX,IAAe,OAAe,GAAG,KAAXq8D,EAAEt8D,EAAEw+I,MAAc,IAAIliF,EAAE,CAACx8D,EAAEC,EAAEC,EAAE,SAAS3O,CAAE,CAAA4O,EAAEA,EAAE48W,UAAW,CAAC,CAAA/8W,EAAEA,EAAEy+W,MAAO,CAAAb,IAAG,WAAW,IAAI59W,EAAEC,EAAExR,EAAEmuX,GAAGthX,GAAG4E,EAAE,GACpf3O,EAAE,CAAC,IAAI4O,EAAEqb,GAAGvpB,IAAIV,GAAG,QAAG,IAAS4O,EAAE,CAAC,IAAIq8D,EAAEiiD,GAAGtmH,EAAE5G,EAAE,OAAOA,GAAG,IAAK,WAAW,GAAG,IAAIwyX,GAAGzoX,GAAG,MAAM/J,EAAE,IAAK,UAAU,IAAK,QAAQirE,EAAE0rT,GAAG,MAAM,IAAK,UAAU/vX,EAAE,QAAQqkE,EAAE4pT,GAAG,MAAM,IAAK,WAAWjuX,EAAE,OAAOqkE,EAAE4pT,GAAG,MAAM,IAAK,aAAa,IAAK,YAAY5pT,EAAE4pT,GAAG,MAAM,IAAK,QAAQ,GAAG,IAAI9qX,EAAEw2G,OAAO,MAAMvgH,EAAE,IAAK,WAAW,IAAK,WAAW,IAAK,YAAY,IAAK,YAAY,IAAK,UAAU,IAAK,WAAW,IAAK,YAAY,IAAK,cAAcirE,EAAEypT,GAAG,MAAM,IAAK,OAAO,IAAK,UAAU,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,OAAOzpT,EAC1iB0pT,GAAG,MAAM,IAAK,cAAc,IAAK,WAAW,IAAK,YAAY,IAAK,aAAa1pT,EAAEksT,GAAG,MAAM,KAAKoF,GAAG,KAAK3yW,GAAG,KAAKC,GAAGohD,EAAE6pT,GAAG,MAAM,KAAK/qW,GAAGkhD,EAAEqsT,GAAG,MAAM,IAAK,SAASrsT,EAAE4oT,GAAG,MAAM,IAAK,QAAQ5oT,EAAE4sT,GAAG,MAAM,IAAK,OAAO,IAAK,MAAM,IAAK,QAAQ5sT,EAAEkqT,GAAG,MAAM,IAAK,oBAAoB,IAAK,qBAAqB,IAAK,gBAAgB,IAAK,cAAc,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,YAAYlqT,EAAE2rT,GAAG,IAAI7vX,EAAE,KAAO,EAAF+C,GAAKuzX,GAAGt2X,GAAG,WAAW/G,EAAE9G,EAAE6N,EAAE,OAAO6H,EAAEA,EAAE,UAAU,KAAKA,EAAE7H,EAAE,GAAG,IAAI,IAAQqa,EAAJrJ,EAAEtJ,EAAI,OAC/esJ,GAAG,CAAK,IAAIs5N,GAARjwN,EAAErJ,GAAU+zW,UAAsF,GAA5E,IAAI1qW,EAAE+rI,KAAK,OAAOkkF,IAAIjwN,EAAEiwN,EAAE,OAAOn4O,IAAc,OAAVm4O,EAAEi7I,GAAGv0W,EAAE7e,KAAY6N,EAAEnS,KAAK0oY,GAAGvlX,EAAEs5N,EAAEjwN,MAASi8W,EAAE,MAAMtlX,EAAEA,EAAEm1W,MAAO,GAAEnmX,EAAEjS,SAAS8Z,EAAE,IAAIq8D,EAAEr8D,EAAEhI,EAAE,KAAKmD,EAAE7M,GAAGyR,EAAE/Z,KAAK,CAAC+Q,MAAMiJ,EAAErJ,UAAUwB,IAAK,CAAC,IAAG,KAAO,EAAF+C,GAAK,CAA4E,GAAnCmhE,EAAE,aAAajrE,GAAG,eAAeA,KAAtE4O,EAAE,cAAc5O,GAAG,gBAAgBA,IAA2C+J,IAAIqhX,MAAKxkX,EAAEmD,EAAEsqX,eAAetqX,EAAEuqX,eAAelD,GAAGxqX,KAAIA,EAAE22X,OAAgBtyT,GAAGr8D,KAAGA,EAAE1R,EAAEnE,SAASmE,EAAEA,GAAG0R,EAAE1R,EAAE6pX,eAAen4W,EAAE+rX,aAAa/rX,EAAE4uX,aAAazkY,OAAUkyE,GAAqCA,EAAEx8D,EAAiB,QAAf7H,GAAnCA,EAAEmD,EAAEsqX,eAAetqX,EAAEwqX,WAAkBnD,GAAGxqX,GAAG,QAC9dA,KAARy2X,EAAErQ,GAAGpmX,KAAU,IAAIA,EAAEumJ,KAAK,IAAIvmJ,EAAEumJ,OAAKvmJ,EAAE,QAAUqkE,EAAE,KAAKrkE,EAAE6H,GAAKw8D,IAAIrkE,GAAE,CAAgU,GAA/TG,EAAE2tX,GAAGrjJ,EAAE,eAAen4O,EAAE,eAAe6e,EAAE,QAAW,eAAe/X,GAAG,gBAAgBA,IAAE+G,EAAE6vX,GAAGvlJ,EAAE,iBAAiBn4O,EAAE,iBAAiB6e,EAAE,WAAUslX,EAAE,MAAMpyT,EAAEr8D,EAAE+pX,GAAG1tT,GAAG7pD,EAAE,MAAMxa,EAAEgI,EAAE+pX,GAAG/xX,IAAGgI,EAAE,IAAI7H,EAAEsqO,EAAEt5N,EAAE,QAAQkzD,EAAElhE,EAAE7M,IAAK9E,OAAOilY,EAAEzuX,EAAEylX,cAAcjzW,EAAEiwN,EAAE,KAAK+/I,GAAGl0X,KAAKuR,KAAI1H,EAAE,IAAIA,EAAE7N,EAAE6e,EAAE,QAAQnR,EAAEmD,EAAE7M,IAAK9E,OAAOgpB,EAAEra,EAAEstX,cAAcgJ,EAAEhsJ,EAAEtqO,GAAGs2X,EAAEhsJ,EAAKpmK,GAAGrkE,EAAEkD,EAAE,CAAa,IAAR5Q,EAAE0N,EAAEmR,EAAE,EAAMqJ,EAAhBra,EAAEkkE,EAAkB7pD,EAAEA,EAAEq8W,GAAGr8W,GAAGrJ,IAAQ,IAAJqJ,EAAE,EAAMiwN,EAAEn4O,EAAEm4O,EAAEA,EAAEosJ,GAAGpsJ,GAAGjwN,IAAI,KAAK,EAAErJ,EAAEqJ,GAAGra,EAAE02X,GAAG12X,GAAGgR,IAAI,KAAK,EAAEqJ,EAAErJ,GAAG7e,EACpfukY,GAAGvkY,GAAGkoB,IAAI,KAAKrJ,KAAK,CAAC,GAAGhR,IAAI7N,GAAG,OAAOA,GAAG6N,IAAI7N,EAAE+zX,UAAU,MAAMnjX,EAAE/C,EAAE02X,GAAG12X,GAAG7N,EAAEukY,GAAGvkY,EAAG,CAAA6N,EAAE,IAAK,MAAKA,EAAE,KAAK,OAAOkkE,GAAGyyT,GAAG/uX,EAAEC,EAAEq8D,EAAElkE,GAAE,GAAI,OAAOH,GAAG,OAAOy2X,GAAGK,GAAG/uX,EAAE0uX,EAAEz2X,EAAEG,GAAE,EAAI,CAA6D,GAAG,YAA1CkkE,GAAjBr8D,EAAEH,EAAEkqX,GAAGlqX,GAAG1V,QAAWq0G,UAAUx+F,EAAEw+F,SAAS3mG,gBAA+B,UAAUwkE,GAAG,SAASr8D,EAAErR,KAAK,IAAIogY,EAAG/E,QAAQ,GAAG7rX,GAAG6B,GAAG,GAAGiqX,GAAG8E,EAAGlE,OAAO,CAACkE,EAAGpE,GAAG,IAAIqE,EAAGvE,EAAG,MAAKpuT,EAAEr8D,EAAEw+F,WAAW,UAAUniC,EAAExkE,gBAAgB,aAAamI,EAAErR,MAAM,UAAUqR,EAAErR,QAAQogY,EAAGnE,IACrV,OAD4VmE,IAAKA,EAAGA,EAAG39X,EAAEyO,IAAK6pX,GAAG3pX,EAAEgvX,EAAG5zX,EAAE7M,IAAW0gY,GAAIA,EAAG59X,EAAE4O,EAAEH,GAAG,aAAazO,IAAI49X,EAAGhvX,EAAE+3W,gBAClfiX,EAAG9W,YAAY,WAAWl4W,EAAErR,MAAMgkC,GAAG3yB,EAAE,SAASA,EAAE/Z,QAAO+oY,EAAGnvX,EAAEkqX,GAAGlqX,GAAG1V,OAAciH,GAAG,IAAK,WAAa+M,GAAG6wX,IAAK,SAASA,EAAGvD,mBAAgBoB,GAAGmC,EAAGlC,GAAGjtX,EAAEktX,GAAG,MAAK,MAAM,IAAK,WAAWA,GAAGD,GAAGD,GAAG,KAAK,MAAM,IAAK,YAAYG,IAAG,EAAG,MAAM,IAAK,cAAc,IAAK,UAAU,IAAK,UAAUA,IAAG,EAAGC,GAAGltX,EAAE5E,EAAE7M,GAAG,MAAM,IAAK,kBAAkB,GAAGs+X,GAAG,MAAM,IAAK,UAAU,IAAK,QAAQK,GAAGltX,EAAE5E,EAAE7M,GAAG,IAAI2gY,EAAG,GAAGxwX,GAAGvD,EAAE,CAAC,OAAO9J,GAAG,IAAK,mBAAmB,IAAI4kT,EAAG,qBAAqB,MAAM96S,EAAE,IAAK,iBAAiB86S,EAAG,mBACpe,MAAM96S,EAAE,IAAK,oBAAoB86S,EAAG,sBAAsB,MAAM96S,EAAE86S,OAAG,CAAO,MAAKr+F,GAAG0xK,GAAGj4X,EAAE+J,KAAK66S,EAAG,oBAAoB,YAAY5kT,GAAG,MAAM+J,EAAE0oX,UAAU7tE,EAAG,sBAAsBA,IAAK56R,IAAI,OAAOjgB,EAAEoxL,SAASorB,IAAI,uBAAuBq+F,EAAG,qBAAqBA,GAAIr+F,KAAKs3K,EAAGtL,OAAYF,GAAG,UAARD,GAAGl1X,GAAkBk1X,GAAGv9X,MAAMu9X,GAAG9K,YAAY/gK,IAAG,IAAiB,GAAZq3K,EAAGrF,GAAG9pX,EAAEm2S,IAAS9vT,SAAS8vT,EAAG,IAAIwwE,GAAGxwE,EAAG5kT,EAAE,KAAK+J,EAAE7M,GAAGyR,EAAE/Z,KAAK,CAAC+Q,MAAMi/S,EAAGr/S,UAAUq4X,IAAKC,EAAGj5E,EAAGlwS,KAAKmpX,EAAa,QAATA,EAAG3F,GAAGnuX,MAAe66S,EAAGlwS,KAAKmpX,MAAUA,EAAG/zW,GA5BhM,SAAY9pB,EAAE8J,GAAG,OAAO9J,GAAG,IAAK,iBAAiB,OAAOk4X,GAAGpuX,GAAG,IAAK,WAAW,OAAG,KAAKA,EAAE4sX,MAAa,MAAKsB,IAAG,EAAUz4N,IAAG,IAAK,YAAY,OAAOv/J,EAAE8J,EAAE4K,QAAS6qJ,IAAIy4N,GAAG,KAAKh4X,EAAE,QAAQ,OAAO,KAAM,CA4BC89X,CAAG99X,EAAE+J,GA3Bzd,SAAY/J,EAAE8J,GAAG,GAAGy8M,GAAG,MAAM,mBAAmBvmN,IAAIqN,IAAI4qX,GAAGj4X,EAAE8J,IAAI9J,EAAEuyX,KAAKD,GAAGD,GAAGD,GAAG,KAAK7rK,IAAG,EAAGvmN,GAAG,KAAK,OAAOA,GAAG,IAAK,QAAgQ,QAAQ,OAAO,KAA3P,IAAK,WAAW,KAAK8J,EAAE22G,SAAS32G,EAAEmqX,QAAQnqX,EAAE42G,UAAU52G,EAAE22G,SAAS32G,EAAEmqX,OAAO,CAAC,GAAGnqX,EAAEi0X,MAAM,EAAEj0X,EAAEi0X,KAAKjpY,OAAO,OAAOgV,EAAEi0X,KAAK,GAAGj0X,EAAE4sX,MAAM,OAAO/yV,OAAO2kE,aAAax+F,EAAE4sX,MAAO,QAAO,KAAK,IAAK,iBAAiB,OAAO1sW,IAAI,OAAOlgB,EAAEqxL,OAAO,KAAKrxL,EAAE4K,KAA0B,CA2BoFspX,CAAGh+X,EAAE+J,MACje,GADoe0E,EAAE8pX,GAAG9pX,EAAE,kBACve3Z,SAASoI,EAAE,IAAIk4X,GAAG,gBAAgB,cAAc,KAAKrrX,EAAE7M,GAAGyR,EAAE/Z,KAAK,CAAC+Q,MAAMzI,EAAEqI,UAAUkJ,IAAIvR,EAAEwX,KAAKmpX,GAAI,CAAAnF,GAAG/pX,EAAE7E,EAAG,GAAE,UAASwzX,GAAGt9X,EAAE8J,EAAEC,GAAG,MAAM,CAAC9J,SAASD,EAAEqF,SAASyE,EAAE3M,cAAc4M,EAAG,UAASwuX,GAAGv4X,EAAE8J,GAAG,IAAI,IAAIC,EAAED,EAAE,UAAU2E,EAAE,GAAG,OAAOzO,GAAG,CAAC,IAAI9C,EAAE8C,EAAE0O,EAAExR,EAAE4uX,UAAU,IAAI5uX,EAAEiwJ,KAAK,OAAOz+I,IAAIxR,EAAEwR,EAAY,OAAVA,EAAE49W,GAAGtsX,EAAE+J,KAAY0E,EAAE8vC,QAAQ++U,GAAGt9X,EAAE0O,EAAExR,IAAc,OAAVwR,EAAE49W,GAAGtsX,EAAE8J,KAAY2E,EAAE7Z,KAAK0oY,GAAGt9X,EAAE0O,EAAExR,KAAK8C,EAAEA,EAAEktX,MAAO,QAAOz+W,CAAE,UAASgvX,GAAGz9X,GAAG,GAAG,OAAOA,EAAE,OAAO,KAAK,GAAGA,EAAEA,EAAEktX,aAAaltX,GAAG,IAAIA,EAAEmtJ,KAAK,OAAOntJ,GAAI,IAAK,CACpd,SAAS09X,GAAG19X,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,IAAI,IAAIwR,EAAE5E,EAAE+oX,WAAWlkX,EAAE,GAAG,OAAO5E,GAAGA,IAAI0E,GAAG,CAAC,IAAIG,EAAE7E,EAAEkhE,EAAEr8D,EAAEq+W,UAAUnnX,EAAE8I,EAAEk9W,UAAU,GAAG,OAAO7gT,GAAGA,IAAIx8D,EAAE,MAAM,IAAIG,EAAEu+I,KAAK,OAAOrnJ,IAAI8I,EAAE9I,EAAE5I,EAAa,OAAV+tE,EAAEqhT,GAAGviX,EAAE2E,KAAYC,EAAE4vC,QAAQ++U,GAAGvzX,EAAEkhE,EAAEr8D,IAAK1R,GAAc,OAAV+tE,EAAEqhT,GAAGviX,EAAE2E,KAAYC,EAAE/Z,KAAK0oY,GAAGvzX,EAAEkhE,EAAEr8D,KAAM7E,EAAEA,EAAEmjX,MAAO,KAAIv+W,EAAE7Z,QAAQkL,EAAEpL,KAAK,CAAC+Q,MAAMmE,EAAEvE,UAAUoJ,GAAI,KAAIsvX,GAAG,SAASC,GAAG,iBAAiB,SAASC,GAAGn+X,GAAG,OAAO,kBAAkBA,EAAEA,EAAE,GAAGA,GAAG64D,QAAQolU,GAAG,MAAMplU,QAAQqlU,GAAG,GAAI,UAASE,GAAGp+X,EAAE8J,EAAEC,GAAW,GAARD,EAAEq0X,GAAGr0X,GAAMq0X,GAAGn+X,KAAK8J,GAAGC,EAAE,MAAMlC,MAAM6J,EAAE,KAAO,UAAS2sX,KAAM,CAC/e,IAAIC,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAGx+X,EAAE8J,GAAG,MAAM,aAAa9J,GAAG,aAAaA,GAAG,kBAAkB8J,EAAEqZ,UAAU,kBAAkBrZ,EAAEqZ,UAAU,kBAAkBrZ,EAAEu9W,yBAAyB,OAAOv9W,EAAEu9W,yBAAyB,MAAMv9W,EAAEu9W,wBAAwBoX,MAAO,CAC7P,IAAIC,GAAG,oBAAoBx6R,WAAWA,gBAAW,EAAOy6R,GAAG,oBAAoBz/H,aAAaA,kBAAa,EAAO0/H,GAAG,oBAAoB1/X,QAAQA,aAAQ,EAAO2/X,GAAG,oBAAoB5mB,eAAeA,eAAe,qBAAqB2mB,GAAG,SAAS5+X,GAAG,OAAO4+X,GAAGjgY,QAAQ,MAAMQ,KAAKa,GAAGqmG,MAAMy4R,GAAI,EAACJ,GAAG,SAASI,GAAG9+X,GAAGkkG,YAAW,WAAW,MAAMlkG,CAAG,GAAE,CACrV,SAAS++X,GAAG/+X,EAAE8J,GAAG,IAAIC,EAAED,EAAE2E,EAAE,EAAE,EAAE,CAAC,IAAIvR,EAAE6M,EAAE+vX,YAA6B,GAAjB95X,EAAE6nX,YAAY99W,GAAM7M,GAAG,IAAIA,EAAEgrX,SAAS,GAAY,QAATn+W,EAAE7M,EAAEwX,MAAc,CAAC,GAAG,IAAIjG,EAA0B,OAAvBzO,EAAE6nX,YAAY3qX,QAAGmtB,GAAGvgB,GAAU2E,GAAI,KAAI,MAAM1E,GAAG,OAAOA,GAAG,OAAOA,GAAG0E,IAAI1E,EAAE7M,CAAE,OAAM6M,GAAGsgB,GAAGvgB,EAAG,UAASk1X,GAAGh/X,GAAG,KAAK,MAAMA,EAAEA,EAAEA,EAAE85X,YAAY,CAAC,IAAIhwX,EAAE9J,EAAEkoX,SAAS,GAAG,IAAIp+W,GAAG,IAAIA,EAAE,MAAM,GAAG,IAAIA,EAAE,CAAU,GAAG,OAAZA,EAAE9J,EAAE0U,OAAiB,OAAO5K,GAAG,OAAOA,EAAE,MAAM,GAAG,OAAOA,EAAE,OAAO,IAAK,CAAC,QAAO9J,CAAE,CAClY,SAASi/X,GAAGj/X,GAAGA,EAAEA,EAAEk/X,gBAAgB,IAAI,IAAIp1X,EAAE,EAAE9J,GAAG,CAAC,GAAG,IAAIA,EAAEkoX,SAAS,CAAC,IAAIn+W,EAAE/J,EAAE0U,KAAK,GAAG,MAAM3K,GAAG,OAAOA,GAAG,OAAOA,EAAE,CAAC,GAAG,IAAID,EAAE,OAAO9J,EAAE8J,GAAI,KAAI,OAAOC,GAAGD,GAAI,CAAA9J,EAAEA,EAAEk/X,eAAgB,QAAO,IAAK,KAAIC,GAAG9iY,KAAKS,SAAS0D,SAAS,IAAIqF,MAAM,GAAGu5X,GAAG,gBAAgBD,GAAGE,GAAG,gBAAgBF,GAAG5B,GAAG,oBAAoB4B,GAAGnC,GAAG,iBAAiBmC,GAAGG,GAAG,oBAAoBH,GAAGI,GAAG,kBAAkBJ,GAClX,SAAS/N,GAAGpxX,GAAG,IAAI8J,EAAE9J,EAAEo/X,IAAI,GAAGt1X,EAAE,OAAOA,EAAE,IAAI,IAAIC,EAAE/J,EAAEwrX,WAAWzhX,GAAG,CAAC,GAAGD,EAAEC,EAAEwzX,KAAKxzX,EAAEq1X,IAAI,CAAe,GAAdr1X,EAAED,EAAEmjX,UAAa,OAAOnjX,EAAE+mB,OAAO,OAAO9mB,GAAG,OAAOA,EAAE8mB,MAAM,IAAI7wB,EAAEi/X,GAAGj/X,GAAG,OAAOA,GAAG,CAAC,GAAG+J,EAAE/J,EAAEo/X,IAAI,OAAOr1X,EAAE/J,EAAEi/X,GAAGj/X,EAAG,QAAO8J,CAAE,CAAIC,GAAJ/J,EAAE+J,GAAMyhX,UAAW,QAAO,IAAK,UAASK,GAAG7rX,GAAkB,QAAfA,EAAEA,EAAEo/X,KAAKp/X,EAAEu9X,MAAc,IAAIv9X,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,KAAK,KAAKntJ,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,IAAI,KAAKntJ,CAAE,UAAS24X,GAAG34X,GAAG,GAAG,IAAIA,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,IAAI,OAAOntJ,EAAE8rX,UAAU,MAAMjkX,MAAM6J,EAAE,IAAM,UAASq6W,GAAG/rX,GAAG,OAAOA,EAAEq/X,KAAK,IAAK,KAAIG,GAAG,GAAGC,IAAI,EAAE,SAASC,GAAG1/X,GAAG,MAAM,CAACvE,QAAQuE,EAAG,CACxe,SAAS4mR,GAAE5mR,GAAG,EAAEy/X,KAAKz/X,EAAEvE,QAAQ+jY,GAAGC,IAAID,GAAGC,IAAI,KAAKA,KAAM,UAASh7H,GAAEzkQ,EAAE8J,GAAG21X,KAAKD,GAAGC,IAAIz/X,EAAEvE,QAAQuE,EAAEvE,QAAQqO,CAAE,KAAI61X,GAAG,CAAC,EAAE5xH,GAAE2xH,GAAGC,IAAIC,GAAGF,IAAG,GAAIG,GAAGF,GAAG,SAASG,GAAG9/X,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEzC,KAAKwiY,aAAa,IAAIh2X,EAAE,OAAO41X,GAAG,IAAIlxX,EAAEzO,EAAE8rX,UAAU,GAAGr9W,GAAGA,EAAEuxX,8CAA8Cl2X,EAAE,OAAO2E,EAAEwxX,0CAA0C,IAASvxX,EAALxR,EAAE,CAAC,EAAI,IAAIwR,KAAK3E,EAAE7M,EAAEwR,GAAG5E,EAAE4E,GAAoH,OAAjHD,KAAIzO,EAAEA,EAAE8rX,WAAYkU,4CAA4Cl2X,EAAE9J,EAAEigY,0CAA0C/iY,GAAUA,CAAE,CAC/d,SAASgjY,GAAGlgY,GAAyB,OAAO,QAA7BA,EAAEA,EAAEmgY,yBAAmC,IAASngY,CAAE,UAASogY,KAAKx5G,GAAEg5G,IAAIh5G,GAAE7Y,GAAG,UAASsyH,GAAGrgY,EAAE8J,EAAEC,GAAG,GAAGgkQ,GAAEtyQ,UAAUkkY,GAAG,MAAM93X,MAAM6J,EAAE,MAAM+yP,GAAEsJ,GAAEjkQ,GAAG26P,GAAEm7H,GAAG71X,EAAG,UAASu2X,GAAGtgY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAE8rX,UAAgC,GAAtBhiX,EAAEA,EAAEq2X,kBAAqB,oBAAoB1xX,EAAE8xX,gBAAgB,OAAOx2X,EAAwB,IAAI,IAAI7M,KAA9BuR,EAAEA,EAAE8xX,kBAAiC,KAAKrjY,KAAK4M,GAAG,MAAMjC,MAAM6J,EAAE,IAAIq0W,EAAG/lX,IAAI,UAAU9C,IAAI,OAAO8rN,EAAE,CAAC,EAAEj/M,EAAE0E,EAAG,CACzX,SAAS+xX,GAAGxgY,GAA2G,OAAxGA,GAAGA,EAAEA,EAAE8rX,YAAY9rX,EAAEygY,2CAA2Cd,GAAGE,GAAG9xH,GAAEtyQ,QAAQgpQ,GAAEsJ,GAAE/tQ,GAAGykQ,GAAEm7H,GAAGA,GAAGnkY,UAAe,CAAG,UAASilY,GAAG1gY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAE8rX,UAAU,IAAIr9W,EAAE,MAAM5G,MAAM6J,EAAE,MAAM3H,GAAG/J,EAAEsgY,GAAGtgY,EAAE8J,EAAE+1X,IAAIpxX,EAAEgyX,0CAA0CzgY,EAAE4mR,GAAEg5G,IAAIh5G,GAAE7Y,IAAGtJ,GAAEsJ,GAAE/tQ,IAAI4mR,GAAEg5G,IAAIn7H,GAAEm7H,GAAG71X,EAAG,KAAI42X,GAAG,KAAKC,IAAG,EAAGC,IAAG,EAAG,SAASC,GAAG9gY,GAAG,OAAO2gY,GAAGA,GAAG,CAAC3gY,GAAG2gY,GAAG/rY,KAAKoL,EAAG,CACjW,SAAS+gY,KAAK,IAAIF,IAAI,OAAOF,GAAG,CAACE,IAAG,EAAG,IAAI7gY,EAAE,EAAE8J,EAAEonL,GAAE,IAAI,IAAInnL,EAAE42X,GAAG,IAAIzvM,GAAE,EAAElxL,EAAE+J,EAAEjV,OAAOkL,IAAI,CAAC,IAAIyO,EAAE1E,EAAE/J,GAAG,GAAGyO,EAAEA,GAAE,SAAU,OAAOA,EAAG,CAAAkyX,GAAG,KAAKC,IAAG,CAA+E,CAA5E,MAAM1jY,GAAG,MAAM,OAAOyjY,KAAKA,GAAGA,GAAG96X,MAAM7F,EAAE,IAAIkqB,GAAG+jW,GAAG8S,IAAI7jY,CAAG,CAAnJ,QAA2Jg0L,GAAEpnL,EAAE+2X,IAAG,CAAG,CAAC,QAAO,IAAK,KAAIG,GAAG,GAAGC,GAAG,EAAEC,GAAG,KAAKC,GAAG,EAAEC,GAAG,GAAGC,GAAG,EAAEC,GAAG,KAAKn1M,GAAG,EAAE4oD,GAAG,GAAG,SAASwsJ,GAAGvhY,EAAE8J,GAAGk3X,GAAGC,MAAME,GAAGH,GAAGC,MAAMC,GAAGA,GAAGlhY,EAAEmhY,GAAGr3X,CAAE,CAClV,SAAS03X,GAAGxhY,EAAE8J,EAAEC,GAAGq3X,GAAGC,MAAMl1M,GAAGi1M,GAAGC,MAAMtsJ,GAAGqsJ,GAAGC,MAAMC,GAAGA,GAAGthY,EAAE,IAAIyO,EAAE09K,GAAGnsL,EAAE+0O,GAAG,IAAI73O,EAAE,GAAG0xX,GAAGngX,GAAG,EAAEA,KAAK,GAAGvR,GAAG6M,GAAG,EAAE,IAAI2E,EAAE,GAAGkgX,GAAG9kX,GAAG5M,EAAE,GAAG,GAAGwR,EAAE,CAAC,IAAIC,EAAEzR,EAAEA,EAAE,EAAEwR,GAAGD,GAAG,GAAGE,GAAG,GAAGnO,SAAS,IAAIiO,IAAIE,EAAEzR,GAAGyR,EAAEw9K,GAAG,GAAG,GAAGyiM,GAAG9kX,GAAG5M,EAAE6M,GAAG7M,EAAEuR,EAAEsmO,GAAGrmO,EAAE1O,CAAE,MAAKmsL,GAAG,GAAGz9K,EAAE3E,GAAG7M,EAAEuR,EAAEsmO,GAAG/0O,CAAE,UAASyhY,GAAGzhY,GAAG,OAAOA,EAAEktX,SAASqU,GAAGvhY,EAAE,GAAGwhY,GAAGxhY,EAAE,EAAE,GAAI,UAAS0hY,GAAG1hY,GAAG,KAAKA,IAAIkhY,IAAIA,GAAGF,KAAKC,IAAID,GAAGC,IAAI,KAAKE,GAAGH,KAAKC,IAAID,GAAGC,IAAI,KAAK,KAAKjhY,IAAIshY,IAAIA,GAAGF,KAAKC,IAAID,GAAGC,IAAI,KAAKtsJ,GAAGqsJ,KAAKC,IAAID,GAAGC,IAAI,KAAKl1M,GAAGi1M,KAAKC,IAAID,GAAGC,IAAI,IAAK,KAAIM,GAAG,KAAKC,GAAG,KAAKxqO,IAAE,EAAGyqO,GAAG,KACje,SAASC,GAAG9hY,EAAE8J,GAAG,IAAIC,EAAEg4X,GAAG,EAAE,KAAK,KAAK,GAAGh4X,EAAEmxW,YAAY,UAAUnxW,EAAE+hX,UAAUhiX,EAAEC,EAAEmjX,OAAOltX,EAAgB,QAAd8J,EAAE9J,EAAEgiY,YAAoBhiY,EAAEgiY,UAAU,CAACj4X,GAAG/J,EAAE4nM,OAAO,IAAI99L,EAAElV,KAAKmV,EAAG,CACzJ,SAASk4X,GAAGjiY,EAAE8J,GAAG,OAAO9J,EAAEmtJ,KAAK,KAAK,EAAE,IAAIpjJ,EAAE/J,EAAEzC,KAAyE,OAAO,QAA3EuM,EAAE,IAAIA,EAAEo+W,UAAUn+W,EAAEtD,gBAAgBqD,EAAEsjG,SAAS3mG,cAAc,KAAKqD,KAAmB9J,EAAE8rX,UAAUhiX,EAAE63X,GAAG3hY,EAAE4hY,GAAG5C,GAAGl1X,EAAE89W,aAAY,GAAO,KAAK,EAAE,OAAoD,QAA7C99W,EAAE,KAAK9J,EAAEkiY,cAAc,IAAIp4X,EAAEo+W,SAAS,KAAKp+W,KAAY9J,EAAE8rX,UAAUhiX,EAAE63X,GAAG3hY,EAAE4hY,GAAG,MAAK,GAAO,KAAK,GAAG,OAA+B,QAAxB93X,EAAE,IAAIA,EAAEo+W,SAAS,KAAKp+W,KAAYC,EAAE,OAAOu3X,GAAG,CAACvqY,GAAGo1L,GAAG9rD,SAAS00G,IAAI,KAAK/0O,EAAEotX,cAAc,CAACC,WAAWvjX,EAAEq4X,YAAYp4X,EAAEq4X,UAAU,aAAYr4X,EAAEg4X,GAAG,GAAG,KAAK,KAAK,IAAKjW,UAAUhiX,EAAEC,EAAEmjX,OAAOltX,EAAEA,EAAE6wB,MAAM9mB,EAAE43X,GAAG3hY,EAAE4hY,GAClf,MAAK,GAAO,QAAQ,OAAM,EAAI,UAASS,GAAGriY,GAAG,OAAO,KAAY,EAAPA,EAAEyiD,OAAS,KAAa,IAARziD,EAAE4nM,MAAW,UAAS06L,GAAGtiY,GAAG,GAAGo3J,GAAE,CAAC,IAAIttJ,EAAE83X,GAAG,GAAG93X,EAAE,CAAC,IAAIC,EAAED,EAAE,IAAIm4X,GAAGjiY,EAAE8J,GAAG,CAAC,GAAGu4X,GAAGriY,GAAG,MAAM6H,MAAM6J,EAAE,MAAM5H,EAAEk1X,GAAGj1X,EAAE+vX,aAAa,IAAIrrX,EAAEkzX,GAAG73X,GAAGm4X,GAAGjiY,EAAE8J,GAAGg4X,GAAGrzX,EAAE1E,IAAI/J,EAAE4nM,OAAe,KAAT5nM,EAAE4nM,MAAY,EAAExwC,IAAE,EAAGuqO,GAAG3hY,EAAG,CAAC,KAAI,CAAC,GAAGqiY,GAAGriY,GAAG,MAAM6H,MAAM6J,EAAE,MAAM1R,EAAE4nM,OAAe,KAAT5nM,EAAE4nM,MAAY,EAAExwC,IAAE,EAAGuqO,GAAG3hY,CAAE,CAAC,CAAC,UAASuiY,GAAGviY,GAAG,IAAIA,EAAEA,EAAEktX,OAAO,OAAOltX,GAAG,IAAIA,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,KAAK,KAAKntJ,EAAEmtJ,KAAKntJ,EAAEA,EAAEktX,OAAOyU,GAAG3hY,CAAE,CACja,SAASwiY,GAAGxiY,GAAG,GAAGA,IAAI2hY,GAAG,OAAM,EAAG,IAAIvqO,GAAE,OAAOmrO,GAAGviY,GAAGo3J,IAAE,GAAG,EAAG,IAAIttJ,EAAkG,IAA/FA,EAAE,IAAI9J,EAAEmtJ,QAAQrjJ,EAAE,IAAI9J,EAAEmtJ,OAAgBrjJ,EAAE,UAAXA,EAAE9J,EAAEzC,OAAmB,SAASuM,IAAI00X,GAAGx+X,EAAEzC,KAAKyC,EAAEyiY,gBAAmB34X,IAAIA,EAAE83X,IAAI,CAAC,GAAGS,GAAGriY,GAAG,MAAM0iY,KAAK76X,MAAM6J,EAAE,MAAM,KAAK5H,GAAGg4X,GAAG9hY,EAAE8J,GAAGA,EAAEk1X,GAAGl1X,EAAEgwX,YAAa,CAAM,GAANyI,GAAGviY,GAAM,KAAKA,EAAEmtJ,IAAI,CAAgD,KAA7BntJ,EAAE,QAApBA,EAAEA,EAAEotX,eAAyBptX,EAAEqtX,WAAW,MAAW,MAAMxlX,MAAM6J,EAAE,MAAM1R,EAAE,CAAiB,IAAhBA,EAAEA,EAAE85X,YAAgBhwX,EAAE,EAAE9J,GAAG,CAAC,GAAG,IAAIA,EAAEkoX,SAAS,CAAC,IAAIn+W,EAAE/J,EAAE0U,KAAK,GAAG,OAAO3K,EAAE,CAAC,GAAG,IAAID,EAAE,CAAC83X,GAAG5C,GAAGh/X,EAAE85X,aAAa,MAAM95X,CAAE,CAAA8J,GAAI,KAAI,MAAMC,GAAG,OAAOA,GAAG,OAAOA,GAAGD,GAAI,CAAA9J,EAAEA,EAAE85X,WAAY,CAAA8H,GACjgB,IAAK,CAAC,MAAKA,GAAGD,GAAG3C,GAAGh/X,EAAE8rX,UAAUgO,aAAa,KAAK,OAAM,CAAG,UAAS4I,KAAK,IAAI,IAAI1iY,EAAE4hY,GAAG5hY,GAAGA,EAAEg/X,GAAGh/X,EAAE85X,YAAa,UAAS6I,KAAKf,GAAGD,GAAG,KAAKvqO,IAAE,CAAG,UAASwrO,GAAG5iY,GAAG,OAAO6hY,GAAGA,GAAG,CAAC7hY,GAAG6hY,GAAGjtY,KAAKoL,EAAG,KAAI6iY,GAAGhyC,EAAG+gC,wBAAwB,SAASkR,GAAG9iY,EAAE8J,GAAG,GAAG9J,GAAGA,EAAE+iY,aAAa,CAA4B,IAAI,IAAIh5X,KAAnCD,EAAEk/M,EAAE,CAAC,EAAEl/M,GAAG9J,EAAEA,EAAE+iY,kBAA4B,IAASj5X,EAAEC,KAAKD,EAAEC,GAAG/J,EAAE+J,IAAI,OAAOD,CAAE,QAAOA,CAAE,KAAIk5X,GAAGtD,GAAG,MAAMuD,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,KAAKD,GAAGD,GAAGD,GAAG,IAAK,UAASI,GAAGrjY,GAAG,IAAI8J,EAAEk5X,GAAGvnY,QAAQmrR,GAAEo8G,IAAIhjY,EAAEsjY,cAAcx5X,CAAE,CACld,SAASy5X,GAAGvjY,EAAE8J,EAAEC,GAAG,KAAK,OAAO/J,GAAG,CAAC,IAAIyO,EAAEzO,EAAEitX,UAA+H,IAApHjtX,EAAEwjY,WAAW15X,KAAKA,GAAG9J,EAAEwjY,YAAY15X,EAAE,OAAO2E,IAAIA,EAAE+0X,YAAY15X,IAAI,OAAO2E,IAAIA,EAAE+0X,WAAW15X,KAAKA,IAAI2E,EAAE+0X,YAAY15X,GAAM9J,IAAI+J,EAAE,MAAM/J,EAAEA,EAAEktX,MAAO,CAAC,UAASuW,GAAGzjY,EAAE8J,GAAGm5X,GAAGjjY,EAAEmjY,GAAGD,GAAG,KAAsB,QAAjBljY,EAAEA,EAAEywH,eAAuB,OAAOzwH,EAAE0jY,eAAe,KAAK1jY,EAAE2jY,MAAM75X,KAAK85X,IAAG,GAAI5jY,EAAE0jY,aAAa,KAAM,CACvU,SAASG,GAAG7jY,GAAG,IAAI8J,EAAE9J,EAAEsjY,cAAc,GAAGH,KAAKnjY,EAAE,GAAGA,EAAE,CAACgU,QAAQhU,EAAE8jY,cAAch6X,EAAEpV,KAAK,MAAM,OAAOwuY,GAAG,CAAC,GAAG,OAAOD,GAAG,MAAMp7X,MAAM6J,EAAE,MAAMwxX,GAAGljY,EAAEijY,GAAGxyQ,aAAa,CAACkzQ,MAAM,EAAED,aAAa1jY,EAAG,MAAKkjY,GAAGA,GAAGxuY,KAAKsL,EAAE,OAAO8J,CAAE,KAAIi6X,GAAG,KAAK,SAASC,GAAGhkY,GAAG,OAAO+jY,GAAGA,GAAG,CAAC/jY,GAAG+jY,GAAGnvY,KAAKoL,EAAG,UAASikY,GAAGjkY,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAE4M,EAAEo6X,YAA+E,OAAnE,OAAOhnY,GAAG6M,EAAErV,KAAKqV,EAAEi6X,GAAGl6X,KAAKC,EAAErV,KAAKwI,EAAExI,KAAKwI,EAAExI,KAAKqV,GAAGD,EAAEo6X,YAAYn6X,EAASo6X,GAAGnkY,EAAEyO,EAAG,CACjY,SAAS01X,GAAGnkY,EAAE8J,GAAG9J,EAAE2jY,OAAO75X,EAAE,IAAIC,EAAE/J,EAAEitX,UAAqC,IAA3B,OAAOljX,IAAIA,EAAE45X,OAAO75X,GAAGC,EAAE/J,EAAMA,EAAEA,EAAEktX,OAAO,OAAOltX,GAAGA,EAAEwjY,YAAY15X,EAAgB,QAAdC,EAAE/J,EAAEitX,aAAqBljX,EAAEy5X,YAAY15X,GAAGC,EAAE/J,EAAEA,EAAEA,EAAEktX,OAAO,OAAO,IAAInjX,EAAEojJ,IAAIpjJ,EAAE+hX,UAAU,IAAK,KAAIsY,IAAG,EAAG,SAAS3iD,GAAGzhV,GAAGA,EAAEqkY,YAAY,CAACC,UAAUtkY,EAAEotX,cAAcmX,gBAAgB,KAAKC,eAAe,KAAK58E,OAAO,CAAC/yM,QAAQ,KAAKqvR,YAAY,KAAKP,MAAM,GAAGc,QAAQ,KAAM,CACrX,SAAS9iD,GAAG3hV,EAAE8J,GAAG9J,EAAEA,EAAEqkY,YAAYv6X,EAAEu6X,cAAcrkY,IAAI8J,EAAEu6X,YAAY,CAACC,UAAUtkY,EAAEskY,UAAUC,gBAAgBvkY,EAAEukY,gBAAgBC,eAAexkY,EAAEwkY,eAAe58E,OAAO5nT,EAAE4nT,OAAO68E,QAAQzkY,EAAEykY,SAAU,UAASnzM,GAAGtxL,EAAE8J,GAAG,MAAM,CAAC46X,UAAU1kY,EAAE2kY,KAAK76X,EAAEqjJ,IAAI,EAAEjY,QAAQ,KAAK33H,SAAS,KAAK7oB,KAAK,KAAM,CACvR,SAASgwS,GAAG1kS,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAEqkY,YAAY,GAAG,OAAO51X,EAAE,OAAO,KAAgB,GAAXA,EAAEA,EAAEm5S,OAAU,KAAO,EAAF1mJ,IAAK,CAAC,IAAIhkK,EAAEuR,EAAEomG,QAA+D,OAAvD,OAAO33G,EAAE4M,EAAEpV,KAAKoV,GAAGA,EAAEpV,KAAKwI,EAAExI,KAAKwI,EAAExI,KAAKoV,GAAG2E,EAAEomG,QAAQ/qG,EAASq6X,GAAGnkY,EAAE+J,EAAG,CAAmF,OAAnE,QAAhB7M,EAAEuR,EAAEy1X,cAAsBp6X,EAAEpV,KAAKoV,EAAEk6X,GAAGv1X,KAAK3E,EAAEpV,KAAKwI,EAAExI,KAAKwI,EAAExI,KAAKoV,GAAG2E,EAAEy1X,YAAYp6X,EAASq6X,GAAGnkY,EAAE+J,EAAG,UAAS+3U,GAAG9hV,EAAE8J,EAAEC,GAAmB,GAAG,QAAnBD,EAAEA,EAAEu6X,eAA0Bv6X,EAAEA,EAAE89S,OAAO,KAAO,QAAF79S,IAAY,CAAC,IAAI0E,EAAE3E,EAAE65X,MAAwB55X,GAAlB0E,GAAGzO,EAAEmvX,aAAkBrlX,EAAE65X,MAAM55X,EAAE6lX,GAAG5vX,EAAE+J,EAAG,CAAC,CACtZ,SAASupM,GAAGtzM,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEqkY,YAAY51X,EAAEzO,EAAEitX,UAAU,GAAG,OAAOx+W,GAAoB1E,KAAhB0E,EAAEA,EAAE41X,aAAmB,CAAC,IAAInnY,EAAE,KAAKwR,EAAE,KAAyB,GAAG,QAAvB3E,EAAEA,EAAEw6X,iBAA4B,CAAC,EAAE,CAAC,IAAI51X,EAAE,CAAC+1X,UAAU36X,EAAE26X,UAAUC,KAAK56X,EAAE46X,KAAKx3O,IAAIpjJ,EAAEojJ,IAAIjY,QAAQnrI,EAAEmrI,QAAQ33H,SAASxT,EAAEwT,SAAS7oB,KAAK,MAAM,OAAOga,EAAExR,EAAEwR,EAAEC,EAAED,EAAEA,EAAEha,KAAKia,EAAE5E,EAAEA,EAAErV,IAAK,OAAM,OAAOqV,GAAG,OAAO2E,EAAExR,EAAEwR,EAAE5E,EAAE4E,EAAEA,EAAEha,KAAKoV,CAAE,MAAK5M,EAAEwR,EAAE5E,EAAiH,OAA/GC,EAAE,CAACu6X,UAAU71X,EAAE61X,UAAUC,gBAAgBrnY,EAAEsnY,eAAe91X,EAAEk5S,OAAOn5S,EAAEm5S,OAAO68E,QAAQh2X,EAAEg2X,cAASzkY,EAAEqkY,YAAYt6X,EAAS,CAAmB,QAAnB/J,EAAE+J,EAAEy6X,gBAAwBz6X,EAAEw6X,gBAAgBz6X,EAAE9J,EAAEtL,KACnfoV,EAAEC,EAAEy6X,eAAe16X,CAAE,CACrB,SAASk4U,GAAGhiV,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAE8C,EAAEqkY,YAAYD,IAAG,EAAG,IAAI11X,EAAExR,EAAEqnY,gBAAgB51X,EAAEzR,EAAEsnY,eAAe51X,EAAE1R,EAAE0qT,OAAO/yM,QAAQ,GAAG,OAAOjmG,EAAE,CAAC1R,EAAE0qT,OAAO/yM,QAAQ,KAAK,IAAI5pC,EAAEr8D,EAAE9I,EAAEmlE,EAAEv2E,KAAKu2E,EAAEv2E,KAAK,KAAK,OAAOia,EAAED,EAAE5I,EAAE6I,EAAEja,KAAKoR,EAAE6I,EAAEs8D,EAAE,IAAIpkE,EAAE7G,EAAEitX,UAAU,OAAOpmX,KAAoB+H,GAAhB/H,EAAEA,EAAEw9X,aAAgBG,kBAAmB71X,IAAI,OAAOC,EAAE/H,EAAE09X,gBAAgBz+X,EAAE8I,EAAEla,KAAKoR,EAAEe,EAAE29X,eAAev5T,GAAI,IAAG,OAAOv8D,EAAE,CAAC,IAAI7V,EAAEqE,EAAEonY,UAA6B,IAAnB31X,EAAE,EAAE9H,EAAEf,EAAEmlE,EAAE,KAAKr8D,EAAEF,IAAI,CAAC,IAAIa,EAAEX,EAAE+1X,KAAKxrY,EAAEyV,EAAE81X,UAAU,IAAIj2X,EAAEc,KAAKA,EAAE,CAAC,OAAO1I,IAAIA,EAAEA,EAAEnS,KAAK,CAACgwY,UAAUvrY,EAAEwrY,KAAK,EAAEx3O,IAAIv+I,EAAEu+I,IAAIjY,QAAQtmI,EAAEsmI,QAAQ33H,SAAS3O,EAAE2O,SACvf7oB,KAAK,OAAOsL,EAAE,CAAC,IAAI4G,EAAE5G,EAAE+G,EAAE6H,EAAU,OAARW,EAAEzF,EAAE3Q,EAAE4Q,EAAShD,EAAEomJ,KAAK,KAAK,EAAc,GAAG,oBAAfvmJ,EAAEG,EAAEmuI,SAAiC,CAACr8I,EAAE+N,EAAEnS,KAAK0E,EAAEN,EAAE0W,GAAG,MAAMvP,CAAE,CAAAnH,EAAE+N,EAAE,MAAM5G,EAAE,KAAK,EAAE4G,EAAEghM,OAAe,MAAThhM,EAAEghM,MAAa,IAAI,KAAK,EAAsD,GAAG,QAA3Cr4L,EAAE,oBAAd3I,EAAEG,EAAEmuI,SAAgCtuI,EAAEnS,KAAK0E,EAAEN,EAAE0W,GAAG3I,SAAe,IAAS2I,EAAE,MAAMvP,EAAEnH,EAAEmwN,EAAE,CAAC,EAAEnwN,EAAE0W,GAAG,MAAMvP,EAAE,KAAK,EAAEokY,IAAG,EAAI,QAAOx1X,EAAE2O,UAAU,IAAI3O,EAAE+1X,OAAO3kY,EAAE4nM,OAAO,GAAe,QAAZr4L,EAAErS,EAAEunY,SAAiBvnY,EAAEunY,QAAQ,CAAC71X,GAAGW,EAAE3a,KAAKga,GAAI,MAAKzV,EAAE,CAACurY,UAAUvrY,EAAEwrY,KAAKp1X,EAAE49I,IAAIv+I,EAAEu+I,IAAIjY,QAAQtmI,EAAEsmI,QAAQ33H,SAAS3O,EAAE2O,SAAS7oB,KAAK,MAAM,OAAOmS,GAAGf,EAAEe,EAAE1N,EAAE8xE,EAAEpyE,GAAGgO,EAAEA,EAAEnS,KAAKyE,EAAEwV,GAAGY,EAC3e,GAAG,QAAZX,EAAEA,EAAEla,MAAiB,IAAsB,QAAnBka,EAAE1R,EAAE0qT,OAAO/yM,SAAiB,MAAejmG,GAAJW,EAAEX,GAAMla,KAAK6a,EAAE7a,KAAK,KAAKwI,EAAEsnY,eAAej1X,EAAErS,EAAE0qT,OAAO/yM,QAAQ,IAA7D,CAAkE,CAAqG,GAA5F,OAAOhuG,IAAIokE,EAAEpyE,GAAGqE,EAAEonY,UAAUr5T,EAAE/tE,EAAEqnY,gBAAgBz+X,EAAE5I,EAAEsnY,eAAe39X,EAA4B,QAA1BiD,EAAE5M,EAAE0qT,OAAOs8E,aAAwB,CAAChnY,EAAE4M,EAAE,GAAG6E,GAAGzR,EAAEynY,KAAKznY,EAAEA,EAAExI,WAAWwI,IAAI4M,EAAG,MAAK,OAAO4E,IAAIxR,EAAE0qT,OAAO+7E,MAAM,GAAG1hD,IAAItzU,EAAE3O,EAAE2jY,MAAMh1X,EAAE3O,EAAEotX,cAAcv0X,CAAE,CAAC,CAC/V,SAAS+rY,GAAG5kY,EAAE8J,EAAEC,GAA8B,GAA3B/J,EAAE8J,EAAE26X,QAAQ36X,EAAE26X,QAAQ,KAAQ,OAAOzkY,EAAE,IAAI8J,EAAE,EAAEA,EAAE9J,EAAElL,OAAOgV,IAAI,CAAC,IAAI2E,EAAEzO,EAAE8J,GAAG5M,EAAEuR,EAAE8O,SAAS,GAAG,OAAOrgB,EAAE,CAAqB,GAApBuR,EAAE8O,SAAS,KAAK9O,EAAE1E,EAAK,oBAAoB7M,EAAE,MAAM2K,MAAM6J,EAAE,IAAIxU,IAAIA,EAAEzI,KAAKga,EAAG,CAAC,CAAC,KAAIo2X,IAAI,IAAI9wF,EAAG+wF,WAAWp/Q,KAAK,SAASq/Q,GAAG/kY,EAAE8J,EAAEC,EAAE0E,GAA8B1E,EAAE,QAAXA,EAAEA,EAAE0E,EAAtB3E,EAAE9J,EAAEotX,sBAAmC,IAASrjX,EAAED,EAAEk/M,EAAE,CAAC,EAAEl/M,EAAEC,GAAG/J,EAAEotX,cAAcrjX,EAAE,IAAI/J,EAAE2jY,QAAQ3jY,EAAEqkY,YAAYC,UAAUv6X,EAAG,CACnX,IAAIm6J,GAAG,CAAC8gO,UAAU,SAAShlY,GAAG,SAAOA,EAAEA,EAAEilY,kBAAiBjY,GAAGhtX,KAAKA,CAAK,EAACklY,gBAAgB,SAASllY,EAAE8J,EAAEC,GAAG/J,EAAEA,EAAEilY,gBAAgB,IAAIx2X,EAAE02X,KAAIjoY,EAAEkoY,GAAGplY,GAAG0O,EAAE4iL,GAAG7iL,EAAEvR,GAAGwR,EAAEwmI,QAAQprI,OAAE,IAASC,GAAG,OAAOA,IAAI2E,EAAE6O,SAASxT,GAAe,QAAZD,EAAE46R,GAAG1kS,EAAE0O,EAAExR,MAAcmoY,GAAGv7X,EAAE9J,EAAE9C,EAAEuR,GAAGqzU,GAAGh4U,EAAE9J,EAAE9C,GAAI,EAACooY,oBAAoB,SAAStlY,EAAE8J,EAAEC,GAAG/J,EAAEA,EAAEilY,gBAAgB,IAAIx2X,EAAE02X,KAAIjoY,EAAEkoY,GAAGplY,GAAG0O,EAAE4iL,GAAG7iL,EAAEvR,GAAGwR,EAAEy+I,IAAI,EAAEz+I,EAAEwmI,QAAQprI,OAAE,IAASC,GAAG,OAAOA,IAAI2E,EAAE6O,SAASxT,GAAe,QAAZD,EAAE46R,GAAG1kS,EAAE0O,EAAExR,MAAcmoY,GAAGv7X,EAAE9J,EAAE9C,EAAEuR,GAAGqzU,GAAGh4U,EAAE9J,EAAE9C,GAAI,EAACqoY,mBAAmB,SAASvlY,EAAE8J,GAAG9J,EAAEA,EAAEilY,gBAAgB,IAAIl7X,EAAEo7X,KAAI12X,EACnf22X,GAAGplY,GAAG9C,EAAEo0L,GAAGvnL,EAAE0E,GAAGvR,EAAEiwJ,IAAI,OAAE,IAASrjJ,GAAG,OAAOA,IAAI5M,EAAEqgB,SAASzT,GAAe,QAAZA,EAAE46R,GAAG1kS,EAAE9C,EAAEuR,MAAc42X,GAAGv7X,EAAE9J,EAAEyO,EAAE1E,GAAG+3U,GAAGh4U,EAAE9J,EAAEyO,GAAI,GAAE,SAAS+2X,GAAGxlY,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,GAAiB,MAAM,oBAApB3O,EAAEA,EAAE8rX,WAAsC2Z,sBAAsBzlY,EAAEylY,sBAAsBh3X,EAAEC,EAAEC,IAAG7E,EAAE1J,YAAW0J,EAAE1J,UAAUslY,wBAAsB/L,GAAG5vX,EAAE0E,KAAKkrX,GAAGz8X,EAAEwR,GAAM,CAC3S,SAASm4M,GAAG7mN,EAAE8J,EAAEC,GAAG,IAAI0E,GAAE,EAAGvR,EAAEyiY,GAAOjxX,EAAE5E,EAAE67X,YAA2W,MAA/V,kBAAkBj3X,GAAG,OAAOA,EAAEA,EAAEm1X,GAAGn1X,IAAIxR,EAAEgjY,GAAGp2X,GAAG+1X,GAAG9xH,GAAEtyQ,QAAyBiT,GAAGD,EAAE,QAAtBA,EAAE3E,EAAEi2X,oBAA4B,IAAStxX,GAAGqxX,GAAG9/X,EAAE9C,GAAGyiY,IAAI71X,EAAE,IAAIA,EAAEC,EAAE2E,GAAG1O,EAAEotX,cAAc,OAAOtjX,EAAE8yC,YAAO,IAAS9yC,EAAE8yC,MAAM9yC,EAAE8yC,MAAM,KAAK9yC,EAAE87X,QAAQ1hO,GAAGlkK,EAAE8rX,UAAUhiX,EAAEA,EAAEm7X,gBAAgBjlY,EAAEyO,KAAIzO,EAAEA,EAAE8rX,WAAYkU,4CAA4C9iY,EAAE8C,EAAEigY,0CAA0CvxX,GAAU5E,CAAE,CAC7Z,SAAS+7X,GAAG7lY,EAAE8J,EAAEC,EAAE0E,GAAGzO,EAAE8J,EAAE8yC,MAAM,oBAAoB9yC,EAAEg8X,2BAA2Bh8X,EAAEg8X,0BAA0B/7X,EAAE0E,GAAG,oBAAoB3E,EAAEi8X,kCAAkCj8X,EAAEi8X,iCAAiCh8X,EAAE0E,GAAG3E,EAAE8yC,QAAQ58C,GAAGkkK,GAAGohO,oBAAoBx7X,EAAEA,EAAE8yC,MAAM,KAAM,CACrQ,SAASkhS,GAAG99U,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAE8C,EAAE8rX,UAAU5uX,EAAE/G,MAAM4T,EAAE7M,EAAE0/C,MAAM58C,EAAEotX,cAAclwX,EAAEwoH,KAAKm/Q,GAAGpjD,GAAGzhV,GAAG,IAAI0O,EAAE5E,EAAE67X,YAAY,kBAAkBj3X,GAAG,OAAOA,EAAExR,EAAE8W,QAAQ6vX,GAAGn1X,IAAIA,EAAEwxX,GAAGp2X,GAAG+1X,GAAG9xH,GAAEtyQ,QAAQyB,EAAE8W,QAAQ8rX,GAAG9/X,EAAE0O,IAAIxR,EAAE0/C,MAAM58C,EAAEotX,cAA2C,oBAA7B1+W,EAAE5E,EAAEk8X,4BAAiDjB,GAAG/kY,EAAE8J,EAAE4E,EAAE3E,GAAG7M,EAAE0/C,MAAM58C,EAAEotX,eAAe,oBAAoBtjX,EAAEk8X,0BAA0B,oBAAoB9oY,EAAE+oY,yBAAyB,oBAAoB/oY,EAAEgpY,2BAA2B,oBAAoBhpY,EAAEipY,qBAAqBr8X,EAAE5M,EAAE0/C,MACrf,oBAAoB1/C,EAAEipY,oBAAoBjpY,EAAEipY,qBAAqB,oBAAoBjpY,EAAEgpY,2BAA2BhpY,EAAEgpY,4BAA4Bp8X,IAAI5M,EAAE0/C,OAAOsnH,GAAGohO,oBAAoBpoY,EAAEA,EAAE0/C,MAAM,MAAMolS,GAAGhiV,EAAE+J,EAAE7M,EAAEuR,GAAGvR,EAAE0/C,MAAM58C,EAAEotX,eAAe,oBAAoBlwX,EAAEkpY,oBAAoBpmY,EAAE4nM,OAAO,QAAS,CACrS,SAAS/gI,GAAG7mE,EAAE8J,EAAEC,GAAW,GAAG,QAAX/J,EAAE+J,EAAEnT,MAAiB,oBAAoBoJ,GAAG,kBAAkBA,EAAE,CAAC,GAAG+J,EAAEs8X,OAAO,CAAY,GAAXt8X,EAAEA,EAAEs8X,OAAY,CAAC,GAAG,IAAIt8X,EAAEojJ,IAAI,MAAMtlJ,MAAM6J,EAAE,MAAM,IAAIjD,EAAE1E,EAAE+hX,SAAU,KAAIr9W,EAAE,MAAM5G,MAAM6J,EAAE,IAAI1R,IAAI,IAAI9C,EAAEuR,EAAEC,EAAE,GAAG1O,EAAE,OAAG,OAAO8J,GAAG,OAAOA,EAAElT,KAAK,oBAAoBkT,EAAElT,KAAKkT,EAAElT,IAAI0vY,aAAa53X,EAAS5E,EAAElT,KAAIkT,EAAE,SAAS9J,GAAG,IAAI8J,EAAE5M,EAAEwoH,KAAK57G,IAAI+6X,KAAK/6X,EAAE5M,EAAEwoH,KAAK,CAAC,GAAG,OAAO1lH,SAAS8J,EAAE4E,GAAG5E,EAAE4E,GAAG1O,CAAE,EAAC8J,EAAEw8X,WAAW53X,EAAS5E,EAAE,IAAG,kBAAkB9J,EAAE,MAAM6H,MAAM6J,EAAE,MAAM,IAAI3H,EAAEs8X,OAAO,MAAMx+X,MAAM6J,EAAE,IAAI1R,GAAK,QAAOA,CAAE,CACte,SAASumY,GAAGvmY,EAAE8J,GAAuC,MAApC9J,EAAE5I,OAAOgJ,UAAUI,SAAS/L,KAAKqV,GAASjC,MAAM6J,EAAE,GAAG,oBAAoB1R,EAAE,qBAAqB5I,OAAOQ,KAAKkS,GAAGiuD,KAAK,MAAM,IAAI/3D,GAAK,UAASwmY,GAAGxmY,GAAiB,OAAO8J,EAAf9J,EAAEyhK,OAAezhK,EAAE8lX,SAAU,CACtM,SAAS2gB,GAAGzmY,GAAG,SAAS8J,EAAEA,EAAEC,GAAG,GAAG/J,EAAE,CAAC,IAAIyO,EAAE3E,EAAEk4X,UAAU,OAAOvzX,GAAG3E,EAAEk4X,UAAU,CAACj4X,GAAGD,EAAE89L,OAAO,IAAIn5L,EAAE7Z,KAAKmV,EAAG,CAAC,UAASA,EAAEA,EAAE0E,GAAG,IAAIzO,EAAE,OAAO,KAAK,KAAK,OAAOyO,GAAG3E,EAAEC,EAAE0E,GAAGA,EAAEA,EAAE6vI,QAAQ,OAAO,IAAK,UAAS7vI,EAAEzO,EAAE8J,GAAG,IAAI9J,EAAE,IAAIO,IAAI,OAAOuJ,GAAG,OAAOA,EAAE3S,IAAI6I,EAAEW,IAAImJ,EAAE3S,IAAI2S,GAAG9J,EAAEW,IAAImJ,EAAErE,MAAMqE,GAAGA,EAAEA,EAAEw0I,QAAQ,OAAOt+I,CAAE,UAAS9C,EAAE8C,EAAE8J,GAAsC,OAAnC9J,EAAE0mY,GAAG1mY,EAAE8J,IAAKrE,MAAM,EAAEzF,EAAEs+I,QAAQ,KAAYt+I,CAAE,UAAS0O,EAAE5E,EAAEC,EAAE0E,GAAa,OAAV3E,EAAErE,MAAMgJ,EAAMzO,EAA6C,QAAjByO,EAAE3E,EAAEmjX,YAA6Bx+W,EAAEA,EAAEhJ,OAAQsE,GAAGD,EAAE89L,OAAO,EAAE79L,GAAG0E,GAAE3E,EAAE89L,OAAO,EAAS79L,IAArGD,EAAE89L,OAAO,QAAQ79L,EAAsF,UAAS4E,EAAE7E,GACzd,OAD4d9J,GAC7f,OAAO8J,EAAEmjX,YAAYnjX,EAAE89L,OAAO,GAAU99L,CAAE,UAAS8E,EAAE5O,EAAE8J,EAAEC,EAAE0E,GAAG,OAAG,OAAO3E,GAAG,IAAIA,EAAEqjJ,MAAWrjJ,EAAEi2U,GAAGh2U,EAAE/J,EAAEyiD,KAAKh0C,IAAKy+W,OAAOltX,EAAE8J,KAAEA,EAAE5M,EAAE4M,EAAEC,IAAKmjX,OAAOltX,EAAS8J,EAAE,UAASmhE,EAAEjrE,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIC,EAAE3E,EAAExM,KAAK,OAAGmR,IAAI81W,EAAU39W,EAAE7G,EAAE8J,EAAEC,EAAE5T,MAAMgtB,SAAS1U,EAAE1E,EAAE5S,KAAQ,OAAO2S,IAAIA,EAAEoxW,cAAcxsW,GAAG,kBAAkBA,GAAG,OAAOA,GAAGA,EAAEm3W,WAAWZ,GAAIuhB,GAAG93X,KAAK5E,EAAEvM,QAAakR,EAAEvR,EAAE4M,EAAEC,EAAE5T,QAASS,IAAIiwE,GAAG7mE,EAAE8J,EAAEC,GAAG0E,EAAEy+W,OAAOltX,EAAEyO,KAAEA,EAAEwxU,GAAGl2U,EAAExM,KAAKwM,EAAE5S,IAAI4S,EAAE5T,MAAM,KAAK6J,EAAEyiD,KAAKh0C,IAAK7X,IAAIiwE,GAAG7mE,EAAE8J,EAAEC,GAAG0E,EAAEy+W,OAAOltX,EAASyO,EAAE,UAAS3I,EAAE9F,EAAE8J,EAAEC,EAAE0E,GAAG,OAAG,OAAO3E,GAAG,IAAIA,EAAEqjJ,KACjfrjJ,EAAEgiX,UAAUwF,gBAAgBvnX,EAAEunX,eAAexnX,EAAEgiX,UAAU/yC,iBAAiBhvU,EAAEgvU,iBAAsBjvU,EAAEq2U,GAAGp2U,EAAE/J,EAAEyiD,KAAKh0C,IAAKy+W,OAAOltX,EAAE8J,KAAEA,EAAE5M,EAAE4M,EAAEC,EAAEoZ,UAAU,KAAM+pW,OAAOltX,EAAS8J,EAAE,UAASjD,EAAE7G,EAAE8J,EAAEC,EAAE0E,EAAEC,GAAG,OAAG,OAAO5E,GAAG,IAAIA,EAAEqjJ,MAAWrjJ,EAAE2zU,GAAG1zU,EAAE/J,EAAEyiD,KAAKh0C,EAAEC,IAAKw+W,OAAOltX,EAAE8J,KAAEA,EAAE5M,EAAE4M,EAAEC,IAAKmjX,OAAOltX,EAAS8J,EAAE,UAASjR,EAAEmH,EAAE8J,EAAEC,GAAG,GAAG,kBAAkBD,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAOA,EAAEi2U,GAAG,GAAGj2U,EAAE9J,EAAEyiD,KAAK14C,IAAKmjX,OAAOltX,EAAE8J,EAAE,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAE+7W,UAAU,KAAKjxV,EAAG,OAAO7qB,EAAEk2U,GAAGn2U,EAAEvM,KAAKuM,EAAE3S,IAAI2S,EAAE3T,MAAM,KAAK6J,EAAEyiD,KAAK14C,IACjfnT,IAAIiwE,GAAG7mE,EAAE,KAAK8J,GAAGC,EAAEmjX,OAAOltX,EAAE+J,EAAE,KAAKw6W,EAAG,OAAOz6W,EAAEq2U,GAAGr2U,EAAE9J,EAAEyiD,KAAK14C,IAAKmjX,OAAOltX,EAAE8J,EAAE,KAAKm7W,EAAiB,OAAOpsX,EAAEmH,GAAEyO,EAAnB3E,EAAE23J,OAAmB33J,EAAEg8W,UAAU/7W,GAAG,GAAGi9W,GAAGl9W,IAAIs7W,EAAGt7W,GAAG,OAAOA,EAAE2zU,GAAG3zU,EAAE9J,EAAEyiD,KAAK14C,EAAE,OAAQmjX,OAAOltX,EAAE8J,EAAEy8X,GAAGvmY,EAAE8J,EAAG,QAAO,IAAK,UAASyF,EAAEvP,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAE,OAAO4M,EAAEA,EAAE3S,IAAI,KAAK,GAAG,kBAAkB4S,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAO,OAAO7M,EAAE,KAAK0R,EAAE5O,EAAE8J,EAAE,GAAGC,EAAE0E,GAAG,GAAG,kBAAkB1E,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAE87W,UAAU,KAAKjxV,EAAG,OAAO7qB,EAAE5S,MAAM+F,EAAE+tE,EAAEjrE,EAAE8J,EAAEC,EAAE0E,GAAG,KAAK,KAAK81W,EAAG,OAAOx6W,EAAE5S,MAAM+F,EAAE4I,EAAE9F,EAAE8J,EAAEC,EAAE0E,GAAG,KAAK,KAAKw2W,EAAG,OAAiB11W,EAAEvP,EACpf8J,GADwe5M,EAAE6M,EAAE03J,OACxe13J,EAAE+7W,UAAUr3W,GAAG,GAAGu4W,GAAGj9W,IAAIq7W,EAAGr7W,GAAG,OAAO,OAAO7M,EAAE,KAAK2J,EAAE7G,EAAE8J,EAAEC,EAAE0E,EAAE,MAAM83X,GAAGvmY,EAAE+J,EAAG,QAAO,IAAK,UAAS5Q,EAAE6G,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,GAAG,kBAAkBuR,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAwBG,EAAE9E,EAAnB9J,EAAEA,EAAEU,IAAIqJ,IAAI,KAAW,GAAG0E,EAAEvR,GAAG,GAAG,kBAAkBuR,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEo3W,UAAU,KAAKjxV,EAAG,OAA2Cq2C,EAAEnhE,EAAtC9J,EAAEA,EAAEU,IAAI,OAAO+N,EAAEtX,IAAI4S,EAAE0E,EAAEtX,MAAM,KAAWsX,EAAEvR,GAAG,KAAKqnX,EAAG,OAA2Cz+W,EAAEgE,EAAtC9J,EAAEA,EAAEU,IAAI,OAAO+N,EAAEtX,IAAI4S,EAAE0E,EAAEtX,MAAM,KAAWsX,EAAEvR,GAAG,KAAK+nX,EAAiB,OAAO9rX,EAAE6G,EAAE8J,EAAEC,GAAE2E,EAAvBD,EAAEgzJ,OAAuBhzJ,EAAEq3W,UAAU5oX,GAAG,GAAG8pX,GAAGv4W,IAAI22W,EAAG32W,GAAG,OAAwB5H,EAAEiD,EAAnB9J,EAAEA,EAAEU,IAAIqJ,IAAI,KAAW0E,EAAEvR,EAAE,MAAMqpY,GAAGz8X,EAAE2E,EAAG,QAAO,IAAK,CAC/f,SAAS7H,EAAE1J,EAAEyR,EAAEC,EAAEq8D,GAAG,IAAI,IAAInlE,EAAE,KAAKe,EAAE,KAAKua,EAAEzS,EAAEoJ,EAAEpJ,EAAE,EAAEzV,EAAE,KAAK,OAAOkoB,GAAGrJ,EAAEnJ,EAAE9Z,OAAOijB,IAAI,CAACqJ,EAAE3b,MAAMsS,GAAG7e,EAAEkoB,EAAEA,EAAE,MAAMloB,EAAEkoB,EAAEk9H,QAAQ,IAAI13I,EAAE2I,EAAErS,EAAEkkB,EAAExS,EAAEmJ,GAAGkzD,GAAG,GAAG,OAAOrkE,EAAE,CAAC,OAAOwa,IAAIA,EAAEloB,GAAG,KAAM,CAAA8G,GAAGohB,GAAG,OAAOxa,EAAEqmX,WAAWnjX,EAAE5M,EAAEkkB,GAAGzS,EAAED,EAAE9H,EAAE+H,EAAEoJ,GAAG,OAAOlR,EAAEf,EAAEc,EAAEC,EAAEy3I,QAAQ13I,EAAEC,EAAED,EAAEwa,EAAEloB,CAAE,IAAG6e,IAAInJ,EAAE9Z,OAAO,OAAOiV,EAAE7M,EAAEkkB,GAAGg2I,IAAGmqO,GAAGrkY,EAAE6a,GAAGjS,EAAE,GAAG,OAAOsb,EAAE,CAAC,KAAKrJ,EAAEnJ,EAAE9Z,OAAOijB,IAAkB,QAAdqJ,EAAEvoB,EAAEqE,EAAE0R,EAAEmJ,GAAGkzD,MAAct8D,EAAED,EAAE0S,EAAEzS,EAAEoJ,GAAG,OAAOlR,EAAEf,EAAEsb,EAAEva,EAAEy3I,QAAQl9H,EAAEva,EAAEua,GAAc,OAAXg2I,IAAGmqO,GAAGrkY,EAAE6a,GAAUjS,CAAE,KAAIsb,EAAE3S,EAAEvR,EAAEkkB,GAAGrJ,EAAEnJ,EAAE9Z,OAAOijB,IAAsB,QAAlB7e,EAAEC,EAAEioB,EAAElkB,EAAE6a,EAAEnJ,EAAEmJ,GAAGkzD,MAAcjrE,GAAG,OAAO9G,EAAE+zX,WAAW7rW,EAAEqtB,OAAO,OACvfv1C,EAAE/B,IAAI4gB,EAAE7e,EAAE/B,KAAKwX,EAAED,EAAExV,EAAEyV,EAAEoJ,GAAG,OAAOlR,EAAEf,EAAE5M,EAAE2N,EAAEy3I,QAAQplJ,EAAE2N,EAAE3N,GAAuD,OAApD8G,GAAGohB,EAAE7oB,SAAQ,SAASyH,GAAG,OAAO8J,EAAE5M,EAAE8C,EAAG,IAAEo3J,IAAGmqO,GAAGrkY,EAAE6a,GAAUjS,CAAE,UAASiB,EAAE7J,EAAEyR,EAAEC,EAAEq8D,GAAG,IAAInlE,EAAEs/W,EAAGx2W,GAAG,GAAG,oBAAoB9I,EAAE,MAAM+B,MAAM6J,EAAE,MAAkB,GAAG,OAAf9C,EAAE9I,EAAErR,KAAKma,IAAc,MAAM/G,MAAM6J,EAAE,MAAM,IAAI,IAAI0P,EAAEtb,EAAE,KAAKe,EAAE8H,EAAEoJ,EAAEpJ,EAAE,EAAEzV,EAAE,KAAK0N,EAAEgI,EAAEla,OAAO,OAAOmS,IAAID,EAAEjS,KAAKojB,IAAInR,EAAEgI,EAAEla,OAAO,CAACmS,EAAEpB,MAAMsS,GAAG7e,EAAE2N,EAAEA,EAAE,MAAM3N,EAAE2N,EAAEy3I,QAAQ,IAAIv3I,EAAEwI,EAAErS,EAAE2J,EAAED,EAAE/R,MAAMo2E,GAAG,GAAG,OAAOlkE,EAAE,CAAC,OAAOF,IAAIA,EAAE3N,GAAG,KAAM,CAAA8G,GAAG6G,GAAG,OAAOE,EAAEkmX,WAAWnjX,EAAE5M,EAAE2J,GAAG8H,EAAED,EAAE3H,EAAE4H,EAAEoJ,GAAG,OAAOqJ,EAAEtb,EAAEiB,EAAEqa,EAAEk9H,QAAQv3I,EAAEqa,EAAEra,EAAEF,EAAE3N,CAAE,IAAG0N,EAAEjS,KAAK,OAAOoV,EAAE7M,EACzf2J,GAAGuwJ,IAAGmqO,GAAGrkY,EAAE6a,GAAGjS,EAAE,GAAG,OAAOe,EAAE,CAAC,MAAMD,EAAEjS,KAAKojB,IAAInR,EAAEgI,EAAEla,OAAwB,QAAjBkS,EAAE/N,EAAEqE,EAAE0J,EAAE/R,MAAMo2E,MAAct8D,EAAED,EAAE9H,EAAE+H,EAAEoJ,GAAG,OAAOqJ,EAAEtb,EAAEc,EAAEwa,EAAEk9H,QAAQ13I,EAAEwa,EAAExa,GAAc,OAAXwwJ,IAAGmqO,GAAGrkY,EAAE6a,GAAUjS,CAAE,KAAIe,EAAE4H,EAAEvR,EAAE2J,IAAID,EAAEjS,KAAKojB,IAAInR,EAAEgI,EAAEla,OAA4B,QAArBkS,EAAEzN,EAAE0N,EAAE3J,EAAE6a,EAAEnR,EAAE/R,MAAMo2E,MAAcjrE,GAAG,OAAO4G,EAAEqmX,WAAWpmX,EAAE4nC,OAAO,OAAO7nC,EAAEzP,IAAI4gB,EAAEnR,EAAEzP,KAAKwX,EAAED,EAAE9H,EAAE+H,EAAEoJ,GAAG,OAAOqJ,EAAEtb,EAAEc,EAAEwa,EAAEk9H,QAAQ13I,EAAEwa,EAAExa,GAAuD,OAApD5G,GAAG6G,EAAEtO,SAAQ,SAASyH,GAAG,OAAO8J,EAAE5M,EAAE8C,EAAG,IAAEo3J,IAAGmqO,GAAGrkY,EAAE6a,GAAUjS,CAAE,CAG5T,OAH4T,SAASu3X,EAAEr9X,EAAEyO,EAAEC,EAAEE,GAAkF,GAA/E,kBAAkBF,GAAG,OAAOA,GAAGA,EAAEnR,OAAOinX,GAAI,OAAO91W,EAAEvX,MAAMuX,EAAEA,EAAEvY,MAAMgtB,UAAa,kBAAkBzU,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEm3W,UAAU,KAAKjxV,EAAG50B,EAAE,CAAC,IAAI,IAAIirE,EAC7hBv8D,EAAEvX,IAAI2O,EAAE2I,EAAE,OAAO3I,GAAG,CAAC,GAAGA,EAAE3O,MAAM8zE,EAAE,CAAU,IAATA,EAAEv8D,EAAEnR,QAAYinX,GAAI,GAAG,IAAI1+W,EAAEqnJ,IAAI,CAACpjJ,EAAE/J,EAAE8F,EAAEw4I,UAAS7vI,EAAEvR,EAAE4I,EAAE4I,EAAEvY,MAAMgtB,WAAY+pW,OAAOltX,EAAEA,EAAEyO,EAAE,MAAMzO,CAAE,OAAM,GAAG8F,EAAEo1W,cAAcjwS,GAAG,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE46S,WAAWZ,GAAIuhB,GAAGv7T,KAAKnlE,EAAEvI,KAAK,CAACwM,EAAE/J,EAAE8F,EAAEw4I,UAAS7vI,EAAEvR,EAAE4I,EAAE4I,EAAEvY,QAASS,IAAIiwE,GAAG7mE,EAAE8F,EAAE4I,GAAGD,EAAEy+W,OAAOltX,EAAEA,EAAEyO,EAAE,MAAMzO,CAAE,CAAA+J,EAAE/J,EAAE8F,GAAG,KAAM,CAAKgE,EAAE9J,EAAE8F,GAAGA,EAAEA,EAAEw4I,OAAQ,CAAA5vI,EAAEnR,OAAOinX,IAAI/1W,EAAEgvU,GAAG/uU,EAAEvY,MAAMgtB,SAASnjB,EAAEyiD,KAAK7zC,EAAEF,EAAEvX,MAAO+1X,OAAOltX,EAAEA,EAAEyO,KAAIG,EAAEqxU,GAAGvxU,EAAEnR,KAAKmR,EAAEvX,IAAIuX,EAAEvY,MAAM,KAAK6J,EAAEyiD,KAAK7zC,IAAKhY,IAAIiwE,GAAG7mE,EAAEyO,EAAEC,GAAGE,EAAEs+W,OAAOltX,EAAEA,EAAE4O,EAAG,QAAOD,EAAE3O,GAAG,KAAKukX,EAAGvkX,EAAE,CAAC,IAAI8F,EAAE4I,EAAEvX,IAAI,OACzfsX,GAAG,CAAC,GAAGA,EAAEtX,MAAM2O,EAAX,CAAa,GAAG,IAAI2I,EAAE0+I,KAAK1+I,EAAEq9W,UAAUwF,gBAAgB5iX,EAAE4iX,eAAe7iX,EAAEq9W,UAAU/yC,iBAAiBrqU,EAAEqqU,eAAe,CAAChvU,EAAE/J,EAAEyO,EAAE6vI,UAAS7vI,EAAEvR,EAAEuR,EAAEC,EAAEyU,UAAU,KAAM+pW,OAAOltX,EAAEA,EAAEyO,EAAE,MAAMzO,CAAE,CAAK+J,EAAE/J,EAAEyO,GAAG,KAA/L,CAA0M3E,EAAE9J,EAAEyO,GAAGA,EAAEA,EAAE6vI,OAAQ,EAAA7vI,EAAE0xU,GAAGzxU,EAAE1O,EAAEyiD,KAAK7zC,IAAKs+W,OAAOltX,EAAEA,EAAEyO,CAAE,QAAOE,EAAE3O,GAAG,KAAKilX,EAAG,OAAiBoY,EAAEr9X,EAAEyO,GAAd3I,EAAE4I,EAAE+yJ,OAAc/yJ,EAAEo3W,UAAUl3W,GAAG,GAAGo4W,GAAGt4W,GAAG,OAAO9H,EAAE5G,EAAEyO,EAAEC,EAAEE,GAAG,GAAGw2W,EAAG12W,GAAG,OAAO3H,EAAE/G,EAAEyO,EAAEC,EAAEE,GAAG23X,GAAGvmY,EAAE0O,EAAG,OAAM,kBAAkBA,GAAG,KAAKA,GAAG,kBAAkBA,GAAGA,EAAE,GAAGA,EAAE,OAAOD,GAAG,IAAIA,EAAE0+I,KAAKpjJ,EAAE/J,EAAEyO,EAAE6vI,UAAS7vI,EAAEvR,EAAEuR,EAAEC,IAAKw+W,OAAOltX,EAAEA,EAAEyO,IACnf1E,EAAE/J,EAAEyO,IAAGA,EAAEsxU,GAAGrxU,EAAE1O,EAAEyiD,KAAK7zC,IAAKs+W,OAAOltX,EAAEA,EAAEyO,GAAGE,EAAE3O,IAAI+J,EAAE/J,EAAEyO,EAAG,CAAS,KAAIivU,GAAG+oD,IAAG,GAAI9oD,GAAG8oD,IAAG,GAAI7oD,GAAG,CAAC,EAAEC,GAAG6hD,GAAG9hD,IAAI+oD,GAAGjH,GAAG9hD,IAAIgpD,GAAGlH,GAAG9hD,IAAI,SAASipD,GAAG7mY,GAAG,GAAGA,IAAI49U,GAAG,MAAM/1U,MAAM6J,EAAE,MAAM,OAAO1R,CAAE,UAAS8mY,GAAG9mY,EAAE8J,GAAyC,OAAtC26P,GAAEmiI,GAAG98X,GAAG26P,GAAEkiI,GAAG3mY,GAAGykQ,GAAEo5E,GAAGD,IAAI59U,EAAE8J,EAAEo+W,UAAmB,KAAK,EAAE,KAAK,GAAGp+W,GAAGA,EAAEA,EAAElQ,iBAAiBkQ,EAAE49W,aAAaF,GAAG,KAAK,IAAI,MAAM,QAAkE19W,EAAE09W,GAArC19W,GAAvB9J,EAAE,IAAIA,EAAE8J,EAAE0hX,WAAW1hX,GAAM49W,cAAc,KAAK1nX,EAAEA,EAAE+mY,SAAkBngH,GAAEi3D,IAAIp5E,GAAEo5E,GAAG/zU,EAAG,UAASk9X,KAAKpgH,GAAEi3D,IAAIj3D,GAAE+/G,IAAI//G,GAAEggH,GAAI,CACpb,SAASppD,GAAGx9U,GAAG6mY,GAAGD,GAAGnrY,SAAS,IAAIqO,EAAE+8X,GAAGhpD,GAAGpiV,SAAasO,EAAEy9W,GAAG19W,EAAE9J,EAAEzC,MAAMuM,IAAIC,IAAI06P,GAAEkiI,GAAG3mY,GAAGykQ,GAAEo5E,GAAG9zU,GAAI,UAASk9X,GAAGjnY,GAAG2mY,GAAGlrY,UAAUuE,IAAI4mR,GAAEi3D,IAAIj3D,GAAE+/G,IAAK,KAAI9iI,GAAE67H,GAAG,GACrJ,SAASwH,GAAGlnY,GAAG,IAAI,IAAI8J,EAAE9J,EAAE,OAAO8J,GAAG,CAAC,GAAG,KAAKA,EAAEqjJ,IAAI,CAAC,IAAIpjJ,EAAED,EAAEsjX,cAAc,GAAG,OAAOrjX,IAAmB,QAAfA,EAAEA,EAAEsjX,aAAqB,OAAOtjX,EAAE2K,MAAM,OAAO3K,EAAE2K,MAAM,OAAO5K,CAAE,MAAK,GAAG,KAAKA,EAAEqjJ,UAAK,IAASrjJ,EAAE24X,cAAc0E,aAAa,GAAG,KAAa,IAARr9X,EAAE89L,OAAW,OAAO99L,OAAO,GAAG,OAAOA,EAAE+mB,MAAM,CAAC/mB,EAAE+mB,MAAMq8V,OAAOpjX,EAAEA,EAAEA,EAAE+mB,MAAM,QAAS,IAAG/mB,IAAI9J,EAAE,MAAM,KAAK,OAAO8J,EAAEw0I,SAAS,CAAC,GAAG,OAAOx0I,EAAEojX,QAAQpjX,EAAEojX,SAASltX,EAAE,OAAO,KAAK8J,EAAEA,EAAEojX,MAAO,CAAApjX,EAAEw0I,QAAQ4uO,OAAOpjX,EAAEojX,OAAOpjX,EAAEA,EAAEw0I,OAAQ,QAAO,IAAK,KAAI8oP,GAAG,GACrc,SAASC,KAAK,IAAI,IAAIrnY,EAAE,EAAEA,EAAEonY,GAAGtyY,OAAOkL,IAAIonY,GAAGpnY,GAAGsnY,8BAA8B,KAAKF,GAAGtyY,OAAO,CAAE,KAAIyyY,GAAG12C,EAAG22C,uBAAuB12F,GAAG+/C,EAAG+gC,wBAAwB6V,GAAG,EAAE/hL,GAAE,KAAKgiL,GAAE,KAAKt2J,GAAE,KAAKu2J,IAAG,EAAGC,IAAG,EAAGl3F,GAAG,EAAEE,GAAG,EAAE,SAASnrI,KAAI,MAAM59J,MAAM6J,EAAE,KAAO,UAASm2X,GAAG7nY,EAAE8J,GAAG,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAI,IAAIC,EAAE,EAAEA,EAAED,EAAEhV,QAAQiV,EAAE/J,EAAElL,OAAOiV,IAAI,IAAI2vX,GAAG15X,EAAE+J,GAAGD,EAAEC,IAAI,OAAM,EAAG,OAAM,CAAG,CACjW,SAAS+9X,GAAG9nY,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,GAAyH,GAAtH+4X,GAAG/4X,EAAEg3M,GAAE57M,EAAEA,EAAEsjX,cAAc,KAAKtjX,EAAEu6X,YAAY,KAAKv6X,EAAE65X,MAAM,EAAE4D,GAAG9rY,QAAQ,OAAOuE,GAAG,OAAOA,EAAEotX,cAAc2a,GAAGC,GAAGhoY,EAAE+J,EAAE0E,EAAEvR,GAAM0qY,GAAG,CAACl5X,EAAE,EAAE,EAAE,CAAY,GAAXk5X,IAAG,EAAGl3F,GAAG,EAAK,IAAIhiS,EAAE,MAAM7G,MAAM6J,EAAE,MAAMhD,GAAG,EAAE0iO,GAAEs2J,GAAE,KAAK59X,EAAEu6X,YAAY,KAAKkD,GAAG9rY,QAAQwsY,GAAGjoY,EAAE+J,EAAE0E,EAAEvR,EAAG,OAAM0qY,GAAI,CAA8D,GAA9DL,GAAG9rY,QAAQysY,GAAGp+X,EAAE,OAAO49X,IAAG,OAAOA,GAAEhzY,KAAK+yY,GAAG,EAAEr2J,GAAEs2J,GAAEhiL,GAAE,KAAKiiL,IAAG,EAAM79X,EAAE,MAAMjC,MAAM6J,EAAE,MAAM,OAAO1R,CAAE,UAASmoY,KAAK,IAAInoY,EAAE,IAAI0wS,GAAQ,OAALA,GAAG,EAAS1wS,CAAE,CAChZ,SAASooY,KAAK,IAAIpoY,EAAE,CAACotX,cAAc,KAAKkX,UAAU,KAAK+D,UAAU,KAAK7kQ,MAAM,KAAK9uI,KAAK,MAA8C,OAAxC,OAAO08O,GAAE1rB,GAAE0nK,cAAch8I,GAAEpxO,EAAEoxO,GAAEA,GAAE18O,KAAKsL,EAASoxO,EAAE,UAASk3J,KAAK,GAAG,OAAOZ,GAAE,CAAC,IAAI1nY,EAAE0lN,GAAEunK,UAAUjtX,EAAE,OAAOA,EAAEA,EAAEotX,cAAc,IAAK,MAAKptX,EAAE0nY,GAAEhzY,KAAK,IAAIoV,EAAE,OAAOsnO,GAAE1rB,GAAE0nK,cAAch8I,GAAE18O,KAAK,GAAG,OAAOoV,EAAEsnO,GAAEtnO,EAAE49X,GAAE1nY,MAAM,CAAC,GAAG,OAAOA,EAAE,MAAM6H,MAAM6J,EAAE,MAAU1R,EAAE,CAACotX,eAAPsa,GAAE1nY,GAAqBotX,cAAckX,UAAUoD,GAAEpD,UAAU+D,UAAUX,GAAEW,UAAU7kQ,MAAMkkQ,GAAElkQ,MAAM9uI,KAAK,MAAM,OAAO08O,GAAE1rB,GAAE0nK,cAAch8I,GAAEpxO,EAAEoxO,GAAEA,GAAE18O,KAAKsL,CAAE,QAAOoxO,EAAE,CACle,SAASm3J,GAAGvoY,EAAE8J,GAAG,MAAM,oBAAoBA,EAAEA,EAAE9J,GAAG8J,CAAE,CACpD,SAAS0+X,GAAGxoY,GAAG,IAAI8J,EAAEw+X,KAAKv+X,EAAED,EAAE05H,MAAM,GAAG,OAAOz5H,EAAE,MAAMlC,MAAM6J,EAAE,MAAM3H,EAAE0+X,oBAAoBzoY,EAAE,IAAIyO,EAAEi5X,GAAExqY,EAAEuR,EAAE45X,UAAU35X,EAAE3E,EAAE8qG,QAAQ,GAAG,OAAOnmG,EAAE,CAAC,GAAG,OAAOxR,EAAE,CAAC,IAAIyR,EAAEzR,EAAExI,KAAKwI,EAAExI,KAAKga,EAAEha,KAAKga,EAAEha,KAAKia,CAAE,CAAAF,EAAE45X,UAAUnrY,EAAEwR,EAAE3E,EAAE8qG,QAAQ,IAAK,IAAG,OAAO33G,EAAE,CAACwR,EAAExR,EAAExI,KAAK+Z,EAAEA,EAAE61X,UAAU,IAAI11X,EAAED,EAAE,KAAKs8D,EAAE,KAAKnlE,EAAE4I,EAAE,EAAE,CAAC,IAAI7H,EAAEf,EAAE6+X,KAAK,IAAI8C,GAAG5gY,KAAKA,EAAE,OAAOokE,IAAIA,EAAEA,EAAEv2E,KAAK,CAACiwY,KAAK,EAAErxR,OAAOxtG,EAAEwtG,OAAOo1R,cAAc5iY,EAAE4iY,cAAcC,WAAW7iY,EAAE6iY,WAAWj0Y,KAAK,OAAO+Z,EAAE3I,EAAE4iY,cAAc5iY,EAAE6iY,WAAW3oY,EAAEyO,EAAE3I,EAAEwtG,YAAY,CAAC,IAAIz6G,EAAE,CAAC8rY,KAAK99X,EAAEysG,OAAOxtG,EAAEwtG,OAAOo1R,cAAc5iY,EAAE4iY,cACngBC,WAAW7iY,EAAE6iY,WAAWj0Y,KAAK,MAAM,OAAOu2E,GAAGr8D,EAAEq8D,EAAEpyE,EAAE8V,EAAEF,GAAGw8D,EAAEA,EAAEv2E,KAAKmE,EAAE6sN,GAAEi+K,OAAO98X,EAAEo7U,IAAIp7U,CAAE,CAAAf,EAAEA,EAAEpR,IAAK,OAAM,OAAOoR,GAAGA,IAAI4I,GAAG,OAAOu8D,EAAEt8D,EAAEF,EAAEw8D,EAAEv2E,KAAKka,EAAE8qX,GAAGjrX,EAAE3E,EAAEsjX,iBAAiBwW,IAAG,GAAI95X,EAAEsjX,cAAc3+W,EAAE3E,EAAEw6X,UAAU31X,EAAE7E,EAAEu+X,UAAUp9T,EAAElhE,EAAE6+X,kBAAkBn6X,CAAE,CAAgB,GAAG,QAAnBzO,EAAE+J,EAAEm6X,aAAwB,CAAChnY,EAAE8C,EAAE,GAAG0O,EAAExR,EAAEynY,KAAKj/K,GAAEi+K,OAAOj1X,EAAEuzU,IAAIvzU,EAAExR,EAAEA,EAAExI,WAAWwI,IAAI8C,EAAG,MAAK,OAAO9C,IAAI6M,EAAE45X,MAAM,GAAG,MAAM,CAAC75X,EAAEsjX,cAAcrjX,EAAEg9O,SAAU,CAC/X,SAAS8hJ,GAAG7oY,GAAG,IAAI8J,EAAEw+X,KAAKv+X,EAAED,EAAE05H,MAAM,GAAG,OAAOz5H,EAAE,MAAMlC,MAAM6J,EAAE,MAAM3H,EAAE0+X,oBAAoBzoY,EAAE,IAAIyO,EAAE1E,EAAEg9O,SAAS7pP,EAAE6M,EAAE8qG,QAAQnmG,EAAE5E,EAAEsjX,cAAc,GAAG,OAAOlwX,EAAE,CAAC6M,EAAE8qG,QAAQ,KAAK,IAAIlmG,EAAEzR,EAAEA,EAAExI,KAAK,GAAGga,EAAE1O,EAAE0O,EAAEC,EAAE2kG,QAAQ3kG,EAAEA,EAAEja,WAAWia,IAAIzR,GAAGw8X,GAAGhrX,EAAE5E,EAAEsjX,iBAAiBwW,IAAG,GAAI95X,EAAEsjX,cAAc1+W,EAAE,OAAO5E,EAAEu+X,YAAYv+X,EAAEw6X,UAAU51X,GAAG3E,EAAE6+X,kBAAkBl6X,CAAE,OAAM,CAACA,EAAED,EAAG,UAASylJ,KAAM,CACrW,SAAS40O,GAAG9oY,EAAE8J,GAAG,IAAIC,EAAE27M,GAAEj3M,EAAE65X,KAAKprY,EAAE4M,IAAI4E,GAAGgrX,GAAGjrX,EAAE2+W,cAAclwX,GAAsE,GAAnEwR,IAAID,EAAE2+W,cAAclwX,EAAE0mY,IAAG,GAAIn1X,EAAEA,EAAE+0H,MAAMulQ,GAAG92E,GAAGlyT,KAAK,KAAKgK,EAAE0E,EAAEzO,GAAG,CAACA,IAAOyO,EAAEu6X,cAAcl/X,GAAG4E,GAAG,OAAO0iO,IAAuB,EAApBA,GAAEg8I,cAAcjgO,IAAM,CAAuD,GAAtDpjJ,EAAE69L,OAAO,KAAKqhM,GAAG,EAAEj7C,GAAGjuV,KAAK,KAAKgK,EAAE0E,EAAEvR,EAAE4M,QAAG,EAAO,MAAS,OAAOwzR,GAAE,MAAMz1R,MAAM6J,EAAE,MAAM,KAAQ,GAAH+1X,KAAQyB,GAAGn/X,EAAED,EAAE5M,EAAG,QAAOA,CAAE,UAASgsY,GAAGlpY,EAAE8J,EAAEC,GAAG/J,EAAE4nM,OAAO,MAAM5nM,EAAE,CAACgpY,YAAYl/X,EAAEjV,MAAMkV,GAAmB,QAAhBD,EAAE47M,GAAE2+K,cAAsBv6X,EAAE,CAACq/X,WAAW,KAAKC,OAAO,MAAM1jL,GAAE2+K,YAAYv6X,EAAEA,EAAEs/X,OAAO,CAACppY,IAAgB,QAAX+J,EAAED,EAAEs/X,QAAgBt/X,EAAEs/X,OAAO,CAACppY,GAAG+J,EAAEnV,KAAKoL,EAAI,CACnf,SAASguV,GAAGhuV,EAAE8J,EAAEC,EAAE0E,GAAG3E,EAAEjV,MAAMkV,EAAED,EAAEk/X,YAAYv6X,EAAE46X,GAAGv/X,IAAIw/X,GAAGtpY,EAAG,UAASiyT,GAAGjyT,EAAE8J,EAAEC,GAAG,OAAOA,GAAE,WAAWs/X,GAAGv/X,IAAIw/X,GAAGtpY,EAAG,GAAE,UAASqpY,GAAGrpY,GAAG,IAAI8J,EAAE9J,EAAEgpY,YAAYhpY,EAAEA,EAAEnL,MAAM,IAAI,IAAIkV,EAAED,IAAI,OAAO4vX,GAAG15X,EAAE+J,EAAqB,CAAlB,MAAM0E,GAAG,OAAM,CAAG,CAAC,UAAS66X,GAAGtpY,GAAG,IAAI8J,EAAEq6X,GAAGnkY,EAAE,GAAG,OAAO8J,GAAGu7X,GAAGv7X,EAAE9J,EAAE,GAAG,EAAG,CACnQ,SAASupY,GAAGvpY,GAAG,IAAI8J,EAAEs+X,KAA8M,MAAzM,oBAAoBpoY,IAAIA,EAAEA,KAAK8J,EAAEsjX,cAActjX,EAAEw6X,UAAUtkY,EAAEA,EAAE,CAAC60G,QAAQ,KAAKqvR,YAAY,KAAKP,MAAM,EAAE58I,SAAS,KAAK0hJ,oBAAoBF,GAAGK,kBAAkB5oY,GAAG8J,EAAE05H,MAAMxjI,EAAEA,EAAEA,EAAE+mP,SAASyiJ,GAAGzpY,KAAK,KAAK2lN,GAAE1lN,GAAS,CAAC8J,EAAEsjX,cAAcptX,EAAG,CAC7P,SAASipY,GAAGjpY,EAAE8J,EAAEC,EAAE0E,GAA8O,OAA3OzO,EAAE,CAACmtJ,IAAIntJ,EAAEe,OAAO+I,EAAErT,QAAQsT,EAAEwxK,KAAK9sK,EAAE/Z,KAAK,MAAsB,QAAhBoV,EAAE47M,GAAE2+K,cAAsBv6X,EAAE,CAACq/X,WAAW,KAAKC,OAAO,MAAM1jL,GAAE2+K,YAAYv6X,EAAEA,EAAEq/X,WAAWnpY,EAAEtL,KAAKsL,GAAmB,QAAf+J,EAAED,EAAEq/X,YAAoBr/X,EAAEq/X,WAAWnpY,EAAEtL,KAAKsL,GAAGyO,EAAE1E,EAAErV,KAAKqV,EAAErV,KAAKsL,EAAEA,EAAEtL,KAAK+Z,EAAE3E,EAAEq/X,WAAWnpY,GAAWA,CAAE,UAASypY,KAAK,OAAOnB,KAAKlb,aAAc,UAASxkD,GAAG5oU,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAEkrY,KAAK1iL,GAAE9d,OAAO5nM,EAAE9C,EAAEkwX,cAAc6b,GAAG,EAAEn/X,EAAEC,OAAE,OAAO,IAAS0E,EAAE,KAAKA,EAAG,CAC/Y,SAASi7X,GAAG1pY,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAEorY,KAAK75X,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAIC,OAAE,EAAO,GAAG,OAAOg5X,GAAE,CAAC,IAAI/4X,EAAE+4X,GAAEta,cAA0B,GAAZ1+W,EAAEC,EAAElY,QAAW,OAAOgY,GAAGo5X,GAAGp5X,EAAEE,EAAE4sK,MAAmC,YAA5Br+K,EAAEkwX,cAAc6b,GAAGn/X,EAAEC,EAAE2E,EAAED,GAAW,CAAAi3M,GAAE9d,OAAO5nM,EAAE9C,EAAEkwX,cAAc6b,GAAG,EAAEn/X,EAAEC,EAAE2E,EAAED,EAAG,UAASk7X,GAAG3pY,EAAE8J,GAAG,OAAO8+T,GAAG,QAAQ,EAAE5oU,EAAE8J,EAAG,UAASi/X,GAAG/oY,EAAE8J,GAAG,OAAO4/X,GAAG,KAAK,EAAE1pY,EAAE8J,EAAG,UAAS8/X,GAAG5pY,EAAE8J,GAAG,OAAO4/X,GAAG,EAAE,EAAE1pY,EAAE8J,EAAG,UAAS86P,GAAG5kQ,EAAE8J,GAAG,OAAO4/X,GAAG,EAAE,EAAE1pY,EAAE8J,EAAG,CACjX,SAAS+/X,GAAG7pY,EAAE8J,GAAG,MAAG,oBAAoBA,GAAS9J,EAAEA,IAAI8J,EAAE9J,GAAG,WAAW8J,EAAE,KAAM,GAAI,OAAOA,QAAG,IAASA,GAAS9J,EAAEA,IAAI8J,EAAErO,QAAQuE,EAAE,WAAW8J,EAAErO,QAAQ,IAAK,QAA3E,CAA4E,UAASo4S,GAAG7zS,EAAE8J,EAAEC,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAEkpI,OAAO,CAACjzI,IAAI,KAAY0pY,GAAG,EAAE,EAAEG,GAAG9pY,KAAK,KAAK+J,EAAE9J,GAAG+J,EAAG,UAAS+/X,KAAM,UAASC,GAAG/pY,EAAE8J,GAAG,IAAIC,EAAEu+X,KAAKx+X,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAI2E,EAAE1E,EAAEqjX,cAAc,OAAG,OAAO3+W,GAAG,OAAO3E,GAAG+9X,GAAG/9X,EAAE2E,EAAE,IAAWA,EAAE,IAAG1E,EAAEqjX,cAAc,CAACptX,EAAE8J,GAAU9J,EAAE,CAC9Z,SAASgqY,GAAGhqY,EAAE8J,GAAG,IAAIC,EAAEu+X,KAAKx+X,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAI2E,EAAE1E,EAAEqjX,cAAc,OAAG,OAAO3+W,GAAG,OAAO3E,GAAG+9X,GAAG/9X,EAAE2E,EAAE,IAAWA,EAAE,IAAGzO,EAAEA,IAAI+J,EAAEqjX,cAAc,CAACptX,EAAE8J,GAAU9J,EAAE,UAASiqY,GAAGjqY,EAAE8J,EAAEC,GAAG,OAAG,KAAQ,GAAH09X,KAAcznY,EAAEskY,YAAYtkY,EAAEskY,WAAU,EAAGV,IAAG,GAAI5jY,EAAEotX,cAAcrjX,IAAE2vX,GAAG3vX,EAAED,KAAKC,EAAEylX,KAAK9pK,GAAEi+K,OAAO55X,EAAEk4U,IAAIl4U,EAAE/J,EAAEskY,WAAU,GAAWx6X,EAAE,UAASogY,GAAGlqY,EAAE8J,GAAG,IAAIC,EAAEmnL,GAAEA,GAAE,IAAInnL,GAAG,EAAEA,EAAEA,EAAE,EAAE/J,GAAE,GAAI,IAAIyO,EAAEqiS,GAAGp0S,WAAWo0S,GAAGp0S,WAAW,CAAC,EAAE,IAAIsD,GAAE,GAAI8J,GAAgC,CAA1C,QAAsBonL,GAAEnnL,EAAE+mS,GAAGp0S,WAAW+R,CAAE,CAAC,UAAS07X,KAAK,OAAO7B,KAAKlb,aAAc,CAC3d,SAASgd,GAAGpqY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE22X,GAAGplY,GAAkE,GAA/D+J,EAAE,CAAC46X,KAAKl2X,EAAE6kG,OAAOvpG,EAAE2+X,eAAc,EAAGC,WAAW,KAAKj0Y,KAAK,MAAS21Y,GAAGrqY,GAAGsqY,GAAGxgY,EAAEC,QAAQ,GAAiB,QAAdA,EAAEk6X,GAAGjkY,EAAE8J,EAAEC,EAAE0E,IAAY,CAAW42X,GAAGt7X,EAAE/J,EAAEyO,EAAX02X,MAAgBoF,GAAGxgY,EAAED,EAAE2E,EAAG,CAAC,CAChL,SAAS+6X,GAAGxpY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE22X,GAAGplY,GAAG9C,EAAE,CAACynY,KAAKl2X,EAAE6kG,OAAOvpG,EAAE2+X,eAAc,EAAGC,WAAW,KAAKj0Y,KAAK,MAAM,GAAG21Y,GAAGrqY,GAAGsqY,GAAGxgY,EAAE5M,OAAO,CAAC,IAAIwR,EAAE1O,EAAEitX,UAAU,GAAG,IAAIjtX,EAAE2jY,QAAQ,OAAOj1X,GAAG,IAAIA,EAAEi1X,QAAiC,QAAxBj1X,EAAE5E,EAAE2+X,qBAA8B,IAAI,IAAI95X,EAAE7E,EAAE8+X,kBAAkBh6X,EAAEF,EAAEC,EAAE5E,GAAqC,GAAlC7M,EAAEwrY,eAAc,EAAGxrY,EAAEyrY,WAAW/5X,EAAK8qX,GAAG9qX,EAAED,GAAG,CAAC,IAAIs8D,EAAEnhE,EAAEo6X,YAA+E,OAAnE,OAAOj5T,GAAG/tE,EAAExI,KAAKwI,EAAE8mY,GAAGl6X,KAAK5M,EAAExI,KAAKu2E,EAAEv2E,KAAKu2E,EAAEv2E,KAAKwI,QAAG4M,EAAEo6X,YAAYhnY,EAAS,CAAoB,CAAnB,MAAM4I,GAAI,CAAuB,QAAdiE,EAAEk6X,GAAGjkY,EAAE8J,EAAE5M,EAAEuR,MAAoB42X,GAAGt7X,EAAE/J,EAAEyO,EAAbvR,EAAEioY,MAAgBoF,GAAGxgY,EAAED,EAAE2E,GAAI,CAAC,CAChd,SAAS47X,GAAGrqY,GAAG,IAAI8J,EAAE9J,EAAEitX,UAAU,OAAOjtX,IAAI0lN,IAAG,OAAO57M,GAAGA,IAAI47M,EAAE,UAAS4kL,GAAGtqY,EAAE8J,GAAG89X,GAAGD,IAAG,EAAG,IAAI59X,EAAE/J,EAAE60G,QAAQ,OAAO9qG,EAAED,EAAEpV,KAAKoV,GAAGA,EAAEpV,KAAKqV,EAAErV,KAAKqV,EAAErV,KAAKoV,GAAG9J,EAAE60G,QAAQ/qG,CAAE,UAASygY,GAAGvqY,EAAE8J,EAAEC,GAAG,GAAG,KAAO,QAAFA,GAAW,CAAC,IAAI0E,EAAE3E,EAAE65X,MAAwB55X,GAAlB0E,GAAGzO,EAAEmvX,aAAkBrlX,EAAE65X,MAAM55X,EAAE6lX,GAAG5vX,EAAE+J,EAAG,CAAC,CAC/P,IAAIm+X,GAAG,CAACsC,YAAY3G,GAAG4G,YAAYhlO,GAAEilO,WAAWjlO,GAAEpqK,UAAUoqK,GAAEklO,oBAAoBllO,GAAEmlO,mBAAmBnlO,GAAEolO,gBAAgBplO,GAAEqlO,QAAQrlO,GAAEslO,WAAWtlO,GAAEvqK,OAAOuqK,GAAEvwK,SAASuwK,GAAEulO,cAAcvlO,GAAEwlO,iBAAiBxlO,GAAEylO,cAAczlO,GAAE0lO,iBAAiB1lO,GAAE2lO,qBAAqB3lO,GAAE4lO,MAAM5lO,GAAE6lO,0BAAyB,GAAIvD,GAAG,CAACyC,YAAY3G,GAAG4G,YAAY,SAASzqY,EAAE8J,GAA4C,OAAzCs+X,KAAKhb,cAAc,CAACptX,OAAE,IAAS8J,EAAE,KAAKA,GAAU9J,CAAE,EAAC0qY,WAAW7G,GAAGxoY,UAAUsuY,GAAGgB,oBAAoB,SAAS3qY,EAAE8J,EAAEC,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAEkpI,OAAO,CAACjzI,IAAI,KAAY4oU,GAAG,QAC3f,EAAEihE,GAAG9pY,KAAK,KAAK+J,EAAE9J,GAAG+J,EAAG,EAAC8gY,gBAAgB,SAAS7qY,EAAE8J,GAAG,OAAO8+T,GAAG,QAAQ,EAAE5oU,EAAE8J,EAAG,EAAC8gY,mBAAmB,SAAS5qY,EAAE8J,GAAG,OAAO8+T,GAAG,EAAE,EAAE5oU,EAAE8J,EAAG,EAACghY,QAAQ,SAAS9qY,EAAE8J,GAAG,IAAIC,EAAEq+X,KAAqD,OAAhDt+X,OAAE,IAASA,EAAE,KAAKA,EAAE9J,EAAEA,IAAI+J,EAAEqjX,cAAc,CAACptX,EAAE8J,GAAU9J,CAAE,EAAC+qY,WAAW,SAAS/qY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE25X,KAAkM,OAA7Lt+X,OAAE,IAASC,EAAEA,EAAED,GAAGA,EAAE2E,EAAE2+W,cAAc3+W,EAAE61X,UAAUx6X,EAAE9J,EAAE,CAAC60G,QAAQ,KAAKqvR,YAAY,KAAKP,MAAM,EAAE58I,SAAS,KAAK0hJ,oBAAoBzoY,EAAE4oY,kBAAkB9+X,GAAG2E,EAAE+0H,MAAMxjI,EAAEA,EAAEA,EAAE+mP,SAASqjJ,GAAGrqY,KAAK,KAAK2lN,GAAE1lN,GAAS,CAACyO,EAAE2+W,cAAcptX,EAAG,EAAC9E,OAAO,SAAS8E,GAC3d,OAAdA,EAAE,CAACvE,QAAQuE,GAAhBooY,KAA4Bhb,cAAcptX,CAAE,EAAC9K,SAASq0Y,GAAGyB,cAAclB,GAAGmB,iBAAiB,SAASjrY,GAAG,OAAOooY,KAAKhb,cAAcptX,CAAE,EAACkrY,cAAc,WAAW,IAAIlrY,EAAEupY,IAAG,GAAIz/X,EAAE9J,EAAE,GAA6C,OAA1CA,EAAEkqY,GAAGnqY,KAAK,KAAKC,EAAE,IAAIooY,KAAKhb,cAAcptX,EAAQ,CAAC8J,EAAE9J,EAAG,EAACmrY,iBAAiB,WAAY,EAACC,qBAAqB,SAASprY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEi3M,GAAExoN,EAAEkrY,KAAK,GAAGhxO,GAAE,CAAC,QAAG,IAASrtJ,EAAE,MAAMlC,MAAM6J,EAAE,MAAM3H,EAAEA,GAAI,KAAI,CAAO,GAANA,EAAED,IAAO,OAAOwzR,GAAE,MAAMz1R,MAAM6J,EAAE,MAAM,KAAQ,GAAH+1X,KAAQyB,GAAGz6X,EAAE3E,EAAEC,EAAG,CAAA7M,EAAEkwX,cAAcrjX,EAAE,IAAI2E,EAAE,CAAC7Z,MAAMkV,EAAEi/X,YAAYl/X,GACvZ,OAD0Z5M,EAAEsmI,MAAM90H,EAAEi7X,GAAG13E,GAAGlyT,KAAK,KAAK0O,EACpfC,EAAE1O,GAAG,CAACA,IAAIyO,EAAEm5L,OAAO,KAAKqhM,GAAG,EAAEj7C,GAAGjuV,KAAK,KAAK0O,EAAEC,EAAE3E,EAAED,QAAG,EAAO,MAAaC,CAAE,EAACshY,MAAM,WAAW,IAAIrrY,EAAEooY,KAAKt+X,EAAEwzR,GAAEiuG,iBAAiB,GAAGn0O,GAAE,CAAC,IAAIrtJ,EAAEgrO,GAAkDjrO,EAAE,IAAIA,EAAE,KAA9CC,GAAHoiL,KAAU,GAAG,GAAGyiM,GAAhBziM,IAAsB,IAAI3rL,SAAS,IAAIuJ,GAAuB,GAAPA,EAAE2mS,QAAW5mS,GAAG,IAAIC,EAAEvJ,SAAS,KAAKsJ,GAAG,GAAI,MAAYA,EAAE,IAAIA,EAAE,KAAfC,EAAE6mS,MAAmBpwS,SAAS,IAAI,IAAI,OAAOR,EAAEotX,cAActjX,CAAE,EAACwhY,0BAAyB,GAAItD,GAAG,CAACwC,YAAY3G,GAAG4G,YAAYV,GAAGW,WAAW7G,GAAGxoY,UAAU0tY,GAAG4B,oBAAoB92F,GAAG+2F,mBAAmBhB,GAAGiB,gBAAgBjmI,GAAGkmI,QAAQd,GAAGe,WAAWvC,GAAGttY,OAAOuuY,GAAGv0Y,SAAS,WAAW,OAAOszY,GAAGD,GAAI,EACthByC,cAAclB,GAAGmB,iBAAiB,SAASjrY,GAAc,OAAOiqY,GAAZ3B,KAAiBZ,GAAEta,cAAcptX,EAAG,EAACkrY,cAAc,WAAgD,MAAM,CAArC1C,GAAGD,IAAI,GAAKD,KAAKlb,cAA0B,EAAC+d,iBAAiBj3O,GAAGk3O,qBAAqBtC,GAAGuC,MAAMlB,GAAGmB,0BAAyB,GAAIrD,GAAG,CAACuC,YAAY3G,GAAG4G,YAAYV,GAAGW,WAAW7G,GAAGxoY,UAAU0tY,GAAG4B,oBAAoB92F,GAAG+2F,mBAAmBhB,GAAGiB,gBAAgBjmI,GAAGkmI,QAAQd,GAAGe,WAAWlC,GAAG3tY,OAAOuuY,GAAGv0Y,SAAS,WAAW,OAAO2zY,GAAGN,GAAI,EAACyC,cAAclB,GAAGmB,iBAAiB,SAASjrY,GAAG,IAAI8J,EAAEw+X,KAAK,OAAO,OACzfZ,GAAE59X,EAAEsjX,cAAcptX,EAAEiqY,GAAGngY,EAAE49X,GAAEta,cAAcptX,EAAG,EAACkrY,cAAc,WAAgD,MAAM,CAArCrC,GAAGN,IAAI,GAAKD,KAAKlb,cAA0B,EAAC+d,iBAAiBj3O,GAAGk3O,qBAAqBtC,GAAGuC,MAAMlB,GAAGmB,0BAAyB,GAAI,SAASp5E,GAAGlyT,EAAE8J,GAAG,IAAI,IAAIC,EAAE,GAAG0E,EAAE3E,EAAE,GAAGC,GAAG47W,EAAGl3W,GAAGA,EAAEA,EAAEy+W,aAAaz+W,GAAG,IAAIvR,EAAE6M,CAAiE,CAA/D,MAAM2E,GAAGxR,EAAE,6BAA6BwR,EAAE6+E,QAAQ,KAAK7+E,EAAE0iL,KAAM,OAAM,CAACv8L,MAAMmL,EAAE1H,OAAOwR,EAAEsnL,MAAMl0L,EAAE2kK,OAAO,KAAM,UAAS2pO,GAAGxrY,EAAE8J,EAAEC,GAAG,MAAM,CAAClV,MAAMmL,EAAE1H,OAAO,KAAK84L,MAAM,MAAMrnL,EAAEA,EAAE,KAAK83J,OAAO,MAAM/3J,EAAEA,EAAE,KAAM,CAC1d,SAAS2hY,GAAGzrY,EAAE8J,GAAG,IAAIa,QAAQ1L,MAAM6K,EAAEjV,MAAiD,CAA1C,MAAMkV,GAAGm6F,YAAW,WAAW,MAAMn6F,CAAG,GAAE,CAAC,KAAI2hY,GAAG,oBAAoBp9V,QAAQA,QAAQ/tC,IAAI,SAASorY,GAAG3rY,EAAE8J,EAAEC,IAAGA,EAAEunL,IAAI,EAAEvnL,IAAKojJ,IAAI,EAAEpjJ,EAAEmrI,QAAQ,CAACl5I,QAAQ,MAAM,IAAIyS,EAAE3E,EAAEjV,MAAsD,OAAhDkV,EAAEwT,SAAS,WAAWquX,KAAKA,IAAG,EAAGC,GAAGp9X,GAAGg9X,GAAGzrY,EAAE8J,EAAG,EAAQC,CAAE,CAC5Q,SAAS+hY,GAAG9rY,EAAE8J,EAAEC,IAAGA,EAAEunL,IAAI,EAAEvnL,IAAKojJ,IAAI,EAAE,IAAI1+I,EAAEzO,EAAEzC,KAAKwuY,yBAAyB,GAAG,oBAAoBt9X,EAAE,CAAC,IAAIvR,EAAE4M,EAAEjV,MAAMkV,EAAEmrI,QAAQ,WAAW,OAAOzmI,EAAEvR,EAAG,EAAC6M,EAAEwT,SAAS,WAAWkuX,GAAGzrY,EAAE8J,EAAG,CAAC,KAAI4E,EAAE1O,EAAE8rX,UAA8O,OAApO,OAAOp9W,GAAG,oBAAoBA,EAAEs9X,oBAAoBjiY,EAAEwT,SAAS,WAAWkuX,GAAGzrY,EAAE8J,GAAG,oBAAoB2E,IAAI,OAAO28J,GAAGA,GAAG,IAAIjrG,IAAI,CAACjqE,OAAOk1K,GAAGnpJ,IAAI/rB,OAAO,IAAI6T,EAAED,EAAEsnL,MAAMl7L,KAAK81Y,kBAAkBliY,EAAEjV,MAAM,CAACo3Y,eAAe,OAAOliY,EAAEA,EAAE,IAAK,GAASA,CAAE,CACpb,SAASmiY,GAAGlsY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAEmsY,UAAU,GAAG,OAAO19X,EAAE,CAACA,EAAEzO,EAAEmsY,UAAU,IAAIT,GAAG,IAAIxuY,EAAE,IAAIijE,IAAI1xD,EAAE9N,IAAImJ,EAAE5M,EAAG,WAAgB,KAAXA,EAAEuR,EAAE/N,IAAIoJ,MAAgB5M,EAAE,IAAIijE,IAAI1xD,EAAE9N,IAAImJ,EAAE5M,IAAIA,EAAEuD,IAAIsJ,KAAK7M,EAAE+kB,IAAIlY,GAAG/J,EAAEosY,GAAGrsY,KAAK,KAAKC,EAAE8J,EAAEC,GAAGD,EAAE3K,KAAKa,EAAEA,GAAI,UAASspQ,GAAGtpQ,GAAG,EAAE,CAAC,IAAI8J,EAA4E,IAAvEA,EAAE,KAAK9J,EAAEmtJ,OAAsBrjJ,EAAE,QAApBA,EAAE9J,EAAEotX,gBAAyB,OAAOtjX,EAAEujX,YAAuBvjX,EAAE,OAAO9J,EAAEA,EAAEA,EAAEktX,MAAO,OAAM,OAAOltX,GAAG,OAAO,IAAK,CACjW,SAASqsY,GAAGrsY,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,OAAG,KAAY,EAAP8C,EAAEyiD,OAAeziD,IAAI8J,EAAE9J,EAAE4nM,OAAO,OAAO5nM,EAAE4nM,OAAO,IAAI79L,EAAE69L,OAAO,OAAO79L,EAAE69L,QAAQ,MAAM,IAAI79L,EAAEojJ,MAAM,OAAOpjJ,EAAEkjX,UAAUljX,EAAEojJ,IAAI,KAAIrjJ,EAAEwnL,IAAI,EAAE,IAAKnkC,IAAI,EAAEu3I,GAAG36R,EAAED,EAAE,KAAKC,EAAE45X,OAAO,GAAG3jY,IAAEA,EAAE4nM,OAAO,MAAM5nM,EAAE2jY,MAAMzmY,EAAS8C,EAAE,KAAIssY,GAAGz7C,EAAG07C,kBAAkB3I,IAAG,EAAG,SAAS4I,GAAGxsY,EAAE8J,EAAEC,EAAE0E,GAAG3E,EAAE+mB,MAAM,OAAO7wB,EAAE29U,GAAG7zU,EAAE,KAAKC,EAAE0E,GAAGivU,GAAG5zU,EAAE9J,EAAE6wB,MAAM9mB,EAAE0E,EAAG,CACpV,SAAS86P,GAAGvpQ,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG6M,EAAEA,EAAEmgC,OAAO,IAAIx7B,EAAE5E,EAAElT,IAAqC,OAAjC6sY,GAAG35X,EAAE5M,GAAGuR,EAAEq5X,GAAG9nY,EAAE8J,EAAEC,EAAE0E,EAAEC,EAAExR,GAAG6M,EAAEo+X,KAAQ,OAAOnoY,GAAI4jY,IAA2ExsO,IAAGrtJ,GAAG03X,GAAG33X,GAAGA,EAAE89L,OAAO,EAAE4kM,GAAGxsY,EAAE8J,EAAE2E,EAAEvR,GAAU4M,EAAE+mB,QAA7G/mB,EAAEu6X,YAAYrkY,EAAEqkY,YAAYv6X,EAAE89L,QAAQ,KAAK5nM,EAAE2jY,QAAQzmY,EAAEkmL,GAAGpjL,EAAE8J,EAAE5M,GAAqD,CAC1N,SAASuvY,GAAGzsY,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,GAAG,OAAO8C,EAAE,CAAC,IAAI0O,EAAE3E,EAAExM,KAAK,MAAG,oBAAoBmR,GAAIg+X,GAAGh+X,SAAI,IAASA,EAAEq0X,cAAc,OAAOh5X,EAAEoyN,cAAS,IAASpyN,EAAEg5X,eAAoD/iY,EAAEigV,GAAGl2U,EAAExM,KAAK,KAAKkR,EAAE3E,EAAEA,EAAE24C,KAAKvlD,IAAKtG,IAAIkT,EAAElT,IAAIoJ,EAAEktX,OAAOpjX,EAASA,EAAE+mB,MAAM7wB,IAArG8J,EAAEqjJ,IAAI,GAAGrjJ,EAAEvM,KAAKmR,EAAEi+X,GAAG3sY,EAAE8J,EAAE4E,EAAED,EAAEvR,GAA0E,CAAU,GAAVwR,EAAE1O,EAAE6wB,MAAS,KAAK7wB,EAAE2jY,MAAMzmY,GAAG,CAAC,IAAIyR,EAAED,EAAE+zX,cAA0C,IAAhB14X,EAAE,QAAdA,EAAEA,EAAEoyN,SAAmBpyN,EAAE4vX,IAAQhrX,EAAEF,IAAIzO,EAAEpJ,MAAMkT,EAAElT,IAAI,OAAOwsL,GAAGpjL,EAAE8J,EAAE5M,EAAG,CAA4C,OAA5C4M,EAAE89L,OAAO,GAAE5nM,EAAE0mY,GAAGh4X,EAAED,IAAK7X,IAAIkT,EAAElT,IAAIoJ,EAAEktX,OAAOpjX,EAASA,EAAE+mB,MAAM7wB,CAAE,CAC3b,SAAS2sY,GAAG3sY,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,GAAG,OAAO8C,EAAE,CAAC,IAAI0O,EAAE1O,EAAEyiY,cAAc,GAAG9I,GAAGjrX,EAAED,IAAIzO,EAAEpJ,MAAMkT,EAAElT,IAAI,IAAGgtY,IAAG,EAAG95X,EAAEo4X,aAAazzX,EAAEC,EAAE,KAAK1O,EAAE2jY,MAAMzmY,GAAsC,OAAO4M,EAAE65X,MAAM3jY,EAAE2jY,MAAMvgN,GAAGpjL,EAAE8J,EAAE5M,GAAjE,KAAa,OAAR8C,EAAE4nM,SAAgBg8L,IAAG,EAAS,CAAiC,QAAOgJ,GAAG5sY,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAG,CACzN,SAAS2vY,GAAG7sY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE3E,EAAEo4X,aAAahlY,EAAEuR,EAAE0U,SAASzU,EAAE,OAAO1O,EAAEA,EAAEotX,cAAc,KAAK,GAAG,WAAW3+W,EAAEg0C,KAAK,GAAG,KAAY,EAAP34C,EAAE24C,MAAQ34C,EAAEsjX,cAAc,CAAC0f,UAAU,EAAEC,UAAU,KAAKC,YAAY,MAAMvoI,GAAEwoI,GAAGC,IAAIA,IAAInjY,MAAM,CAAC,GAAG,KAAO,WAAFA,GAAc,OAAO/J,EAAE,OAAO0O,EAAEA,EAAEo+X,UAAU/iY,EAAEA,EAAED,EAAE65X,MAAM75X,EAAE05X,WAAW,WAAW15X,EAAEsjX,cAAc,CAAC0f,UAAU9sY,EAAE+sY,UAAU,KAAKC,YAAY,MAAMljY,EAAEu6X,YAAY,KAAK5/H,GAAEwoI,GAAGC,IAAIA,IAAIltY,EAAE,KAAK8J,EAAEsjX,cAAc,CAAC0f,UAAU,EAAEC,UAAU,KAAKC,YAAY,MAAMv+X,EAAE,OAAOC,EAAEA,EAAEo+X,UAAU/iY,EAAE06P,GAAEwoI,GAAGC,IAAIA,IAAIz+X,CAAE,MAAK,OACtfC,GAAGD,EAAEC,EAAEo+X,UAAU/iY,EAAED,EAAEsjX,cAAc,MAAM3+W,EAAE1E,EAAE06P,GAAEwoI,GAAGC,IAAIA,IAAIz+X,EAAc,OAAZ+9X,GAAGxsY,EAAE8J,EAAE5M,EAAE6M,GAAUD,EAAE+mB,KAAM,UAASs8W,GAAGntY,EAAE8J,GAAG,IAAIC,EAAED,EAAElT,KAAO,OAAOoJ,GAAG,OAAO+J,GAAG,OAAO/J,GAAGA,EAAEpJ,MAAMmT,KAAED,EAAE89L,OAAO,IAAI99L,EAAE89L,OAAO,QAAQ,UAASglM,GAAG5sY,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,IAAIwR,EAAEwxX,GAAGn2X,GAAG81X,GAAG9xH,GAAEtyQ,QAAmD,OAA3CiT,EAAEoxX,GAAGh2X,EAAE4E,GAAG+0X,GAAG35X,EAAE5M,GAAG6M,EAAE+9X,GAAG9nY,EAAE8J,EAAEC,EAAE0E,EAAEC,EAAExR,GAAGuR,EAAE05X,KAAQ,OAAOnoY,GAAI4jY,IAA2ExsO,IAAG3oJ,GAAGgzX,GAAG33X,GAAGA,EAAE89L,OAAO,EAAE4kM,GAAGxsY,EAAE8J,EAAEC,EAAE7M,GAAU4M,EAAE+mB,QAA7G/mB,EAAEu6X,YAAYrkY,EAAEqkY,YAAYv6X,EAAE89L,QAAQ,KAAK5nM,EAAE2jY,QAAQzmY,EAAEkmL,GAAGpjL,EAAE8J,EAAE5M,GAAqD,CACna,SAASkwY,GAAGptY,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,GAAGgjY,GAAGn2X,GAAG,CAAC,IAAI2E,GAAE,EAAG8xX,GAAG12X,EAAG,MAAK4E,GAAE,EAAW,GAAR+0X,GAAG35X,EAAE5M,GAAM,OAAO4M,EAAEgiX,UAAUuhB,GAAGrtY,EAAE8J,GAAG+8M,GAAG/8M,EAAEC,EAAE0E,GAAGqvU,GAAGh0U,EAAEC,EAAE0E,EAAEvR,GAAGuR,GAAE,OAAQ,GAAG,OAAOzO,EAAE,CAAC,IAAI2O,EAAE7E,EAAEgiX,UAAUl9W,EAAE9E,EAAE24X,cAAc9zX,EAAExY,MAAMyY,EAAE,IAAIq8D,EAAEt8D,EAAEqF,QAAQlO,EAAEiE,EAAE47X,YAAY,kBAAkB7/X,GAAG,OAAOA,EAAEA,EAAE+9X,GAAG/9X,GAAyBA,EAAEg6X,GAAGh2X,EAA1BhE,EAAEo6X,GAAGn2X,GAAG81X,GAAG9xH,GAAEtyQ,SAAmB,IAAIoL,EAAEkD,EAAEi8X,yBAAyBntY,EAAE,oBAAoBgO,GAAG,oBAAoB8H,EAAEs3X,wBAAwBptY,GAAG,oBAAoB8V,EAAEo3X,kCAAkC,oBAAoBp3X,EAAEm3X,4BAC1dl3X,IAAIH,GAAGw8D,IAAInlE,IAAI+/X,GAAG/7X,EAAE6E,EAAEF,EAAE3I,GAAGs+X,IAAG,EAAG,IAAI70X,EAAEzF,EAAEsjX,cAAcz+W,EAAEiuC,MAAMrtC,EAAEyyU,GAAGl4U,EAAE2E,EAAEE,EAAEzR,GAAG+tE,EAAEnhE,EAAEsjX,cAAcx+W,IAAIH,GAAGc,IAAI07D,GAAG20T,GAAGnkY,SAAS2oY,IAAI,oBAAoBv9X,IAAIk+X,GAAGj7X,EAAEC,EAAElD,EAAE4H,GAAGw8D,EAAEnhE,EAAEsjX,gBAAgBx+W,EAAEw1X,IAAIoB,GAAG17X,EAAEC,EAAE6E,EAAEH,EAAEc,EAAE07D,EAAEnlE,KAAKjN,GAAG,oBAAoB8V,EAAEu3X,2BAA2B,oBAAoBv3X,EAAEw3X,qBAAqB,oBAAoBx3X,EAAEw3X,oBAAoBx3X,EAAEw3X,qBAAqB,oBAAoBx3X,EAAEu3X,2BAA2Bv3X,EAAEu3X,6BAA6B,oBAAoBv3X,EAAEy3X,oBAAoBt8X,EAAE89L,OAAO,WAClf,oBAAoBj5L,EAAEy3X,oBAAoBt8X,EAAE89L,OAAO,SAAS99L,EAAE24X,cAAch0X,EAAE3E,EAAEsjX,cAAcniT,GAAGt8D,EAAExY,MAAMsY,EAAEE,EAAEiuC,MAAMquB,EAAEt8D,EAAEqF,QAAQlO,EAAE2I,EAAEG,IAAI,oBAAoBD,EAAEy3X,oBAAoBt8X,EAAE89L,OAAO,SAASn5L,GAAE,EAAI,KAAI,CAACE,EAAE7E,EAAEgiX,UAAUnqC,GAAG3hV,EAAE8J,GAAG8E,EAAE9E,EAAE24X,cAAc38X,EAAEgE,EAAEvM,OAAOuM,EAAEoxW,YAAYtsW,EAAEk0X,GAAGh5X,EAAEvM,KAAKqR,GAAGD,EAAExY,MAAM2P,EAAEjN,EAAEiR,EAAEo4X,aAAa3yX,EAAEZ,EAAEqF,QAAwB,kBAAhBi3D,EAAElhE,EAAE47X,cAAiC,OAAO16T,EAAEA,EAAE44T,GAAG54T,GAAyBA,EAAE60T,GAAGh2X,EAA1BmhE,EAAEi1T,GAAGn2X,GAAG81X,GAAG9xH,GAAEtyQ,SAAmB,IAAItC,EAAE4Q,EAAEi8X,0BAA0Bn/X,EAAE,oBAAoB1N,GAAG,oBAAoBwV,EAAEs3X,0BAC9e,oBAAoBt3X,EAAEo3X,kCAAkC,oBAAoBp3X,EAAEm3X,4BAA4Bl3X,IAAI/V,GAAG0W,IAAI07D,IAAI46T,GAAG/7X,EAAE6E,EAAEF,EAAEw8D,GAAGm5T,IAAG,EAAG70X,EAAEzF,EAAEsjX,cAAcz+W,EAAEiuC,MAAMrtC,EAAEyyU,GAAGl4U,EAAE2E,EAAEE,EAAEzR,GAAG,IAAI0J,EAAEkD,EAAEsjX,cAAcx+W,IAAI/V,GAAG0W,IAAI3I,GAAGg5X,GAAGnkY,SAAS2oY,IAAI,oBAAoBjrY,IAAI4rY,GAAGj7X,EAAEC,EAAE5Q,EAAEsV,GAAG7H,EAAEkD,EAAEsjX,gBAAgBtnX,EAAEs+X,IAAIoB,GAAG17X,EAAEC,EAAEjE,EAAE2I,EAAEc,EAAE3I,EAAEqkE,KAAI,IAAKpkE,GAAG,oBAAoB8H,EAAE2+X,4BAA4B,oBAAoB3+X,EAAE4+X,sBAAsB,oBAAoB5+X,EAAE4+X,qBAAqB5+X,EAAE4+X,oBAAoB9+X,EAAE7H,EAAEqkE,GAAG,oBAAoBt8D,EAAE2+X,4BAC5f3+X,EAAE2+X,2BAA2B7+X,EAAE7H,EAAEqkE,IAAI,oBAAoBt8D,EAAE6+X,qBAAqB1jY,EAAE89L,OAAO,GAAG,oBAAoBj5L,EAAEs3X,0BAA0Bn8X,EAAE89L,OAAO,QAAQ,oBAAoBj5L,EAAE6+X,oBAAoB5+X,IAAI5O,EAAEyiY,eAAelzX,IAAIvP,EAAEotX,gBAAgBtjX,EAAE89L,OAAO,GAAG,oBAAoBj5L,EAAEs3X,yBAAyBr3X,IAAI5O,EAAEyiY,eAAelzX,IAAIvP,EAAEotX,gBAAgBtjX,EAAE89L,OAAO,MAAM99L,EAAE24X,cAAch0X,EAAE3E,EAAEsjX,cAAcxmX,GAAG+H,EAAExY,MAAMsY,EAAEE,EAAEiuC,MAAMh2C,EAAE+H,EAAEqF,QAAQi3D,EAAEx8D,EAAE3I,IAAI,oBAAoB6I,EAAE6+X,oBAAoB5+X,IAAI5O,EAAEyiY,eAAelzX,IACjfvP,EAAEotX,gBAAgBtjX,EAAE89L,OAAO,GAAG,oBAAoBj5L,EAAEs3X,yBAAyBr3X,IAAI5O,EAAEyiY,eAAelzX,IAAIvP,EAAEotX,gBAAgBtjX,EAAE89L,OAAO,MAAMn5L,GAAE,EAAI,QAAOg/X,GAAGztY,EAAE8J,EAAEC,EAAE0E,EAAEC,EAAExR,EAAG,CACpK,SAASuwY,GAAGztY,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,GAAGy+X,GAAGntY,EAAE8J,GAAG,IAAI6E,EAAE,KAAa,IAAR7E,EAAE89L,OAAW,IAAIn5L,IAAIE,EAAE,OAAOzR,GAAGwjY,GAAG52X,EAAEC,GAAE,GAAIq5K,GAAGpjL,EAAE8J,EAAE4E,GAAGD,EAAE3E,EAAEgiX,UAAUwgB,GAAG7wY,QAAQqO,EAAE,IAAI8E,EAAED,GAAG,oBAAoB5E,EAAEgiY,yBAAyB,KAAKt9X,EAAEy7B,SAAwI,OAA/HpgC,EAAE89L,OAAO,EAAE,OAAO5nM,GAAG2O,GAAG7E,EAAE+mB,MAAM6sT,GAAG5zU,EAAE9J,EAAE6wB,MAAM,KAAKniB,GAAG5E,EAAE+mB,MAAM6sT,GAAG5zU,EAAE,KAAK8E,EAAEF,IAAI89X,GAAGxsY,EAAE8J,EAAE8E,EAAEF,GAAG5E,EAAEsjX,cAAc3+W,EAAEmuC,MAAM1/C,GAAGwjY,GAAG52X,EAAEC,GAAE,GAAWD,EAAE+mB,KAAM,UAAS68W,GAAG1tY,GAAG,IAAI8J,EAAE9J,EAAE8rX,UAAUhiX,EAAE6jY,eAAetN,GAAGrgY,EAAE8J,EAAE6jY,eAAe7jY,EAAE6jY,iBAAiB7jY,EAAEkK,SAASlK,EAAEkK,SAASqsX,GAAGrgY,EAAE8J,EAAEkK,SAAQ,GAAI8yX,GAAG9mY,EAAE8J,EAAEwnX,cAAe,CAC7e,SAASsc,GAAG5tY,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAuC,OAApCylY,KAAKC,GAAG1lY,GAAG4M,EAAE89L,OAAO,IAAI4kM,GAAGxsY,EAAE8J,EAAEC,EAAE0E,GAAU3E,EAAE+mB,KAAM,KAaqLg9W,GAAMC,GAAGC,GAb1LC,GAAG,CAAC3gB,WAAW,KAAK8U,YAAY,KAAKC,UAAU,GAAG,SAAS6L,GAAGjuY,GAAG,MAAM,CAAC8sY,UAAU9sY,EAAE+sY,UAAU,KAAKC,YAAY,KAAM,CACnM,SAASkB,GAAGluY,EAAE8J,EAAEC,GAAG,IAA0D6E,EAAtDH,EAAE3E,EAAEo4X,aAAahlY,EAAE2mQ,GAAEpoQ,QAAQiT,GAAE,EAAGC,EAAE,KAAa,IAAR7E,EAAE89L,OAAqJ,IAAvIh5L,EAAED,KAAKC,GAAE,OAAO5O,GAAG,OAAOA,EAAEotX,gBAAiB,KAAO,EAAFlwX,IAAS0R,GAAEF,GAAE,EAAG5E,EAAE89L,QAAQ,KAAY,OAAO5nM,GAAG,OAAOA,EAAEotX,gBAAclwX,GAAG,GAAEunQ,GAAEZ,GAAI,EAAF3mQ,GAAQ,OAAO8C,EAA2B,OAAxBsiY,GAAGx4X,GAAwB,QAArB9J,EAAE8J,EAAEsjX,gBAA2C,QAAfptX,EAAEA,EAAEqtX,aAA4B,KAAY,EAAPvjX,EAAE24C,MAAQ34C,EAAE65X,MAAM,EAAE,OAAO3jY,EAAE0U,KAAK5K,EAAE65X,MAAM,EAAE75X,EAAE65X,MAAM,WAAW,OAAKh1X,EAAEF,EAAE0U,SAASnjB,EAAEyO,EAAEw+H,SAAgBv+H,GAAGD,EAAE3E,EAAE24C,KAAK/zC,EAAE5E,EAAE+mB,MAAMliB,EAAE,CAAC8zC,KAAK,SAASt/B,SAASxU,GAAG,KAAO,EAAFF,IAAM,OAAOC,GAAGA,EAAE80X,WAAW,EAAE90X,EAAEwzX,aAC7evzX,GAAGD,EAAE85M,GAAG75M,EAAEF,EAAE,EAAE,MAAMzO,EAAEy9U,GAAGz9U,EAAEyO,EAAE1E,EAAE,MAAM2E,EAAEw+W,OAAOpjX,EAAE9J,EAAEktX,OAAOpjX,EAAE4E,EAAE4vI,QAAQt+I,EAAE8J,EAAE+mB,MAAMniB,EAAE5E,EAAE+mB,MAAMu8V,cAAc6gB,GAAGlkY,GAAGD,EAAEsjX,cAAc4gB,GAAGhuY,GAAGmuY,GAAGrkY,EAAE6E,IAAqB,GAAG,QAArBzR,EAAE8C,EAAEotX,gBAA2C,QAAfx+W,EAAE1R,EAAEmwX,YAAqB,OAGpM,SAAYrtX,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,GAAG,GAAG5E,EAAG,OAAW,IAARD,EAAE89L,OAAiB99L,EAAE89L,QAAQ,IAAwBwmM,GAAGpuY,EAAE8J,EAAE6E,EAA3BF,EAAE+8X,GAAG3jY,MAAM6J,EAAE,SAAsB,OAAO5H,EAAEsjX,eAAqBtjX,EAAE+mB,MAAM7wB,EAAE6wB,MAAM/mB,EAAE89L,OAAO,IAAI,OAAKl5L,EAAED,EAAEw+H,SAAS/vI,EAAE4M,EAAE24C,KAAKh0C,EAAE+5M,GAAG,CAAC/lK,KAAK,UAAUt/B,SAAS1U,EAAE0U,UAAUjmB,EAAE,EAAE,OAAMwR,EAAE+uU,GAAG/uU,EAAExR,EAAEyR,EAAE,OAAQi5L,OAAO,EAAEn5L,EAAEy+W,OAAOpjX,EAAE4E,EAAEw+W,OAAOpjX,EAAE2E,EAAE6vI,QAAQ5vI,EAAE5E,EAAE+mB,MAAMpiB,EAAE,KAAY,EAAP3E,EAAE24C,OAASi7R,GAAG5zU,EAAE9J,EAAE6wB,MAAM,KAAKliB,GAAG7E,EAAE+mB,MAAMu8V,cAAc6gB,GAAGt/X,GAAG7E,EAAEsjX,cAAc4gB,GAAUt/X,GAAE,GAAG,KAAY,EAAP5E,EAAE24C,MAAQ,OAAO2rV,GAAGpuY,EAAE8J,EAAE6E,EAAE,MAAM,GAAG,OAAOzR,EAAEwX,KAAK,CAChd,GADidjG,EAAEvR,EAAE48X,aAAa58X,EAAE48X,YAAYuU,QAC3e,IAAIz/X,EAAEH,EAAE6/X,KAA0C,OAArC7/X,EAAEG,EAA0Cw/X,GAAGpuY,EAAE8J,EAAE6E,EAA/BF,EAAE+8X,GAAlB98X,EAAE7G,MAAM6J,EAAE,MAAajD,OAAE,GAA2B,CAAuB,GAAvBG,EAAE,KAAKD,EAAE3O,EAAEwjY,YAAeI,IAAIh1X,EAAE,CAAK,GAAG,QAAPH,EAAE6uR,IAAc,CAAC,OAAO3uR,GAAGA,GAAG,KAAK,EAAEzR,EAAE,EAAE,MAAM,KAAK,GAAGA,EAAE,EAAE,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,SAASA,EAAE,GAAG,MAAM,KAAK,UAAUA,EAAE,UAAU,MAAM,QAAQA,EAAE,EAChd,KADkdA,EAAE,KAAKA,GAAGuR,EAAE2gX,eAAezgX,IAAI,EAAEzR,IAC5eA,IAAIwR,EAAE0zX,YAAY1zX,EAAE0zX,UAAUllY,EAAEinY,GAAGnkY,EAAE9C,GAAGmoY,GAAG52X,EAAEzO,EAAE9C,GAAG,GAAI,CAAyB,OAAzBqxY,KAAgCH,GAAGpuY,EAAE8J,EAAE6E,EAAlCF,EAAE+8X,GAAG3jY,MAAM6J,EAAE,OAA0B,OAAG,OAAOxU,EAAEwX,MAAY5K,EAAE89L,OAAO,IAAI99L,EAAE+mB,MAAM7wB,EAAE6wB,MAAM/mB,EAAE0kY,GAAGzuY,KAAK,KAAKC,GAAG9C,EAAEuxY,YAAY3kY,EAAE,OAAK9J,EAAE0O,EAAEyzX,YAAYP,GAAG5C,GAAG9hY,EAAE48X,aAAa6H,GAAG73X,EAAEstJ,IAAE,EAAGyqO,GAAG,KAAK,OAAO7hY,IAAIohY,GAAGC,MAAMl1M,GAAGi1M,GAAGC,MAAMtsJ,GAAGqsJ,GAAGC,MAAMC,GAAGn1M,GAAGnsL,EAAEjJ,GAAGg+O,GAAG/0O,EAAEqgI,SAASihQ,GAAGx3X,IAAGA,EAAEqkY,GAAGrkY,EAAE2E,EAAE0U,WAAYykL,OAAO,KAAY99L,EAAE,CALtK4kY,CAAG1uY,EAAE8J,EAAE6E,EAAEF,EAAEG,EAAE1R,EAAE6M,GAAG,GAAG2E,EAAE,CAACA,EAAED,EAAEw+H,SAASt+H,EAAE7E,EAAE24C,KAAe7zC,GAAV1R,EAAE8C,EAAE6wB,OAAUytH,QAAQ,IAAIrzE,EAAE,CAACxoB,KAAK,SAASt/B,SAAS1U,EAAE0U,UAChF,OAD0F,KAAO,EAAFxU,IAAM7E,EAAE+mB,QAAQ3zB,IAAGuR,EAAE3E,EAAE+mB,OAAQ2yW,WAAW,EAAE/0X,EAAEyzX,aAAaj3T,EAAEnhE,EAAEk4X,UAAU,OAAOvzX,EAAEi4X,GAAGxpY,EAAE+tE,IAAK0jU,aAA4B,SAAfzxY,EAAEyxY,aAAuB,OAAO//X,EAAEF,EAAEg4X,GAAG93X,EAAEF,IAAIA,EAAE+uU,GAAG/uU,EAAEC,EAAE5E,EAAE,OAAQ69L,OAAO,EAAGl5L,EAAEw+W,OACnfpjX,EAAE2E,EAAEy+W,OAAOpjX,EAAE2E,EAAE6vI,QAAQ5vI,EAAE5E,EAAE+mB,MAAMpiB,EAAEA,EAAEC,EAAEA,EAAE5E,EAAE+mB,MAA8BliB,EAAE,QAA1BA,EAAE3O,EAAE6wB,MAAMu8V,eAAyB6gB,GAAGlkY,GAAG,CAAC+iY,UAAUn+X,EAAEm+X,UAAU/iY,EAAEgjY,UAAU,KAAKC,YAAYr+X,EAAEq+X,aAAat+X,EAAE0+W,cAAcz+W,EAAED,EAAE80X,WAAWxjY,EAAEwjY,YAAYz5X,EAAED,EAAEsjX,cAAc4gB,GAAUv/X,CAAE,CAAmO,OAAzNzO,GAAV0O,EAAE1O,EAAE6wB,OAAUytH,QAAQ7vI,EAAEi4X,GAAGh4X,EAAE,CAAC+zC,KAAK,UAAUt/B,SAAS1U,EAAE0U,WAAW,KAAY,EAAPrZ,EAAE24C,QAAUh0C,EAAEk1X,MAAM55X,GAAG0E,EAAEy+W,OAAOpjX,EAAE2E,EAAE6vI,QAAQ,KAAK,OAAOt+I,IAAkB,QAAd+J,EAAED,EAAEk4X,YAAoBl4X,EAAEk4X,UAAU,CAAChiY,GAAG8J,EAAE89L,OAAO,IAAI79L,EAAEnV,KAAKoL,IAAI8J,EAAE+mB,MAAMpiB,EAAE3E,EAAEsjX,cAAc,KAAY3+W,CAAE,CACpd,SAAS0/X,GAAGnuY,EAAE8J,GAA8D,OAA3DA,EAAE0+M,GAAG,CAAC/lK,KAAK,UAAUt/B,SAASrZ,GAAG9J,EAAEyiD,KAAK,EAAE,OAAQyqU,OAAOltX,EAASA,EAAE6wB,MAAM/mB,CAAE,UAASskY,GAAGpuY,EAAE8J,EAAEC,EAAE0E,GAAwG,OAArG,OAAOA,GAAGm0X,GAAGn0X,GAAGivU,GAAG5zU,EAAE9J,EAAE6wB,MAAM,KAAK9mB,IAAG/J,EAAEmuY,GAAGrkY,EAAEA,EAAEo4X,aAAa/+W,WAAYykL,OAAO,EAAE99L,EAAEsjX,cAAc,KAAYptX,CAAE,CAGiJ,SAAS4uY,GAAG5uY,EAAE8J,EAAEC,GAAG/J,EAAE2jY,OAAO75X,EAAE,IAAI2E,EAAEzO,EAAEitX,UAAU,OAAOx+W,IAAIA,EAAEk1X,OAAO75X,GAAGy5X,GAAGvjY,EAAEktX,OAAOpjX,EAAEC,EAAG,CACzc,SAAS8kY,GAAG7uY,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,IAAIwR,EAAE1O,EAAEotX,cAAc,OAAO1+W,EAAE1O,EAAEotX,cAAc,CAAC0hB,YAAYhlY,EAAEilY,UAAU,KAAKC,mBAAmB,EAAEh9I,KAAKvjP,EAAEqqO,KAAK/uO,EAAEklY,SAAS/xY,IAAIwR,EAAEogY,YAAYhlY,EAAE4E,EAAEqgY,UAAU,KAAKrgY,EAAEsgY,mBAAmB,EAAEtgY,EAAEsjP,KAAKvjP,EAAEC,EAAEoqO,KAAK/uO,EAAE2E,EAAEugY,SAAS/xY,EAAG,CAC5O,SAASgyY,GAAGlvY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE3E,EAAEo4X,aAAahlY,EAAEuR,EAAE04X,YAAYz4X,EAAED,EAAEqqO,KAAsC,GAAjC0zJ,GAAGxsY,EAAE8J,EAAE2E,EAAE0U,SAASpZ,GAAkB,KAAO,GAAtB0E,EAAEo1P,GAAEpoQ,UAAqBgT,EAAI,EAAFA,EAAI,EAAE3E,EAAE89L,OAAO,QAAQ,CAAC,GAAG,OAAO5nM,GAAG,KAAa,IAARA,EAAE4nM,OAAW5nM,EAAE,IAAIA,EAAE8J,EAAE+mB,MAAM,OAAO7wB,GAAG,CAAC,GAAG,KAAKA,EAAEmtJ,IAAI,OAAOntJ,EAAEotX,eAAewhB,GAAG5uY,EAAE+J,EAAED,QAAQ,GAAG,KAAK9J,EAAEmtJ,IAAIyhP,GAAG5uY,EAAE+J,EAAED,QAAQ,GAAG,OAAO9J,EAAE6wB,MAAM,CAAC7wB,EAAE6wB,MAAMq8V,OAAOltX,EAAEA,EAAEA,EAAE6wB,MAAM,QAAS,IAAG7wB,IAAI8J,EAAE,MAAM9J,EAAE,KAAK,OAAOA,EAAEs+I,SAAS,CAAC,GAAG,OAAOt+I,EAAEktX,QAAQltX,EAAEktX,SAASpjX,EAAE,MAAM9J,EAAEA,EAAEA,EAAEktX,MAAO,CAAAltX,EAAEs+I,QAAQ4uO,OAAOltX,EAAEktX,OAAOltX,EAAEA,EAAEs+I,OAAQ,CAAA7vI,GAAG,CAAE,CAAO,GAAPg2P,GAAEZ,GAAEp1P,GAAM,KAAY,EAAP3E,EAAE24C,MAAQ34C,EAAEsjX,cAC/e,UAAU,OAAOlwX,GAAG,IAAK,WAAqB,IAAV6M,EAAED,EAAE+mB,MAAU3zB,EAAE,KAAK,OAAO6M,GAAiB,QAAd/J,EAAE+J,EAAEkjX,YAAoB,OAAOia,GAAGlnY,KAAK9C,EAAE6M,GAAGA,EAAEA,EAAEu0I,QAAY,QAAJv0I,EAAE7M,IAAYA,EAAE4M,EAAE+mB,MAAM/mB,EAAE+mB,MAAM,OAAO3zB,EAAE6M,EAAEu0I,QAAQv0I,EAAEu0I,QAAQ,MAAMuwP,GAAG/kY,GAAE,EAAG5M,EAAE6M,EAAE2E,GAAG,MAAM,IAAK,YAA6B,IAAjB3E,EAAE,KAAK7M,EAAE4M,EAAE+mB,MAAU/mB,EAAE+mB,MAAM,KAAK,OAAO3zB,GAAG,CAAe,GAAG,QAAjB8C,EAAE9C,EAAE+vX,YAAuB,OAAOia,GAAGlnY,GAAG,CAAC8J,EAAE+mB,MAAM3zB,EAAE,KAAM,CAAA8C,EAAE9C,EAAEohJ,QAAQphJ,EAAEohJ,QAAQv0I,EAAEA,EAAE7M,EAAEA,EAAE8C,CAAE,CAAA6uY,GAAG/kY,GAAE,EAAGC,EAAE,KAAK2E,GAAG,MAAM,IAAK,WAAWmgY,GAAG/kY,GAAE,EAAG,KAAK,UAAK,GAAQ,MAAM,QAAQA,EAAEsjX,cAAc,KAAK,OAAOtjX,EAAE+mB,KAAM,CAC9d,SAASw8W,GAAGrtY,EAAE8J,GAAG,KAAY,EAAPA,EAAE24C,OAAS,OAAOziD,IAAIA,EAAEitX,UAAU,KAAKnjX,EAAEmjX,UAAU,KAAKnjX,EAAE89L,OAAO,EAAG,UAASxkB,GAAGpjL,EAAE8J,EAAEC,GAAyD,GAAtD,OAAO/J,IAAI8J,EAAE2mH,aAAazwH,EAAEywH,cAAcwxN,IAAIn4U,EAAE65X,MAAS,KAAK55X,EAAED,EAAE05X,YAAY,OAAO,KAAK,GAAG,OAAOxjY,GAAG8J,EAAE+mB,QAAQ7wB,EAAE6wB,MAAM,MAAMhpB,MAAM6J,EAAE,MAAM,GAAG,OAAO5H,EAAE+mB,MAAM,CAA4C,IAAjC9mB,EAAE28X,GAAZ1mY,EAAE8J,EAAE+mB,MAAa7wB,EAAEkiY,cAAcp4X,EAAE+mB,MAAM9mB,EAAMA,EAAEmjX,OAAOpjX,EAAE,OAAO9J,EAAEs+I,SAASt+I,EAAEA,EAAEs+I,SAAQv0I,EAAEA,EAAEu0I,QAAQooP,GAAG1mY,EAAEA,EAAEkiY,eAAgBhV,OAAOpjX,EAAEC,EAAEu0I,QAAQ,IAAK,QAAOx0I,EAAE+mB,KAAM,CAO/a,SAASs+W,GAAGnvY,EAAE8J,GAAG,IAAIstJ,GAAE,OAAOp3J,EAAEivY,UAAU,IAAK,SAASnlY,EAAE9J,EAAE84O,KAAK,IAAI,IAAI/uO,EAAE,KAAK,OAAOD,GAAG,OAAOA,EAAEmjX,YAAYljX,EAAED,GAAGA,EAAEA,EAAEw0I,QAAQ,OAAOv0I,EAAE/J,EAAE84O,KAAK,KAAK/uO,EAAEu0I,QAAQ,KAAK,MAAM,IAAK,YAAYv0I,EAAE/J,EAAE84O,KAAK,IAAI,IAAIrqO,EAAE,KAAK,OAAO1E,GAAG,OAAOA,EAAEkjX,YAAYx+W,EAAE1E,GAAGA,EAAEA,EAAEu0I,QAAQ,OAAO7vI,EAAE3E,GAAG,OAAO9J,EAAE84O,KAAK94O,EAAE84O,KAAK,KAAK94O,EAAE84O,KAAKx6F,QAAQ,KAAK7vI,EAAE6vI,QAAQ,KAAM,CAC7U,SAAS6sB,GAAEnrK,GAAG,IAAI8J,EAAE,OAAO9J,EAAEitX,WAAWjtX,EAAEitX,UAAUp8V,QAAQ7wB,EAAE6wB,MAAM9mB,EAAE,EAAE0E,EAAE,EAAE,GAAG3E,EAAE,IAAI,IAAI5M,EAAE8C,EAAE6wB,MAAM,OAAO3zB,GAAG6M,GAAG7M,EAAEymY,MAAMzmY,EAAEsmY,WAAW/0X,GAAkB,SAAfvR,EAAEyxY,aAAsBlgY,GAAW,SAARvR,EAAE0qM,MAAe1qM,EAAEgwX,OAAOltX,EAAE9C,EAAEA,EAAEohJ,aAAa,IAAIphJ,EAAE8C,EAAE6wB,MAAM,OAAO3zB,GAAG6M,GAAG7M,EAAEymY,MAAMzmY,EAAEsmY,WAAW/0X,GAAGvR,EAAEyxY,aAAalgY,GAAGvR,EAAE0qM,MAAM1qM,EAAEgwX,OAAOltX,EAAE9C,EAAEA,EAAEohJ,QAAyC,OAAjCt+I,EAAE2uY,cAAclgY,EAAEzO,EAAEwjY,WAAWz5X,EAASD,CAAE,CAC9V,SAASslY,GAAGpvY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE3E,EAAEo4X,aAAmB,OAANR,GAAG53X,GAAUA,EAAEqjJ,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,OAAOge,GAAErhK,GAAG,KAAK,KAAK,EAUtD,KAAK,GAAG,OAAOo2X,GAAGp2X,EAAEvM,OAAO6iY,KAAKj1N,GAAErhK,GAAG,KAVqD,KAAK,EAA2Q,OAAzQ2E,EAAE3E,EAAEgiX,UAAUkb,KAAKpgH,GAAEg5G,IAAIh5G,GAAE7Y,IAAGs5H,KAAK54X,EAAEk/X,iBAAiBl/X,EAAEuF,QAAQvF,EAAEk/X,eAAel/X,EAAEk/X,eAAe,MAAS,OAAO3tY,GAAG,OAAOA,EAAE6wB,QAAM2xW,GAAG14X,GAAGA,EAAE89L,OAAO,EAAE,OAAO5nM,GAAGA,EAAEotX,cAAciE,cAAc,KAAa,IAARvnX,EAAE89L,SAAa99L,EAAE89L,OAAO,KAAK,OAAOi6L,KAAKwN,GAAGxN,IAAIA,GAAG,QAAe12N,GAAErhK,GAAU,KAAK,KAAK,EAAEm9X,GAAGn9X,GAAG,IAAI5M,EAAE2pY,GAAGD,GAAGnrY,SAC7e,GAATsO,EAAED,EAAEvM,KAAQ,OAAOyC,GAAG,MAAM8J,EAAEgiX,UAAUgiB,GAAG9tY,EAAE8J,EAAEC,EAAE0E,GAAKzO,EAAEpJ,MAAMkT,EAAElT,MAAMkT,EAAE89L,OAAO,IAAI99L,EAAE89L,OAAO,aAAa,CAAC,IAAIn5L,EAAE,CAAC,GAAG,OAAO3E,EAAEgiX,UAAU,MAAMjkX,MAAM6J,EAAE,MAAW,OAALy5J,GAAErhK,GAAU,IAAK,CAAiB,GAAjB9J,EAAE6mY,GAAGhpD,GAAGpiV,SAAY+mY,GAAG14X,GAAG,CAAC2E,EAAE3E,EAAEgiX,UAAU/hX,EAAED,EAAEvM,KAAK,IAAImR,EAAE5E,EAAE24X,cAA+C,OAAjCh0X,EAAE2wX,IAAIt1X,EAAE2E,EAAE4wX,IAAI3wX,EAAE1O,EAAE,KAAY,EAAP8J,EAAE24C,MAAe14C,GAAG,IAAK,SAASm/M,GAAE,SAASz6M,GAAGy6M,GAAE,QAAQz6M,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQy6M,GAAE,OAAOz6M,GAAG,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAIvR,EAAE,EAAEA,EAAE0/X,GAAG9nY,OAAOoI,IAAIgsN,GAAE0zK,GAAG1/X,GAAGuR,GAAG,MAAM,IAAK,SAASy6M,GAAE,QAAQz6M,GAAG,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAOy6M,GAAE,QACnhBz6M,GAAGy6M,GAAE,OAAOz6M,GAAG,MAAM,IAAK,UAAUy6M,GAAE,SAASz6M,GAAG,MAAM,IAAK,QAAQo4W,EAAGp4W,EAAEC,GAAGw6M,GAAE,UAAUz6M,GAAG,MAAM,IAAK,SAASA,EAAEk4W,cAAc,CAAC2oB,cAAc5gY,EAAE6gL,UAAU25B,GAAE,UAAUz6M,GAAG,MAAM,IAAK,WAAW+xL,GAAG/xL,EAAEC,GAAGw6M,GAAE,UAAUz6M,GAAkB,IAAI,IAAIE,KAAvBw8W,GAAGphX,EAAE2E,GAAGxR,EAAE,KAAkBwR,EAAE,GAAGA,EAAEu1J,eAAet1J,GAAG,CAAC,IAAIC,EAAEF,EAAEC,GAAG,aAAaA,EAAE,kBAAkBC,EAAEH,EAAE64W,cAAc14W,KAAI,IAAKF,EAAE6gY,0BAA0BnR,GAAG3vX,EAAE64W,YAAY14W,EAAE5O,GAAG9C,EAAE,CAAC,WAAW0R,IAAI,kBAAkBA,GAAGH,EAAE64W,cAAc,GAAG14W,KAAI,IAAKF,EAAE6gY,0BAA0BnR,GAAG3vX,EAAE64W,YAC1e14W,EAAE5O,GAAG9C,EAAE,CAAC,WAAW,GAAG0R,IAAIs0W,EAAGj/M,eAAet1J,IAAI,MAAMC,GAAG,aAAaD,GAAGu6M,GAAE,SAASz6M,EAAG,QAAO1E,GAAG,IAAK,QAAQm8W,EAAGz3W,GAAGs9V,GAAGt9V,EAAEC,GAAE,GAAI,MAAM,IAAK,WAAWw3W,EAAGz3W,GAAGkqJ,GAAGlqJ,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,MAAM,QAAQ,oBAAoBC,EAAEjZ,UAAUgZ,EAAE+gY,QAAQnR,IAAI5vX,EAAEvR,EAAE4M,EAAEu6X,YAAY51X,EAAE,OAAOA,IAAI3E,EAAE89L,OAAO,EAAG,KAAI,CAACj5L,EAAE,IAAIzR,EAAEgrX,SAAShrX,EAAEA,EAAE6pX,cAAc,iCAAiC/mX,IAAIA,EAAEunX,GAAGx9W,IAAI,iCAAiC/J,EAAE,WAAW+J,IAAG/J,EAAE2O,EAAEy/N,cAAc,QAASu5I,UAAU,qBAAuB3nX,EAAEA,EAAE6nX,YAAY7nX,EAAE4nX,aAC/f,kBAAkBn5W,EAAEmkN,GAAG5yN,EAAE2O,EAAEy/N,cAAcrkO,EAAE,CAAC6oN,GAAGnkN,EAAEmkN,MAAM5yN,EAAE2O,EAAEy/N,cAAcrkO,GAAG,WAAWA,IAAI4E,EAAE3O,EAAEyO,EAAE8gL,SAAS5gL,EAAE4gL,UAAS,EAAG9gL,EAAEiE,OAAO/D,EAAE+D,KAAKjE,EAAEiE,QAAQ1S,EAAE2O,EAAE4B,gBAAgBvQ,EAAE+J,GAAG/J,EAAEo/X,IAAIt1X,EAAE9J,EAAEq/X,IAAI5wX,EAAEo/X,GAAG7tY,EAAE8J,GAASA,EAAEgiX,UAAU9rX,EAAEA,EAAE,CAAW,OAAV2O,EAAEgmB,GAAG5qB,EAAE0E,GAAU1E,GAAG,IAAK,SAASm/M,GAAE,SAASlpN,GAAGkpN,GAAE,QAAQlpN,GAAG9C,EAAEuR,EAAE,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQy6M,GAAE,OAAOlpN,GAAG9C,EAAEuR,EAAE,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAIvR,EAAE,EAAEA,EAAE0/X,GAAG9nY,OAAOoI,IAAIgsN,GAAE0zK,GAAG1/X,GAAG8C,GAAG9C,EAAEuR,EAAE,MAAM,IAAK,SAASy6M,GAAE,QAAQlpN,GAAG9C,EAAEuR,EAAE,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAOy6M,GAAE,QAClflpN,GAAGkpN,GAAE,OAAOlpN,GAAG9C,EAAEuR,EAAE,MAAM,IAAK,UAAUy6M,GAAE,SAASlpN,GAAG9C,EAAEuR,EAAE,MAAM,IAAK,QAAQo4W,EAAG7mX,EAAEyO,GAAGvR,EAAEupX,EAAGzmX,EAAEyO,GAAGy6M,GAAE,UAAUlpN,GAAG,MAAM,IAAK,SAAiL,QAAQ9C,EAAEuR,QAAxK,IAAK,SAASzO,EAAE2mX,cAAc,CAAC2oB,cAAc7gY,EAAE8gL,UAAUryL,EAAE8rN,EAAE,CAAC,EAAEv6M,EAAE,CAAC5Z,WAAM,IAASq0N,GAAE,UAAUlpN,GAAG,MAAM,IAAK,WAAWwgM,GAAGxgM,EAAEyO,GAAGvR,EAAEkqX,GAAGpnX,EAAEyO,GAAGy6M,GAAE,UAAUlpN,GAAiC,IAAI0O,KAAhBy8W,GAAGphX,EAAE7M,GAAG0R,EAAE1R,EAAa,GAAG0R,EAAEq1J,eAAev1J,GAAG,CAAC,IAAIu8D,EAAEr8D,EAAEF,GAAG,UAAUA,EAAEg8W,GAAG1qX,EAAEirE,GAAG,4BAA4Bv8D,EAAuB,OAApBu8D,EAAEA,EAAEA,EAAEwzT,YAAO,IAAgBlkH,GAAGv6Q,EAAEirE,GAAI,aAAav8D,EAAE,kBAAkBu8D,GAAG,aAC7elhE,GAAG,KAAKkhE,IAAI+8S,GAAGhoX,EAAEirE,GAAG,kBAAkBA,GAAG+8S,GAAGhoX,EAAE,GAAGirE,GAAG,mCAAmCv8D,GAAG,6BAA6BA,GAAG,cAAcA,IAAIw0W,EAAGj/M,eAAev1J,GAAG,MAAMu8D,GAAG,aAAav8D,GAAGw6M,GAAE,SAASlpN,GAAG,MAAMirE,GAAG+4S,EAAGhkX,EAAE0O,EAAEu8D,EAAEt8D,GAAI,QAAO5E,GAAG,IAAK,QAAQm8W,EAAGlmX,GAAG+rW,GAAG/rW,EAAEyO,GAAE,GAAI,MAAM,IAAK,WAAWy3W,EAAGlmX,GAAG24J,GAAG34J,GAAG,MAAM,IAAK,SAAS,MAAMyO,EAAE5Z,OAAOmL,EAAEi/B,aAAa,QAAQ,GAAG+mV,EAAGv3W,EAAE5Z,QAAQ,MAAM,IAAK,SAASmL,EAAEuvL,WAAW9gL,EAAE8gL,SAAmB,OAAV7gL,EAAED,EAAE5Z,OAAc84N,GAAG3tN,IAAIyO,EAAE8gL,SAAS7gL,GAAE,GAAI,MAAMD,EAAE0oI,cAAcw2E,GAAG3tN,IAAIyO,EAAE8gL,SAAS9gL,EAAE0oI,cAClf,GAAI,MAAM,QAAQ,oBAAoBj6I,EAAEzH,UAAUuK,EAAEwvY,QAAQnR,IAAI,OAAOt0X,GAAG,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAW0E,IAAIA,EAAEghY,UAAU,MAAMzvY,EAAE,IAAK,MAAMyO,GAAE,EAAG,MAAMzO,EAAE,QAAQyO,GAAE,EAAI,CAAAA,IAAI3E,EAAE89L,OAAO,EAAG,QAAO99L,EAAElT,MAAMkT,EAAE89L,OAAO,IAAI99L,EAAE89L,OAAO,QAAS,CAAK,OAALz8B,GAAErhK,GAAU,KAAK,KAAK,EAAE,GAAG9J,GAAG,MAAM8J,EAAEgiX,UAAUiiB,GAAG/tY,EAAE8J,EAAE9J,EAAEyiY,cAAch0X,OAAO,CAAC,GAAG,kBAAkBA,GAAG,OAAO3E,EAAEgiX,UAAU,MAAMjkX,MAAM6J,EAAE,MAAsC,GAAhC3H,EAAE88X,GAAGD,GAAGnrY,SAASorY,GAAGhpD,GAAGpiV,SAAY+mY,GAAG14X,GAAG,CAAyC,GAAxC2E,EAAE3E,EAAEgiX,UAAU/hX,EAAED,EAAE24X,cAAch0X,EAAE2wX,IAAIt1X,GAAK4E,EAAED,EAAE05W,YAAYp+W,IAC/e,QADof/J,EACvf2hY,IAAY,OAAO3hY,EAAEmtJ,KAAK,KAAK,EAAEixO,GAAG3vX,EAAE05W,UAAUp+W,EAAE,KAAY,EAAP/J,EAAEyiD,OAAS,MAAM,KAAK,GAAE,IAAKziD,EAAEyiY,cAAc8M,0BAA0BnR,GAAG3vX,EAAE05W,UAAUp+W,EAAE,KAAY,EAAP/J,EAAEyiD,OAAS/zC,IAAI5E,EAAE89L,OAAO,EAAG,MAAKn5L,GAAG,IAAI1E,EAAEm+W,SAASn+W,EAAEA,EAAEg9W,eAAe2oB,eAAejhY,IAAK2wX,IAAIt1X,EAAEA,EAAEgiX,UAAUr9W,CAAE,CAAK,OAAL08J,GAAErhK,GAAU,KAAK,KAAK,GAA0B,GAAvB88Q,GAAE/iB,IAAGp1P,EAAE3E,EAAEsjX,cAAiB,OAAOptX,GAAG,OAAOA,EAAEotX,eAAe,OAAOptX,EAAEotX,cAAcC,WAAW,CAAC,GAAGj2N,IAAG,OAAOwqO,IAAI,KAAY,EAAP93X,EAAE24C,OAAS,KAAa,IAAR34C,EAAE89L,OAAW86L,KAAKC,KAAK74X,EAAE89L,OAAO,MAAMl5L,GAAE,OAAQ,GAAGA,EAAE8zX,GAAG14X,GAAG,OAAO2E,GAAG,OAAOA,EAAE4+W,WAAW,CAAC,GAAG,OAC5frtX,EAAE,CAAC,IAAI0O,EAAE,MAAM7G,MAAM6J,EAAE,MAAqD,KAA7BhD,EAAE,QAApBA,EAAE5E,EAAEsjX,eAAyB1+W,EAAE2+W,WAAW,MAAW,MAAMxlX,MAAM6J,EAAE,MAAMhD,EAAE0wX,IAAIt1X,CAAE,MAAK64X,KAAK,KAAa,IAAR74X,EAAE89L,SAAa99L,EAAEsjX,cAAc,MAAMtjX,EAAE89L,OAAO,EAAEz8B,GAAErhK,GAAG4E,GAAE,CAAG,MAAK,OAAOmzX,KAAKwN,GAAGxN,IAAIA,GAAG,MAAMnzX,GAAE,EAAG,IAAIA,EAAE,OAAe,MAAR5E,EAAE89L,MAAY99L,EAAE,IAAK,QAAG,KAAa,IAARA,EAAE89L,QAAkB99L,EAAE65X,MAAM55X,EAAED,KAAE2E,EAAE,OAAOA,MAAO,OAAOzO,GAAG,OAAOA,EAAEotX,gBAAgB3+W,IAAI3E,EAAE+mB,MAAM+2K,OAAO,KAAK,KAAY,EAAP99L,EAAE24C,QAAU,OAAOziD,GAAG,KAAe,EAAV6jQ,GAAEpoQ,SAAW,IAAI0lQ,KAAIA,GAAE,GAAGotI,OAAO,OAAOzkY,EAAEu6X,cAAcv6X,EAAE89L,OAAO,GAAGz8B,GAAErhK,GAAU,MAAK,KAAK,EAAE,OAAOk9X,KAC7e,OAAOhnY,GAAGm9X,GAAGrzX,EAAEgiX,UAAUwF,eAAenmN,GAAErhK,GAAG,KAAK,KAAK,GAAG,OAAOu5X,GAAGv5X,EAAEvM,KAAKusF,UAAUqhF,GAAErhK,GAAG,KAA+C,KAAK,GAA0B,GAAvB88Q,GAAE/iB,IAAwB,QAArBn1P,EAAE5E,EAAEsjX,eAA0B,OAAOjiN,GAAErhK,GAAG,KAAuC,GAAlC2E,EAAE,KAAa,IAAR3E,EAAE89L,OAA4B,QAAjBj5L,EAAED,EAAEqgY,WAAsB,GAAGtgY,EAAE0gY,GAAGzgY,GAAE,OAAQ,CAAC,GAAG,IAAIyyP,IAAG,OAAOnhQ,GAAG,KAAa,IAARA,EAAE4nM,OAAW,IAAI5nM,EAAE8J,EAAE+mB,MAAM,OAAO7wB,GAAG,CAAS,GAAG,QAAX2O,EAAEu4X,GAAGlnY,IAAe,CAAmG,IAAlG8J,EAAE89L,OAAO,IAAIunM,GAAGzgY,GAAE,GAAoB,QAAhBD,EAAEE,EAAE01X,eAAuBv6X,EAAEu6X,YAAY51X,EAAE3E,EAAE89L,OAAO,GAAG99L,EAAE6kY,aAAa,EAAElgY,EAAE1E,EAAMA,EAAED,EAAE+mB,MAAM,OAAO9mB,GAAO/J,EAAEyO,GAANC,EAAE3E,GAAQ69L,OAAO,SAC/d,QAAdj5L,EAAED,EAAEu+W,YAAoBv+W,EAAE80X,WAAW,EAAE90X,EAAEi1X,MAAM3jY,EAAE0O,EAAEmiB,MAAM,KAAKniB,EAAEigY,aAAa,EAAEjgY,EAAE+zX,cAAc,KAAK/zX,EAAE0+W,cAAc,KAAK1+W,EAAE21X,YAAY,KAAK31X,EAAE+hH,aAAa,KAAK/hH,EAAEo9W,UAAU,OAAOp9W,EAAE80X,WAAW70X,EAAE60X,WAAW90X,EAAEi1X,MAAMh1X,EAAEg1X,MAAMj1X,EAAEmiB,MAAMliB,EAAEkiB,MAAMniB,EAAEigY,aAAa,EAAEjgY,EAAEszX,UAAU,KAAKtzX,EAAE+zX,cAAc9zX,EAAE8zX,cAAc/zX,EAAE0+W,cAAcz+W,EAAEy+W,cAAc1+W,EAAE21X,YAAY11X,EAAE01X,YAAY31X,EAAEnR,KAAKoR,EAAEpR,KAAKyC,EAAE2O,EAAE8hH,aAAa/hH,EAAE+hH,aAAa,OAAOzwH,EAAE,KAAK,CAAC2jY,MAAM3jY,EAAE2jY,MAAMD,aAAa1jY,EAAE0jY,eAAe35X,EAAEA,EAAEu0I,QAA2B,OAAnBmmH,GAAEZ,GAAY,EAAVA,GAAEpoQ,QAAU,GAAUqO,EAAE+mB,KAAM,CAAA7wB,EAClgBA,EAAEs+I,OAAQ,QAAO5vI,EAAEoqO,MAAM7vB,KAAI0mL,KAAK7lY,EAAE89L,OAAO,IAAIn5L,GAAE,EAAG0gY,GAAGzgY,GAAE,GAAI5E,EAAE65X,MAAM,QAAS,KAAI,CAAC,IAAIl1X,EAAE,GAAW,QAARzO,EAAEknY,GAAGv4X,KAAa,GAAG7E,EAAE89L,OAAO,IAAIn5L,GAAE,EAAmB,QAAhB1E,EAAE/J,EAAEqkY,eAAuBv6X,EAAEu6X,YAAYt6X,EAAED,EAAE89L,OAAO,GAAGunM,GAAGzgY,GAAE,GAAI,OAAOA,EAAEoqO,MAAM,WAAWpqO,EAAEugY,WAAWtgY,EAAEs+W,YAAY71N,GAAE,OAAO+T,GAAErhK,GAAG,UAAU,EAAEm/M,KAAIv6M,EAAEsgY,mBAAmBW,IAAI,aAAa5lY,IAAID,EAAE89L,OAAO,IAAIn5L,GAAE,EAAG0gY,GAAGzgY,GAAE,GAAI5E,EAAE65X,MAAM,SAASj1X,EAAEogY,aAAangY,EAAE2vI,QAAQx0I,EAAE+mB,MAAM/mB,EAAE+mB,MAAMliB,IAAa,QAAT5E,EAAE2E,EAAEsjP,MAAcjoP,EAAEu0I,QAAQ3vI,EAAE7E,EAAE+mB,MAAMliB,EAAED,EAAEsjP,KAAKrjP,EAAG,QAAG,OAAOD,EAAEoqO,MAAYhvO,EAAE4E,EAAEoqO,KAAKpqO,EAAEqgY,UAC9ejlY,EAAE4E,EAAEoqO,KAAKhvO,EAAEw0I,QAAQ5vI,EAAEsgY,mBAAmB/lL,KAAIn/M,EAAEw0I,QAAQ,KAAKv0I,EAAE85P,GAAEpoQ,QAAQgpQ,GAAEZ,GAAEp1P,EAAI,EAAF1E,EAAI,EAAI,EAAFA,GAAKD,IAAEqhK,GAAErhK,GAAU,MAAK,KAAK,GAAG,KAAK,GAAG,OAAO8lY,KAAKnhY,EAAE,OAAO3E,EAAEsjX,cAAc,OAAOptX,GAAG,OAAOA,EAAEotX,gBAAgB3+W,IAAI3E,EAAE89L,OAAO,MAAMn5L,GAAG,KAAY,EAAP3E,EAAE24C,MAAQ,KAAQ,WAAHyqV,MAAiB/hO,GAAErhK,GAAkB,EAAfA,EAAE6kY,eAAiB7kY,EAAE89L,OAAO,OAAOz8B,GAAErhK,GAAG,KAAK,KAAK,GAAe,KAAK,GAAG,OAAO,KAAK,MAAMjC,MAAM6J,EAAE,IAAI5H,EAAEqjJ,KAAO,CACnX,SAAS0iP,GAAG7vY,EAAE8J,GAAS,OAAN43X,GAAG53X,GAAUA,EAAEqjJ,KAAK,KAAK,EAAE,OAAO+yO,GAAGp2X,EAAEvM,OAAO6iY,KAAiB,OAAZpgY,EAAE8J,EAAE89L,QAAe99L,EAAE89L,OAAS,MAAH5nM,EAAS,IAAI8J,GAAG,KAAK,KAAK,EAAE,OAAOk9X,KAAKpgH,GAAEg5G,IAAIh5G,GAAE7Y,IAAGs5H,KAAe,KAAO,OAAjBrnY,EAAE8J,EAAE89L,SAAqB,KAAO,IAAF5nM,IAAQ8J,EAAE89L,OAAS,MAAH5nM,EAAS,IAAI8J,GAAG,KAAK,KAAK,EAAE,OAAOm9X,GAAGn9X,GAAG,KAAK,KAAK,GAA0B,GAAvB88Q,GAAE/iB,IAAwB,QAArB7jQ,EAAE8J,EAAEsjX,gBAA2B,OAAOptX,EAAEqtX,WAAW,CAAC,GAAG,OAAOvjX,EAAEmjX,UAAU,MAAMplX,MAAM6J,EAAE,MAAMixX,IAAK,CAAU,OAAS,OAAnB3iY,EAAE8J,EAAE89L,QAAsB99L,EAAE89L,OAAS,MAAH5nM,EAAS,IAAI8J,GAAG,KAAK,KAAK,GAAG,OAAO88Q,GAAE/iB,IAAG,KAAK,KAAK,EAAE,OAAOmjI,KAAK,KAAK,KAAK,GAAG,OAAO3D,GAAGv5X,EAAEvM,KAAKusF,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO8lT,KAC1gB,KAAyB,QAAQ,OAAO,KAAM,CArB9C/B,GAAG,SAAS7tY,EAAE8J,GAAG,IAAI,IAAIC,EAAED,EAAE+mB,MAAM,OAAO9mB,GAAG,CAAC,GAAG,IAAIA,EAAEojJ,KAAK,IAAIpjJ,EAAEojJ,IAAIntJ,EAAE07H,YAAY3xH,EAAE+hX,gBAAgB,GAAG,IAAI/hX,EAAEojJ,KAAK,OAAOpjJ,EAAE8mB,MAAM,CAAC9mB,EAAE8mB,MAAMq8V,OAAOnjX,EAAEA,EAAEA,EAAE8mB,MAAM,QAAS,IAAG9mB,IAAID,EAAE,MAAM,KAAK,OAAOC,EAAEu0I,SAAS,CAAC,GAAG,OAAOv0I,EAAEmjX,QAAQnjX,EAAEmjX,SAASpjX,EAAE,OAAOC,EAAEA,EAAEmjX,MAAO,CAAAnjX,EAAEu0I,QAAQ4uO,OAAOnjX,EAAEmjX,OAAOnjX,EAAEA,EAAEu0I,OAAQ,CAAC,EACzSwvP,GAAG,SAAS9tY,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAE8C,EAAEyiY,cAAc,GAAGvlY,IAAIuR,EAAE,CAACzO,EAAE8J,EAAEgiX,UAAU+a,GAAGhpD,GAAGpiV,SAAS,IAA4RkT,EAAxRD,EAAE,KAAK,OAAO3E,GAAG,IAAK,QAAQ7M,EAAEupX,EAAGzmX,EAAE9C,GAAGuR,EAAEg4W,EAAGzmX,EAAEyO,GAAGC,EAAE,GAAG,MAAM,IAAK,SAASxR,EAAE8rN,EAAE,CAAC,EAAE9rN,EAAE,CAACrI,WAAM,IAAS4Z,EAAEu6M,EAAE,CAAC,EAAEv6M,EAAE,CAAC5Z,WAAM,IAAS6Z,EAAE,GAAG,MAAM,IAAK,WAAWxR,EAAEkqX,GAAGpnX,EAAE9C,GAAGuR,EAAE24W,GAAGpnX,EAAEyO,GAAGC,EAAE,GAAG,MAAM,QAAQ,oBAAoBxR,EAAEzH,SAAS,oBAAoBgZ,EAAEhZ,UAAUuK,EAAEwvY,QAAQnR,IAAyB,IAAIv4X,KAAzBqlX,GAAGphX,EAAE0E,GAAS1E,EAAE,KAAc7M,EAAE,IAAIuR,EAAEw1J,eAAen+J,IAAI5I,EAAE+mK,eAAen+J,IAAI,MAAM5I,EAAE4I,GAAG,GAAG,UAAUA,EAAE,CAAC,IAAI8I,EAAE1R,EAAE4I,GAAG,IAAI6I,KAAKC,EAAEA,EAAEq1J,eAAet1J,KACjf5E,IAAIA,EAAE,CAAC,GAAGA,EAAE4E,GAAG,GAAI,KAAI,4BAA4B7I,GAAG,aAAaA,GAAG,mCAAmCA,GAAG,6BAA6BA,GAAG,cAAcA,IAAIo9W,EAAGj/M,eAAen+J,GAAG4I,IAAIA,EAAE,KAAKA,EAAEA,GAAG,IAAI9Z,KAAKkR,EAAE,OAAO,IAAIA,KAAK2I,EAAE,CAAC,IAAIw8D,EAAEx8D,EAAE3I,GAAyB,GAAtB8I,EAAE,MAAM1R,EAAEA,EAAE4I,QAAG,EAAU2I,EAAEw1J,eAAen+J,IAAImlE,IAAIr8D,IAAI,MAAMq8D,GAAG,MAAMr8D,GAAG,GAAG,UAAU9I,EAAE,GAAG8I,EAAE,CAAC,IAAID,KAAKC,GAAGA,EAAEq1J,eAAet1J,IAAIs8D,GAAGA,EAAEg5F,eAAet1J,KAAK5E,IAAIA,EAAE,CAAC,GAAGA,EAAE4E,GAAG,IAAI,IAAIA,KAAKs8D,EAAEA,EAAEg5F,eAAet1J,IAAIC,EAAED,KAAKs8D,EAAEt8D,KAAK5E,IAAIA,EAAE,CAAC,GAAGA,EAAE4E,GAAGs8D,EAAEt8D,GAAI,MAAK5E,IAAI2E,IAAIA,EAAE,IAAIA,EAAE9Z,KAAKkR,EACpfiE,IAAIA,EAAEkhE,MAAM,4BAA4BnlE,GAAGmlE,EAAEA,EAAEA,EAAEwzT,YAAO,EAAO7vX,EAAEA,EAAEA,EAAE6vX,YAAO,EAAO,MAAMxzT,GAAGr8D,IAAIq8D,IAAIv8D,EAAEA,GAAG,IAAI9Z,KAAKkR,EAAEmlE,IAAI,aAAanlE,EAAE,kBAAkBmlE,GAAG,kBAAkBA,IAAIv8D,EAAEA,GAAG,IAAI9Z,KAAKkR,EAAE,GAAGmlE,GAAG,mCAAmCnlE,GAAG,6BAA6BA,IAAIo9W,EAAGj/M,eAAen+J,IAAI,MAAMmlE,GAAG,aAAanlE,GAAGojN,GAAE,SAASlpN,GAAG0O,GAAGE,IAAIq8D,IAAIv8D,EAAE,MAAMA,EAAEA,GAAG,IAAI9Z,KAAKkR,EAAEmlE,GAAI,CAAAlhE,IAAI2E,EAAEA,GAAG,IAAI9Z,KAAK,QAAQmV,GAAG,IAAIjE,EAAE4I,GAAK5E,EAAEu6X,YAAYv+X,KAAEgE,EAAE89L,OAAO,EAAE,CAAC,EAACmmM,GAAG,SAAS/tY,EAAE8J,EAAEC,EAAE0E,GAAG1E,IAAI0E,IAAI3E,EAAE89L,OAAO,EAAG,EAkBnb,IAAIkoM,IAAG,EAAG1/F,IAAE,EAAG2/F,GAAG,oBAAoB71D,QAAQA,QAAQ/5Q,IAAIghG,GAAE,KAAK,SAAS6uO,GAAGhwY,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEpJ,IAAI,GAAG,OAAOmT,EAAE,GAAG,oBAAoBA,EAAE,IAAIA,EAAE,KAAwB,CAAlB,MAAM0E,GAAG6vU,GAAEt+U,EAAE8J,EAAE2E,EAAG,MAAK1E,EAAEtO,QAAQ,IAAK,UAASw0Y,GAAGjwY,EAAE8J,EAAEC,GAAG,IAAIA,GAAsB,CAAlB,MAAM0E,GAAG6vU,GAAEt+U,EAAE8J,EAAE2E,EAAG,CAAC,KAAIyhY,IAAG,EAIxR,SAASC,GAAGnwY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE3E,EAAEu6X,YAAyC,GAAG,QAAhC51X,EAAE,OAAOA,EAAEA,EAAE06X,WAAW,MAAiB,CAAC,IAAIjsY,EAAEuR,EAAEA,EAAE/Z,KAAK,EAAE,CAAC,IAAIwI,EAAEiwJ,IAAIntJ,KAAKA,EAAE,CAAC,IAAI0O,EAAExR,EAAEzG,QAAQyG,EAAEzG,aAAQ,OAAO,IAASiY,GAAGuhY,GAAGnmY,EAAEC,EAAE2E,EAAG,CAAAxR,EAAEA,EAAExI,IAAK,OAAMwI,IAAIuR,EAAG,CAAC,UAAS2hY,GAAGpwY,EAAE8J,GAAgD,GAAG,QAAhCA,EAAE,QAAlBA,EAAEA,EAAEu6X,aAAuBv6X,EAAEq/X,WAAW,MAAiB,CAAC,IAAIp/X,EAAED,EAAEA,EAAEpV,KAAK,EAAE,CAAC,IAAIqV,EAAEojJ,IAAIntJ,KAAKA,EAAE,CAAC,IAAIyO,EAAE1E,EAAEhJ,OAAOgJ,EAAEtT,QAAQgY,GAAI,CAAA1E,EAAEA,EAAErV,IAAK,OAAMqV,IAAID,EAAG,CAAC,UAASumY,GAAGrwY,GAAG,IAAI8J,EAAE9J,EAAEpJ,IAAI,GAAG,OAAOkT,EAAE,CAAC,IAAIC,EAAE/J,EAAE8rX,UAAiB9rX,EAAEmtJ,IAA8BntJ,EAAE+J,EAAE,oBAAoBD,EAAEA,EAAE9J,GAAG8J,EAAErO,QAAQuE,CAAE,CAAC,CACnf,SAASswY,GAAGtwY,GAAG,IAAI8J,EAAE9J,EAAEitX,UAAU,OAAOnjX,IAAI9J,EAAEitX,UAAU,KAAKqjB,GAAGxmY,IAAI9J,EAAE6wB,MAAM,KAAK7wB,EAAEgiY,UAAU,KAAKhiY,EAAEs+I,QAAQ,KAAK,IAAIt+I,EAAEmtJ,MAAoB,QAAdrjJ,EAAE9J,EAAE8rX,oBAA4BhiX,EAAEs1X,WAAWt1X,EAAEu1X,WAAWv1X,EAAEkzX,WAAWlzX,EAAEw1X,WAAWx1X,EAAEy1X,MAAMv/X,EAAE8rX,UAAU,KAAK9rX,EAAEktX,OAAO,KAAKltX,EAAEywH,aAAa,KAAKzwH,EAAEyiY,cAAc,KAAKziY,EAAEotX,cAAc,KAAKptX,EAAEkiY,aAAa,KAAKliY,EAAE8rX,UAAU,KAAK9rX,EAAEqkY,YAAY,IAAK,UAASkM,GAAGvwY,GAAG,OAAO,IAAIA,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,GAAI,CACpa,SAASqjP,GAAGxwY,GAAGA,EAAE,OAAO,CAAC,KAAK,OAAOA,EAAEs+I,SAAS,CAAC,GAAG,OAAOt+I,EAAEktX,QAAQqjB,GAAGvwY,EAAEktX,QAAQ,OAAO,KAAKltX,EAAEA,EAAEktX,MAAO,CAA0B,IAA1BltX,EAAEs+I,QAAQ4uO,OAAOltX,EAAEktX,OAAWltX,EAAEA,EAAEs+I,QAAQ,IAAIt+I,EAAEmtJ,KAAK,IAAIntJ,EAAEmtJ,KAAK,KAAKntJ,EAAEmtJ,KAAK,CAAC,GAAW,EAARntJ,EAAE4nM,MAAQ,SAAS5nM,EAAE,GAAG,OAAOA,EAAE6wB,OAAO,IAAI7wB,EAAEmtJ,IAAI,SAASntJ,EAAOA,EAAE6wB,MAAMq8V,OAAOltX,EAAEA,EAAEA,EAAE6wB,KAAM,MAAa,EAAR7wB,EAAE4nM,OAAS,OAAO5nM,EAAE8rX,SAAU,CAAC,CAC1T,SAAS2kB,GAAGzwY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAEmtJ,IAAI,GAAG,IAAI1+I,GAAG,IAAIA,EAAEzO,EAAEA,EAAE8rX,UAAUhiX,EAAE,IAAIC,EAAEm+W,SAASn+W,EAAEyhX,WAAWklB,aAAa1wY,EAAE8J,GAAGC,EAAE2mY,aAAa1wY,EAAE8J,IAAI,IAAIC,EAAEm+W,UAAUp+W,EAAEC,EAAEyhX,YAAaklB,aAAa1wY,EAAE+J,IAAKD,EAAEC,GAAI2xH,YAAY17H,GAA4B,QAAxB+J,EAAEA,EAAE4mY,2BAA8B,IAAS5mY,GAAG,OAAOD,EAAE0lY,UAAU1lY,EAAE0lY,QAAQnR,UAAU,GAAG,IAAI5vX,GAAc,QAAVzO,EAAEA,EAAE6wB,OAAgB,IAAI4/W,GAAGzwY,EAAE8J,EAAEC,GAAG/J,EAAEA,EAAEs+I,QAAQ,OAAOt+I,GAAGywY,GAAGzwY,EAAE8J,EAAEC,GAAG/J,EAAEA,EAAEs+I,OAAQ,CAC3X,SAASsyP,GAAG5wY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAEmtJ,IAAI,GAAG,IAAI1+I,GAAG,IAAIA,EAAEzO,EAAEA,EAAE8rX,UAAUhiX,EAAEC,EAAE2mY,aAAa1wY,EAAE8J,GAAGC,EAAE2xH,YAAY17H,QAAQ,GAAG,IAAIyO,GAAc,QAAVzO,EAAEA,EAAE6wB,OAAgB,IAAI+/W,GAAG5wY,EAAE8J,EAAEC,GAAG/J,EAAEA,EAAEs+I,QAAQ,OAAOt+I,GAAG4wY,GAAG5wY,EAAE8J,EAAEC,GAAG/J,EAAEA,EAAEs+I,OAAQ,KAAIuyP,GAAE,KAAKC,IAAG,EAAG,SAASC,GAAG/wY,EAAE8J,EAAEC,GAAG,IAAIA,EAAEA,EAAE8mB,MAAM,OAAO9mB,GAAGinY,GAAGhxY,EAAE8J,EAAEC,GAAGA,EAAEA,EAAEu0I,OAAQ,CACpR,SAAS0yP,GAAGhxY,EAAE8J,EAAEC,GAAG,GAAG4kX,IAAI,oBAAoBA,GAAGsiB,qBAAqB,IAAItiB,GAAGsiB,qBAAqBviB,GAAG3kX,EAAa,CAAV,MAAM6E,GAAI,QAAO7E,EAAEojJ,KAAK,KAAK,EAAEijJ,IAAG4/F,GAAGjmY,EAAED,GAAG,KAAK,EAAE,IAAI2E,EAAEoiY,GAAE3zY,EAAE4zY,GAAGD,GAAE,KAAKE,GAAG/wY,EAAE8J,EAAEC,GAAO+mY,GAAG5zY,EAAE,QAAT2zY,GAAEpiY,KAAkBqiY,IAAI9wY,EAAE6wY,GAAE9mY,EAAEA,EAAE+hX,UAAU,IAAI9rX,EAAEkoX,SAASloX,EAAEwrX,WAAW3D,YAAY99W,GAAG/J,EAAE6nX,YAAY99W,IAAI8mY,GAAEhpB,YAAY99W,EAAE+hX,YAAY,MAAM,KAAK,GAAG,OAAO+kB,KAAIC,IAAI9wY,EAAE6wY,GAAE9mY,EAAEA,EAAE+hX,UAAU,IAAI9rX,EAAEkoX,SAAS6W,GAAG/+X,EAAEwrX,WAAWzhX,GAAG,IAAI/J,EAAEkoX,UAAU6W,GAAG/+X,EAAE+J,GAAGsgB,GAAGrqB,IAAI++X,GAAG8R,GAAE9mY,EAAE+hX,YAAY,MAAM,KAAK,EAAEr9W,EAAEoiY,GAAE3zY,EAAE4zY,GAAGD,GAAE9mY,EAAE+hX,UAAUwF,cAAcwf,IAAG,EAClfC,GAAG/wY,EAAE8J,EAAEC,GAAG8mY,GAAEpiY,EAAEqiY,GAAG5zY,EAAE,MAAM,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAIkzS,KAAoB,QAAhB3hS,EAAE1E,EAAEs6X,cAAsC,QAAf51X,EAAEA,EAAE06X,aAAsB,CAACjsY,EAAEuR,EAAEA,EAAE/Z,KAAK,EAAE,CAAC,IAAIga,EAAExR,EAAEyR,EAAED,EAAEjY,QAAQiY,EAAEA,EAAEy+I,SAAI,IAASx+I,IAAI,KAAO,EAAFD,IAAe,KAAO,EAAFA,KAAfuhY,GAAGlmY,EAAED,EAAE6E,GAAyBzR,EAAEA,EAAExI,IAAK,OAAMwI,IAAIuR,EAAG,CAAAsiY,GAAG/wY,EAAE8J,EAAEC,GAAG,MAAM,KAAK,EAAE,IAAIqmS,KAAI4/F,GAAGjmY,EAAED,GAAiB,oBAAd2E,EAAE1E,EAAE+hX,WAAgColB,sBAAsB,IAAIziY,EAAEtY,MAAM4T,EAAE04X,cAAch0X,EAAEmuC,MAAM7yC,EAAEqjX,cAAc3+W,EAAEyiY,sBAAyC,CAAlB,MAAMtiY,GAAG0vU,GAAEv0U,EAAED,EAAE8E,EAAG,CAAAmiY,GAAG/wY,EAAE8J,EAAEC,GAAG,MAAM,KAAK,GAAGgnY,GAAG/wY,EAAE8J,EAAEC,GAAG,MAAM,KAAK,GAAU,EAAPA,EAAE04C,MAAQ2tP,IAAG3hS,EAAE2hS,KAAI,OAChfrmS,EAAEqjX,cAAc2jB,GAAG/wY,EAAE8J,EAAEC,GAAGqmS,GAAE3hS,GAAGsiY,GAAG/wY,EAAE8J,EAAEC,GAAG,MAAM,QAAQgnY,GAAG/wY,EAAE8J,EAAEC,GAAI,UAASonY,GAAGnxY,GAAG,IAAI8J,EAAE9J,EAAEqkY,YAAY,GAAG,OAAOv6X,EAAE,CAAC9J,EAAEqkY,YAAY,KAAK,IAAIt6X,EAAE/J,EAAE8rX,UAAU,OAAO/hX,IAAIA,EAAE/J,EAAE8rX,UAAU,IAAIikB,IAAIjmY,EAAEvR,SAAQ,SAASuR,GAAG,IAAI2E,EAAEw3P,GAAGlmQ,KAAK,KAAKC,EAAE8J,GAAGC,EAAEtJ,IAAIqJ,KAAKC,EAAEkY,IAAInY,GAAGA,EAAE3K,KAAKsP,EAAEA,GAAI,GAAE,CAAC,CAC1Q,SAAS2iY,GAAGpxY,EAAE8J,GAAG,IAAIC,EAAED,EAAEk4X,UAAU,GAAG,OAAOj4X,EAAE,IAAI,IAAI0E,EAAE,EAAEA,EAAE1E,EAAEjV,OAAO2Z,IAAI,CAAC,IAAIvR,EAAE6M,EAAE0E,GAAG,IAAI,IAAIC,EAAE1O,EAAE2O,EAAE7E,EAAE8E,EAAED,EAAE3O,EAAE,KAAK,OAAO4O,GAAG,CAAC,OAAOA,EAAEu+I,KAAK,KAAK,EAAE0jP,GAAEjiY,EAAEk9W,UAAUglB,IAAG,EAAG,MAAM9wY,EAAE,KAAK,EAA4C,KAAK,EAAE6wY,GAAEjiY,EAAEk9W,UAAUwF,cAAcwf,IAAG,EAAG,MAAM9wY,EAAE4O,EAAEA,EAAEs+W,MAAO,IAAG,OAAO2jB,GAAE,MAAMhpY,MAAM6J,EAAE,MAAMs/X,GAAGtiY,EAAEC,EAAEzR,GAAG2zY,GAAE,KAAKC,IAAG,EAAG,IAAI7lU,EAAE/tE,EAAE+vX,UAAU,OAAOhiT,IAAIA,EAAEiiT,OAAO,MAAMhwX,EAAEgwX,OAAO,IAAuB,CAAlB,MAAMpnX,GAAGw4U,GAAEphV,EAAE4M,EAAEhE,EAAG,CAAC,IAAkB,MAAfgE,EAAE6kY,aAAmB,IAAI7kY,EAAEA,EAAE+mB,MAAM,OAAO/mB,GAAGunY,GAAGvnY,EAAE9J,GAAG8J,EAAEA,EAAEw0I,OAAQ,CACle,SAAS+yP,GAAGrxY,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEitX,UAAUx+W,EAAEzO,EAAE4nM,MAAM,OAAO5nM,EAAEmtJ,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAiB,GAAdikP,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAQ,EAAFyO,EAAI,CAAC,IAAI0hY,GAAG,EAAEnwY,EAAEA,EAAEktX,QAAQkjB,GAAG,EAAEpwY,EAA4B,CAAzB,MAAM+G,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,KAAIopY,GAAG,EAAEnwY,EAAEA,EAAEktX,OAAiC,CAAzB,MAAMnmX,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,CAAC,OAAM,KAAK,EAAEqqY,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAK,IAAFyO,GAAO,OAAO1E,GAAGimY,GAAGjmY,EAAEA,EAAEmjX,QAAQ,MAAM,KAAK,EAAgD,GAA9CkkB,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAK,IAAFyO,GAAO,OAAO1E,GAAGimY,GAAGjmY,EAAEA,EAAEmjX,QAAmB,GAARltX,EAAE4nM,MAAS,CAAC,IAAI1qM,EAAE8C,EAAE8rX,UAAU,IAAI9D,GAAG9qX,EAAE,GAA6B,CAAzB,MAAM6J,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,CAAC,IAAK,EAAF0H,GAAoB,OAAdvR,EAAE8C,EAAE8rX,WAAmB,CAAC,IAAIp9W,EAAE1O,EAAEyiY,cAAc9zX,EAAE,OAAO5E,EAAEA,EAAE04X,cAAc/zX,EAAEE,EAAE5O,EAAEzC,KAAK0tE,EAAEjrE,EAAEqkY,YACje,GAAnBrkY,EAAEqkY,YAAY,KAAQ,OAAOp5T,EAAE,IAAI,UAAUr8D,GAAG,UAAUF,EAAEnR,MAAM,MAAMmR,EAAE8B,MAAMgxB,EAAGtkC,EAAEwR,GAAGimB,GAAG/lB,EAAED,GAAG,IAAI7I,EAAE6uB,GAAG/lB,EAAEF,GAAG,IAAIC,EAAE,EAAEA,EAAEs8D,EAAEn2E,OAAO6Z,GAAG,EAAE,CAAC,IAAI9H,EAAEokE,EAAEt8D,GAAG9V,EAAEoyE,EAAEt8D,EAAE,GAAG,UAAU9H,EAAE6jX,GAAGxtX,EAAErE,GAAG,4BAA4BgO,EAAE0zQ,GAAGr9Q,EAAErE,GAAG,aAAagO,EAAEmhX,GAAG9qX,EAAErE,GAAGmrX,EAAG9mX,EAAE2J,EAAEhO,EAAEiN,EAAG,QAAO8I,GAAG,IAAK,QAAQolS,EAAG92S,EAAEwR,GAAG,MAAM,IAAK,WAAWomF,GAAG53F,EAAEwR,GAAG,MAAM,IAAK,SAAS,IAAIa,EAAErS,EAAEypX,cAAc2oB,YAAYpyY,EAAEypX,cAAc2oB,cAAc5gY,EAAE6gL,SAAS,IAAIp2L,EAAEuV,EAAE7Z,MAAM,MAAMsE,EAAEw0N,GAAGzwN,IAAIwR,EAAE6gL,SAASp2L,GAAE,GAAIoW,MAAMb,EAAE6gL,WAAW,MAAM7gL,EAAEyoI,aAAaw2E,GAAGzwN,IAAIwR,EAAE6gL,SACnf7gL,EAAEyoI,cAAa,GAAIw2E,GAAGzwN,IAAIwR,EAAE6gL,SAAS7gL,EAAE6gL,SAAS,GAAG,IAAG,IAAKryL,EAAEmiY,IAAI3wX,CAA2B,CAAzB,MAAM3H,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,CAAC,OAAM,KAAK,EAAgB,GAAdqqY,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAQ,EAAFyO,EAAI,CAAC,GAAG,OAAOzO,EAAE8rX,UAAU,MAAMjkX,MAAM6J,EAAE,MAAMxU,EAAE8C,EAAE8rX,UAAUp9W,EAAE1O,EAAEyiY,cAAc,IAAIvlY,EAAEirX,UAAUz5W,CAA2B,CAAzB,MAAM3H,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,CAAC,OAAM,KAAK,EAAgB,GAAdqqY,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAQ,EAAFyO,GAAK,OAAO1E,GAAGA,EAAEqjX,cAAciE,aAAa,IAAIhnW,GAAGvgB,EAAEwnX,cAAwC,CAAzB,MAAMvqX,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,OAAM,KAAK,EAG4G,QAAQqqY,GAAGtnY,EACnf9J,GAAGsxY,GAAGtxY,SAJ4Y,KAAK,GAAGoxY,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAqB,MAAlB9C,EAAE8C,EAAE6wB,OAAQ+2K,QAAal5L,EAAE,OAAOxR,EAAEkwX,cAAclwX,EAAE4uX,UAAUylB,SAAS7iY,GAAGA,GAClf,OAAOxR,EAAE+vX,WAAW,OAAO/vX,EAAE+vX,UAAUG,gBAAgBokB,GAAGvoL,OAAQ,EAAFx6M,GAAK0iY,GAAGnxY,GAAG,MAAM,KAAK,GAAsF,GAAnF6G,EAAE,OAAOkD,GAAG,OAAOA,EAAEqjX,cAAqB,EAAPptX,EAAEyiD,MAAQ2tP,IAAGtqS,EAAEsqS,KAAIvpS,EAAEuqY,GAAGtnY,EAAE9J,GAAGowS,GAAEtqS,GAAGsrY,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAQ,KAAFyO,EAAO,CAA0B,GAAzB3I,EAAE,OAAO9F,EAAEotX,eAAkBptX,EAAE8rX,UAAUylB,SAASzrY,KAAKe,GAAG,KAAY,EAAP7G,EAAEyiD,MAAQ,IAAI0+G,GAAEnhK,EAAE6G,EAAE7G,EAAE6wB,MAAM,OAAOhqB,GAAG,CAAC,IAAIhO,EAAEsoK,GAAEt6J,EAAE,OAAOs6J,IAAG,CAAe,OAAVhoK,GAAJoW,EAAE4xJ,IAAMtwI,MAAathB,EAAE49I,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAGgjP,GAAG,EAAE5gY,EAAEA,EAAE29W,QAAQ,MAAM,KAAK,EAAE8iB,GAAGzgY,EAAEA,EAAE29W,QAAQ,IAAItmX,EAAE2I,EAAEu8W,UAAU,GAAG,oBAAoBllX,EAAEsqY,qBAAqB,CAACziY,EAAEc,EAAExF,EAAEwF,EAAE29W,OAAO,IAAIpjX,EAAE2E,EAAE7H,EAAEzQ,MACpf2T,EAAE24X,cAAc77X,EAAEg2C,MAAM9yC,EAAEsjX,cAAcxmX,EAAEsqY,sBAAyC,CAAlB,MAAMnqY,GAAGu3U,GAAE7vU,EAAE1E,EAAEhD,EAAG,CAAC,OAAM,KAAK,EAAEipY,GAAGzgY,EAAEA,EAAE29W,QAAQ,MAAM,KAAK,GAAG,GAAG,OAAO39W,EAAE69W,cAAc,CAACqkB,GAAG54Y,GAAG,QAAS,EAAC,OAAOM,GAAGA,EAAE+zX,OAAO39W,EAAE4xJ,GAAEhoK,GAAGs4Y,GAAG54Y,EAAG,CAAAgO,EAAEA,EAAEy3I,OAAQ,CAAAt+I,EAAE,IAAI6G,EAAE,KAAKhO,EAAEmH,IAAI,CAAC,GAAG,IAAInH,EAAEs0J,KAAK,GAAG,OAAOtmJ,EAAE,CAACA,EAAEhO,EAAE,IAAIqE,EAAErE,EAAEizX,UAAUhmX,EAAa,oBAAV4I,EAAExR,EAAExG,OAA4By+U,YAAYzmU,EAAEymU,YAAY,UAAU,OAAO,aAAazmU,EAAEg7E,QAAQ,QAAS96E,EAAE/V,EAAEizX,UAAkCn9W,OAAE,KAA1Bs8D,EAAEpyE,EAAE4pY,cAAc/rY,QAAoB,OAAOu0E,GAAGA,EAAEg5F,eAAe,WAAWh5F,EAAEye,QAAQ,KAAK96E,EAAElY,MAAMgzF,QACzfk8H,GAAG,UAAUj3M,GAA6B,CAAzB,MAAM5H,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,CAAC,OAAM,GAAG,IAAIlO,EAAEs0J,KAAK,GAAG,OAAOtmJ,EAAE,IAAIhO,EAAEizX,UAAU3D,UAAUriX,EAAE,GAAGjN,EAAE4pY,aAAuC,CAAzB,MAAM17X,GAAGu3U,GAAEt+U,EAAEA,EAAEktX,OAAOnmX,EAAG,OAAM,IAAI,KAAKlO,EAAEs0J,KAAK,KAAKt0J,EAAEs0J,KAAK,OAAOt0J,EAAEu0X,eAAev0X,IAAImH,IAAI,OAAOnH,EAAEg4B,MAAM,CAACh4B,EAAEg4B,MAAMq8V,OAAOr0X,EAAEA,EAAEA,EAAEg4B,MAAM,QAAS,IAAGh4B,IAAImH,EAAE,MAAMA,EAAE,KAAK,OAAOnH,EAAEylJ,SAAS,CAAC,GAAG,OAAOzlJ,EAAEq0X,QAAQr0X,EAAEq0X,SAASltX,EAAE,MAAMA,EAAE6G,IAAIhO,IAAIgO,EAAE,MAAMhO,EAAEA,EAAEq0X,MAAO,CAAArmX,IAAIhO,IAAIgO,EAAE,MAAMhO,EAAEylJ,QAAQ4uO,OAAOr0X,EAAEq0X,OAAOr0X,EAAEA,EAAEylJ,OAAQ,CAAC,OAAM,KAAK,GAAG8yP,GAAGtnY,EAAE9J,GAAGsxY,GAAGtxY,GAAK,EAAFyO,GAAK0iY,GAAGnxY,GAAS,KAAK,IACrd,UAASsxY,GAAGtxY,GAAG,IAAI8J,EAAE9J,EAAE4nM,MAAM,GAAK,EAAF99L,EAAI,CAAC,IAAI9J,EAAE,CAAC,IAAI,IAAI+J,EAAE/J,EAAEktX,OAAO,OAAOnjX,GAAG,CAAC,GAAGwmY,GAAGxmY,GAAG,CAAC,IAAI0E,EAAE1E,EAAE,MAAM/J,CAAE,CAAA+J,EAAEA,EAAEmjX,MAAO,OAAMrlX,MAAM6J,EAAE,KAAO,QAAOjD,EAAE0+I,KAAK,KAAK,EAAE,IAAIjwJ,EAAEuR,EAAEq9W,UAAkB,GAARr9W,EAAEm5L,QAAWogL,GAAG9qX,EAAE,IAAIuR,EAAEm5L,QAAQ,IAAgBgpM,GAAG5wY,EAATwwY,GAAGxwY,GAAU9C,GAAG,MAAM,KAAK,EAAE,KAAK,EAAE,IAAIyR,EAAEF,EAAEq9W,UAAUwF,cAAsBmf,GAAGzwY,EAATwwY,GAAGxwY,GAAU2O,GAAG,MAAM,QAAQ,MAAM9G,MAAM6J,EAAE,MAAiC,CAAzB,MAAMu5D,GAAGqzQ,GAAEt+U,EAAEA,EAAEktX,OAAOjiT,EAAG,CAAAjrE,EAAE4nM,QAAQ,CAAE,CAAE,KAAF99L,IAAS9J,EAAE4nM,QAAQ,KAAM,UAASs9D,GAAGllQ,EAAE8J,EAAEC,GAAGo3J,GAAEnhK,EAAE0xY,GAAG1xY,EAAE8J,EAAEC,EAAG,CACxb,SAAS2nY,GAAG1xY,EAAE8J,EAAEC,GAAG,IAAI,IAAI0E,EAAE,KAAY,EAAPzO,EAAEyiD,MAAQ,OAAO0+G,IAAG,CAAC,IAAIjkK,EAAEikK,GAAEzyJ,EAAExR,EAAE2zB,MAAM,GAAG,KAAK3zB,EAAEiwJ,KAAK1+I,EAAE,CAAC,IAAIE,EAAE,OAAOzR,EAAEkwX,eAAe0iB,GAAG,IAAInhY,EAAE,CAAC,IAAIC,EAAE1R,EAAE+vX,UAAUhiT,EAAE,OAAOr8D,GAAG,OAAOA,EAAEw+W,eAAeh9E,GAAExhS,EAAEkhY,GAAG,IAAIhqY,EAAEsqS,GAAO,GAAL0/F,GAAGnhY,GAAMyhS,GAAEnlO,KAAKnlE,EAAE,IAAIq7J,GAAEjkK,EAAE,OAAOikK,IAAOl2F,GAAJt8D,EAAEwyJ,IAAMtwI,MAAM,KAAKliB,EAAEw+I,KAAK,OAAOx+I,EAAEy+W,cAAcukB,GAAGz0Y,GAAG,OAAO+tE,GAAGA,EAAEiiT,OAAOv+W,EAAEwyJ,GAAEl2F,GAAG0mU,GAAGz0Y,GAAG,KAAK,OAAOwR,GAAGyyJ,GAAEzyJ,EAAEgjY,GAAGhjY,EAAE5E,EAAEC,GAAG2E,EAAEA,EAAE4vI,QAAQ6iB,GAAEjkK,EAAE4yY,GAAGlhY,EAAEwhS,GAAEtqS,CAAE,CAAA8rY,GAAG5xY,EAAO,MAAK,KAAoB,KAAf9C,EAAEyxY,eAAoB,OAAOjgY,GAAGA,EAAEw+W,OAAOhwX,EAAEikK,GAAEzyJ,GAAGkjY,GAAG5xY,EAAO,CAAC,CACxc,SAAS4xY,GAAG5xY,GAAG,KAAK,OAAOmhK,IAAG,CAAC,IAAIr3J,EAAEq3J,GAAE,GAAG,KAAa,KAARr3J,EAAE89L,OAAY,CAAC,IAAI79L,EAAED,EAAEmjX,UAAU,IAAI,GAAG,KAAa,KAARnjX,EAAE89L,OAAY,OAAO99L,EAAEqjJ,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGijJ,IAAGggG,GAAG,EAAEtmY,GAAG,MAAM,KAAK,EAAE,IAAI2E,EAAE3E,EAAEgiX,UAAU,GAAW,EAARhiX,EAAE89L,QAAUwoG,GAAE,GAAG,OAAOrmS,EAAE0E,EAAE23X,wBAAwB,CAAC,IAAIlpY,EAAE4M,EAAEoxW,cAAcpxW,EAAEvM,KAAKwM,EAAE04X,cAAcK,GAAGh5X,EAAEvM,KAAKwM,EAAE04X,eAAeh0X,EAAE++X,mBAAmBtwY,EAAE6M,EAAEqjX,cAAc3+W,EAAEojY,oCAAqC,KAAInjY,EAAE5E,EAAEu6X,YAAY,OAAO31X,GAAGk2X,GAAG96X,EAAE4E,EAAED,GAAG,MAAM,KAAK,EAAE,IAAIE,EAAE7E,EAAEu6X,YAAY,GAAG,OAAO11X,EAAE,CAAQ,GAAP5E,EAAE,KAAQ,OAAOD,EAAE+mB,MAAM,OAAO/mB,EAAE+mB,MAAMs8H,KAAK,KAAK,EACvf,KAAK,EAAEpjJ,EAAED,EAAE+mB,MAAMi7V,UAAU8Y,GAAG96X,EAAE6E,EAAE5E,EAAG,OAAM,KAAK,EAAE,IAAI6E,EAAE9E,EAAEgiX,UAAU,GAAG,OAAO/hX,GAAW,EAARD,EAAE89L,MAAQ,CAAC79L,EAAE6E,EAAE,IAAIq8D,EAAEnhE,EAAE24X,cAAc,OAAO34X,EAAEvM,MAAM,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAW0tE,EAAEwkU,WAAW1lY,EAAEg+B,QAAQ,MAAM,IAAK,MAAMkjC,EAAE31E,MAAMyU,EAAEzU,IAAI21E,EAAE31E,KAAM,OAAM,KAAK,EAAQ,KAAK,EAAQ,KAAK,GAAyJ,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAhM,KAAK,GAAG,GAAG,OAAOwU,EAAEsjX,cAAc,CAAC,IAAItnX,EAAEgE,EAAEmjX,UAAU,GAAG,OAAOnnX,EAAE,CAAC,IAAIe,EAAEf,EAAEsnX,cAAc,GAAG,OAAOvmX,EAAE,CAAC,IAAIhO,EAAEgO,EAAEwmX,WAAW,OAAOx0X,GAAGwxB,GAAGxxB,EAAG,CAAC,CAAC,OAC5c,QAAQ,MAAMgP,MAAM6J,EAAE,MAAO0+R,IAAW,IAARtmS,EAAE89L,OAAWyoM,GAAGvmY,EAA4B,CAAzB,MAAMyF,GAAG+uU,GAAEx0U,EAAEA,EAAEojX,OAAO39W,EAAG,CAAC,IAAGzF,IAAI9J,EAAE,CAACmhK,GAAE,KAAK,KAAM,CAAY,GAAG,QAAfp3J,EAAED,EAAEw0I,SAAoB,CAACv0I,EAAEmjX,OAAOpjX,EAAEojX,OAAO/rN,GAAEp3J,EAAE,KAAM,CAAAo3J,GAAEr3J,EAAEojX,MAAO,CAAC,UAASukB,GAAGzxY,GAAG,KAAK,OAAOmhK,IAAG,CAAC,IAAIr3J,EAAEq3J,GAAE,GAAGr3J,IAAI9J,EAAE,CAACmhK,GAAE,KAAK,KAAM,KAAIp3J,EAAED,EAAEw0I,QAAQ,GAAG,OAAOv0I,EAAE,CAACA,EAAEmjX,OAAOpjX,EAAEojX,OAAO/rN,GAAEp3J,EAAE,KAAM,CAAAo3J,GAAEr3J,EAAEojX,MAAO,CAAC,CACxS,SAASykB,GAAG3xY,GAAG,KAAK,OAAOmhK,IAAG,CAAC,IAAIr3J,EAAEq3J,GAAE,IAAI,OAAOr3J,EAAEqjJ,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,IAAIpjJ,EAAED,EAAEojX,OAAO,IAAIkjB,GAAG,EAAEtmY,EAAqB,CAAlB,MAAMmhE,GAAGqzQ,GAAEx0U,EAAEC,EAAEkhE,EAAG,OAAM,KAAK,EAAE,IAAIx8D,EAAE3E,EAAEgiX,UAAU,GAAG,oBAAoBr9W,EAAE23X,kBAAkB,CAAC,IAAIlpY,EAAE4M,EAAEojX,OAAO,IAAIz+W,EAAE23X,mBAAsC,CAAlB,MAAMn7T,GAAGqzQ,GAAEx0U,EAAE5M,EAAE+tE,EAAG,CAAC,KAAIv8D,EAAE5E,EAAEojX,OAAO,IAAImjB,GAAGvmY,EAAqB,CAAlB,MAAMmhE,GAAGqzQ,GAAEx0U,EAAE4E,EAAEu8D,EAAG,OAAM,KAAK,EAAE,IAAIt8D,EAAE7E,EAAEojX,OAAO,IAAImjB,GAAGvmY,EAAqB,CAAlB,MAAMmhE,GAAGqzQ,GAAEx0U,EAAE6E,EAAEs8D,EAAG,EAA2B,CAAzB,MAAMA,GAAGqzQ,GAAEx0U,EAAEA,EAAEojX,OAAOjiT,EAAG,IAAGnhE,IAAI9J,EAAE,CAACmhK,GAAE,KAAK,KAAM,KAAIvyJ,EAAE9E,EAAEw0I,QAAQ,GAAG,OAAO1vI,EAAE,CAACA,EAAEs+W,OAAOpjX,EAAEojX,OAAO/rN,GAAEvyJ,EAAE,KAAM,CAAAuyJ,GAAEr3J,EAAEojX,MAAO,CAAC,CAC9d,IAwBkN4kB,GAxB9MC,GAAG11Y,KAAK8K,KAAK6qY,GAAGnhD,EAAG22C,uBAAuB/vM,GAAGo5J,EAAG07C,kBAAkBz1F,GAAG+5C,EAAG+gC,wBAAwB1wN,GAAE,EAAEo8H,GAAE,KAAK20G,GAAE,KAAKC,GAAE,EAAEhF,GAAG,EAAED,GAAGvN,GAAG,GAAGv+H,GAAE,EAAEgxI,GAAG,KAAKlwD,GAAG,EAAEmwD,GAAG,EAAEC,GAAG,EAAE5lO,GAAG,KAAK6lO,GAAG,KAAKd,GAAG,EAAE7B,GAAGruX,IAASixX,GAAG,KAAK3G,IAAG,EAAGC,GAAG,KAAKzgO,GAAG,KAAKonO,IAAG,EAAGC,GAAG,KAAKC,GAAG,EAAEC,GAAG,EAAEC,GAAG,KAAKC,IAAI,EAAEC,GAAG,EAAE,SAAS3N,KAAI,OAAO,KAAO,EAAFjkO,IAAK+nD,MAAK,IAAI4pL,GAAGA,GAAGA,GAAG5pL,IAAI,CACjU,SAASm8K,GAAGplY,GAAG,OAAG,KAAY,EAAPA,EAAEyiD,MAAe,EAAK,KAAO,EAAFy+G,KAAM,IAAIgxO,GAASA,IAAGA,GAAK,OAAOrP,GAAGnmY,YAAkB,IAAIo2Y,KAAKA,GAAGtjB,MAAMsjB,IAAU,KAAP9yY,EAAEkxL,IAAkBlxL,EAAiBA,OAAE,KAAjBA,EAAEjH,OAAO4M,OAAmB,GAAGwsX,GAAGnyX,EAAEzC,KAAe,UAAS8nY,GAAGrlY,EAAE8J,EAAEC,EAAE0E,GAAG,GAAG,GAAGkkY,GAAG,MAAMA,GAAG,EAAEC,GAAG,KAAK/qY,MAAM6J,EAAE,MAAMg+W,GAAG1vX,EAAE+J,EAAE0E,GAAM,KAAO,EAAFyyJ,KAAMlhK,IAAIs9R,KAAEt9R,IAAIs9R,KAAI,KAAO,EAAFp8H,MAAOkxO,IAAIroY,GAAG,IAAIo3P,IAAG4xI,GAAG/yY,EAAEkyY,KAAIc,GAAGhzY,EAAEyO,GAAG,IAAI1E,GAAG,IAAIm3J,IAAG,KAAY,EAAPp3J,EAAE24C,QAAUktV,GAAG1mL,KAAI,IAAI23K,IAAIG,MAAM,CAC3Y,SAASiS,GAAGhzY,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEizY,cA5MzB,SAAYjzY,EAAE8J,GAAG,IAAI,IAAIC,EAAE/J,EAAEovX,eAAe3gX,EAAEzO,EAAEqvX,YAAYnyX,EAAE8C,EAAEkzY,gBAAgBxkY,EAAE1O,EAAEmvX,aAAa,EAAEzgX,GAAG,CAAC,IAAIC,EAAE,GAAGigX,GAAGlgX,GAAGE,EAAE,GAAGD,EAAEs8D,EAAE/tE,EAAEyR,IAAO,IAAIs8D,EAAM,KAAKr8D,EAAE7E,IAAI,KAAK6E,EAAEH,KAAGvR,EAAEyR,GAAG4lB,GAAG3lB,EAAE9E,IAAQmhE,GAAGnhE,IAAI9J,EAAEmzY,cAAcvkY,GAAGF,IAAIE,CAAE,CAAC,CA4MpLwkY,CAAGpzY,EAAE8J,GAAG,IAAI2E,EAAEygX,GAAGlvX,EAAEA,IAAIs9R,GAAE40G,GAAE,GAAG,GAAG,IAAIzjY,EAAE,OAAO1E,GAAGqgB,GAAGrgB,GAAG/J,EAAEizY,aAAa,KAAKjzY,EAAEqzY,iBAAiB,OAAO,GAAGvpY,EAAE2E,GAAGA,EAAEzO,EAAEqzY,mBAAmBvpY,EAAE,CAAgB,GAAf,MAAMC,GAAGqgB,GAAGrgB,GAAM,IAAID,EAAE,IAAI9J,EAAEmtJ,IA7IsJ,SAAYntJ,GAAG4gY,IAAG,EAAGE,GAAG9gY,EAAG,CA6I7KszY,CAAGC,GAAGxzY,KAAK,KAAKC,IAAI8gY,GAAGyS,GAAGxzY,KAAK,KAAKC,IAAI6+X,IAAG,WAAW,KAAO,EAAF39N,KAAM6/N,IAAK,IAAEh3X,EAAE,SAAS,CAAC,OAAO8lX,GAAGphX,IAAI,KAAK,EAAE1E,EAAEkkX,GAAG,MAAM,KAAK,EAAElkX,EAAEokX,GAAG,MAAM,KAAK,GAAwC,QAAQpkX,EAAEskX,SAApC,KAAK,UAAUtkX,EAAEykX,GAAsBzkX,EAAEypY,GAAGzpY,EAAE0pY,GAAG1zY,KAAK,KAAKC,GAAI,CAAAA,EAAEqzY,iBAAiBvpY,EAAE9J,EAAEizY,aAAalpY,CAAE,CAAC,CAC9c,SAAS0pY,GAAGzzY,EAAE8J,GAAc,GAAX+oY,IAAI,EAAEC,GAAG,EAAK,KAAO,EAAF5xO,IAAK,MAAMr5J,MAAM6J,EAAE,MAAM,IAAI3H,EAAE/J,EAAEizY,aAAa,GAAGS,MAAM1zY,EAAEizY,eAAelpY,EAAE,OAAO,KAAK,IAAI0E,EAAEygX,GAAGlvX,EAAEA,IAAIs9R,GAAE40G,GAAE,GAAG,GAAG,IAAIzjY,EAAE,OAAO,KAAK,GAAG,KAAO,GAAFA,IAAO,KAAKA,EAAEzO,EAAEmzY,eAAerpY,EAAEA,EAAE6pY,GAAG3zY,EAAEyO,OAAO,CAAC3E,EAAE2E,EAAE,IAAIvR,EAAEgkK,GAAEA,IAAG,EAAE,IAAIxyJ,EAAEklY,KAAgD,IAAxCt2G,KAAIt9R,GAAGkyY,KAAIpoY,IAAEyoY,GAAG,KAAK5C,GAAG1mL,KAAI,IAAI4qL,GAAG7zY,EAAE8J,MAAM,IAAIgqY,KAAK,KAAuB,CAAjB,MAAMllY,GAAGmlY,GAAG/zY,EAAE4O,EAAG,CAASw0X,KAAK4O,GAAGv2Y,QAAQiT,EAAEwyJ,GAAEhkK,EAAE,OAAO+0Y,GAAEnoY,EAAE,GAAGwzR,GAAE,KAAK40G,GAAE,EAAEpoY,EAAEq3P,GAAG,IAAG,IAAIr3P,EAAE,CAAyC,GAAxC,IAAIA,IAAY,KAAR5M,EAAE6iK,GAAG//J,MAAWyO,EAAEvR,EAAE4M,EAAEkqY,GAAGh0Y,EAAE9C,KAAQ,IAAI4M,EAAE,MAAMC,EAAEooY,GAAG0B,GAAG7zY,EAAE,GAAG+yY,GAAG/yY,EAAEyO,GAAGukY,GAAGhzY,EAAEipN,MAAKl/M,EAAE,GAAG,IAAID,EAAEipY,GAAG/yY,EAAEyO,OAChf,CAAuB,GAAtBvR,EAAE8C,EAAEvE,QAAQwxX,UAAa,KAAO,GAAFx+W,KAGnC,SAAYzO,GAAG,IAAI,IAAI8J,EAAE9J,IAAI,CAAC,GAAW,MAAR8J,EAAE89L,MAAY,CAAC,IAAI79L,EAAED,EAAEu6X,YAAY,GAAG,OAAOt6X,GAAe,QAAXA,EAAEA,EAAEq/X,QAAiB,IAAI,IAAI36X,EAAE,EAAEA,EAAE1E,EAAEjV,OAAO2Z,IAAI,CAAC,IAAIvR,EAAE6M,EAAE0E,GAAGC,EAAExR,EAAE8rY,YAAY9rY,EAAEA,EAAErI,MAAM,IAAI,IAAI6kY,GAAGhrX,IAAIxR,GAAG,OAAM,CAAqB,CAAlB,MAAMyR,GAAG,OAAM,CAAG,CAAC,CAAC,CAAU,GAAV5E,EAAED,EAAE+mB,MAAwB,MAAf/mB,EAAE6kY,cAAoB,OAAO5kY,EAAEA,EAAEmjX,OAAOpjX,EAAEA,EAAEC,MAAM,CAAC,GAAGD,IAAI9J,EAAE,MAAM,KAAK,OAAO8J,EAAEw0I,SAAS,CAAC,GAAG,OAAOx0I,EAAEojX,QAAQpjX,EAAEojX,SAASltX,EAAE,OAAM,EAAG8J,EAAEA,EAAEojX,MAAO,CAAApjX,EAAEw0I,QAAQ4uO,OAAOpjX,EAAEojX,OAAOpjX,EAAEA,EAAEw0I,OAAQ,CAAC,QAAM,CAAG,CAHxX21P,CAAG/2Y,KAAe,KAAV4M,EAAE6pY,GAAG3zY,EAAEyO,MAAmB,KAARC,EAAEqxJ,GAAG//J,MAAWyO,EAAEC,EAAE5E,EAAEkqY,GAAGh0Y,EAAE0O,KAAK,IAAI5E,GAAG,MAAMC,EAAEooY,GAAG0B,GAAG7zY,EAAE,GAAG+yY,GAAG/yY,EAAEyO,GAAGukY,GAAGhzY,EAAEipN,MAAKl/M,EAAqC,OAAnC/J,EAAEk0Y,aAAah3Y,EAAE8C,EAAEm0Y,cAAc1lY,EAAS3E,GAAG,KAAK,EAAE,KAAK,EAAE,MAAMjC,MAAM6J,EAAE,MAAM,KAAK,EAC8B,KAAK,EAAE0iY,GAAGp0Y,EAAEsyY,GAAGC,IAAI,MAD7B,KAAK,EAAU,GAARQ,GAAG/yY,EAAEyO,IAAS,UAAFA,KAAeA,GAAiB,IAAb3E,EAAE0nY,GAAG,IAAIvoL,MAAU,CAAC,GAAG,IAAIimK,GAAGlvX,EAAE,GAAG,MAAyB,KAAnB9C,EAAE8C,EAAEovX,gBAAqB3gX,KAAKA,EAAE,CAAC02X,KAAInlY,EAAEqvX,aAAarvX,EAAEovX,eAAelyX,EAAE,KAAM,CAAA8C,EAAEq0Y,cAAc3V,GAAG0V,GAAGr0Y,KAAK,KAAKC,EAAEsyY,GAAGC,IAAIzoY,GAAG,KAAM,CAAAsqY,GAAGp0Y,EAAEsyY,GAAGC,IAAI,MAAM,KAAK,EAAU,GAARQ,GAAG/yY,EAAEyO,IAAS,QAAFA,KAC9eA,EAAE,MAAqB,IAAf3E,EAAE9J,EAAE2vX,WAAezyX,GAAG,EAAE,EAAEuR,GAAG,CAAC,IAAIE,EAAE,GAAGigX,GAAGngX,GAAGC,EAAE,GAAGC,GAAEA,EAAE7E,EAAE6E,IAAKzR,IAAIA,EAAEyR,GAAGF,IAAIC,CAAE,CAAoG,GAApGD,EAAEvR,EAAqG,IAA3FuR,GAAG,KAAXA,EAAEw6M,KAAIx6M,GAAW,IAAI,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAKA,EAAE,KAAK,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAKsjY,GAAGtjY,EAAE,OAAOA,GAAU,CAACzO,EAAEq0Y,cAAc3V,GAAG0V,GAAGr0Y,KAAK,KAAKC,EAAEsyY,GAAGC,IAAI9jY,GAAG,KAAM,CAAA2lY,GAAGp0Y,EAAEsyY,GAAGC,IAAI,MAA+B,QAAQ,MAAM1qY,MAAM6J,EAAE,MAAQ,CAAC,CAAU,OAAVshY,GAAGhzY,EAAEipN,MAAYjpN,EAAEizY,eAAelpY,EAAE0pY,GAAG1zY,KAAK,KAAKC,GAAG,IAAK,CACtX,SAASg0Y,GAAGh0Y,EAAE8J,GAAG,IAAIC,EAAE0iK,GAA2G,OAAxGzsK,EAAEvE,QAAQ2xX,cAAciE,eAAewiB,GAAG7zY,EAAE8J,GAAG89L,OAAO,KAAe,KAAV5nM,EAAE2zY,GAAG3zY,EAAE8J,MAAWA,EAAEwoY,GAAGA,GAAGvoY,EAAE,OAAOD,GAAGulY,GAAGvlY,IAAW9J,CAAE,UAASqvY,GAAGrvY,GAAG,OAAOsyY,GAAGA,GAAGtyY,EAAEsyY,GAAG19Y,KAAKsD,MAAMo6Y,GAAGtyY,EAAG,CAE7L,SAAS+yY,GAAG/yY,EAAE8J,GAAuD,IAApDA,IAAIuoY,GAAGvoY,IAAIsoY,GAAGpyY,EAAEovX,gBAAgBtlX,EAAE9J,EAAEqvX,cAAcvlX,EAAM9J,EAAEA,EAAEkzY,gBAAgB,EAAEppY,GAAG,CAAC,IAAIC,EAAE,GAAG6kX,GAAG9kX,GAAG2E,EAAE,GAAG1E,EAAE/J,EAAE+J,IAAI,EAAED,IAAI2E,CAAE,CAAC,UAAS8kY,GAAGvzY,GAAG,GAAG,KAAO,EAAFkhK,IAAK,MAAMr5J,MAAM6J,EAAE,MAAMgiY,KAAK,IAAI5pY,EAAEolX,GAAGlvX,EAAE,GAAG,GAAG,KAAO,EAAF8J,GAAK,OAAOkpY,GAAGhzY,EAAEipN,MAAK,KAAK,IAAIl/M,EAAE4pY,GAAG3zY,EAAE8J,GAAG,GAAG,IAAI9J,EAAEmtJ,KAAK,IAAIpjJ,EAAE,CAAC,IAAI0E,EAAEsxJ,GAAG//J,GAAG,IAAIyO,IAAI3E,EAAE2E,EAAE1E,EAAEiqY,GAAGh0Y,EAAEyO,GAAI,IAAG,IAAI1E,EAAE,MAAMA,EAAEooY,GAAG0B,GAAG7zY,EAAE,GAAG+yY,GAAG/yY,EAAE8J,GAAGkpY,GAAGhzY,EAAEipN,MAAKl/M,EAAE,GAAG,IAAIA,EAAE,MAAMlC,MAAM6J,EAAE,MAAiF,OAA3E1R,EAAEk0Y,aAAal0Y,EAAEvE,QAAQwxX,UAAUjtX,EAAEm0Y,cAAcrqY,EAAEsqY,GAAGp0Y,EAAEsyY,GAAGC,IAAIS,GAAGhzY,EAAEipN,MAAY,IAAK,CACxd,SAASqrL,GAAGt0Y,EAAE8J,GAAG,IAAIC,EAAEm3J,GAAEA,IAAG,EAAE,IAAI,OAAOlhK,EAAE8J,EAA4C,CAAzD,QAA4B,KAAJo3J,GAAEn3J,KAAU4lY,GAAG1mL,KAAI,IAAI23K,IAAIG,KAAM,CAAC,UAASwT,GAAGv0Y,GAAG,OAAOyyY,IAAI,IAAIA,GAAGtlP,KAAK,KAAO,EAAF+T,KAAMwyO,KAAK,IAAI5pY,EAAEo3J,GAAEA,IAAG,EAAE,IAAIn3J,EAAE+sS,GAAGp6S,WAAW+R,EAAEyiL,GAAE,IAAI,GAAG4lH,GAAGp6S,WAAW,KAAKw0L,GAAE,EAAElxL,EAAE,OAAOA,GAAoD,CAA3F,QAAmDkxL,GAAEziL,EAAEqoS,GAAGp6S,WAAWqN,EAAM,KAAO,GAAXm3J,GAAEp3J,KAAai3X,IAAK,CAAC,UAAS6O,KAAK1C,GAAGD,GAAGxxY,QAAQmrR,GAAEqmH,GAAI,CACjT,SAAS4G,GAAG7zY,EAAE8J,GAAG9J,EAAEk0Y,aAAa,KAAKl0Y,EAAEm0Y,cAAc,EAAE,IAAIpqY,EAAE/J,EAAEq0Y,cAAiD,IAAlC,IAAItqY,IAAI/J,EAAEq0Y,eAAe,EAAE1V,GAAG50X,IAAO,OAAOkoY,GAAE,IAAIloY,EAAEkoY,GAAE/kB,OAAO,OAAOnjX,GAAG,CAAC,IAAI0E,EAAE1E,EAAQ,OAAN23X,GAAGjzX,GAAUA,EAAE0+I,KAAK,KAAK,EAA6B,QAA3B1+I,EAAEA,EAAElR,KAAK4iY,yBAA4B,IAAS1xX,GAAG2xX,KAAK,MAAM,KAAK,EAAE4G,KAAKpgH,GAAEg5G,IAAIh5G,GAAE7Y,IAAGs5H,KAAK,MAAM,KAAK,EAAEJ,GAAGx4X,GAAG,MAAM,KAAK,EAAEu4X,KAAK,MAAM,KAAK,GAAc,KAAK,GAAGpgH,GAAE/iB,IAAG,MAAM,KAAK,GAAGw/H,GAAG50X,EAAElR,KAAKusF,UAAU,MAAM,KAAK,GAAG,KAAK,GAAG8lT,KAAK7lY,EAAEA,EAAEmjX,MAAO,CAAoE,GAApE5vF,GAAEt9R,EAAEiyY,GAAEjyY,EAAE0mY,GAAG1mY,EAAEvE,QAAQ,MAAMy2Y,GAAEhF,GAAGpjY,EAAEq3P,GAAE,EAAEgxI,GAAG,KAAKE,GAAGD,GAAGnwD,GAAG,EAAEqwD,GAAG7lO,GAAG,KAAQ,OAAOs3N,GAAG,CAAC,IAAIj6X,EAC1f,EAAEA,EAAEi6X,GAAGjvY,OAAOgV,IAAI,GAA2B,QAAhB2E,GAAR1E,EAAEg6X,GAAGj6X,IAAOo6X,aAAqB,CAACn6X,EAAEm6X,YAAY,KAAK,IAAIhnY,EAAEuR,EAAE/Z,KAAKga,EAAE3E,EAAE8qG,QAAQ,GAAG,OAAOnmG,EAAE,CAAC,IAAIC,EAAED,EAAEha,KAAKga,EAAEha,KAAKwI,EAAEuR,EAAE/Z,KAAKia,CAAE,CAAA5E,EAAE8qG,QAAQpmG,CAAE,CAAAs1X,GAAG,IAAK,QAAO/jY,CAAE,CAC5K,SAAS+zY,GAAG/zY,EAAE8J,GAAG,OAAE,CAAC,IAAIC,EAAEkoY,GAAE,IAAuB,GAAnB7O,KAAKmE,GAAG9rY,QAAQysY,GAAMP,GAAG,CAAC,IAAI,IAAIl5X,EAAEi3M,GAAE0nK,cAAc,OAAO3+W,GAAG,CAAC,IAAIvR,EAAEuR,EAAE+0H,MAAM,OAAOtmI,IAAIA,EAAE23G,QAAQ,MAAMpmG,EAAEA,EAAE/Z,IAAK,CAAAizY,IAAG,CAAG,CAA2C,GAA3CF,GAAG,EAAEr2J,GAAEs2J,GAAEhiL,GAAE,KAAKkiL,IAAG,EAAGl3F,GAAG,EAAEj5G,GAAGh8L,QAAQ,KAAQ,OAAOsO,GAAG,OAAOA,EAAEmjX,OAAO,CAAC/rH,GAAE,EAAEgxI,GAAGroY,EAAEmoY,GAAE,KAAK,KAAM,CAAAjyY,EAAE,CAAC,IAAI0O,EAAE1O,EAAE2O,EAAE5E,EAAEmjX,OAAOt+W,EAAE7E,EAAEkhE,EAAEnhE,EAAqB,GAAnBA,EAAEooY,GAAEtjY,EAAEg5L,OAAO,MAAS,OAAO38H,GAAG,kBAAkBA,GAAG,oBAAoBA,EAAE9rE,KAAK,CAAC,IAAI2G,EAAEmlE,EAAEpkE,EAAE+H,EAAE/V,EAAEgO,EAAEsmJ,IAAI,GAAG,KAAY,EAAPtmJ,EAAE47C,QAAU,IAAI5pD,GAAG,KAAKA,GAAG,KAAKA,GAAG,CAAC,IAAI0W,EAAE1I,EAAEomX,UAAU19W,GAAG1I,EAAEw9X,YAAY90X,EAAE80X,YAAYx9X,EAAEumX,cAAc79W,EAAE69W,cACxevmX,EAAE88X,MAAMp0X,EAAEo0X,QAAQ98X,EAAEw9X,YAAY,KAAKx9X,EAAEumX,cAAc,KAAM,KAAIj0X,EAAEmwQ,GAAG36P,GAAG,GAAG,OAAOxV,EAAE,CAACA,EAAEyuM,QAAQ,IAAIykM,GAAGlzY,EAAEwV,EAAEC,EAAEF,EAAE5E,GAAU,EAAP3Q,EAAEspD,MAAQypV,GAAGx9X,EAAE5I,EAAEgE,GAAOmhE,EAAEnlE,EAAE,IAAIc,GAAZkD,EAAE3Q,GAAckrY,YAAY,GAAG,OAAOz9X,EAAE,CAAC,IAAIG,EAAE,IAAIo5D,IAAIp5D,EAAEkb,IAAIgpD,GAAGnhE,EAAEu6X,YAAYt9X,CAAE,MAAKH,EAAEqb,IAAIgpD,GAAG,MAAMjrE,CAAE,CAAK,GAAG,KAAO,EAAF8J,GAAK,CAACoiY,GAAGx9X,EAAE5I,EAAEgE,GAAGykY,KAAK,MAAMvuY,CAAE,CAAAirE,EAAEpjE,MAAM6J,EAAE,KAAO,MAAK,GAAG0lJ,IAAU,EAAPxoJ,EAAE6zC,KAAO,CAAC,IAAI46U,EAAE/zH,GAAG36P,GAAG,GAAG,OAAO0uX,EAAE,CAAC,KAAa,MAARA,EAAEz1L,SAAey1L,EAAEz1L,OAAO,KAAKykM,GAAGhP,EAAE1uX,EAAEC,EAAEF,EAAE5E,GAAG84X,GAAG1wE,GAAGjnP,EAAEr8D,IAAI,MAAM5O,CAAE,CAAC,CAAA0O,EAAEu8D,EAAEinP,GAAGjnP,EAAEr8D,GAAG,IAAIuyP,KAAIA,GAAE,GAAG,OAAO10F,GAAGA,GAAG,CAAC/9J,GAAG+9J,GAAG73K,KAAK8Z,GAAGA,EAAEC,EAAE,EAAE,CAAC,OAAOD,EAAEy+I,KAAK,KAAK,EAAEz+I,EAAEk5L,OAAO,MACpf99L,IAAIA,EAAE4E,EAAEi1X,OAAO75X,EAAkBwpM,GAAG5kM,EAAbi9X,GAAGj9X,EAAEu8D,EAAEnhE,IAAW,MAAM9J,EAAE,KAAK,EAAE4O,EAAEq8D,EAAE,IAAIlzD,EAAErJ,EAAEnR,KAAK6jB,EAAE1S,EAAEo9W,UAAU,GAAG,KAAa,IAARp9W,EAAEk5L,SAAa,oBAAoB7vL,EAAEg0X,0BAA0B,OAAO3qX,GAAG,oBAAoBA,EAAE4qX,oBAAoB,OAAO5gO,KAAKA,GAAG3qK,IAAI2gB,KAAK,CAAC1S,EAAEk5L,OAAO,MAAM99L,IAAIA,EAAE4E,EAAEi1X,OAAO75X,EAAkBwpM,GAAG5kM,EAAbo9X,GAAGp9X,EAAEE,EAAE9E,IAAW,MAAM9J,CAAE,EAAC0O,EAAEA,EAAEw+W,MAAO,OAAM,OAAOx+W,EAAG,CAAA8lY,GAAGzqY,EAA2D,CAAxD,MAAM4zX,GAAI7zX,EAAE6zX,EAAGsU,KAAIloY,GAAG,OAAOA,IAAIkoY,GAAEloY,EAAEA,EAAEmjX,QAAQ,QAAS,MAAM,CAAS,UAAS0mB,KAAK,IAAI5zY,EAAEgyY,GAAGv2Y,QAAsB,OAAdu2Y,GAAGv2Y,QAAQysY,GAAU,OAAOloY,EAAEkoY,GAAGloY,CAAE,CACtd,SAASuuY,KAAQ,IAAIptI,IAAG,IAAIA,IAAG,IAAIA,KAAEA,GAAE,GAAE,OAAOm8B,IAAG,KAAQ,UAAH2kD,KAAe,KAAQ,UAAHmwD,KAAeW,GAAGz1G,GAAE40G,GAAG,UAASyB,GAAG3zY,EAAE8J,GAAG,IAAIC,EAAEm3J,GAAEA,IAAG,EAAE,IAAIzyJ,EAAEmlY,KAAqC,IAA7Bt2G,KAAIt9R,GAAGkyY,KAAIpoY,IAAEyoY,GAAG,KAAKsB,GAAG7zY,EAAE8J,MAAM,IAAI2qY,KAAK,KAAuB,CAAjB,MAAMv3Y,GAAG62Y,GAAG/zY,EAAE9C,EAAG,CAA+B,GAAtBkmY,KAAKliO,GAAEn3J,EAAEioY,GAAGv2Y,QAAQgT,EAAK,OAAOwjY,GAAE,MAAMpqY,MAAM6J,EAAE,MAAiB,OAAX4rR,GAAE,KAAK40G,GAAE,EAAS/wI,EAAE,UAASszI,KAAK,KAAK,OAAOxC,IAAGyC,GAAGzC,GAAG,UAAS6B,KAAK,KAAK,OAAO7B,KAAIhkN,MAAMymN,GAAGzC,GAAG,UAASyC,GAAG10Y,GAAG,IAAI8J,EAAEgoY,GAAG9xY,EAAEitX,UAAUjtX,EAAEktY,IAAIltY,EAAEyiY,cAAcziY,EAAEkiY,aAAa,OAAOp4X,EAAE0qY,GAAGx0Y,GAAGiyY,GAAEnoY,EAAE2tL,GAAGh8L,QAAQ,IAAK,CAC3d,SAAS+4Y,GAAGx0Y,GAAG,IAAI8J,EAAE9J,EAAE,EAAE,CAAC,IAAI+J,EAAED,EAAEmjX,UAAqB,GAAXjtX,EAAE8J,EAAEojX,OAAU,KAAa,MAARpjX,EAAE89L,QAAc,GAAgB,QAAb79L,EAAEqlY,GAAGrlY,EAAED,EAAEojY,KAAkB,YAAJ+E,GAAEloY,OAAc,CAAW,GAAG,QAAbA,EAAE8lY,GAAG9lY,EAAED,IAAmC,OAAnBC,EAAE69L,OAAO,WAAMqqM,GAAEloY,GAAS,GAAG,OAAO/J,EAAmE,OAAXmhQ,GAAE,OAAE8wI,GAAE,MAA5DjyY,EAAE4nM,OAAO,MAAM5nM,EAAE2uY,aAAa,EAAE3uY,EAAEgiY,UAAU,IAA6B,CAAY,GAAG,QAAfl4X,EAAEA,EAAEw0I,SAAyB,YAAJ2zP,GAAEnoY,GAASmoY,GAAEnoY,EAAE9J,CAAE,OAAM,OAAO8J,GAAG,IAAIq3P,KAAIA,GAAE,EAAG,UAASizI,GAAGp0Y,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEyiL,GAAEh0L,EAAE45S,GAAGp6S,WAAW,IAAIo6S,GAAGp6S,WAAW,KAAKw0L,GAAE,EAC3Y,SAAYlxL,EAAE8J,EAAEC,EAAE0E,GAAG,GAAGilY,WAAW,OAAOjB,IAAI,GAAG,KAAO,EAAFvxO,IAAK,MAAMr5J,MAAM6J,EAAE,MAAM3H,EAAE/J,EAAEk0Y,aAAa,IAAIh3Y,EAAE8C,EAAEm0Y,cAAc,GAAG,OAAOpqY,EAAE,OAAO,KAA2C,GAAtC/J,EAAEk0Y,aAAa,KAAKl0Y,EAAEm0Y,cAAc,EAAKpqY,IAAI/J,EAAEvE,QAAQ,MAAMoM,MAAM6J,EAAE,MAAM1R,EAAEizY,aAAa,KAAKjzY,EAAEqzY,iBAAiB,EAAE,IAAI3kY,EAAE3E,EAAE45X,MAAM55X,EAAEy5X,WAA8J,GA1NtT,SAAYxjY,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEmvX,cAAcrlX,EAAE9J,EAAEmvX,aAAarlX,EAAE9J,EAAEovX,eAAe,EAAEpvX,EAAEqvX,YAAY,EAAErvX,EAAEmzY,cAAcrpY,EAAE9J,EAAE20Y,kBAAkB7qY,EAAE9J,EAAEsvX,gBAAgBxlX,EAAEA,EAAE9J,EAAEuvX,cAAc,IAAI9gX,EAAEzO,EAAE2vX,WAAW,IAAI3vX,EAAEA,EAAEkzY,gBAAgB,EAAEnpY,GAAG,CAAC,IAAI7M,EAAE,GAAG0xX,GAAG7kX,GAAG2E,EAAE,GAAGxR,EAAE4M,EAAE5M,GAAG,EAAEuR,EAAEvR,IAAI,EAAE8C,EAAE9C,IAAI,EAAE6M,IAAI2E,CAAE,CAAC,CA0N7GkmY,CAAG50Y,EAAE0O,GAAG1O,IAAIs9R,KAAI20G,GAAE30G,GAAE,KAAK40G,GAAE,GAAG,KAAoB,KAAfnoY,EAAE4kY,eAAoB,KAAa,KAAR5kY,EAAE69L,QAAa4qM,KAAKA,IAAG,EAAGgB,GAAGnlB,IAAG,WAAgB,OAALqlB,KAAY,IAAK,KAAGhlY,EAAE,KAAa,MAAR3E,EAAE69L,OAAgB,KAAoB,MAAf79L,EAAE4kY,eAAqBjgY,EAAE,CAACA,EAAEooS,GAAGp6S,WAAWo6S,GAAGp6S,WAAW,KAChf,IAAIiS,EAAEuiL,GAAEA,GAAE,EAAE,IAAItiL,EAAEsyJ,GAAEA,IAAG,EAAEu2B,GAAGh8L,QAAQ,KA1CpC,SAAYuE,EAAE8J,GAAgB,GAAbw0X,GAAGprF,GAAaknF,GAAVp6X,EAAEi6X,MAAc,CAAC,GAAG,mBAAmBj6X,EAAE,IAAI+J,EAAE,CAACs0B,MAAMr+B,EAAEy6X,eAAelvV,IAAIvrC,EAAE06X,mBAAmB16X,EAAE,CAA8C,IAAIyO,GAAjD1E,GAAGA,EAAE/J,EAAE+mX,gBAAgBh9W,EAAE4wX,aAAa5hY,QAAe6hY,cAAc7wX,EAAE6wX,eAAe,GAAGnsX,GAAG,IAAIA,EAAEkhF,WAAW,CAAC5lF,EAAE0E,EAAEosX,WAAW,IAAI39X,EAAEuR,EAAEqsX,aAAapsX,EAAED,EAAEssX,UAAUtsX,EAAEA,EAAEusX,YAAY,IAAIjxX,EAAEm+W,SAASx5W,EAAEw5W,QAAiC,CAAxB,MAAM72I,GAAGtnO,EAAE,KAAK,MAAM/J,CAAE,KAAI2O,EAAE,EAAEC,GAAG,EAAEq8D,GAAG,EAAEnlE,EAAE,EAAEe,EAAE,EAAEhO,EAAEmH,EAAEuP,EAAE,KAAKzF,EAAE,OAAO,CAAC,IAAI,IAAI3Q,EAAKN,IAAIkR,GAAG,IAAI7M,GAAG,IAAIrE,EAAEqvX,WAAWt5W,EAAED,EAAEzR,GAAGrE,IAAI6V,GAAG,IAAID,GAAG,IAAI5V,EAAEqvX,WAAWj9S,EAAEt8D,EAAEF,GAAG,IAAI5V,EAAEqvX,WAAWv5W,GACnf9V,EAAEsvX,UAAUrzX,QAAW,QAAQqE,EAAEN,EAAE+uX,aAAkBr4W,EAAE1W,EAAEA,EAAEM,EAAE,OAAO,CAAC,GAAGN,IAAImH,EAAE,MAAM8J,EAA8C,GAA5CyF,IAAIxF,KAAKjE,IAAI5I,IAAI0R,EAAED,GAAGY,IAAIb,KAAK7H,IAAI4H,IAAIw8D,EAAEt8D,GAAM,QAAQxV,EAAEN,EAAEihY,aAAa,MAAUvqX,GAAJ1W,EAAE0W,GAAMi8W,UAAW,CAAA3yX,EAAEM,CAAE,CAAA4Q,GAAG,IAAI6E,IAAI,IAAIq8D,EAAE,KAAK,CAAC5sC,MAAMzvB,EAAE28B,IAAI0/B,EAAG,MAAKlhE,EAAE,IAAK,CAAAA,EAAEA,GAAG,CAACs0B,MAAM,EAAEkN,IAAI,EAAG,MAAKxhC,EAAE,KAA+C,IAA1Cw0X,GAAG,CAAChE,YAAYv6X,EAAEw6X,eAAezwX,GAAGmpS,IAAG,EAAO/xI,GAAEr3J,EAAE,OAAOq3J,IAAG,GAAOnhK,GAAJ8J,EAAEq3J,IAAMtwI,MAAM,KAAoB,KAAf/mB,EAAE6kY,eAAoB,OAAO3uY,EAAEA,EAAEktX,OAAOpjX,EAAEq3J,GAAEnhK,OAAO,KAAK,OAAOmhK,IAAG,CAACr3J,EAAEq3J,GAAE,IAAI,IAAIv6J,EAAEkD,EAAEmjX,UAAU,GAAG,KAAa,KAARnjX,EAAE89L,OAAY,OAAO99L,EAAEqjJ,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GACvK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,MAA3W,KAAK,EAAE,GAAG,OAAOvmJ,EAAE,CAAC,IAAIG,EAAEH,EAAE67X,cAAcpF,EAAEz2X,EAAEwmX,cAAcl0X,EAAE4Q,EAAEgiX,UAAU/zW,EAAE7e,EAAE+sY,wBAAwBn8X,EAAEoxW,cAAcpxW,EAAEvM,KAAKwJ,EAAE+7X,GAAGh5X,EAAEvM,KAAKwJ,GAAGs2X,GAAGnkY,EAAE24Y,oCAAoC95X,CAAE,OAAM,KAAK,EAAE,IAAIqJ,EAAEtX,EAAEgiX,UAAUwF,cAAc,IAAIlwW,EAAE8mW,SAAS9mW,EAAEkmW,YAAY,GAAG,IAAIlmW,EAAE8mW,UAAU9mW,EAAExnB,iBAAiBwnB,EAAEymW,YAAYzmW,EAAExnB,iBAAiB,MAAyC,QAAQ,MAAMiO,MAAM6J,EAAE,MAAiC,CAAzB,MAAM2/N,GAAGitG,GAAEx0U,EAAEA,EAAEojX,OAAO77I,EAAG,CAAY,GAAG,QAAfrxO,EAAE8J,EAAEw0I,SAAoB,CAACt+I,EAAEktX,OAAOpjX,EAAEojX,OAAO/rN,GAAEnhK,EAAE,KAAM,CAAAmhK,GAAEr3J,EAAEojX,MAAO,CAAAtmX,EAAEspY,GAAGA,IAAG,CAAY,CAwCnd2E,CAAG70Y,EAAE+J,GAAGsnY,GAAGtnY,EAAE/J,GAAGs6X,GAAGiE,IAAIrrF,KAAKorF,GAAGC,GAAGD,GAAG,KAAKt+X,EAAEvE,QAAQsO,EAAEm7P,GAAGn7P,EAAE/J,EAAE9C,GAAG2wX,KAAK3sN,GAAEtyJ,EAAEsiL,GAAEviL,EAAEmoS,GAAGp6S,WAAWgS,CAAE,MAAK1O,EAAEvE,QAAQsO,EAAsF,GAApFyoY,KAAKA,IAAG,EAAGC,GAAGzyY,EAAE0yY,GAAGx1Y,GAAoB,KAAjBwR,EAAE1O,EAAEmvX,gBAAqB/jN,GAAG,MAjOmJ,SAAYprK,GAAG,GAAG2uX,IAAI,oBAAoBA,GAAGmmB,kBAAkB,IAAInmB,GAAGmmB,kBAAkBpmB,GAAG1uX,OAAE,EAAO,OAAuB,IAAhBA,EAAEvE,QAAQmsM,OAAsB,CAAV,MAAM99L,GAAI,CAAC,CAiOzRirY,CAAGhrY,EAAE+hX,WAAaknB,GAAGhzY,EAAEipN,MAAQ,OAAOn/M,EAAE,IAAI2E,EAAEzO,EAAEg1Y,mBAAmBjrY,EAAE,EAAEA,EAAED,EAAEhV,OAAOiV,IAAW0E,GAAPvR,EAAE4M,EAAEC,IAAOlV,MAAM,CAACo3Y,eAAe/uY,EAAEk0L,MAAMvvB,OAAO3kK,EAAE2kK,SAAS,GAAG+pO,GAAG,MAAMA,IAAG,EAAG5rY,EAAE6rY,GAAGA,GAAG,KAAK7rY,EAAE,KAAQ,EAAH0yY,KAAO,IAAI1yY,EAAEmtJ,KAAKumP,KAAsB,KAAO,GAAxBhlY,EAAE1O,EAAEmvX,eAAuBnvX,IAAI4yY,GAAGD,MAAMA,GAAG,EAAEC,GAAG5yY,GAAG2yY,GAAG,EAAE5R,IAAiB,CAFzFkU,CAAGj1Y,EAAE8J,EAAEC,EAAE0E,EAA+B,CAAnE,QAA+CqoS,GAAGp6S,WAAWQ,EAAEg0L,GAAEziL,CAAE,QAAO,IAAK,CAGjc,SAASilY,KAAK,GAAG,OAAOjB,GAAG,CAAC,IAAIzyY,EAAE6vX,GAAG6iB,IAAI5oY,EAAEgtS,GAAGp6S,WAAWqN,EAAEmnL,GAAE,IAAmC,GAA/B4lH,GAAGp6S,WAAW,KAAKw0L,GAAE,GAAGlxL,EAAE,GAAGA,EAAK,OAAOyyY,GAAG,IAAIhkY,GAAE,MAAO,CAAmB,GAAlBzO,EAAEyyY,GAAGA,GAAG,KAAKC,GAAG,EAAK,KAAO,EAAFxxO,IAAK,MAAMr5J,MAAM6J,EAAE,MAAM,IAAIxU,EAAEgkK,GAAO,IAALA,IAAG,EAAMC,GAAEnhK,EAAEvE,QAAQ,OAAO0lK,IAAG,CAAC,IAAIzyJ,EAAEyyJ,GAAExyJ,EAAED,EAAEmiB,MAAM,GAAG,KAAa,GAARswI,GAAEymC,OAAU,CAAC,IAAIh5L,EAAEF,EAAEszX,UAAU,GAAG,OAAOpzX,EAAE,CAAC,IAAI,IAAIq8D,EAAE,EAAEA,EAAEr8D,EAAE9Z,OAAOm2E,IAAI,CAAC,IAAInlE,EAAE8I,EAAEq8D,GAAG,IAAIk2F,GAAEr7J,EAAE,OAAOq7J,IAAG,CAAC,IAAIt6J,EAAEs6J,GAAE,OAAOt6J,EAAEsmJ,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGgjP,GAAG,EAAEtpY,EAAE6H,GAAG,IAAI7V,EAAEgO,EAAEgqB,MAAM,GAAG,OAAOh4B,EAAEA,EAAEq0X,OAAOrmX,EAAEs6J,GAAEtoK,OAAO,KAAK,OAAOsoK,IAAG,CAAK,IAAI5xJ,GAAR1I,EAAEs6J,IAAU7iB,QAAQnlJ,EAAE0N,EAAEqmX,OAAa,GAANojB,GAAGzpY,GAAMA,IACnff,EAAE,CAACq7J,GAAE,KAAK,KAAM,IAAG,OAAO5xJ,EAAE,CAACA,EAAE29W,OAAO/zX,EAAEgoK,GAAE5xJ,EAAE,KAAM,CAAA4xJ,GAAEhoK,CAAE,CAAC,CAAC,KAAIyN,EAAE8H,EAAEu+W,UAAU,GAAG,OAAOrmX,EAAE,CAAC,IAAIG,EAAEH,EAAEiqB,MAAM,GAAG,OAAO9pB,EAAE,CAACH,EAAEiqB,MAAM,KAAK,EAAE,CAAC,IAAIwsW,EAAEt2X,EAAEu3I,QAAQv3I,EAAEu3I,QAAQ,KAAKv3I,EAAEs2X,CAAE,OAAM,OAAOt2X,EAAG,CAAC,CAAAo6J,GAAEzyJ,CAAE,CAAC,IAAG,KAAoB,KAAfA,EAAEigY,eAAoB,OAAOhgY,EAAEA,EAAEu+W,OAAOx+W,EAAEyyJ,GAAExyJ,OAAO7E,EAAE,KAAK,OAAOq3J,IAAG,CAAK,GAAG,KAAa,MAApBzyJ,EAAEyyJ,IAAYymC,OAAY,OAAOl5L,EAAEy+I,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGgjP,GAAG,EAAEzhY,EAAEA,EAAEw+W,QAAQ,IAAIh0X,EAAEwV,EAAE4vI,QAAQ,GAAG,OAAOplJ,EAAE,CAACA,EAAEg0X,OAAOx+W,EAAEw+W,OAAO/rN,GAAEjoK,EAAE,MAAM4Q,CAAE,CAAAq3J,GAAEzyJ,EAAEw+W,MAAO,CAAC,KAAIn1W,EAAE/X,EAAEvE,QAAQ,IAAI0lK,GAAEppJ,EAAE,OAAOopJ,IAAG,CAAK,IAAI//I,GAARzS,EAAEwyJ,IAAUtwI,MAAM,GAAG,KAAoB,KAAfliB,EAAEggY,eAAoB,OAClfvtX,EAAEA,EAAE8rW,OAAOv+W,EAAEwyJ,GAAE//I,OAAOtX,EAAE,IAAI6E,EAAEoJ,EAAE,OAAOopJ,IAAG,CAAK,GAAG,KAAa,MAApBvyJ,EAAEuyJ,IAAYymC,OAAY,IAAI,OAAOh5L,EAAEu+I,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGijP,GAAG,EAAExhY,GAA+B,CAA3B,MAAM+uX,GAAIr/C,GAAE1vU,EAAEA,EAAEs+W,OAAOyQ,EAAI,IAAG/uX,IAAID,EAAE,CAACwyJ,GAAE,KAAK,MAAMr3J,CAAE,KAAIunO,EAAEziO,EAAE0vI,QAAQ,GAAG,OAAO+yF,EAAE,CAACA,EAAE67I,OAAOt+W,EAAEs+W,OAAO/rN,GAAEkwE,EAAE,MAAMvnO,CAAE,CAAAq3J,GAAEvyJ,EAAEs+W,MAAO,CAAC,CAAS,GAAThsN,GAAEhkK,EAAE6jY,KAAQpS,IAAI,oBAAoBA,GAAGumB,sBAAsB,IAAIvmB,GAAGumB,sBAAsBxmB,GAAG1uX,EAAc,CAAX,MAAM29X,GAAK,CAAAlvX,GAAE,CAAG,QAAOA,CAA8B,CAF1U,QAEsTyiL,GAAEnnL,EAAE+sS,GAAGp6S,WAAWoN,CAAE,CAAC,QAAM,CAAG,UAASqrY,GAAGn1Y,EAAE8J,EAAEC,GAAyB/J,EAAE0kS,GAAG1kS,EAAjB8J,EAAE6hY,GAAG3rY,EAAf8J,EAAEooT,GAAGnoT,EAAED,GAAY,GAAY,GAAGA,EAAEq7X,KAAI,OAAOnlY,IAAI0vX,GAAG1vX,EAAE,EAAE8J,GAAGkpY,GAAGhzY,EAAE8J,GAAI,CAC1e,SAASw0U,GAAEt+U,EAAE8J,EAAEC,GAAG,GAAG,IAAI/J,EAAEmtJ,IAAIgoP,GAAGn1Y,EAAEA,EAAE+J,QAAQ,KAAK,OAAOD,GAAG,CAAC,GAAG,IAAIA,EAAEqjJ,IAAI,CAACgoP,GAAGrrY,EAAE9J,EAAE+J,GAAG,KAAM,CAAK,GAAG,IAAID,EAAEqjJ,IAAI,CAAC,IAAI1+I,EAAE3E,EAAEgiX,UAAU,GAAG,oBAAoBhiX,EAAEvM,KAAKwuY,0BAA0B,oBAAoBt9X,EAAEu9X,oBAAoB,OAAO5gO,KAAKA,GAAG3qK,IAAIgO,IAAI,CAAuB3E,EAAE46R,GAAG56R,EAAjB9J,EAAE8rY,GAAGhiY,EAAf9J,EAAEkyT,GAAGnoT,EAAE/J,GAAY,GAAY,GAAGA,EAAEmlY,KAAI,OAAOr7X,IAAI4lX,GAAG5lX,EAAE,EAAE9J,GAAGgzY,GAAGlpY,EAAE9J,IAAI,KAAM,CAAC,CAAA8J,EAAEA,EAAEojX,MAAO,CAAC,CACpV,SAASkf,GAAGpsY,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEzO,EAAEmsY,UAAU,OAAO19X,GAAGA,EAAEggC,OAAO3kC,GAAGA,EAAEq7X,KAAInlY,EAAEqvX,aAAarvX,EAAEovX,eAAerlX,EAAEuzR,KAAIt9R,IAAIkyY,GAAEnoY,KAAKA,IAAI,IAAIo3P,IAAG,IAAIA,KAAM,UAAF+wI,MAAeA,IAAG,IAAIjpL,KAAIuoL,GAAGqC,GAAG7zY,EAAE,GAAGqyY,IAAItoY,GAAGipY,GAAGhzY,EAAE8J,EAAG,UAASsrY,GAAGp1Y,EAAE8J,GAAG,IAAIA,IAAI,KAAY,EAAP9J,EAAEyiD,MAAQ34C,EAAE,GAAGA,EAAEklX,GAAU,KAAQ,WAAfA,KAAK,MAAuBA,GAAG,WAAW,IAAIjlX,EAAEo7X,KAAc,QAAVnlY,EAAEmkY,GAAGnkY,EAAE8J,MAAc4lX,GAAG1vX,EAAE8J,EAAEC,GAAGipY,GAAGhzY,EAAE+J,GAAI,UAASykY,GAAGxuY,GAAG,IAAI8J,EAAE9J,EAAEotX,cAAcrjX,EAAE,EAAE,OAAOD,IAAIC,EAAED,EAAEs4X,WAAWgT,GAAGp1Y,EAAE+J,EAAG,CAClZ,SAASk8P,GAAGjmQ,EAAE8J,GAAG,IAAIC,EAAE,EAAE,OAAO/J,EAAEmtJ,KAAK,KAAK,GAAG,IAAI1+I,EAAEzO,EAAE8rX,UAAc5uX,EAAE8C,EAAEotX,cAAc,OAAOlwX,IAAI6M,EAAE7M,EAAEklY,WAAW,MAAM,KAAK,GAAG3zX,EAAEzO,EAAE8rX,UAAU,MAAM,QAAQ,MAAMjkX,MAAM6J,EAAE,MAAO,OAAOjD,GAAGA,EAAEggC,OAAO3kC,GAAGsrY,GAAGp1Y,EAAE+J,EAAG,CAQoK,SAASypY,GAAGxzY,EAAE8J,GAAG,OAAOogB,GAAGlqB,EAAE8J,EAAG,CAClZ,SAAS43U,GAAG1hV,EAAE8J,EAAEC,EAAE0E,GAAGvY,KAAKi3J,IAAIntJ,EAAE9J,KAAKiB,IAAI4S,EAAE7T,KAAKooJ,QAAQpoJ,KAAK26B,MAAM36B,KAAKg3X,OAAOh3X,KAAK41X,UAAU51X,KAAKqH,KAAKrH,KAAKglX,YAAY,KAAKhlX,KAAKuP,MAAM,EAAEvP,KAAKU,IAAI,KAAKV,KAAKgsY,aAAap4X,EAAE5T,KAAKu6H,aAAav6H,KAAKk3X,cAAcl3X,KAAKmuY,YAAYnuY,KAAKusY,cAAc,KAAKvsY,KAAKusD,KAAKh0C,EAAEvY,KAAKy4Y,aAAaz4Y,KAAK0xM,MAAM,EAAE1xM,KAAK8rY,UAAU,KAAK9rY,KAAKstY,WAAWttY,KAAKytY,MAAM,EAAEztY,KAAK+2X,UAAU,IAAK,UAAS8U,GAAG/hY,EAAE8J,EAAEC,EAAE0E,GAAG,OAAO,IAAIizU,GAAG1hV,EAAE8J,EAAEC,EAAE0E,EAAG,UAASi+X,GAAG1sY,GAAiB,UAAdA,EAAEA,EAAEI,aAAuBJ,EAAEq1Y,iBAAkB,CAErd,SAAS3O,GAAG1mY,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEitX,UACuB,OADb,OAAOljX,IAAGA,EAAEg4X,GAAG/hY,EAAEmtJ,IAAIrjJ,EAAE9J,EAAE7I,IAAI6I,EAAEyiD,OAAQy4T,YAAYl7W,EAAEk7W,YAAYnxW,EAAExM,KAAKyC,EAAEzC,KAAKwM,EAAE+hX,UAAU9rX,EAAE8rX,UAAU/hX,EAAEkjX,UAAUjtX,EAAEA,EAAEitX,UAAUljX,IAAIA,EAAEm4X,aAAap4X,EAAEC,EAAExM,KAAKyC,EAAEzC,KAAKwM,EAAE69L,MAAM,EAAE79L,EAAE4kY,aAAa,EAAE5kY,EAAEi4X,UAAU,MAAMj4X,EAAE69L,MAAc,SAAR5nM,EAAE4nM,MAAe79L,EAAEy5X,WAAWxjY,EAAEwjY,WAAWz5X,EAAE45X,MAAM3jY,EAAE2jY,MAAM55X,EAAE8mB,MAAM7wB,EAAE6wB,MAAM9mB,EAAE04X,cAAcziY,EAAEyiY,cAAc14X,EAAEqjX,cAAcptX,EAAEotX,cAAcrjX,EAAEs6X,YAAYrkY,EAAEqkY,YAAYv6X,EAAE9J,EAAEywH,aAAa1mH,EAAE0mH,aAAa,OAAO3mH,EAAE,KAAK,CAAC65X,MAAM75X,EAAE65X,MAAMD,aAAa55X,EAAE45X,cAC/e35X,EAAEu0I,QAAQt+I,EAAEs+I,QAAQv0I,EAAEtE,MAAMzF,EAAEyF,MAAMsE,EAAEnT,IAAIoJ,EAAEpJ,IAAWmT,CAAE,CACzD,SAASk2U,GAAGjgV,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,GAAG,IAAIC,EAAE,EAAM,GAAJF,EAAEzO,EAAK,oBAAoBA,EAAE0sY,GAAG1sY,KAAK2O,EAAE,QAAQ,GAAG,kBAAkB3O,EAAE2O,EAAE,OAAO3O,EAAE,OAAOA,GAAG,KAAKwkX,EAAG,OAAO/mC,GAAG1zU,EAAEoZ,SAASjmB,EAAEwR,EAAE5E,GAAG,KAAK26W,EAAG91W,EAAE,EAAEzR,GAAG,EAAE,MAAM,KAAKwnX,EAAG,OAAO1kX,EAAE+hY,GAAG,GAAGh4X,EAAED,EAAI,EAAF5M,IAAOg+W,YAAYwJ,EAAG1kX,EAAE2jY,MAAMj1X,EAAE1O,EAAE,KAAK8kX,EAAG,OAAO9kX,EAAE+hY,GAAG,GAAGh4X,EAAED,EAAE5M,IAAKg+W,YAAY4J,EAAG9kX,EAAE2jY,MAAMj1X,EAAE1O,EAAE,KAAK+kX,EAAG,OAAO/kX,EAAE+hY,GAAG,GAAGh4X,EAAED,EAAE5M,IAAKg+W,YAAY6J,EAAG/kX,EAAE2jY,MAAMj1X,EAAE1O,EAAE,KAAKklX,EAAG,OAAO18J,GAAGz+M,EAAE7M,EAAEwR,EAAE5E,GAAG,QAAQ,GAAG,kBAAkB9J,GAAG,OAAOA,EAAE,OAAOA,EAAE6lX,UAAU,KAAKlB,EAAGh2W,EAAE,GAAG,MAAM3O,EAAE,KAAK4kX,EAAGj2W,EAAE,EAAE,MAAM3O,EAAE,KAAK6kX,EAAGl2W,EAAE,GACpf,MAAM3O,EAAE,KAAKglX,EAAGr2W,EAAE,GAAG,MAAM3O,EAAE,KAAKilX,EAAGt2W,EAAE,GAAGF,EAAE,KAAK,MAAMzO,EAAE,MAAM6H,MAAM6J,EAAE,IAAI,MAAM1R,EAAEA,SAASA,EAAE,KAAuD,OAAjD8J,EAAEi4X,GAAGpzX,EAAE5E,EAAED,EAAE5M,IAAKg+W,YAAYl7W,EAAE8J,EAAEvM,KAAKkR,EAAE3E,EAAE65X,MAAMj1X,EAAS5E,CAAE,UAAS2zU,GAAGz9U,EAAE8J,EAAEC,EAAE0E,GAA2B,OAAxBzO,EAAE+hY,GAAG,EAAE/hY,EAAEyO,EAAE3E,IAAK65X,MAAM55X,EAAS/J,CAAE,UAASwoN,GAAGxoN,EAAE8J,EAAEC,EAAE0E,GAAuE,OAApEzO,EAAE+hY,GAAG,GAAG/hY,EAAEyO,EAAE3E,IAAKoxW,YAAYgK,EAAGllX,EAAE2jY,MAAM55X,EAAE/J,EAAE8rX,UAAU,CAACylB,UAAS,GAAWvxY,CAAE,UAAS+/U,GAAG//U,EAAE8J,EAAEC,GAA8B,OAA3B/J,EAAE+hY,GAAG,EAAE/hY,EAAE,KAAK8J,IAAK65X,MAAM55X,EAAS/J,CAAE,CAC7W,SAASmgV,GAAGngV,EAAE8J,EAAEC,GAA8J,OAA3JD,EAAEi4X,GAAG,EAAE,OAAO/hY,EAAEmjB,SAASnjB,EAAEmjB,SAAS,GAAGnjB,EAAE7I,IAAI2S,IAAK65X,MAAM55X,EAAED,EAAEgiX,UAAU,CAACwF,cAActxX,EAAEsxX,cAAcgkB,gBAAgB,KAAKv8D,eAAe/4U,EAAE+4U,gBAAuBjvU,CAAE,CACvL,SAAS2/P,GAAGzpQ,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAGhH,KAAKi3J,IAAIrjJ,EAAE5T,KAAKo7X,cAActxX,EAAE9J,KAAKg+Y,aAAah+Y,KAAKi2Y,UAAUj2Y,KAAKuF,QAAQvF,KAAKo/Y,gBAAgB,KAAKp/Y,KAAKm+Y,eAAe,EAAEn+Y,KAAK+8Y,aAAa/8Y,KAAKy3Y,eAAez3Y,KAAK8d,QAAQ,KAAK9d,KAAKm9Y,iBAAiB,EAAEn9Y,KAAKy5X,WAAWF,GAAG,GAAGv5X,KAAKg9Y,gBAAgBzjB,IAAI,GAAGv5X,KAAKo5X,eAAep5X,KAAKi+Y,cAAcj+Y,KAAKy+Y,iBAAiBz+Y,KAAKi9Y,aAAaj9Y,KAAKm5X,YAAYn5X,KAAKk5X,eAAel5X,KAAKi5X,aAAa,EAAEj5X,KAAKq5X,cAAcE,GAAG,GAAGv5X,KAAKq1Y,iBAAiB98X,EAAEvY,KAAK8+Y,mBAAmB93Y,EAAEhH,KAAKq/Y,gCAC/e,IAAK,UAAS3zD,GAAG5hV,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,EAAEC,EAAEq8D,GAAgN,OAA7MjrE,EAAE,IAAIypQ,GAAGzpQ,EAAE8J,EAAEC,EAAE6E,EAAEq8D,GAAG,IAAInhE,GAAGA,EAAE,GAAE,IAAK4E,IAAI5E,GAAG,IAAIA,EAAE,EAAE4E,EAAEqzX,GAAG,EAAE,KAAK,KAAKj4X,GAAG9J,EAAEvE,QAAQiT,EAAEA,EAAEo9W,UAAU9rX,EAAE0O,EAAE0+W,cAAc,CAACpxX,QAAQyS,EAAE4iX,aAAatnX,EAAE4oB,MAAM,KAAKq6W,YAAY,KAAKwI,0BAA0B,MAAM/zD,GAAG/yU,GAAU1O,CAAE,UAAS6hV,GAAG7hV,EAAE8J,EAAEC,GAAG,IAAI0E,EAAE,EAAEpW,UAAUvD,aAAQ,IAASuD,UAAU,GAAGA,UAAU,GAAG,KAAK,MAAM,CAACwtX,SAAStB,EAAGptX,IAAI,MAAMsX,EAAE,KAAK,GAAGA,EAAE0U,SAASnjB,EAAEsxX,cAAcxnX,EAAEivU,eAAehvU,EAAG,CACra,SAASvT,GAAGwJ,GAAG,IAAIA,EAAE,OAAO2/X,GAAuB3/X,EAAE,CAAC,GAAGgtX,GAA1BhtX,EAAEA,EAAEilY,mBAA8BjlY,GAAG,IAAIA,EAAEmtJ,IAAI,MAAMtlJ,MAAM6J,EAAE,MAAM,IAAI5H,EAAE9J,EAAE,EAAE,CAAC,OAAO8J,EAAEqjJ,KAAK,KAAK,EAAErjJ,EAAEA,EAAEgiX,UAAU93W,QAAQ,MAAMhU,EAAE,KAAK,EAAE,GAAGkgY,GAAGp2X,EAAEvM,MAAM,CAACuM,EAAEA,EAAEgiX,UAAU2U,0CAA0C,MAAMzgY,CAAE,EAAC8J,EAAEA,EAAEojX,MAAO,OAAM,OAAOpjX,GAAG,MAAMjC,MAAM6J,EAAE,KAAO,IAAG,IAAI1R,EAAEmtJ,IAAI,CAAC,IAAIpjJ,EAAE/J,EAAEzC,KAAK,GAAG2iY,GAAGn2X,GAAG,OAAOu2X,GAAGtgY,EAAE+J,EAAED,EAAG,QAAOA,CAAE,CACrW,SAASi4U,GAAG/hV,EAAE8J,EAAEC,EAAE0E,EAAEvR,EAAEwR,EAAEC,EAAEC,EAAEq8D,GAAwK,OAArKjrE,EAAE4hV,GAAG73U,EAAE0E,GAAE,EAAGzO,EAAE9C,EAAEwR,EAAEC,EAAEC,EAAEq8D,IAAKj3D,QAAQxd,GAAG,MAAMuT,EAAE/J,EAAEvE,SAAsBiT,EAAE4iL,GAAhB7iL,EAAE02X,KAAIjoY,EAAEkoY,GAAGr7X,KAAewT,cAAS,IAASzT,GAAG,OAAOA,EAAEA,EAAE,KAAK46R,GAAG36R,EAAE2E,EAAExR,GAAG8C,EAAEvE,QAAQkoY,MAAMzmY,EAAEwyX,GAAG1vX,EAAE9C,EAAEuR,GAAGukY,GAAGhzY,EAAEyO,GAAUzO,CAAE,UAASkuC,GAAGluC,EAAE8J,EAAEC,EAAE0E,GAAG,IAAIvR,EAAE4M,EAAErO,QAAQiT,EAAEy2X,KAAIx2X,EAAEy2X,GAAGloY,GAAsL,OAAnL6M,EAAEvT,GAAGuT,GAAG,OAAOD,EAAEkK,QAAQlK,EAAEkK,QAAQjK,EAAED,EAAE6jY,eAAe5jY,GAAED,EAAEwnL,GAAG5iL,EAAEC,IAAKumI,QAAQ,CAACl5I,QAAQgE,GAAuB,QAApByO,OAAE,IAASA,EAAE,KAAKA,KAAa3E,EAAEyT,SAAS9O,GAAe,QAAZzO,EAAE0kS,GAAGxnS,EAAE4M,EAAE6E,MAAc02X,GAAGrlY,EAAE9C,EAAEyR,EAAED,GAAGozU,GAAG9hV,EAAE9C,EAAEyR,IAAWA,CAAE,CAC5b,SAASuzU,GAAGliV,GAAe,OAAZA,EAAEA,EAAEvE,SAAco1B,OAAyB7wB,EAAE6wB,MAAMs8H,IAAoDntJ,EAAE6wB,MAAMi7V,WAAhF,IAA2F,UAASjqW,GAAG7hB,EAAE8J,GAAqB,GAAG,QAArB9J,EAAEA,EAAEotX,gBAA2B,OAAOptX,EAAEqtX,WAAW,CAAC,IAAItjX,EAAE/J,EAAEoiY,UAAUpiY,EAAEoiY,UAAU,IAAIr4X,GAAGA,EAAED,EAAEC,EAAED,CAAE,CAAC,UAASy1B,GAAGv/B,EAAE8J,GAAG+X,GAAG7hB,EAAE8J,IAAI9J,EAAEA,EAAEitX,YAAYprW,GAAG7hB,EAAE8J,EAAG,CAnB9SgoY,GAAG,SAAS9xY,EAAE8J,EAAEC,GAAG,GAAG,OAAO/J,EAAE,GAAGA,EAAEyiY,gBAAgB34X,EAAEo4X,cAActC,GAAGnkY,QAAQmoY,IAAG,MAAO,CAAC,GAAG,KAAK5jY,EAAE2jY,MAAM55X,IAAI,KAAa,IAARD,EAAE89L,OAAW,OAAOg8L,IAAG,EAzE1I,SAAY5jY,EAAE8J,EAAEC,GAAG,OAAOD,EAAEqjJ,KAAK,KAAK,EAAEugP,GAAG5jY,GAAG64X,KAAK,MAAM,KAAK,EAAEnlD,GAAG1zU,GAAG,MAAM,KAAK,EAAEo2X,GAAGp2X,EAAEvM,OAAOijY,GAAG12X,GAAG,MAAM,KAAK,EAAEg9X,GAAGh9X,EAAEA,EAAEgiX,UAAUwF,eAAe,MAAM,KAAK,GAAG,IAAI7iX,EAAE3E,EAAEvM,KAAKusF,SAAS5sF,EAAE4M,EAAE24X,cAAc5tY,MAAM4vQ,GAAEu+H,GAAGv0X,EAAE60X,eAAe70X,EAAE60X,cAAcpmY,EAAE,MAAM,KAAK,GAAqB,GAAG,QAArBuR,EAAE3E,EAAEsjX,eAA2B,OAAG,OAAO3+W,EAAE4+W,YAAkB5oH,GAAEZ,GAAY,EAAVA,GAAEpoQ,SAAWqO,EAAE89L,OAAO,IAAI,MAAQ,KAAK79L,EAAED,EAAE+mB,MAAM2yW,YAAmB0K,GAAGluY,EAAE8J,EAAEC,IAAG06P,GAAEZ,GAAY,EAAVA,GAAEpoQ,SAA8B,QAAnBuE,EAAEojL,GAAGpjL,EAAE8J,EAAEC,IAAmB/J,EAAEs+I,QAAQ,MAAKmmH,GAAEZ,GAAY,EAAVA,GAAEpoQ,SAAW,MAAM,KAAK,GAC7d,GADgegT,EAAE,KAAK1E,EACrfD,EAAE05X,YAAe,KAAa,IAARxjY,EAAE4nM,OAAW,CAAC,GAAGn5L,EAAE,OAAOygY,GAAGlvY,EAAE8J,EAAEC,GAAGD,EAAE89L,OAAO,GAAI,CAA4F,GAA1E,QAAlB1qM,EAAE4M,EAAEsjX,iBAAyBlwX,EAAE6xY,UAAU,KAAK7xY,EAAE47O,KAAK,KAAK57O,EAAEisY,WAAW,MAAM1kI,GAAEZ,GAAEA,GAAEpoQ,SAAYgT,EAAE,MAAW,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO3E,EAAE65X,MAAM,EAAEkJ,GAAG7sY,EAAE8J,EAAEC,GAAG,OAAOq5K,GAAGpjL,EAAE8J,EAAEC,EAAG,CAwE9G0rY,CAAGz1Y,EAAE8J,EAAEC,GAAG65X,GAAG,KAAa,OAAR5jY,EAAE4nM,MAAoB,MAAKg8L,IAAG,EAAGxsO,IAAG,KAAa,QAARttJ,EAAE89L,QAAgB45L,GAAG13X,EAAEq3X,GAAGr3X,EAAErE,OAAiB,OAAVqE,EAAE65X,MAAM,EAAS75X,EAAEqjJ,KAAK,KAAK,EAAE,IAAI1+I,EAAE3E,EAAEvM,KAAK8vY,GAAGrtY,EAAE8J,GAAG9J,EAAE8J,EAAEo4X,aAAa,IAAIhlY,EAAE4iY,GAAGh2X,EAAEikQ,GAAEtyQ,SAASgoY,GAAG35X,EAAEC,GAAG7M,EAAE4qY,GAAG,KAAKh+X,EAAE2E,EAAEzO,EAAE9C,EAAE6M,GAAG,IAAI2E,EAAEy5X,KACvI,OAD4Ir+X,EAAE89L,OAAO,EAAE,kBAAkB1qM,GAAG,OAAOA,GAAG,oBAAoBA,EAAEgtC,aAAQ,IAAShtC,EAAE2oX,UAAU/7W,EAAEqjJ,IAAI,EAAErjJ,EAAEsjX,cAAc,KAAKtjX,EAAEu6X,YAC1e,KAAKnE,GAAGzxX,IAAIC,GAAE,EAAG8xX,GAAG12X,IAAI4E,GAAE,EAAG5E,EAAEsjX,cAAc,OAAOlwX,EAAE0/C,YAAO,IAAS1/C,EAAE0/C,MAAM1/C,EAAE0/C,MAAM,KAAK6kS,GAAG33U,GAAG5M,EAAE0oY,QAAQ1hO,GAAGp6J,EAAEgiX,UAAU5uX,EAAEA,EAAE+nY,gBAAgBn7X,EAAEg0U,GAAGh0U,EAAE2E,EAAEzO,EAAE+J,GAAGD,EAAE2jY,GAAG,KAAK3jY,EAAE2E,GAAE,EAAGC,EAAE3E,KAAKD,EAAEqjJ,IAAI,EAAEiK,IAAG1oJ,GAAG+yX,GAAG33X,GAAG0iY,GAAG,KAAK1iY,EAAE5M,EAAE6M,GAAGD,EAAEA,EAAE+mB,OAAc/mB,EAAE,KAAK,GAAG2E,EAAE3E,EAAEoxW,YAAYl7W,EAAE,CAAqF,OAApFqtY,GAAGrtY,EAAE8J,GAAG9J,EAAE8J,EAAEo4X,aAAuBzzX,GAAVvR,EAAEuR,EAAEgzJ,OAAUhzJ,EAAEq3W,UAAUh8W,EAAEvM,KAAKkR,EAAEvR,EAAE4M,EAAEqjJ,IAQtU,SAAYntJ,GAAG,GAAG,oBAAoBA,EAAE,OAAO0sY,GAAG1sY,GAAG,EAAE,EAAE,QAAG,IAASA,GAAG,OAAOA,EAAE,CAAc,IAAbA,EAAEA,EAAE6lX,YAAgBhB,EAAG,OAAO,GAAG,GAAG7kX,IAAIglX,EAAG,OAAO,EAAG,QAAO,CAAE,CAR0L0wB,CAAGjnY,GAAGzO,EAAE8iY,GAAGr0X,EAAEzO,GAAU9C,GAAG,KAAK,EAAE4M,EAAE8iY,GAAG,KAAK9iY,EAAE2E,EAAEzO,EAAE+J,GAAG,MAAM/J,EAAE,KAAK,EAAE8J,EAAEsjY,GAAG,KAAKtjY,EAAE2E,EAAEzO,EAAE+J,GAAG,MAAM/J,EAAE,KAAK,GAAG8J,EAAEy/P,GAAG,KAAKz/P,EAAE2E,EAAEzO,EAAE+J,GAAG,MAAM/J,EAAE,KAAK,GAAG8J,EAAE2iY,GAAG,KAAK3iY,EAAE2E,EAAEq0X,GAAGr0X,EAAElR,KAAKyC,GAAG+J,GAAG,MAAM/J,EAAE,MAAM6H,MAAM6J,EAAE,IACvgBjD,EAAE,IAAM,QAAO3E,EAAE,KAAK,EAAE,OAAO2E,EAAE3E,EAAEvM,KAAKL,EAAE4M,EAAEo4X,aAA2C0K,GAAG5sY,EAAE8J,EAAE2E,EAArCvR,EAAE4M,EAAEoxW,cAAczsW,EAAEvR,EAAE4lY,GAAGr0X,EAAEvR,GAAc6M,GAAG,KAAK,EAAE,OAAO0E,EAAE3E,EAAEvM,KAAKL,EAAE4M,EAAEo4X,aAA2CkL,GAAGptY,EAAE8J,EAAE2E,EAArCvR,EAAE4M,EAAEoxW,cAAczsW,EAAEvR,EAAE4lY,GAAGr0X,EAAEvR,GAAc6M,GAAG,KAAK,EAAE/J,EAAE,CAAO,GAAN0tY,GAAG5jY,GAAM,OAAO9J,EAAE,MAAM6H,MAAM6J,EAAE,MAAMjD,EAAE3E,EAAEo4X,aAA+BhlY,GAAlBwR,EAAE5E,EAAEsjX,eAAkBpxX,QAAQ2lV,GAAG3hV,EAAE8J,GAAGk4U,GAAGl4U,EAAE2E,EAAE,KAAK1E,GAAG,IAAI4E,EAAE7E,EAAEsjX,cAA0B,GAAZ3+W,EAAEE,EAAE3S,QAAW0S,EAAE2iX,aAAL,CAAkB,GAAG3iX,EAAE,CAAC1S,QAAQyS,EAAE4iX,cAAa,EAAG1+V,MAAMhkB,EAAEgkB,MAAM6iX,0BAA0B7mY,EAAE6mY,0BAA0BxI,YAAYr+X,EAAEq+X,aAAaljY,EAAEu6X,YAAYC,UAChf51X,EAAE5E,EAAEsjX,cAAc1+W,EAAU,IAAR5E,EAAE89L,MAAU,CAAuB99L,EAAE8jY,GAAG5tY,EAAE8J,EAAE2E,EAAE1E,EAAjC7M,EAAEg1T,GAAGrqT,MAAM6J,EAAE,MAAM5H,IAAmB,MAAM9J,CAAE,CAAK,GAAGyO,IAAIvR,EAAE,CAAuB4M,EAAE8jY,GAAG5tY,EAAE8J,EAAE2E,EAAE1E,EAAjC7M,EAAEg1T,GAAGrqT,MAAM6J,EAAE,MAAM5H,IAAmB,MAAM9J,CAAE,CAAK,IAAI4hY,GAAG5C,GAAGl1X,EAAEgiX,UAAUwF,cAAc1J,YAAY+Z,GAAG73X,EAAEstJ,IAAE,EAAGyqO,GAAG,KAAK93X,EAAE4zU,GAAG7zU,EAAE,KAAK2E,EAAE1E,GAAGD,EAAE+mB,MAAM9mB,EAAEA,GAAGA,EAAE69L,OAAe,EAAT79L,EAAE69L,MAAS,KAAK79L,EAAEA,EAAEu0I,OADoE,KACxD,CAAM,GAALqkP,KAAQl0X,IAAIvR,EAAE,CAAC4M,EAAEs5K,GAAGpjL,EAAE8J,EAAEC,GAAG,MAAM/J,CAAE,CAAAwsY,GAAGxsY,EAAE8J,EAAE2E,EAAE1E,EAAG,CAAAD,EAAEA,EAAE+mB,KAAM,QAAO/mB,EAAE,KAAK,EAAE,OAAO0zU,GAAG1zU,GAAG,OAAO9J,GAAGsiY,GAAGx4X,GAAG2E,EAAE3E,EAAEvM,KAAKL,EAAE4M,EAAEo4X,aAAaxzX,EAAE,OAAO1O,EAAEA,EAAEyiY,cAAc,KAAK9zX,EAAEzR,EAAEimB,SAASq7W,GAAG/vX,EAAEvR,GAAGyR,EAAE,KAAK,OAAOD,GAAG8vX,GAAG/vX,EAAEC,KAAK5E,EAAE89L,OAAO,IACnfulM,GAAGntY,EAAE8J,GAAG0iY,GAAGxsY,EAAE8J,EAAE6E,EAAE5E,GAAGD,EAAE+mB,MAAM,KAAK,EAAE,OAAO,OAAO7wB,GAAGsiY,GAAGx4X,GAAG,KAAK,KAAK,GAAG,OAAOokY,GAAGluY,EAAE8J,EAAEC,GAAG,KAAK,EAAE,OAAO+8X,GAAGh9X,EAAEA,EAAEgiX,UAAUwF,eAAe7iX,EAAE3E,EAAEo4X,aAAa,OAAOliY,EAAE8J,EAAE+mB,MAAM6sT,GAAG5zU,EAAE,KAAK2E,EAAE1E,GAAGyiY,GAAGxsY,EAAE8J,EAAE2E,EAAE1E,GAAGD,EAAE+mB,MAAM,KAAK,GAAG,OAAOpiB,EAAE3E,EAAEvM,KAAKL,EAAE4M,EAAEo4X,aAA2C34H,GAAGvpQ,EAAE8J,EAAE2E,EAArCvR,EAAE4M,EAAEoxW,cAAczsW,EAAEvR,EAAE4lY,GAAGr0X,EAAEvR,GAAc6M,GAAG,KAAK,EAAE,OAAOyiY,GAAGxsY,EAAE8J,EAAEA,EAAEo4X,aAAan4X,GAAGD,EAAE+mB,MAAM,KAAK,EAAmD,KAAK,GAAG,OAAO27W,GAAGxsY,EAAE8J,EAAEA,EAAEo4X,aAAa/+W,SAASpZ,GAAGD,EAAE+mB,MAAM,KAAK,GAAG7wB,EAAE,CACxZ,GADyZyO,EAAE3E,EAAEvM,KAAKusF,SAAS5sF,EAAE4M,EAAEo4X,aAAaxzX,EAAE5E,EAAE24X,cAClf9zX,EAAEzR,EAAErI,MAAM4vQ,GAAEu+H,GAAGv0X,EAAE60X,eAAe70X,EAAE60X,cAAc30X,EAAK,OAAOD,EAAE,GAAGgrX,GAAGhrX,EAAE7Z,MAAM8Z,IAAI,GAAGD,EAAEyU,WAAWjmB,EAAEimB,WAAWy8W,GAAGnkY,QAAQ,CAACqO,EAAEs5K,GAAGpjL,EAAE8J,EAAEC,GAAG,MAAM/J,CAAE,OAAM,IAAc,QAAV0O,EAAE5E,EAAE+mB,SAAiBniB,EAAEw+W,OAAOpjX,GAAG,OAAO4E,GAAG,CAAC,IAAIE,EAAEF,EAAE+hH,aAAa,GAAG,OAAO7hH,EAAE,CAACD,EAAED,EAAEmiB,MAAM,IAAI,IAAIo6C,EAAEr8D,EAAE80X,aAAa,OAAOz4T,GAAG,CAAC,GAAGA,EAAEj3D,UAAUvF,EAAE,CAAC,GAAG,IAAIC,EAAEy+I,IAAI,EAACliF,EAAEqmH,IAAI,EAAEvnL,GAAGA,IAAKojJ,IAAI,EAAE,IAAIrnJ,EAAE4I,EAAE21X,YAAY,GAAG,OAAOv+X,EAAE,CAAY,IAAIe,GAAff,EAAEA,EAAE8hT,QAAe/yM,QAAQ,OAAOhuG,EAAEokE,EAAEv2E,KAAKu2E,GAAGA,EAAEv2E,KAAKmS,EAAEnS,KAAKmS,EAAEnS,KAAKu2E,GAAGnlE,EAAE+uG,QAAQ5pC,CAAE,CAAC,CAAAv8D,EAAEi1X,OAAO55X,EAAgB,QAAdkhE,EAAEv8D,EAAEu+W,aAAqBhiT,EAAE04T,OAAO55X,GAAGw5X,GAAG70X,EAAEw+W,OAClfnjX,EAAED,GAAG8E,EAAE+0X,OAAO55X,EAAE,KAAM,CAAAkhE,EAAEA,EAAEv2E,IAAK,CAAC,MAAK,GAAG,KAAKga,EAAEy+I,IAAIx+I,EAAED,EAAEnR,OAAOuM,EAAEvM,KAAK,KAAKmR,EAAEmiB,WAAW,GAAG,KAAKniB,EAAEy+I,IAAI,CAAY,GAAG,QAAdx+I,EAAED,EAAEw+W,QAAmB,MAAMrlX,MAAM6J,EAAE,MAAM/C,EAAEg1X,OAAO55X,EAAgB,QAAd6E,EAAED,EAAEs+W,aAAqBr+W,EAAE+0X,OAAO55X,GAAGw5X,GAAG50X,EAAE5E,EAAED,GAAG6E,EAAED,EAAE4vI,OAAQ,MAAK3vI,EAAED,EAAEmiB,MAAM,GAAG,OAAOliB,EAAEA,EAAEu+W,OAAOx+W,OAAO,IAAIC,EAAED,EAAE,OAAOC,GAAG,CAAC,GAAGA,IAAI7E,EAAE,CAAC6E,EAAE,KAAK,KAAM,CAAY,GAAG,QAAfD,EAAEC,EAAE2vI,SAAoB,CAAC5vI,EAAEw+W,OAAOv+W,EAAEu+W,OAAOv+W,EAAED,EAAE,KAAM,CAAAC,EAAEA,EAAEu+W,MAAO,CAAAx+W,EAAEC,CAAE,CAAA69X,GAAGxsY,EAAE8J,EAAE5M,EAAEimB,SAASpZ,GAAGD,EAAEA,EAAE+mB,KAAM,QAAO/mB,EAAE,KAAK,EAAE,OAAO5M,EAAE4M,EAAEvM,KAAKkR,EAAE3E,EAAEo4X,aAAa/+W,SAASsgX,GAAG35X,EAAEC,GAAW0E,EAAEA,EAAVvR,EAAE2mY,GAAG3mY,IAAU4M,EAAE89L,OAAO,EAAE4kM,GAAGxsY,EAAE8J,EAAE2E,EAAE1E,GACpfD,EAAE+mB,MAAM,KAAK,GAAG,OAAgB3zB,EAAE4lY,GAAXr0X,EAAE3E,EAAEvM,KAAYuM,EAAEo4X,cAA6BuK,GAAGzsY,EAAE8J,EAAE2E,EAAtBvR,EAAE4lY,GAAGr0X,EAAElR,KAAKL,GAAc6M,GAAG,KAAK,GAAG,OAAO4iY,GAAG3sY,EAAE8J,EAAEA,EAAEvM,KAAKuM,EAAEo4X,aAAan4X,GAAG,KAAK,GAAG,OAAO0E,EAAE3E,EAAEvM,KAAKL,EAAE4M,EAAEo4X,aAAahlY,EAAE4M,EAAEoxW,cAAczsW,EAAEvR,EAAE4lY,GAAGr0X,EAAEvR,GAAGmwY,GAAGrtY,EAAE8J,GAAGA,EAAEqjJ,IAAI,EAAE+yO,GAAGzxX,IAAIzO,GAAE,EAAGwgY,GAAG12X,IAAI9J,GAAE,EAAGyjY,GAAG35X,EAAEC,GAAG88M,GAAG/8M,EAAE2E,EAAEvR,GAAG4gV,GAAGh0U,EAAE2E,EAAEvR,EAAE6M,GAAG0jY,GAAG,KAAK3jY,EAAE2E,GAAE,EAAGzO,EAAE+J,GAAG,KAAK,GAAG,OAAOmlY,GAAGlvY,EAAE8J,EAAEC,GAAG,KAAK,GAAG,OAAO8iY,GAAG7sY,EAAE8J,EAAEC,GAAG,MAAMlC,MAAM6J,EAAE,IAAI5H,EAAEqjJ,KAAO,EAYzC,IAAIwoP,GAAG,oBAAoBC,YAAYA,YAAY,SAAS51Y,GAAG2K,QAAQ1L,MAAMe,EAAG,EAAC,SAAS0jC,GAAG1jC,GAAG9J,KAAK2/Y,cAAc71Y,CAAE,CAClI,SAAS81Y,GAAG91Y,GAAG9J,KAAK2/Y,cAAc71Y,CAAE,CAC7J,SAAS+1Y,GAAG/1Y,GAAG,SAASA,GAAG,IAAIA,EAAEkoX,UAAU,IAAIloX,EAAEkoX,UAAU,KAAKloX,EAAEkoX,SAAU,UAAS/kT,GAAGnjE,GAAG,SAASA,GAAG,IAAIA,EAAEkoX,UAAU,IAAIloX,EAAEkoX,UAAU,KAAKloX,EAAEkoX,WAAW,IAAIloX,EAAEkoX,UAAU,iCAAiCloX,EAAEmoX,WAAY,UAAS6tB,KAAM,CAEza,SAASC,GAAGj2Y,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,IAAIwR,EAAE3E,EAAE4mY,oBAAoB,GAAGjiY,EAAE,CAAC,IAAIC,EAAED,EAAE,GAAG,oBAAoBxR,EAAE,CAAC,IAAI0R,EAAE1R,EAAEA,EAAE,WAAW,IAAI8C,EAAEkiV,GAAGvzU,GAAGC,EAAEna,KAAKuL,EAAG,CAAC,CAAAkuC,GAAGpkC,EAAE6E,EAAE3O,EAAE9C,EAAG,MAAKyR,EADxJ,SAAY3O,EAAE8J,EAAEC,EAAE0E,EAAEvR,GAAG,GAAGA,EAAE,CAAC,GAAG,oBAAoBuR,EAAE,CAAC,IAAIC,EAAED,EAAEA,EAAE,WAAW,IAAIzO,EAAEkiV,GAAGvzU,GAAGD,EAAEja,KAAKuL,EAAG,CAAC,KAAI2O,EAAEozU,GAAGj4U,EAAE2E,EAAEzO,EAAE,EAAE,MAAK,EAAG,EAAG,GAAGg2Y,IAAmF,OAA/Eh2Y,EAAE2wY,oBAAoBhiY,EAAE3O,EAAEu9X,IAAI5uX,EAAElT,QAAQ0hY,GAAG,IAAIn9X,EAAEkoX,SAASloX,EAAEwrX,WAAWxrX,GAAGu0Y,KAAY5lY,CAAE,MAAKzR,EAAE8C,EAAEioX,WAAWjoX,EAAE6nX,YAAY3qX,GAAG,GAAG,oBAAoBuR,EAAE,CAAC,IAAIG,EAAEH,EAAEA,EAAE,WAAW,IAAIzO,EAAEkiV,GAAGj3Q,GAAGr8D,EAAEna,KAAKuL,EAAG,CAAC,KAAIirE,EAAE22Q,GAAG5hV,EAAE,GAAE,EAAG,KAAK,GAAK,EAAG,EAAG,GAAGg2Y,IAA0G,OAAtGh2Y,EAAE2wY,oBAAoB1lU,EAAEjrE,EAAEu9X,IAAItyT,EAAExvE,QAAQ0hY,GAAG,IAAIn9X,EAAEkoX,SAASloX,EAAEwrX,WAAWxrX,GAAGu0Y,IAAG,WAAWrmW,GAAGpkC,EAAEmhE,EAAElhE,EAAE0E,EAAG,IAASw8D,CAAE,CACrUirU,CAAGnsY,EAAED,EAAE9J,EAAE9C,EAAEuR,GAAG,OAAOyzU,GAAGvzU,EAAG,CAHrLmnY,GAAG11Y,UAAU8pC,OAAOxG,GAAGtjC,UAAU8pC,OAAO,SAASlqC,GAAG,IAAI8J,EAAE5T,KAAK2/Y,cAAc,GAAG,OAAO/rY,EAAE,MAAMjC,MAAM6J,EAAE,MAAMw8B,GAAGluC,EAAE8J,EAAE,KAAK,KAAM,EAACgsY,GAAG11Y,UAAU+1Y,QAAQzyW,GAAGtjC,UAAU+1Y,QAAQ,WAAW,IAAIn2Y,EAAE9J,KAAK2/Y,cAAc,GAAG,OAAO71Y,EAAE,CAAC9J,KAAK2/Y,cAAc,KAAK,IAAI/rY,EAAE9J,EAAEsxX,cAAcijB,IAAG,WAAWrmW,GAAG,KAAKluC,EAAE,KAAK,KAAM,IAAE8J,EAAEyzX,IAAI,IAAK,CAAC,EAC1TuY,GAAG11Y,UAAUg2Y,2BAA2B,SAASp2Y,GAAG,GAAGA,EAAE,CAAC,IAAI8J,EAAEmmX,KAAKjwX,EAAE,CAAC+wX,UAAU,KAAK34X,OAAO4H,EAAE0uL,SAAS5kL,GAAG,IAAI,IAAIC,EAAE,EAAEA,EAAE2mX,GAAG57X,QAAQ,IAAIgV,GAAGA,EAAE4mX,GAAG3mX,GAAG2kL,SAAS3kL,KAAK2mX,GAAGhrX,OAAOqE,EAAE,EAAE/J,GAAG,IAAI+J,GAAGonX,GAAGnxX,EAAG,CAAC,EAEZ8vX,GAAG,SAAS9vX,GAAG,OAAOA,EAAEmtJ,KAAK,KAAK,EAAE,IAAIrjJ,EAAE9J,EAAE8rX,UAAU,GAAGhiX,EAAErO,QAAQ2xX,cAAciE,aAAa,CAAC,IAAItnX,EAAEklX,GAAGnlX,EAAEqlX,cAAc,IAAIplX,IAAI6lX,GAAG9lX,EAAI,EAAFC,GAAKipY,GAAGlpY,EAAEm/M,MAAK,KAAO,EAAF/nD,MAAOyuO,GAAG1mL,KAAI,IAAI83K,MAAO,OAAM,KAAK,GAAGwT,IAAG,WAAW,IAAIzqY,EAAEq6X,GAAGnkY,EAAE,GAAG,GAAG,OAAO8J,EAAE,CAAC,IAAIC,EAAEo7X,KAAIE,GAAGv7X,EAAE9J,EAAE,EAAE+J,EAAG,CAAC,IAAEw1B,GAAGv/B,EAAE,GAAI,EAChc+vX,GAAG,SAAS/vX,GAAG,GAAG,KAAKA,EAAEmtJ,IAAI,CAAC,IAAIrjJ,EAAEq6X,GAAGnkY,EAAE,WAAW,GAAG,OAAO8J,EAAau7X,GAAGv7X,EAAE9J,EAAE,UAAXmlY,MAAwB5lW,GAAGv/B,EAAE,UAAW,CAAC,EAACgwX,GAAG,SAAShwX,GAAG,GAAG,KAAKA,EAAEmtJ,IAAI,CAAC,IAAIrjJ,EAAEs7X,GAAGplY,GAAG+J,EAAEo6X,GAAGnkY,EAAE8J,GAAG,GAAG,OAAOC,EAAas7X,GAAGt7X,EAAE/J,EAAE8J,EAAXq7X,MAAgB5lW,GAAGv/B,EAAE8J,EAAG,CAAC,EAACmmX,GAAG,WAAW,OAAO/+L,EAAE,EAACg/L,GAAG,SAASlwX,EAAE8J,GAAG,IAAIC,EAAEmnL,GAAE,IAAI,OAAOA,GAAElxL,EAAE8J,GAAgB,CAA/B,QAA2BonL,GAAEnnL,CAAE,CAAC,EACnS0hX,GAAG,SAASzrX,EAAE8J,EAAEC,GAAG,OAAOD,GAAG,IAAK,QAAyB,GAAjBkqS,EAAGh0S,EAAE+J,GAAGD,EAAEC,EAAEyG,KAAQ,UAAUzG,EAAExM,MAAM,MAAMuM,EAAE,CAAC,IAAIC,EAAE/J,EAAE+J,EAAEyhX,YAAYzhX,EAAEA,EAAEyhX,WAAsF,IAA3EzhX,EAAEA,EAAEssY,iBAAiB,cAAcn/X,KAAKE,UAAU,GAAGtN,GAAG,mBAAuBA,EAAE,EAAEA,EAAEC,EAAEjV,OAAOgV,IAAI,CAAC,IAAI2E,EAAE1E,EAAED,GAAG,GAAG2E,IAAIzO,GAAGyO,EAAEsiJ,OAAO/wJ,EAAE+wJ,KAAK,CAAC,IAAI7zJ,EAAE6uX,GAAGt9W,GAAG,IAAIvR,EAAE,MAAM2K,MAAM6J,EAAE,KAAK40W,EAAG73W,GAAGulS,EAAGvlS,EAAEvR,EAAG,CAAC,CAAC,OAAM,IAAK,WAAW43F,GAAG90F,EAAE+J,GAAG,MAAM,IAAK,SAAmB,OAAVD,EAAEC,EAAElV,QAAe84N,GAAG3tN,IAAI+J,EAAEwlL,SAASzlL,GAAE,GAAK,EAACoiX,GAAGooB,GAAGnoB,GAAGooB,GACpa,IAAI+B,GAAG,CAACC,uBAAsB,EAAGC,OAAO,CAAC3qB,GAAG8M,GAAG5M,GAAGC,GAAGC,GAAGqoB,KAAKmC,GAAG,CAACC,wBAAwBtlB,GAAGulB,WAAW,EAAE7hY,QAAQ,SAAS8hY,oBAAoB,aAC1IC,GAAG,CAACF,WAAWF,GAAGE,WAAW7hY,QAAQ2hY,GAAG3hY,QAAQ8hY,oBAAoBH,GAAGG,oBAAoBE,eAAeL,GAAGK,eAAeC,kBAAkB,KAAKC,4BAA4B,KAAKC,4BAA4B,KAAKC,cAAc,KAAKC,wBAAwB,KAAKC,wBAAwB,KAAKC,gBAAgB,KAAKC,mBAAmB,KAAKC,eAAe,KAAKC,qBAAqB3mD,EAAG22C,uBAAuBiQ,wBAAwB,SAASz3Y,GAAW,OAAO,QAAfA,EAAEutX,GAAGvtX,IAAmB,KAAKA,EAAE8rX,SAAU,EAAC4qB,wBAAwBD,GAAGC,yBARjN,WAAc,OAAO,IAAK,EASrUgB,4BAA4B,KAAKC,gBAAgB,KAAKC,aAAa,KAAKC,kBAAkB,KAAKC,gBAAgB,KAAKC,kBAAkB,kCAAkC,GAAG,qBAAqBC,+BAA+B,CAAC,IAAIC,GAAGD,+BAA+B,IAAIC,GAAGC,YAAYD,GAAGE,cAAc,IAAIzpB,GAAGupB,GAAGG,OAAOvB,IAAIloB,GAAGspB,EAAa,CAAV,MAAMj4Y,IAAI,CAAC,CAAA6hI,EAAQyiP,mDAAmDgyB,GAC9Yz0Q,EAAQw2Q,aAAa,SAASr4Y,EAAE8J,GAAG,IAAIC,EAAE,EAAE1R,UAAUvD,aAAQ,IAASuD,UAAU,GAAGA,UAAU,GAAG,KAAK,IAAI09Y,GAAGjsY,GAAG,MAAMjC,MAAM6J,EAAE,MAAM,OAAOmwU,GAAG7hV,EAAE8J,EAAE,KAAKC,EAAG,EAAC83H,EAAQy2Q,WAAW,SAASt4Y,EAAE8J,GAAG,IAAIisY,GAAG/1Y,GAAG,MAAM6H,MAAM6J,EAAE,MAAM,IAAI3H,GAAE,EAAG0E,EAAE,GAAGvR,EAAEy4Y,GAA4P,OAAzP,OAAO7rY,QAAG,IAASA,KAAI,IAAKA,EAAEyuY,sBAAsBxuY,GAAE,QAAI,IAASD,EAAEyhY,mBAAmB98X,EAAE3E,EAAEyhY,uBAAkB,IAASzhY,EAAEkrY,qBAAqB93Y,EAAE4M,EAAEkrY,qBAAqBlrY,EAAE83U,GAAG5hV,EAAE,GAAE,EAAG,KAAK,EAAK+J,EAAE,EAAG0E,EAAEvR,GAAG8C,EAAEu9X,IAAIzzX,EAAErO,QAAQ0hY,GAAG,IAAIn9X,EAAEkoX,SAASloX,EAAEwrX,WAAWxrX,GAAU,IAAI0jC,GAAG55B,EAAG,EACtf+3H,EAAQ22Q,YAAY,SAASx4Y,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,IAAIA,EAAEkoX,SAAS,OAAOloX,EAAE,IAAI8J,EAAE9J,EAAEilY,gBAAgB,QAAG,IAASn7X,EAAE,CAAC,GAAG,oBAAoB9J,EAAEkqC,OAAO,MAAMriC,MAAM6J,EAAE,MAAiC,MAA3B1R,EAAE5I,OAAOQ,KAAKoI,GAAG+3D,KAAK,KAAWlwD,MAAM6J,EAAE,IAAI1R,GAAK,CAAoC,OAA5BA,EAAE,QAAVA,EAAEutX,GAAGzjX,IAAc,KAAK9J,EAAE8rX,SAAmB,EAACjqP,EAAQ42Q,UAAU,SAASz4Y,GAAG,OAAOu0Y,GAAGv0Y,EAAG,EAAC6hI,EAAQ62Q,QAAQ,SAAS14Y,EAAE8J,EAAEC,GAAG,IAAIo5D,GAAGr5D,GAAG,MAAMjC,MAAM6J,EAAE,MAAM,OAAOukY,GAAG,KAAKj2Y,EAAE8J,GAAE,EAAGC,EAAG,EAChZ83H,EAAQ82Q,YAAY,SAAS34Y,EAAE8J,EAAEC,GAAG,IAAIgsY,GAAG/1Y,GAAG,MAAM6H,MAAM6J,EAAE,MAAM,IAAIjD,EAAE,MAAM1E,GAAGA,EAAE6uY,iBAAiB,KAAK17Y,GAAE,EAAGwR,EAAE,GAAGC,EAAEgnY,GAAyO,GAAtO,OAAO5rY,QAAG,IAASA,KAAI,IAAKA,EAAEwuY,sBAAsBr7Y,GAAE,QAAI,IAAS6M,EAAEwhY,mBAAmB78X,EAAE3E,EAAEwhY,uBAAkB,IAASxhY,EAAEirY,qBAAqBrmY,EAAE5E,EAAEirY,qBAAqBlrY,EAAEi4U,GAAGj4U,EAAE,KAAK9J,EAAE,EAAE,MAAM+J,EAAEA,EAAE,KAAK7M,EAAE,EAAGwR,EAAEC,GAAG3O,EAAEu9X,IAAIzzX,EAAErO,QAAQ0hY,GAAGn9X,GAAMyO,EAAE,IAAIzO,EAAE,EAAEA,EAAEyO,EAAE3Z,OAAOkL,IAA2B9C,GAAhBA,GAAP6M,EAAE0E,EAAEzO,IAAO64Y,aAAgB9uY,EAAE6wO,SAAS,MAAM9wO,EAAEyrY,gCAAgCzrY,EAAEyrY,gCAAgC,CAACxrY,EAAE7M,GAAG4M,EAAEyrY,gCAAgC3gZ,KAAKmV,EACvhB7M,GAAG,OAAO,IAAI44Y,GAAGhsY,EAAG,EAAC+3H,EAAQ33F,OAAO,SAASlqC,EAAE8J,EAAEC,GAAG,IAAIo5D,GAAGr5D,GAAG,MAAMjC,MAAM6J,EAAE,MAAM,OAAOukY,GAAG,KAAKj2Y,EAAE8J,GAAE,EAAGC,EAAG,EAAC83H,EAAQi3Q,uBAAuB,SAAS94Y,GAAG,IAAImjE,GAAGnjE,GAAG,MAAM6H,MAAM6J,EAAE,KAAK,QAAO1R,EAAE2wY,sBAAqB4D,IAAG,WAAW0B,GAAG,KAAK,KAAKj2Y,GAAE,GAAG,WAAWA,EAAE2wY,oBAAoB,KAAK3wY,EAAEu9X,IAAI,IAAK,GAAE,KAAE,EAAO,EAAC17P,EAAQk3Q,wBAAwBzE,GAC/UzyQ,EAAQm3Q,oCAAoC,SAASh5Y,EAAE8J,EAAEC,EAAE0E,GAAG,IAAI00D,GAAGp5D,GAAG,MAAMlC,MAAM6J,EAAE,MAAM,GAAG,MAAM1R,QAAG,IAASA,EAAEilY,gBAAgB,MAAMp9X,MAAM6J,EAAE,KAAK,OAAOukY,GAAGj2Y,EAAE8J,EAAEC,GAAE,EAAG0E,EAAG,EAACozH,EAAQ/sH,QAAQ,oEChU7L,IAAIjO,EAAIyoK,EAAQ,OAEdztC,EAAQy2Q,WAAazxY,EAAEyxY,WACvBz2Q,EAAQ82Q,YAAc9xY,EAAE8xY,iDCH1B,SAASM,IAEP,GAC4C,qBAAnCjB,gCAC4C,oBAA5CA,+BAA+BiB,SAcxC,IAEEjB,+BAA+BiB,SAASA,EAKzC,CAJC,MAAOlkZ,GAGP4V,QAAQ1L,MAAMlK,EACf,CACF,CAKCkkZ,GACA5/O,EAAOx3B,QAAU,EAAjBw3B,2CChCFjiK,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAIqkZ,EAAe,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAIfgqL,EAAUC,EAFD9pO,EAAQ,QAMjB+pO,EAAeD,EAFD9pO,EAAQ,QAI1B,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAE/F,SAASi9N,EAAgBl0N,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAEzJ,SAASohO,EAA2Bh3N,EAAM5K,GAAQ,IAAK4K,EAAQ,MAAM,IAAIk3N,eAAe,6DAAgE,OAAO9hO,GAAyB,kBAATA,GAAqC,oBAATA,EAA8B4K,EAAP5K,CAAc,CAIhP,IAAI6kZ,EAAgB,SAAUC,GAG5B,SAASD,IAGP,OAFAnlL,EAAgBj+N,KAAMojZ,GAEfjjL,EAA2BngO,MAAOojZ,EAAcpxY,WAAa9Q,OAAOyJ,eAAey4Y,IAAgBphZ,MAAMhC,KAAMmC,WACvH,CAaD,OAtBF,SAAmBmhO,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIxkO,UAAU,kEAAoEwkO,GAAeD,EAASp5N,UAAYhJ,OAAO2J,OAAO04N,GAAcA,EAAWr5N,UAAW,CAAEU,YAAa,CAAEjM,MAAO2kO,EAAUliO,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAekiO,IAAYriO,OAAO+I,eAAiB/I,OAAO+I,eAAeq5N,EAAUC,GAAcD,EAAStxN,UAAYuxN,EAAa,CAG5eC,CAAU4/K,EAAeC,GAQzBL,EAAaI,EAAe,CAAC,CAC3BniZ,IAAK,SACLtC,MAAO,WACL,OAAOskZ,EAAQzvN,QAAQ0kD,cACrB,QACAl4O,KAAKC,MACLD,KAAKC,MAAMgtB,SAEd,KAGIm2X,CACR,CArBmB,CAqBlBH,EAAQzvN,QAAQo7M,WAIlBjjQ,EAAAA,SAAkB,EAAIw3Q,EAAa3vN,SAAS4vN,uCC/C5CliZ,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAI2kZ,EAAWpiZ,OAAO6iB,QAAU,SAAU7hB,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAASD,UAAUvE,GAAI,IAAK,IAAIqD,KAAOmB,EAAclB,OAAOgJ,UAAU6jK,eAAexvK,KAAK6D,EAAQnB,KAAQiB,EAAOjB,GAAOmB,EAAOnB,GAAW,CAAC,OAAOiB,CAAS,EAE5P8gZ,EAAe,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAIfgqL,EAAUC,EAFD9pO,EAAQ,QAMjBmqO,EAAkBL,EAFD9pO,EAAQ,QAMzBoqO,EAAcN,EAFD9pO,EAAQ,QAIzB,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAE/F,SAASi9N,EAAgBl0N,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAEzJ,SAASohO,EAA2Bh3N,EAAM5K,GAAQ,IAAK4K,EAAQ,MAAM,IAAIk3N,eAAe,6DAAgE,OAAO9hO,GAAyB,kBAATA,GAAqC,oBAATA,EAA8B4K,EAAP5K,CAAc,CAIhP,IAAIklZ,EAAiB,SAAUJ,GAG7B,SAASI,IAGP,OAFAxlL,EAAgBj+N,KAAMyjZ,GAEftjL,EAA2BngO,MAAOyjZ,EAAezxY,WAAa9Q,OAAOyJ,eAAe84Y,IAAiBzhZ,MAAMhC,KAAMmC,WACzH,CAuBD,OAhCF,SAAmBmhO,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIxkO,UAAU,kEAAoEwkO,GAAeD,EAASp5N,UAAYhJ,OAAO2J,OAAO04N,GAAcA,EAAWr5N,UAAW,CAAEU,YAAa,CAAEjM,MAAO2kO,EAAUliO,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAekiO,IAAYriO,OAAO+I,eAAiB/I,OAAO+I,eAAeq5N,EAAUC,GAAcD,EAAStxN,UAAYuxN,EAAa,CAG5eC,CAAUigL,EAAgBJ,GAQ1BL,EAAaS,EAAgB,CAAC,CAC5BxiZ,IAAK,SACLtC,MAAO,WACL,IAAIqlR,EAAShkR,KAGT0jZ,EAAWJ,EAAS,CAAC,EAAGtjZ,KAAKC,OAKjC,OAJIyjZ,EAASC,uBACJD,EAASC,eAGXV,EAAQzvN,QAAQ0kD,cACrB,MACAorK,EAAS,CAAC,EAAGI,EAAU,CAAEhjZ,IAAK,SAAaJ,GACvC0jR,EAAO/jR,MAAM0jZ,eAAeC,QAAUtjZ,CACvC,IACHN,KAAKC,MAAMgtB,SAEd,KAGIw2X,CACR,CA/BoB,CA+BnBR,EAAQzvN,QAAQo7M,WAIlB6U,EAAeI,UAAY,CACzBvpY,KAAMkpY,EAAYhwN,QAAQt3K,OAC1Brb,GAAI2iZ,EAAYhwN,QAAQt3K,QAG1ByvH,EAAAA,SAAkB,EAAI43Q,EAAgB/vN,SAASiwN,uCCpE/CviZ,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAEIskZ,EAAUC,EAFD9pO,EAAQ,QAMjB+pO,EAAeD,EAFD9pO,EAAQ,QAI1B,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAE/F,SAASi9N,EAAgBl0N,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAEzJ,SAASohO,EAA2Bh3N,EAAM5K,GAAQ,IAAK4K,EAAQ,MAAM,IAAIk3N,eAAe,6DAAgE,OAAO9hO,GAAyB,kBAATA,GAAqC,oBAATA,EAA8B4K,EAAP5K,CAAc,CAIhP,IAAIulZ,EAAc,SAAUT,GAG1B,SAASS,IACP,IAAIC,EAEAC,EAAOjvT,EAEXkpI,EAAgBj+N,KAAM8jZ,GAEtB,IAAK,IAAIxtL,EAAOn0N,UAAUvD,OAAQwK,EAAOvL,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAC3Eh0N,EAAKg0N,GAAQj7N,UAAUi7N,GAGzB,OAAe4mL,EAASjvT,EAAQorI,EAA2BngO,MAAO+jZ,EAAOD,EAAY9xY,WAAa9Q,OAAOyJ,eAAem5Y,IAAcvlZ,KAAKyD,MAAM+hZ,EAAM,CAAC/jZ,MAAM+8I,OAAO3zI,KAAiB2rF,EAAM/gD,OAAS,WACnM,OAAOivW,EAAQzvN,QAAQ0kD,cACrB,IACAnjJ,EAAM90F,MACN80F,EAAM90F,MAAMgtB,SAEf,EAAUkzM,EAA2BprI,EAAnCivT,EACJ,CAED,OAzBF,SAAmB1gL,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIxkO,UAAU,kEAAoEwkO,GAAeD,EAASp5N,UAAYhJ,OAAO2J,OAAO04N,GAAcA,EAAWr5N,UAAW,CAAEU,YAAa,CAAEjM,MAAO2kO,EAAUliO,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAekiO,IAAYriO,OAAO+I,eAAiB/I,OAAO+I,eAAeq5N,EAAUC,GAAcD,EAAStxN,UAAYuxN,EAAa,CAG5eC,CAAUsgL,EAAaT,GAsBhBS,CACR,CAxBiB,CAwBhBb,EAAQzvN,QAAQo7M,WAIlBjjQ,EAAAA,SAAkB,EAAIw3Q,EAAa3vN,SAASswN,uCC7CsIn4Q,EAAQ,QAAOtiI,EAEjM,IAEI46Y,EAASf,EAFD9pO,EAAQ,QAMhB8qO,EAAWhB,EAFD9pO,EAAQ,QAMlB+qO,EAAYjB,EAFD9pO,EAAQ,QAMnBgrO,EAAalB,EAFD9pO,EAAQ,QAMpBirO,EAAiBnB,EAFD9pO,EAAQ,QAMxBkrO,EAAcpB,EAFD9pO,EAAQ,QAMrBmrO,EAAkBrB,EAFD9pO,EAAQ,QAMzB+pO,EAAeD,EAFD9pO,EAAQ,QAMtBmqO,EAAkBL,EAFD9pO,EAAQ,QAMzBorO,EAAYtB,EAFD9pO,EAAQ,QAIvB,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAE/F2qI,EAAQ,GAAOs4Q,EAAOzwN,QACL0wN,EAAS1wN,QACR2wN,EAAU3wN,QACT4wN,EAAW5wN,QACb6wN,EAAe7wN,QACZ8wN,EAAY9wN,QACR+wN,EAAgB/wN,QACnB2vN,EAAa3vN,QACV+vN,EAAgB/vN,QACtBgxN,EAAUhxN,QACFywN,EAAOzwN,QAAiB0wN,EAAS1wN,QAAkB2wN,EAAU3wN,QAAmB4wN,EAAW5wN,QAAiB6wN,EAAe7wN,QAAoB8wN,EAAY9wN,QAAwB+wN,EAAgB/wN,QAAqB2vN,EAAa3vN,QAAwB+vN,EAAgB/vN,QAAkBgxN,EAAUhxN,4CCvDnU,IAAI8vN,EAAWpiZ,OAAO6iB,QAAU,SAAU7hB,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAASD,UAAUvE,GAAI,IAAK,IAAIqD,KAAOmB,EAAclB,OAAOgJ,UAAU6jK,eAAexvK,KAAK6D,EAAQnB,KAAQiB,EAAOjB,GAAOmB,EAAOnB,GAAW,CAAC,OAAOiB,CAAS,EAE5P8gZ,EAAe,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAEnB,SAASgF,EAAgBl0N,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAEzJ,SAASohO,EAA2Bh3N,EAAM5K,GAAQ,IAAK4K,EAAQ,MAAM,IAAIk3N,eAAe,6DAAgE,OAAO9hO,GAAyB,kBAATA,GAAqC,oBAATA,EAA8B4K,EAAP5K,CAAc,CAEhP,SAASilO,EAAUF,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIxkO,UAAU,kEAAoEwkO,GAAeD,EAASp5N,UAAYhJ,OAAO2J,OAAO04N,GAAcA,EAAWr5N,UAAW,CAAEU,YAAa,CAAEjM,MAAO2kO,EAAUliO,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAekiO,IAAYriO,OAAO+I,eAAiB/I,OAAO+I,eAAeq5N,EAAUC,GAAcD,EAAStxN,UAAYuxN,EAAa,CAE9e,IAAI5iO,EAAQy4K,EAAQ,OAIhBqrO,GAHWrrO,EAAQ,OAEXA,EAAQ,MACJA,EAAQ,QACpBsrO,EAAkBtrO,EAAQ,OAC1BksM,EAAYlsM,EAAQ,OACpBurO,EAAavrO,EAAQ,OAErBwrO,EAAa,CACfplZ,GAAI8lX,EAAUppW,OAAO4oW,WACrB+/B,YAAav/B,EAAUppW,OACvB8jD,UAAWslT,EAAU9jX,OACrBsjZ,YAAax/B,EAAUppW,OACvBzc,IAAK6lX,EAAUjqJ,KACf37N,OAAQ4lX,EAAUH,UAAU,CAACG,EAAUjqJ,KAAMiqJ,EAAUppW,SACvDvc,OAAQ2lX,EAAUzoN,OAClBqsG,MAAOo8G,EAAUzoN,OACjB4vJ,UAAW64D,EAAUjqJ,KACrB97N,QAAS+lX,EAAUlqP,KACnBx7H,SAAU0lX,EAAUH,UAAU,CAACG,EAAUzoN,OAAQyoN,EAAUlqP,OAC3D2pR,SAAUz/B,EAAUjqJ,KACpB2pL,YAAa1/B,EAAUlqP,KACvB6pR,cAAe3/B,EAAUlqP,KACzB8pR,mBAAoB5/B,EAAUjqJ,KAC9B8pL,QAAS7/B,EAAUjqJ,KACnB+pL,YAAa9/B,EAAUzoN,QAGrBwoP,EAAU,CACZvlB,OAAQ,SAAgB8O,EAAW0W,GAEjC7wY,QAAQC,KAAK,6CAEb,IAAI6wY,EAAWD,GAAkBZ,EAE7B5kB,EAAS,SAAUujB,GAGrB,SAASvjB,EAAO7/X,GACdg+N,EAAgBj+N,KAAM8/X,GAEtB,IAAI/qS,EAAQorI,EAA2BngO,MAAO8/X,EAAO9tX,WAAa9Q,OAAOyJ,eAAem1X,IAASvhY,KAAKyB,KAAMC,IAO5G,OALAulZ,EAAiBjnZ,KAAKw2F,GAEtBA,EAAMruC,MAAQ,CACZsmF,QAAQ,GAEHj4C,CACR,CA6ED,OA1FAyuI,EAAUs8J,EAAQujB,GAelBL,EAAaljB,EAAQ,CAAC,CACpB7+X,IAAK,wBACLtC,MAAO,WACL,IAAIkmZ,EAAc7kZ,KAAKC,MAAM4kZ,YACzB7kV,EAAYhgE,KAAKC,MAAM+/D,UAE3B,OAAI6kV,EACKphZ,SAASsC,eAAe8+Y,GAG7B7kV,GAAaA,EAAUgyT,SAClBhyT,EAGFv8D,QACR,GACA,CACDxC,IAAK,oBACLtC,MAAO,WACL,GAAIqB,KAAKC,MAAMR,KAAOO,KAAKC,MAAMklZ,QAAS,CACxC,IAAIM,EAAqBzlZ,KAAK0lZ,wBAEzBjB,EAAU3V,UAAU2W,IACvBhB,EAAU1/Q,MAAM0gR,EAAoBzlZ,KAAKC,MAAMmlZ,aAG7CplZ,KAAKC,MAAMklZ,UACRR,EAAW7V,aACd6V,EAAW5/Q,MAAMwgR,GAEnBZ,EAAWgB,aAAa3lZ,KAAKC,MAAMT,GAAIimZ,IAGrCzlZ,KAAKC,MAAMR,KACbglZ,EAAUmB,gBAAgB5lZ,KAAK6lZ,cAGjCpB,EAAUqB,cAAc9lZ,KAAK+lZ,WAAYN,GAEzCzlZ,KAAKwvD,SAAS,CACZwQ,UAAWylV,GAEd,CACF,GACA,CACDxkZ,IAAK,uBACLtC,MAAO,WACL8lZ,EAAUxE,QAAQjgZ,KAAK6lZ,aAAc7lZ,KAAK+lZ,WAC3C,GACA,CACD9kZ,IAAK,SACLtC,MAAO,WACL,IAAIQ,EAAY,GAGdA,EADEa,KAAK0mD,OAAS1mD,KAAK0mD,MAAMsmF,SACbhtI,KAAKC,MAAMd,WAAa,IAAM,KAAOa,KAAKC,MAAM6kZ,aAAe,WAAWvjV,OAE5EvhE,KAAKC,MAAMd,UAGzB,IAAIc,EAAQqjZ,EAAS,CAAC,EAAGtjZ,KAAKC,OAE9B,IAAK,IAAIi+I,KAAQ0mQ,EACX3kZ,EAAM8tK,eAAe7vB,WAChBj+I,EAAMi+I,GAOjB,OAHAj+I,EAAMd,UAAYA,EAClBc,EAAMV,QAAUS,KAAKgmZ,YAEdrlZ,EAAMu3O,cAAc02J,EAAW3uY,EACvC,KAGI6/X,CACR,CA5FY,CA4FXn/X,EAAMiuY,WAEJ4W,EAAmB,WACrB,IAAIxhI,EAAShkR,KAEbA,KAAKimZ,SAAW,SAAUzmZ,EAAIS,GAC5BslZ,EAASU,SAASzmZ,EAAI8jZ,EAAS,CAAC,EAAGt/H,EAAOt9N,MAAOzmD,GAClD,EAEDD,KAAKgmZ,YAAc,SAAUv2Y,GAMvBu0Q,EAAO/jR,MAAMV,SACfykR,EAAO/jR,MAAMV,QAAQkQ,GAOnBA,EAAMusX,iBAAiBvsX,EAAMusX,kBAC7BvsX,EAAM8nF,gBAAgB9nF,EAAM8nF,iBAKhCysL,EAAOiiI,SAASjiI,EAAO/jR,MAAMT,GAAIwkR,EAAO/jR,MACzC,EAEDD,KAAK6lZ,aAAe,WACdN,EAASW,kBAAoBliI,EAAO/jR,MAAMT,KACvB,OAAjBwkR,EAAOt9N,OAAkBs9N,EAAOt9N,MAAMsmF,QAAUg3I,EAAO/jR,MAAMglZ,eAC/DjhI,EAAO/jR,MAAMglZ,gBAEfjhI,EAAOx0N,SAAS,CAAEw9E,QAAQ,IAE7B,EAEDhtI,KAAK+lZ,WAAa,SAAU9iZ,GAE1B,IAAIwiZ,EAAqBzhI,EAAO0hI,wBAEhC,IAAIf,EAAW7V,aAAgB6V,EAAWwB,gBAA1C,CAIA,IAAI3mZ,EAAKwkR,EAAO/jR,MAAMT,GAClBsG,EAAU,KACVsgZ,EAAe,EACfC,EAAkB,EAClBC,EAAe,EAEnB,GAAIb,EAAmB9/Y,sBAErB2gZ,EADqBb,EAAmB9/Y,wBACVzB,IAGhC,IAAK4B,GAAWk+Q,EAAO/jR,MAAMwsT,UAAW,CAEtC,KADA3mT,EAAUy/Y,EAAS/6Y,IAAIhL,IAErB,OAGF,IAAI+mZ,EAAQzgZ,EAAQH,wBAEpB0gZ,GADAD,EAAeG,EAAMriZ,IAAMoiZ,EAAerjZ,GACTsjZ,EAAM1oY,MACxC,CAED,IAAI80B,EAAU1vC,EAAI+gR,EAAO/jR,MAAMN,OAC3B6mZ,EAAW7zW,GAAWxsC,KAAKQ,MAAMy/Y,IAAiBzzW,EAAUxsC,KAAKQ,MAAM0/Y,GACvEI,EAAY9zW,EAAUxsC,KAAKQ,MAAMy/Y,IAAiBzzW,GAAWxsC,KAAKQ,MAAM0/Y,GACxEK,EAAanB,EAASW,gBAE1B,OAAIO,GACEjnZ,IAAOknZ,GACTnB,EAASoB,mBAAc,GAGrB3iI,EAAO/jR,MAAMklZ,SAAWR,EAAWiC,YAAcpnZ,GACnDmlZ,EAAWkC,aAGT7iI,EAAO/jR,MAAMR,KAAOukR,EAAOt9N,MAAMsmF,SACnCg3I,EAAOx0N,SAAS,CAAEw9E,QAAQ,IAC1Bg3I,EAAO/jR,MAAMglZ,eAAiBjhI,EAAO/jR,MAAMglZ,iBAGtCR,EAAUqC,gBAGfN,GAAYE,IAAelnZ,GAC7B+lZ,EAASoB,cAAcnnZ,GAEvBwkR,EAAO/jR,MAAMklZ,SAAWR,EAAWkC,WAAWrnZ,GAE1CwkR,EAAO/jR,MAAMR,MACfukR,EAAOx0N,SAAS,CAAEw9E,QAAQ,IAC1Bg3I,EAAO/jR,MAAM+kZ,aAAehhI,EAAO/jR,MAAM+kZ,YAAYxlZ,IAEhDilZ,EAAUqC,qBATnB,CA9CC,CAyDF,CACF,EAQD,OAJAhnB,EAAO+jB,UAAYe,EAEnB9kB,EAAO+M,aAAe,CAAEltY,OAAQ,GAEzBmgY,CACR,EACDinB,QAAS,SAAiBnY,GAExBn6X,QAAQC,KAAK,8CAEb,IAAIqyY,EAAU,SAAUC,GAGtB,SAASD,EAAQ9mZ,GACfg+N,EAAgBj+N,KAAM+mZ,GAEtB,IAAIlrH,EAAS17D,EAA2BngO,MAAO+mZ,EAAQ/0Y,WAAa9Q,OAAOyJ,eAAeo8Y,IAAUxoZ,KAAKyB,KAAMC,IAK/G,OAHA47R,EAAOorH,cAAgB,CACrBrD,QAAS,MAEJ/nH,CACR,CAqCD,OAhDAr4D,EAAUujL,EAASC,GAanBhE,EAAa+D,EAAS,CAAC,CACrB9lZ,IAAK,oBACLtC,MAAO,WACL,GAAsB,qBAAXkE,OACT,OAAO,EAET7C,KAAKknZ,cAAclnZ,KAAKC,MAAMqa,KAC/B,GACA,CACDrZ,IAAK,qBACLtC,MAAO,SAA4BwoZ,GAC7BnnZ,KAAKC,MAAMqa,OAAS6sY,EAAU7sY,MAChCta,KAAKknZ,cAAclnZ,KAAKC,MAAMqa,KAEjC,GACA,CACDrZ,IAAK,uBACLtC,MAAO,WACL,GAAsB,qBAAXkE,OACT,OAAO,EAET6hZ,EAAgB0C,WAAWpnZ,KAAKC,MAAMqa,KACvC,GACA,CACDrZ,IAAK,gBACLtC,MAAO,SAAuB2b,GAC5BoqY,EAAgB94R,SAAStxG,EAAMta,KAAKinZ,cAAcrD,QACnD,GACA,CACD3iZ,IAAK,SACLtC,MAAO,WACL,OAAOgC,EAAMu3O,cAAc02J,EAAW0U,EAAS,CAAC,EAAGtjZ,KAAKC,MAAO,CAAE0jZ,eAAgB3jZ,KAAKinZ,gBACvF,KAGIF,CACR,CAlDa,CAkDZpmZ,EAAMiuY,WASR,OALAmY,EAAQlD,UAAY,CAClBvpY,KAAMgrW,EAAUppW,OAChBrb,GAAIykX,EAAUppW,QAGT6qY,CACR,GAGH5jP,EAAOx3B,QAAU05Q,sCClUjBnkZ,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAI2kZ,EAAWpiZ,OAAO6iB,QAAU,SAAU7hB,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAASD,UAAUvE,GAAI,IAAK,IAAIqD,KAAOmB,EAAclB,OAAOgJ,UAAU6jK,eAAexvK,KAAK6D,EAAQnB,KAAQiB,EAAOjB,GAAOmB,EAAOnB,GAAW,CAAC,OAAOiB,CAAS,EAQ5PmlZ,GAJUnE,EAFD9pO,EAAQ,OAMN8pO,EAFD9pO,EAAQ,SAMlBkuO,EAAiBpE,EAFD9pO,EAAQ,QAMxBirO,EAAiBnB,EAFD9pO,EAAQ,QAI5B,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAK/F,IAAIumZ,EAAmB,SAA0BznZ,GAC/C,OAAOunZ,EAAS7zN,QAAQ1zL,EAAQJ,SAAW2nZ,EAAS7zN,QAAQg0N,aAC7D,EAqBGC,EAT0B,WAC5B,GAAsB,qBAAX5kZ,OACT,OAAOA,OAAO60C,uBAAyB70C,OAAO6kZ,2BAEjD,CAMQC,IAA6B,SAAUtgY,EAAUvhB,EAASojQ,GAC/DrmQ,OAAOmrG,WAAW3mF,EAAU6hP,GAAS,IAAO,IAAI,IAAI1kQ,MAAOoiO,UAC5D,EAsBCghL,EAAmB,SAA0B9nZ,GAC/C,IAAI+nZ,EAAmB/nZ,EAAQ0e,KAAKqpY,iBACpC,GAAIA,GAAoBA,IAAqBpkZ,UAAYokZ,IAAqBpkZ,SAASirG,KACrF,OAAOm5S,EAAiBziB,WAExB,IAAI0iB,OAA2Cz+Y,IAAvBxG,OAAOklZ,YAC3BC,EAA+C,gBAA/BvkZ,SAASwkZ,YAAc,IAC3C,OAAOH,EAAoBjlZ,OAAOklZ,YAAcC,EAAevkZ,SAASC,gBAAgB0hY,WAAa3hY,SAASirG,KAAK02R,UAEtH,EAEG8iB,EAAmB,SAA0BpoZ,GAC/C,IAAI+nZ,EAAmB/nZ,EAAQ0e,KAAKqpY,iBACpC,GAAIA,GAAoBA,IAAqBpkZ,UAAYokZ,IAAqBpkZ,SAASirG,KACrF,OAAOm5S,EAAiBxiB,UAExB,IAAIyiB,OAA2Cz+Y,IAAvBxG,OAAOklZ,YAC3BC,EAA+C,gBAA/BvkZ,SAASwkZ,YAAc,IAC3C,OAAOH,EAAoBjlZ,OAAOslZ,YAAcH,EAAevkZ,SAASC,gBAAgB2hY,UAAY5hY,SAASirG,KAAK22R,SAErH,EA0BG+iB,EAAgB,SAASA,EAAcC,EAAQvoZ,EAAS84L,GAC1D,IAAIp6K,EAAO1e,EAAQ0e,KAGnB,GAAK1e,EAAQolZ,qBAAsB1mY,EAAKgjL,OAiCxC,GA1BAhjL,EAAKvB,MAAQ9W,KAAK0L,MAAM2M,EAAK8pY,eAAiB9pY,EAAK+pY,eAEhC,OAAf/pY,EAAK2pB,QACP3pB,EAAK2pB,MAAQywJ,GAGfp6K,EAAKgqY,SAAW5vN,EAAYp6K,EAAK2pB,MAEjC3pB,EAAKiqY,QAAUjqY,EAAKgqY,UAAYhqY,EAAK5e,SAAW,EAAIyoZ,EAAO7pY,EAAKgqY,SAAWhqY,EAAK5e,UAEhF4e,EAAKkqY,gBAAkBlqY,EAAK+pY,cAAgBpiZ,KAAK8K,KAAKuN,EAAKvB,MAAQuB,EAAKiqY,SAEpEjqY,EAAKqpY,kBAAoBrpY,EAAKqpY,mBAAqBpkZ,UAAY+a,EAAKqpY,mBAAqBpkZ,SAASirG,KAChG5uG,EAAQ6oZ,WACVnqY,EAAKqpY,iBAAiBziB,WAAa5mX,EAAKkqY,gBAExClqY,EAAKqpY,iBAAiBxiB,UAAY7mX,EAAKkqY,gBAGrC5oZ,EAAQ6oZ,WACV9lZ,OAAOojZ,SAASznY,EAAKkqY,gBAAiB,GAEtC7lZ,OAAOojZ,SAAS,EAAGznY,EAAKkqY,iBAIxBlqY,EAAKiqY,QAAU,EAAnB,CACE,IAAIG,EAAeR,EAAcv+Y,KAAK,KAAMw+Y,EAAQvoZ,GACpD2nZ,EAA4BlpZ,KAAKsE,OAAQ+lZ,EAE1C,MAEGvE,EAAe7wN,QAAQq1N,WAAvB,KACFxE,EAAe7wN,QAAQq1N,WAAvB,IAAyCrqY,EAAKhf,GAAIgf,EAAKtc,OAAQsc,EAAKkqY,sBAvChErE,EAAe7wN,QAAQq1N,WAAvB,KACFxE,EAAe7wN,QAAQq1N,WAAvB,IAAyCrqY,EAAKhf,GAAIgf,EAAKtc,OAAQsc,EAAK0pY,iBAwCzE,EAEGY,EAAe,SAAsBhpZ,GACvCA,EAAQ0e,KAAKqpY,iBAAoB/nZ,EAAiBA,EAAQ+kZ,YAAcphZ,SAASsC,eAAejG,EAAQ+kZ,aAAe/kZ,EAAQkgE,WAAalgE,EAAQkgE,UAAUgyT,SAAWlyX,EAAQkgE,UAAYv8D,SAAlJ,IAC5C,EAEGslZ,EAAmB,SAA0BC,EAAclpZ,EAASN,EAAI0C,GAgB1E,GAfApC,EAAQ0e,KAAO1e,EAAQ0e,MArHhB,CACLkqY,gBAAiB,EACjBH,cAAe,EACfD,eAAgB,EAChBE,SAAU,EACV5oZ,SAAU,EACV4hM,QAAQ,EAERt/L,OAAQ,KACR2lZ,iBAAkB,KAClBroZ,GAAI,KACJ2oC,MAAO,KACPlrB,MAAO,KACPwrY,QAAS,KACTQ,aAAc,MAyGhBpmZ,OAAOmmQ,aAAalpQ,EAAQ0e,KAAKyqY,cAEjC3B,EAAe9zN,QAAQloD,WAAU,WAC/BxrI,EAAQ0e,KAAKgjL,QAAS,CACvB,IAEDsnN,EAAahpZ,GAEbA,EAAQ0e,KAAK2pB,MAAQ,KACrBroC,EAAQ0e,KAAKgjL,QAAS,EACtB1hM,EAAQ0e,KAAK+pY,cAAgBzoZ,EAAQ6oZ,WAAaf,EAAiB9nZ,GAAWooZ,EAAiBpoZ,GAC/FA,EAAQ0e,KAAK8pY,eAAiBxoZ,EAAQilZ,SAAWiE,EAAeA,EAAelpZ,EAAQ0e,KAAK+pY,cAExFzoZ,EAAQ0e,KAAK+pY,gBAAkBzoZ,EAAQ0e,KAAK8pY,eAAhD,CA5JoB,IAAyB3pZ,EAmK7CmB,EAAQ0e,KAAKvB,MAAQ9W,KAAK0L,MAAM/R,EAAQ0e,KAAK8pY,eAAiBxoZ,EAAQ0e,KAAK+pY,eAE3EzoZ,EAAQ0e,KAAK5e,UApKW,oBADqBjB,EAqKLmB,EAAQF,UApKXjB,EAAQ,WAC3C,OAAOA,CACR,GAkKyDmB,EAAQ0e,KAAKvB,OACvEnd,EAAQ0e,KAAK5e,SAAWwpC,MAAMjtB,WAAWrc,EAAQ0e,KAAK5e,WAAa,IAAOuc,WAAWrc,EAAQ0e,KAAK5e,UAClGE,EAAQ0e,KAAKhf,GAAKA,EAClBM,EAAQ0e,KAAKtc,OAASA,EAEtB,IAAImmZ,EAASd,EAAiBznZ,GAC1B8oZ,EAAeR,EAAcv+Y,KAAK,KAAMw+Y,EAAQvoZ,GAEhDA,GAAWA,EAAQopQ,MAAQ,EAC7BppQ,EAAQ0e,KAAKyqY,aAAepmZ,OAAOmrG,YAAW,WACxCq2S,EAAe7wN,QAAQq1N,WAAvB,OACFxE,EAAe7wN,QAAQq1N,WAAvB,MAA2C/oZ,EAAQ0e,KAAKhf,GAAIM,EAAQ0e,KAAKtc,QAE3EulZ,EAA4BlpZ,KAAKsE,OAAQ+lZ,EAC1C,GAAE9oZ,EAAQopQ,QAITm7I,EAAe7wN,QAAQq1N,WAAvB,OACFxE,EAAe7wN,QAAQq1N,WAAvB,MAA2C/oZ,EAAQ0e,KAAKhf,GAAIM,EAAQ0e,KAAKtc,QAE3EulZ,EAA4BlpZ,KAAKsE,OAAQ+lZ,GAzBxC,MAJKvE,EAAe7wN,QAAQq1N,WAAvB,KACFxE,EAAe7wN,QAAQq1N,WAAvB,IAAyC/oZ,EAAQ0e,KAAKhf,GAAIM,EAAQ0e,KAAKtc,OAAQpC,EAAQ0e,KAAKkqY,gBA6BjG,EAEGQ,EAAiB,SAAwBppZ,GAI3C,OAHAA,EAAUwjZ,EAAS,CAAC,EAAGxjZ,IACf0e,KAAO1e,EAAQ0e,MAvKhB,CACLkqY,gBAAiB,EACjBH,cAAe,EACfD,eAAgB,EAChBE,SAAU,EACV5oZ,SAAU,EACV4hM,QAAQ,EAERt/L,OAAQ,KACR2lZ,iBAAkB,KAClBroZ,GAAI,KACJ2oC,MAAO,KACPlrB,MAAO,KACPwrY,QAAS,KACTQ,aAAc,MA0JhBnpZ,EAAQilZ,UAAW,EACZjlZ,CACR,EAuBD6rI,EAAAA,QAAkB,CAChBo9Q,iBAAkBA,EAClBxB,iBAAkBA,EAClB4B,YAxBgB,SAAqBrpZ,GACrCipZ,EAAiB,EAAGG,EAAeppZ,GACpC,EAuBCspZ,eAjBmB,SAAwBtpZ,GAC3CA,EAAUopZ,EAAeppZ,GACzBgpZ,EAAahpZ,GACbipZ,EAAiBjpZ,EAAQ6oZ,WA/IA,SAA8B7oZ,GACvD,IAAI+nZ,EAAmB/nZ,EAAQ0e,KAAKqpY,iBACpC,GAAIA,GAAoBA,IAAqBpkZ,UAAYokZ,IAAqBpkZ,SAASirG,KACrF,OAAOm5S,EAAiBwB,YAAcxB,EAAiB7hZ,YAEvD,IAAI0oG,EAAOjrG,SAASirG,KAChB46S,EAAO7lZ,SAASC,gBAEpB,OAAOyC,KAAKE,IAAIqoG,EAAK26S,YAAa36S,EAAK1oG,YAAasjZ,EAAK9jZ,YAAa8jZ,EAAKD,YAAaC,EAAKtjZ,YAEhG,CAqIuCujZ,CAAqBzpZ,GAnIjC,SAA+BA,GACzD,IAAI+nZ,EAAmB/nZ,EAAQ0e,KAAKqpY,iBACpC,GAAIA,GAAoBA,IAAqBpkZ,UAAYokZ,IAAqBpkZ,SAASirG,KACrF,OAAOm5S,EAAiB2B,aAAe3B,EAAiB4B,aAExD,IAAI/6S,EAAOjrG,SAASirG,KAChB46S,EAAO7lZ,SAASC,gBAEpB,OAAOyC,KAAKE,IAAIqoG,EAAK86S,aAAc96S,EAAK+6S,aAAcH,EAAK5jZ,aAAc4jZ,EAAKE,aAAcF,EAAKG,aAEpG,CAyHuEC,CAAsB5pZ,GAAUA,EACvG,EAcCmmZ,SAtBa,SAAkB0D,EAAY7pZ,GAC3CipZ,EAAiBY,EAAYT,EAAeppZ,GAC7C,EAqBC8pZ,WAbe,SAAoBD,EAAY7pZ,GAC/CA,EAAUopZ,EAAeppZ,GACzBgpZ,EAAahpZ,GACb,IAAI4oZ,EAAkB5oZ,EAAQ6oZ,WAAaf,EAAiB9nZ,GAAWooZ,EAAiBpoZ,GACxFipZ,EAAiBY,EAAajB,EAAiB5oZ,EAChD,uCCxPDoB,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAIkrZ,EAAyBzwO,EAAQ,OAEjCnuB,EAAS,CAAC,YAAa,aAAc,YAAa,WAEtDtf,EAAAA,QAAkB,CAChBL,UAAW,SAAmBw+Q,GAC5B,MAA2B,qBAAbrmZ,UAA4BwnJ,EAAO5oJ,SAAQ,SAAUoN,GACjE,OAAO,EAAIo6Y,EAAuBE,yBAAyBtmZ,SAAUgM,EAAOq6Y,EAC7E,GACF,qCCbH5oZ,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAOqBgtI,EAAQo+Q,wBAA0B,SAAiC7nZ,EAAQisJ,EAAWh/I,GAClH,IAAI66Y,EAAwB,WAC1B,IAAIA,GAAwB,EAC5B,IACE,IAAIrsO,EAAOz8K,OAAOC,eAAe,CAAC,EAAG,UAAW,CAC9CqJ,IAAK,WACHw/Y,GAAwB,CACzB,IAEHnnZ,OAAO4E,iBAAiB,OAAQ,KAAMk2K,EAC1B,CAAZ,MAAO32K,GAAK,CACd,OAAOgjZ,CACR,CAX2B,GAY5B9nZ,EAAOuF,iBAAiB0mJ,EAAWh/I,IAAU66Y,GAAwB,CAAE1+R,SAAS,GACjF,EAEgCqgB,EAAQs+Q,2BAA6B,SAAoC/nZ,EAAQisJ,EAAWh/I,GAC3HjN,EAAO0F,oBAAoBumJ,EAAWh/I,EACvC,sCC1BDjO,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAI2kZ,EAAWpiZ,OAAO6iB,QAAU,SAAU7hB,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAASD,UAAUvE,GAAI,IAAK,IAAIqD,KAAOmB,EAAclB,OAAOgJ,UAAU6jK,eAAexvK,KAAK6D,EAAQnB,KAAQiB,EAAOjB,GAAOmB,EAAOnB,GAAW,CAAC,OAAOiB,CAAS,EAE5P8gZ,EAAe,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAIfgqL,EAAUC,EAFD9pO,EAAQ,QAUjBgrO,GAJalB,EAFD9pO,EAAQ,QAMP8pO,EAFD9pO,EAAQ,SAMpBoqO,EAAcN,EAFD9pO,EAAQ,QAIzB,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAQ/F2qI,EAAAA,QAAkB,SAAUijQ,GAC1B,IAAImY,EAAU,SAAU1D,GAGtB,SAAS0D,EAAQ9mZ,IAVrB,SAAyB8J,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAWnJk/N,CAAgBj+N,KAAM+mZ,GAEtB,IAAIhyT,EAXV,SAAoC5rF,EAAM5K,GAAQ,IAAK4K,EAAQ,MAAM,IAAIk3N,eAAe,6DAAgE,OAAO9hO,GAAyB,kBAATA,GAAqC,oBAATA,EAA8B4K,EAAP5K,CAAc,CAW9N4hO,CAA2BngO,MAAO+mZ,EAAQ/0Y,WAAa9Q,OAAOyJ,eAAeo8Y,IAAUxoZ,KAAKyB,KAAMC,IAK9G,OAHA80F,EAAMkyT,cAAgB,CACpBrD,QAAS,MAEJ7uT,CACR,CAqCD,OApDJ,SAAmBuuI,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIxkO,UAAU,kEAAoEwkO,GAAeD,EAASp5N,UAAYhJ,OAAO2J,OAAO04N,GAAcA,EAAWr5N,UAAW,CAAEU,YAAa,CAAEjM,MAAO2kO,EAAUliO,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAekiO,IAAYriO,OAAO+I,eAAiB/I,OAAO+I,eAAeq5N,EAAUC,GAAcD,EAAStxN,UAAYuxN,EAAa,CAI1eC,CAAUujL,EAAS1D,GAanBL,EAAa+D,EAAS,CAAC,CACrB9lZ,IAAK,oBACLtC,MAAO,WACL,GAAsB,qBAAXkE,OACT,OAAO,EAET7C,KAAKknZ,cAAclnZ,KAAKC,MAAMqa,KAC/B,GACA,CACDrZ,IAAK,qBACLtC,MAAO,SAA4BwoZ,GAC7BnnZ,KAAKC,MAAMqa,OAAS6sY,EAAU7sY,MAChCta,KAAKknZ,cAAclnZ,KAAKC,MAAMqa,KAEjC,GACA,CACDrZ,IAAK,uBACLtC,MAAO,WACL,GAAsB,qBAAXkE,OACT,OAAO,EAETuhZ,EAAW5wN,QAAQ4zN,WAAWpnZ,KAAKC,MAAMqa,KAC1C,GACA,CACDrZ,IAAK,gBACLtC,MAAO,SAAuB2b,GAC5B8pY,EAAW5wN,QAAQ5nE,SAAStxG,EAAMta,KAAKinZ,cAAcrD,QACtD,GACA,CACD3iZ,IAAK,SACLtC,MAAO,WACL,OAAOskZ,EAAQzvN,QAAQ0kD,cAAc02J,EAAW0U,EAAS,CAAC,EAAGtjZ,KAAKC,MAAO,CAAE0jZ,eAAgB3jZ,KAAKinZ,gBACjG,KAGIF,CACR,CAlDa,CAkDZ9D,EAAQzvN,QAAQo7M,WASlB,OALAmY,EAAQlD,UAAY,CAClBvpY,KAAMkpY,EAAYhwN,QAAQt3K,OAC1Brb,GAAI2iZ,EAAYhwN,QAAQt3K,QAGnB6qY,CACR,oCC7FD7lZ,OAAOC,eAAewqI,EAAS,aAAc,CAC5ChtI,OAAO,IAGR,IAAI2hZ,EAAS,CACZuI,WAAY,CAAC,EACbqB,YAAa,CACZt+R,SAAU,SAAkBu+R,EAAS9iY,GACpCi5X,EAAOuI,WAAWsB,GAAW9iY,CAC7B,EACDgT,OAAQ,SAAgB8vX,GACvB7J,EAAOuI,WAAWsB,GAAW,IAC7B,IAIHx+Q,EAAAA,QAAkB20Q,sCChBlBp/Y,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGoBy6K,EAAQ,OAArC,IAMgCp4K,EAJ5BopZ,EAAShxO,EAAQ,MAEjBixO,GAE4BrpZ,EAFKopZ,IAEgBppZ,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,GAEvF,IAAI2jZ,EAAa,CACf2F,WAAW,EACXC,aAAa,EACbhF,SAAU,KACViF,WAAY,CAAC,EAEbzlR,MAAO,SAAewgR,GACpBvlZ,KAAKulZ,SAAWA,EAEhBvlZ,KAAKyqZ,iBAAmBzqZ,KAAKyqZ,iBAAiB5gZ,KAAK7J,MACnD6C,OAAO4E,iBAAiB,aAAczH,KAAKyqZ,kBAE3CzqZ,KAAK0qZ,oBACL1qZ,KAAKsqZ,WAAY,CAClB,EACD3E,aAAc,SAAsBnmZ,EAAIwgE,GACtChgE,KAAKwqZ,WAAWhrZ,GAAMwgE,CACvB,EACD8uU,UAAW,WACT,OAAO9uY,KAAKsqZ,SACb,EACDnE,cAAe,WACb,OAAOnmZ,KAAKuqZ,WACb,EACDG,kBAAmB,WACjB,IAAI31T,EAAQ/0F,KAERmvE,EAAOnvE,KAAK4mZ,UACZz3U,EACFtsE,OAAOmrG,YAAW,WAChBjZ,EAAMkxT,SAAS92U,GAAM,GACrB4lB,EAAMw1T,aAAc,CACrB,GAAE,IAEHvqZ,KAAKuqZ,aAAc,CAEtB,EACDtE,SAAU,SAAkBzmZ,EAAImrZ,GAC9B,IAAIpF,EAAWvlZ,KAAKulZ,SAEpB,GADcA,EAAS/6Y,IAAIhL,KACXmrZ,GAAUnrZ,IAAO+lZ,EAASW,iBAAkB,CAC1D,IAAIlmV,EAAYhgE,KAAKwqZ,WAAWhrZ,IAAOiE,SACvC8hZ,EAASU,SAASzmZ,EAAI,CAAEwgE,UAAWA,GACpC,CACF,EACD4mV,QAAS,WACP,OAAOyD,EAAQ72N,QAAQozN,SACxB,EACDC,WAAY,SAAoBrnZ,EAAIorZ,GAC9B5qZ,KAAKmmZ,iBAAmBkE,EAAQ72N,QAAQozN,YAAcpnZ,GACxD6qZ,EAAQ72N,QAAQq3N,WAAWrrZ,EAAIorZ,EAElC,EACDH,iBAAkB,WAChBzqZ,KAAKimZ,SAASjmZ,KAAK4mZ,UACpB,EACD3G,QAAS,WACPjgZ,KAAKulZ,SAAW,KAChBvlZ,KAAKwqZ,WAAa,KAClB3nZ,OAAO+E,oBAAoB,aAAc5H,KAAKyqZ,iBAC/C,GAGH9+Q,EAAAA,QAAkBg5Q,sCC3ElBzjZ,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAI2kZ,EAAWpiZ,OAAO6iB,QAAU,SAAU7hB,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAASD,UAAUvE,GAAI,IAAK,IAAIqD,KAAOmB,EAAclB,OAAOgJ,UAAU6jK,eAAexvK,KAAK6D,EAAQnB,KAAQiB,EAAOjB,GAAOmB,EAAOnB,GAAW,CAAC,OAAOiB,CAAS,EAE5P8gZ,EAAe,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAIfgqL,EAAUC,EAFD9pO,EAAQ,QAMjBkrO,EAAcpB,EAFD9pO,EAAQ,QAMrBgrO,EAAalB,EAFD9pO,EAAQ,QAMpBoqO,EAAcN,EAFD9pO,EAAQ,QAMrB0xO,EAAe5H,EAFD9pO,EAAQ,QAI1B,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAQ/F,IAAI4jZ,EAAa,CACfplZ,GAAIgkZ,EAAYhwN,QAAQt3K,OAAO4oW,WAC/B+/B,YAAarB,EAAYhwN,QAAQt3K,OACjC8jD,UAAWwjV,EAAYhwN,QAAQhyL,OAC/BsjZ,YAAatB,EAAYhwN,QAAQt3K,OACjCzc,IAAK+jZ,EAAYhwN,QAAQ6nC,KACzBstL,WAAYnF,EAAYhwN,QAAQ6nC,KAChC37N,OAAQ8jZ,EAAYhwN,QAAQ2xL,UAAU,CAACq+B,EAAYhwN,QAAQ6nC,KAAMmoL,EAAYhwN,QAAQt3K,SACrFvc,OAAQ6jZ,EAAYhwN,QAAQ32B,OAC5BqsG,MAAOs6I,EAAYhwN,QAAQ32B,OAC3B4vJ,UAAW+2F,EAAYhwN,QAAQ6nC,KAC/B97N,QAASikZ,EAAYhwN,QAAQp4D,KAC7Bx7H,SAAU4jZ,EAAYhwN,QAAQ2xL,UAAU,CAACq+B,EAAYhwN,QAAQ32B,OAAQ2mP,EAAYhwN,QAAQp4D,OACzF2pR,SAAUvB,EAAYhwN,QAAQ6nC,KAC9B2pL,YAAaxB,EAAYhwN,QAAQp4D,KACjC6pR,cAAezB,EAAYhwN,QAAQp4D,KACnC8pR,mBAAoB1B,EAAYhwN,QAAQ6nC,KACxC8pL,QAAS3B,EAAYhwN,QAAQ6nC,KAC7BuvL,gBAAiBpH,EAAYhwN,QAAQ6nC,KACrC+pL,YAAa5B,EAAYhwN,QAAQ32B,QAGnClxB,EAAAA,QAAkB,SAAUijQ,EAAW0W,GAErC,IAAIC,EAAWD,GAAkBlB,EAAW5wN,QAExCu3N,EAAO,SAAUC,GAGnB,SAASD,EAAK9qZ,IAnClB,SAAyB8J,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAoCnJk/N,CAAgBj+N,KAAM+qZ,GAEtB,IAAIh2T,EApCV,SAAoC5rF,EAAM5K,GAAQ,IAAK4K,EAAQ,MAAM,IAAIk3N,eAAe,6DAAgE,OAAO9hO,GAAyB,kBAATA,GAAqC,oBAATA,EAA8B4K,EAAP5K,CAAc,CAoC9N4hO,CAA2BngO,MAAO+qZ,EAAK/4Y,WAAa9Q,OAAOyJ,eAAeogZ,IAAOxsZ,KAAKyB,KAAMC,IAOxG,OALAulZ,EAAiBjnZ,KAAKw2F,GAEtBA,EAAMruC,MAAQ,CACZsmF,QAAQ,GAEHj4C,CACR,CAyED,OAnHJ,SAAmBuuI,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIxkO,UAAU,kEAAoEwkO,GAAeD,EAASp5N,UAAYhJ,OAAO2J,OAAO04N,GAAcA,EAAWr5N,UAAW,CAAEU,YAAa,CAAEjM,MAAO2kO,EAAUliO,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAekiO,IAAYriO,OAAO+I,eAAiB/I,OAAO+I,eAAeq5N,EAAUC,GAAcD,EAAStxN,UAAYuxN,EAAa,CA6B1eC,CAAUunL,EAAMC,GAehBhI,EAAa+H,EAAM,CAAC,CAClB9pZ,IAAK,wBACLtC,MAAO,WACL,IAAIkmZ,EAAc7kZ,KAAKC,MAAM4kZ,YACzB7kV,EAAYhgE,KAAKC,MAAM+/D,UAE3B,OAAI6kV,IAAgB7kV,EACXv8D,SAASsC,eAAe8+Y,GAG7B7kV,GAAaA,EAAUgyT,SAClBhyT,EAGFv8D,QACR,GACA,CACDxC,IAAK,oBACLtC,MAAO,WACL,GAAIqB,KAAKC,MAAMR,KAAOO,KAAKC,MAAMklZ,QAAS,CACxC,IAAIM,EAAqBzlZ,KAAK0lZ,wBAEzBpB,EAAY9wN,QAAQs7M,UAAU2W,IACjCnB,EAAY9wN,QAAQzuD,MAAM0gR,EAAoBzlZ,KAAKC,MAAMmlZ,aAGvDplZ,KAAKC,MAAMklZ,UACR2F,EAAat3N,QAAQs7M,aACxBgc,EAAat3N,QAAQzuD,MAAMwgR,GAE7BuF,EAAat3N,QAAQmyN,aAAa3lZ,KAAKC,MAAMT,GAAIimZ,IAGnDnB,EAAY9wN,QAAQsyN,cAAc9lZ,KAAK+lZ,WAAYN,GAEnDzlZ,KAAKwvD,SAAS,CACZwQ,UAAWylV,GAEd,CACF,GACA,CACDxkZ,IAAK,uBACLtC,MAAO,WACL2lZ,EAAY9wN,QAAQysN,QAAQjgZ,KAAK6lZ,aAAc7lZ,KAAK+lZ,WACrD,GACA,CACD9kZ,IAAK,SACLtC,MAAO,WACL,IAAIQ,EAAY,GAGdA,EADEa,KAAK0mD,OAAS1mD,KAAK0mD,MAAMsmF,SACbhtI,KAAKC,MAAMd,WAAa,IAAM,KAAOa,KAAKC,MAAM6kZ,aAAe,WAAWvjV,OAE5EvhE,KAAKC,MAAMd,UAGzB,IAAIc,EAAQqjZ,EAAS,CAAC,EAAGtjZ,KAAKC,OAE9B,IAAK,IAAIi+I,KAAQ0mQ,EACX3kZ,EAAM8tK,eAAe7vB,WAChBj+I,EAAMi+I,GAOjB,OAHAj+I,EAAMd,UAAYA,EAClBc,EAAMV,QAAUS,KAAKgmZ,YAEd/C,EAAQzvN,QAAQ0kD,cAAc02J,EAAW3uY,EACjD,KAGI8qZ,CACR,CAxFU,CAwFT9H,EAAQzvN,QAAQy3N,eAEdzF,EAAmB,WACrB,IAAIxhI,EAAShkR,KAEbA,KAAKimZ,SAAW,SAAUzmZ,EAAIS,GAC5BslZ,EAASU,SAASzmZ,EAAI8jZ,EAAS,CAAC,EAAGt/H,EAAOt9N,MAAOzmD,GAClD,EAEDD,KAAKgmZ,YAAc,SAAUv2Y,GAMvBu0Q,EAAO/jR,MAAMV,SACfykR,EAAO/jR,MAAMV,QAAQkQ,GAOnBA,EAAMusX,iBAAiBvsX,EAAMusX,kBAC7BvsX,EAAM8nF,gBAAgB9nF,EAAM8nF,iBAKhCysL,EAAOiiI,SAASjiI,EAAO/jR,MAAMT,GAAIwkR,EAAO/jR,MACzC,EAEDD,KAAK+lZ,WAAa,SAAU/iZ,EAAGC,GAC7B,IAAIwiZ,EAAqBzhI,EAAO0hI,wBAEhC,IAAIoF,EAAat3N,QAAQs7M,aAAgBgc,EAAat3N,QAAQ2yN,gBAA9D,CAIA,IAAIwC,EAAa3kI,EAAO/jR,MAAM0oZ,WAE1BnpZ,EAAKwkR,EAAO/jR,MAAMT,GAClBsG,EAAU,KACV0gZ,OAAW,EACXC,OAAY,EAEhB,GAAIkC,EAAY,CACd,IAAIuC,EAAgB,EAChBC,EAAiB,EACjBC,EAAgB,EAEpB,GAAI3F,EAAmB9/Y,sBAErBylZ,EADqB3F,EAAmB9/Y,wBACTxB,KAGjC,IAAK2B,GAAWk+Q,EAAO/jR,MAAMwsT,UAAW,CAEtC,KADA3mT,EAAUy/Y,EAAS/6Y,IAAIhL,IAErB,OAGF,IAAI+mZ,EAAQzgZ,EAAQH,wBAEpBwlZ,GADAD,EAAgB3E,EAAMpiZ,KAAOinZ,EAAgBpoZ,GACZujZ,EAAM3oY,KACxC,CAED,IAAI80B,EAAU1vC,EAAIghR,EAAO/jR,MAAMN,OAC/B6mZ,EAAW9zW,GAAWvsC,KAAKQ,MAAMukZ,IAAkBx4W,EAAUvsC,KAAKQ,MAAMwkZ,GACxE1E,EAAY/zW,EAAUvsC,KAAKQ,MAAMukZ,IAAkBx4W,GAAWvsC,KAAKQ,MAAMwkZ,EAC1E,KAAM,CACL,IAAI/E,EAAe,EACfC,EAAkB,EAClBC,EAAe,EAEnB,GAAIb,EAAmB9/Y,sBAErB2gZ,EADsBb,EAAmB9/Y,wBACVzB,IAGjC,IAAK4B,GAAWk+Q,EAAO/jR,MAAMwsT,UAAW,CAEtC,KADA3mT,EAAUy/Y,EAAS/6Y,IAAIhL,IAErB,OAGF,IAAI6rZ,EAASvlZ,EAAQH,wBAErB0gZ,GADAD,EAAeiF,EAAOnnZ,IAAMoiZ,EAAerjZ,GACVooZ,EAAOxtY,MACzC,CAED,IAAI80B,EAAU1vC,EAAI+gR,EAAO/jR,MAAMN,OAC/B6mZ,EAAW7zW,GAAWxsC,KAAKQ,MAAMy/Y,IAAiBzzW,EAAUxsC,KAAKQ,MAAM0/Y,GACvEI,EAAY9zW,EAAUxsC,KAAKQ,MAAMy/Y,IAAiBzzW,GAAWxsC,KAAKQ,MAAM0/Y,EACzE,CAED,IAAIK,EAAanB,EAASW,gBAE1B,GAAIO,EAAW,CAKb,GAJIjnZ,IAAOknZ,GACTnB,EAASoB,mBAAc,GAGrB3iI,EAAO/jR,MAAMklZ,SAAW2F,EAAat3N,QAAQozN,YAAcpnZ,EAAI,CACjE,IAAI8rZ,EAAwBtnI,EAAO/jR,MAAM2qZ,gBACrCA,OAA4CvhZ,IAA1BiiZ,GAA8CA,EAEpER,EAAat3N,QAAQqzN,WAAW,GAAI+D,EACrC,CAEG5mI,EAAO/jR,MAAMR,KAAOukR,EAAOt9N,MAAMsmF,SACnCg3I,EAAOx0N,SAAS,CAAEw9E,QAAQ,IAC1Bg3I,EAAO/jR,MAAMglZ,eAAiBjhI,EAAO/jR,MAAMglZ,cAAczlZ,EAAIsG,GAEhE,CAED,GAAI0gZ,IAAaE,IAAelnZ,IAA8B,IAAxBwkR,EAAOt9N,MAAMsmF,QAAmB,CACpEu4Q,EAASoB,cAAcnnZ,GAEvB,IAAI+rZ,EAAyBvnI,EAAO/jR,MAAM2qZ,gBACtCY,OAA8CniZ,IAA3BkiZ,GAA+CA,EAEtEvnI,EAAO/jR,MAAMklZ,SAAW2F,EAAat3N,QAAQqzN,WAAWrnZ,EAAIgsZ,GAExDxnI,EAAO/jR,MAAMR,MACfukR,EAAOx0N,SAAS,CAAEw9E,QAAQ,IAC1Bg3I,EAAO/jR,MAAM+kZ,aAAehhI,EAAO/jR,MAAM+kZ,YAAYxlZ,EAAIsG,GAE5D,CA3FA,CA4FF,CACF,EAQD,OAJAilZ,EAAKlH,UAAYe,EAEjBmG,EAAKle,aAAe,CAAEltY,OAAQ,GAEvBorZ,CACR,sCCjSD7pZ,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAMgCqC,EAN5ByqZ,EAAUryO,EAAQ,OAElBsyO,GAI4B1qZ,EAJMyqZ,IAIezqZ,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,GAFnF6oZ,EAAyBzwO,EAAQ,OAKrC,IAKIqrO,EAAY,CAEdkH,aAAc,GACdC,YAAa,GACbC,oBAAqB,GAErB9mR,MAAO,SAAe0gR,EAAoBqG,GACxC,GAAIrG,EAAoB,CACtB,IAAIsG,EAbW,SAAwBA,GAC3C,IAAIC,EAAiB7pZ,UAAUvD,OAAS,QAAsByK,IAAjBlH,UAAU,GAAmBA,UAAU,GAAK,GACzF,OAAO,EAAIupZ,EAASl4N,SAASu4N,EAAcC,EAC5C,CAUwBC,EAAe,SAAUx8Y,GAC1Cg1Y,EAAUyH,cAAczG,EACzB,GAAEqG,GACHrH,EAAUoH,oBAAoBntZ,KAAK+mZ,IACnC,EAAIoE,EAAuBE,yBAAyBtE,EAAoB,SAAUsG,EACnF,CACF,EACDjd,UAAW,SAAmB2W,GAC5B,OAAsE,IAA/DhB,EAAUoH,oBAAoB/oZ,QAAQ2iZ,EAC9C,EACDmC,iBAAkB,SAA0BnC,GAC1C,GAAIA,IAAuBhiZ,SAAU,CACnC,IAAIqkZ,OAA2Cz+Y,IAAvBxG,OAAOslZ,YAC3BH,EAA+C,gBAA/BvkZ,SAASwkZ,YAAc,IAC3C,OAAOH,EAAoBjlZ,OAAOklZ,YAAcC,EAAevkZ,SAASC,gBAAgB0hY,WAAa3hY,SAASirG,KAAK02R,UACpH,CACC,OAAOqgB,EAAmBrgB,UAE7B,EACD8iB,iBAAkB,SAA0BzC,GAC1C,GAAIA,IAAuBhiZ,SAAU,CACnC,IAAIqkZ,OAA2Cz+Y,IAAvBxG,OAAOklZ,YAC3BC,EAA+C,gBAA/BvkZ,SAASwkZ,YAAc,IAC3C,OAAOH,EAAoBjlZ,OAAOslZ,YAAcH,EAAevkZ,SAASC,gBAAgB2hY,UAAY5hY,SAASirG,KAAK22R,SACnH,CACC,OAAOogB,EAAmBpgB,SAE7B,EACD6mB,cAAe,SAAuBzG,IACpBhB,EAAUoH,oBAAoBpH,EAAUoH,oBAAoB/oZ,QAAQ2iZ,IAAqBkG,cAAgB,IAC/GtpZ,SAAQ,SAAUwR,GAC1B,OAAOA,EAAE4wY,EAAUmD,iBAAiBnC,GAAqBhB,EAAUyD,iBAAiBzC,GACrF,GACF,EACDG,gBAAiB,SAAyB/yR,GACxC4xR,EAAUmH,YAAYltZ,KAAKm0H,EAC5B,EACDizR,cAAe,SAAuBjzR,EAAS4yR,GAC7C,IAAIzlV,EAAYykV,EAAUoH,oBAAoBpH,EAAUoH,oBAAoB/oZ,QAAQ2iZ,IAE/EzlV,EAAU2rV,eACb3rV,EAAU2rV,aAAe,IAG3B3rV,EAAU2rV,aAAajtZ,KAAKm0H,GAE5BA,EAAQ4xR,EAAUmD,iBAAiBnC,GAAqBhB,EAAUyD,iBAAiBzC,GACpF,EACDqB,aAAc,WACZrC,EAAUmH,YAAYvpZ,SAAQ,SAAUgR,GACtC,OAAOA,GACR,GACF,EACD4sY,QAAS,SAAiB4F,EAAcE,GACtCtB,EAAUoH,oBAAoBxpZ,SAAQ,SAAUwR,GAC9C,OAAOA,EAAE83Y,cAAgB93Y,EAAE83Y,aAAa/sZ,QAAUiV,EAAE83Y,aAAan8Y,OAAOqE,EAAE83Y,aAAa7oZ,QAAQijZ,GAAa,EAC7G,IAEGtB,EAAUmH,aAAenH,EAAUmH,YAAYhtZ,QACjD6lZ,EAAUmH,YAAYp8Y,OAAOi1Y,EAAUmH,YAAY9oZ,QAAQ+iZ,GAAe,GAG5EpiZ,SAASmE,oBAAoB,SAAU68Y,EAAUyH,cAClD,EAGDpnY,OAAQ,WACN,OAAO2/X,EAAUoH,oBAAoBxpZ,SAAQ,SAAUwR,GACrD,OAAO4wY,EAAUyH,cAAcr4Y,EAChC,GACF,GAGH83H,EAAAA,QAAkB84Q,sCCnGlBvjZ,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAI2kZ,EAAWpiZ,OAAO6iB,QAAU,SAAU7hB,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAASD,UAAUvE,GAAI,IAAK,IAAIqD,KAAOmB,EAAclB,OAAOgJ,UAAU6jK,eAAexvK,KAAK6D,EAAQnB,KAAQiB,EAAOjB,GAAOmB,EAAOnB,GAAW,CAAC,OAAOiB,CAAS,EAI5PmoZ,EAAUnH,EAFD9pO,EAAQ,OAMjBmrO,EAAkBrB,EAFD9pO,EAAQ,QAMzBirO,EAAiBnB,EAFD9pO,EAAQ,QAI5B,SAAS8pO,EAAuBliZ,GAAO,OAAOA,GAAOA,EAAIszR,WAAatzR,EAAM,CAAEwyL,QAASxyL,EAAQ,CAE/F,IAAImrZ,EAAW,CAAC,EACZC,OAAe,EAEnBzgR,EAAAA,QAAkB,CAEhBs0Q,QAAS,WACPkM,EAAW,CAAC,CACb,EAEDvgS,SAAU,SAAkBtxG,EAAMxU,GAChCqmZ,EAAS7xY,GAAQxU,CAClB,EAEDshZ,WAAY,SAAoB9sY,UACvB6xY,EAAS7xY,EACjB,EAED9P,IAAK,SAAa8P,GAChB,OAAO6xY,EAAS7xY,IAAS7W,SAASsC,eAAeuU,IAAS7W,SAAS4oZ,kBAAkB/xY,GAAM,IAAM7W,SAAS6oZ,uBAAuBhyY,GAAM,EACxI,EAEDqsY,cAAe,SAAuBr5E,GACpC,OAAO8+E,EAAe9+E,CACvB,EAED44E,cAAe,WACb,OAAOkG,CACR,EAEDnG,SAAU,SAAkBzmZ,EAAIS,GAE9B,IAAIiC,EAASlC,KAAKwK,IAAIhL,GAEtB,GAAK0C,EAAL,CAOA,IAAI2iZ,GAFJ5kZ,EAAQqjZ,EAAS,CAAC,EAAGrjZ,EAAO,CAAE8kZ,UAAU,KAEhBF,YACpB7kV,EAAY//D,EAAM+/D,UAElB6nV,OAAmB,EAErBA,EADEhD,EACiBphZ,SAASsC,eAAe8+Y,GAClC7kV,GAAaA,EAAUgyT,SACbhyT,EAEAv8D,SAGrBxD,EAAM8kZ,UAAW,EAEjB,IAAI4D,EAAa1oZ,EAAM0oZ,WACnBK,EAAeqB,EAAQ72N,QAAQw1N,aAAanB,EAAkB3lZ,EAAQymZ,IAAe1oZ,EAAMN,QAAU,GAKzG,IAAKM,EAAMP,OAmBT,OAlBI2kZ,EAAe7wN,QAAQq1N,WAAvB,OACFxE,EAAe7wN,QAAQq1N,WAAvB,MAA2CrpZ,EAAI0C,GAG7C2lZ,IAAqBpkZ,SACnBxD,EAAM0oZ,WACR9lZ,OAAOojZ,SAAS+C,EAAc,GAE9BnmZ,OAAOojZ,SAAS,EAAG+C,GAGrBnB,EAAiBxiB,UAAY2jB,OAG3B3E,EAAe7wN,QAAQq1N,WAAvB,KACFxE,EAAe7wN,QAAQq1N,WAAvB,IAAyCrpZ,EAAI0C,IAUjDqiZ,EAAgB/wN,QAAQu1N,iBAAiBC,EAAc/oZ,EAAOT,EAAI0C,EAlDjE,MAFCuS,QAAQC,KAAK,2BAqDhB,qCC3GHxT,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAETgtI,EAAAA,QAAkB,CAIhB67Q,cAAe,SAAuBxkZ,GACpC,OAAIA,EAAI,GACCmD,KAAK6K,IAAQ,EAAJhO,EAAO,GAAK,EAEvB,EAAImD,KAAK6K,IAAc,GAAT,EAAIhO,GAAQ,GAAK,CACvC,EAKDupZ,OAAQ,SAAgBvpZ,GACtB,OAAOA,CACR,EAEDwpZ,WAAY,SAAoBxpZ,GAC9B,OAAOA,EAAIA,CACZ,EAEDypZ,YAAa,SAAqBzpZ,GAChC,OAAOA,GAAK,EAAIA,EACjB,EAED0pZ,cAAe,SAAuB1pZ,GACpC,OAAOA,EAAI,GAAK,EAAIA,EAAIA,GAAU,EAAI,EAAIA,GAAKA,EAAlB,CAC9B,EAED2pZ,YAAa,SAAqB3pZ,GAChC,OAAOA,EAAIA,EAAIA,CAChB,EAED4pZ,aAAc,SAAsB5pZ,GAClC,QAASA,EAAIA,EAAIA,EAAI,CACtB,EAED6pZ,eAAgB,SAAwB7pZ,GACtC,OAAOA,EAAI,GAAK,EAAIA,EAAIA,EAAIA,GAAKA,EAAI,IAAM,EAAIA,EAAI,IAAM,EAAIA,EAAI,GAAK,CACvE,EAED8pZ,YAAa,SAAqB9pZ,GAChC,OAAOA,EAAIA,EAAIA,EAAIA,CACpB,EAED+pZ,aAAc,SAAsB/pZ,GAClC,OAAO,KAAMA,EAAIA,EAAIA,EAAIA,CAC1B,EAEDgqZ,eAAgB,SAAwBhqZ,GACtC,OAAOA,EAAI,GAAK,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,IAAMA,EAAIA,EAAIA,EAAIA,CAC3D,EAEDiqZ,YAAa,SAAqBjqZ,GAChC,OAAOA,EAAIA,EAAIA,EAAIA,EAAIA,CACxB,EAEDkqZ,aAAc,SAAsBlqZ,GAClC,OAAO,IAAMA,EAAIA,EAAIA,EAAIA,EAAIA,CAC9B,EAEDmqZ,eAAgB,SAAwBnqZ,GACtC,OAAOA,EAAI,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,KAAOA,EAAIA,EAAIA,EAAIA,EAAIA,CACrE,oCCnEH9B,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAET,IAsBIyuZ,EAA4B,SAAmCtnZ,EAASqrS,GAI1E,IAHA,IAAIk8G,EAAYvnZ,EAAQunZ,UACpBC,EAAsBxnZ,EAAQynZ,aAE3BD,IAAwBn8G,EAAUm8G,IACvCD,GAAaC,EAAoBD,UACjCC,EAAsBA,EAAoBC,aAG5C,MAAO,CAAEF,UAAWA,EAAWE,aAAcD,EAC9C,EAkED3hR,EAAAA,QAAkB,CAChBk/Q,WAnGe,SAAoB17U,EAAMq+U,GACzC,IAAIC,EAAgC,IAAtBt+U,EAAKrsE,QAAQ,KAAaqsE,EAAK+pC,UAAU,GAAK/pC,EACxDu+U,EAAeD,EAAU,IAAMA,EAAU,GACzCE,EAAS9qZ,QAAUA,OAAOqoD,SAC1B0iW,EAAYF,EAAeC,EAAOnnN,SAAWmnN,EAAOrvR,OAASovR,EAAeC,EAAOnnN,SAAWmnN,EAAOrvR,OACzGkvR,EAAgBtmH,QAAQ2mH,UAAU3mH,QAAQxgP,MAAO,GAAIknW,GAAa1mH,QAAQ4mH,aAAa5mH,QAAQxgP,MAAO,GAAIknW,EAC3G,EA8FChH,QA5FY,WACZ,OAAO/jZ,OAAOqoD,SAASikB,KAAKxM,QAAQ,KAAM,GAC3C,EA2FCorV,yBAzF6B,SAAkC/tV,GAC/D,OAAO,SAAUl6D,GACf,OAAOk6D,EAAU4wH,SAAW5wH,GAAal6D,GAAWk6D,EAAU4wH,SAAS9qL,MAA2D,GAA7Ck6D,EAAU8jU,wBAAwBh+X,GACxH,CACF,EAsFCkjZ,aApEiB,SAAsBn1Y,EAAGhD,EAAG83Y,GAC7C,GAAIA,EACF,OAAO90Y,IAAMpQ,SAAWoN,EAAElL,wBAAwBxB,MAAQtB,OAAOmrZ,SAAWnrZ,OAAOklZ,aAAgD,WAAjCvkZ,iBAAiBqQ,GAAGjQ,SAAwBiN,EAAEo9Y,WAAap9Y,EAAEo9Y,WAAap6Y,EAAEo6Y,WAE9K,GAAIp6Y,IAAMpQ,SACR,OAAOoN,EAAElL,wBAAwBzB,KAAOrB,OAAOqrZ,SAAWrrZ,OAAOslZ,aA4BnE,GAhD4C,WAAvC3kZ,iBAgDYqQ,GAhDcjQ,SAgDV,CACnB,GAAIiN,EAAE08Y,eAAiB15Y,EAAG,CACxB,IAIIs6Y,EAAwBf,EAA0Bv8Y,GAJnB,SAAsC7J,GACvE,OAAOA,IAAM6M,GAAK7M,IAAMvD,QACzB,IAGG4pZ,EAAYc,EAAsBd,UAGtC,GAFmBc,EAAsBZ,eAEpB15Y,EACnB,MAAM,IAAIlC,MAAM,4DAGlB,OAAO07Y,CACR,CAED,OAAOx8Y,EAAEw8Y,SACV,CAED,GAAIx8Y,EAAE08Y,eAAiB15Y,EAAE05Y,aACvB,OAAO18Y,EAAEw8Y,UAAYx5Y,EAAEw5Y,UAGzB,IAAIe,EAAa,SAAoBpnZ,GACnC,OAAOA,IAAMvD,QACd,EACD,OAAO2pZ,EAA0Bv8Y,EAAGu9Y,GAAYf,UAAYD,EAA0Bv5Y,EAAGu6Y,GAAYf,SAExG,2CC5FgB70Y,EAAE4gK,EAAQ,OAASrkG,EAAE/2E,OAAO2uQ,IAAI,iBAAiB/8P,EAAE5R,OAAO2uQ,IAAI,kBAAkBh8P,EAAEzP,OAAOgJ,UAAU6jK,eAAer9J,EAAE8H,EAAE41W,mDAAmDioB,kBAAkB76X,EAAE,CAACva,KAAI,EAAGP,KAAI,EAAG2tZ,QAAO,EAAGC,UAAS,GAChP,SAAS3rZ,EAAEkR,EAAE/J,EAAE2O,GAAG,IAAI7E,EAAE2E,EAAE,CAAC,EAAEvR,EAAE,KAAK0R,EAAE,KAAiF,IAAI9E,UAAhF,IAAS6E,IAAIzR,EAAE,GAAGyR,QAAG,IAAS3O,EAAE7I,MAAM+F,EAAE,GAAG8C,EAAE7I,UAAK,IAAS6I,EAAEpJ,MAAMgY,EAAE5O,EAAEpJ,KAAcoJ,EAAE6G,EAAEpS,KAAKuL,EAAE8J,KAAK4H,EAAEuyJ,eAAen6J,KAAK2E,EAAE3E,GAAG9J,EAAE8J,IAAI,GAAGC,GAAGA,EAAEg5X,aAAa,IAAIj5X,KAAK9J,EAAE+J,EAAEg5X,kBAAe,IAASt0X,EAAE3E,KAAK2E,EAAE3E,GAAG9J,EAAE8J,IAAI,MAAM,CAAC+7W,SAAS56S,EAAE1tE,KAAKwM,EAAE5S,IAAI+F,EAAEtG,IAAIgY,EAAEzY,MAAMsY,EAAE43X,OAAOz/X,EAAEnL,QAAS,CAAmBomI,EAAQ4iR,IAAI5rZ,EAAEgpI,EAAQ6iR,KAAK7rZ,oCCD7V,IAAIiN,EAAE5R,OAAO2uQ,IAAI,iBAAiBj8P,EAAE1S,OAAO2uQ,IAAI,gBAAgBnxP,EAAExd,OAAO2uQ,IAAI,kBAAkBhqQ,EAAE3E,OAAO2uQ,IAAI,qBAAqBtzP,EAAErb,OAAO2uQ,IAAI,kBAAkB97P,EAAE7S,OAAO2uQ,IAAI,kBAAkBzhP,EAAEltB,OAAO2uQ,IAAI,iBAAiB73P,EAAE9W,OAAO2uQ,IAAI,qBAAqB9qP,EAAE7jB,OAAO2uQ,IAAI,kBAAkB3pQ,EAAEhF,OAAO2uQ,IAAI,cAAc1pQ,EAAEjF,OAAO2uQ,IAAI,cAActpQ,EAAErF,OAAOC,SACzW,IAAI80N,EAAE,CAAC+7K,UAAU,WAAW,OAAM,CAAG,EAACO,mBAAmB,WAAY,EAACD,oBAAoB,WAAY,EAACJ,gBAAgB,WAAY,GAAEh0M,EAAE95L,OAAO6iB,OAAOivM,EAAE,CAAC,EAAE,SAAS09D,EAAE5mR,EAAE8J,EAAE5M,GAAGhH,KAAKC,MAAM6J,EAAE9J,KAAK8d,QAAQlK,EAAE5T,KAAKwvH,KAAKwjG,EAAEhzN,KAAK0vY,QAAQ1oY,GAAG+rN,CAAE,CACuI,SAASooB,IAAK,CAAwB,SAASozB,EAAEzkQ,EAAE8J,EAAE5M,GAAGhH,KAAKC,MAAM6J,EAAE9J,KAAK8d,QAAQlK,EAAE5T,KAAKwvH,KAAKwjG,EAAEhzN,KAAK0vY,QAAQ1oY,GAAG+rN,CAAE,CADzP29D,EAAExmR,UAAUi1Y,iBAAiB,CAAC,EACpQzuH,EAAExmR,UAAUslD,SAAS,SAAS1lD,EAAE8J,GAAG,GAAG,kBAAkB9J,GAAG,oBAAoBA,GAAG,MAAMA,EAAE,MAAM6H,MAAM,yHAAyH3R,KAAK0vY,QAAQV,gBAAgBhvY,KAAK8J,EAAE8J,EAAE,WAAY,EAAC88Q,EAAExmR,UAAU6+C,YAAY,SAASj/C,GAAG9J,KAAK0vY,QAAQL,mBAAmBrvY,KAAK8J,EAAE,cAAe,EAAeqxO,EAAEjxO,UAAUwmR,EAAExmR,UAAsF,IAAI2tQ,EAAEtJ,EAAErkQ,UAAU,IAAIixO,EACrf08B,EAAEjtQ,YAAY2jQ,EAAEvzE,EAAE68E,EAAE6Y,EAAExmR,WAAW2tQ,EAAE23H,sBAAqB,EAAG,IAAItuO,EAAErjK,MAAMC,QAAQqpY,EAAEjmY,OAAOgJ,UAAU6jK,eAAe/C,EAAE,CAACzlK,QAAQ,MAAM0pY,EAAE,CAAChuY,KAAI,EAAGP,KAAI,EAAG2tZ,QAAO,EAAGC,UAAS,GACtK,SAAS3gJ,EAAE7jQ,EAAE8J,EAAE5M,GAAG,IAAIuR,EAAE1E,EAAE,CAAC,EAAEkhE,EAAE,KAAKr8D,EAAE,KAAK,GAAG,MAAM9E,EAAE,IAAI2E,UAAK,IAAS3E,EAAElT,MAAMgY,EAAE9E,EAAElT,UAAK,IAASkT,EAAE3S,MAAM8zE,EAAE,GAAGnhE,EAAE3S,KAAK2S,EAAEuzX,EAAE5oY,KAAKqV,EAAE2E,KAAK02X,EAAElhO,eAAex1J,KAAK1E,EAAE0E,GAAG3E,EAAE2E,IAAI,IAAIE,EAAEtW,UAAUvD,OAAO,EAAE,GAAG,IAAI6Z,EAAE5E,EAAEoZ,SAASjmB,OAAO,GAAG,EAAEyR,EAAE,CAAC,IAAI,IAAID,EAAE3a,MAAM4a,GAAG9H,EAAE,EAAEA,EAAE8H,EAAE9H,IAAI6H,EAAE7H,GAAGxO,UAAUwO,EAAE,GAAGkD,EAAEoZ,SAASzU,CAAE,IAAG1O,GAAGA,EAAE+iY,aAAa,IAAIt0X,KAAKE,EAAE3O,EAAE+iY,kBAAe,IAASh5X,EAAE0E,KAAK1E,EAAE0E,GAAGE,EAAEF,IAAI,MAAM,CAACo3W,SAAS//W,EAAEvI,KAAKyC,EAAE7I,IAAI8zE,EAAEr0E,IAAIgY,EAAEzY,MAAM4T,EAAEs8X,OAAOnlO,EAAEzlK,QAAS,CACjV,SAASisY,EAAE1nY,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE6lX,WAAW//W,CAAE,CAAmG,IAAIsrO,EAAE,OAAO,SAAS3rE,EAAEzlK,EAAE8J,GAAG,MAAM,kBAAkB9J,GAAG,OAAOA,GAAG,MAAMA,EAAE7I,IAA7K,SAAgB6I,GAAG,IAAI8J,EAAE,CAAC,IAAI,KAAK,IAAI,MAAM,MAAM,IAAI9J,EAAE64D,QAAQ,SAAQ,SAAS74D,GAAG,OAAO8J,EAAE9J,EAAG,GAAE,CAA8EwoG,CAAO,GAAGxoG,EAAE7I,KAAK2S,EAAEtJ,SAAS,GAAI,CAChX,SAAS88R,EAAEt9R,EAAE8J,EAAE5M,EAAEuR,EAAE1E,GAAG,IAAIkhE,SAASjrE,EAAK,cAAcirE,GAAG,YAAYA,IAAEjrE,EAAE,MAAK,IAAI4O,GAAE,EAAG,GAAG,OAAO5O,EAAE4O,GAAE,OAAQ,OAAOq8D,GAAG,IAAK,SAAS,IAAK,SAASr8D,GAAE,EAAG,MAAM,IAAK,SAAS,OAAO5O,EAAE6lX,UAAU,KAAK//W,EAAE,KAAKc,EAAEgI,GAAE,GAAI,GAAGA,EAAE,OAAW7E,EAAEA,EAAN6E,EAAE5O,GAASA,EAAE,KAAKyO,EAAE,IAAIg3J,EAAE72J,EAAE,GAAGH,EAAE2oJ,EAAErtJ,IAAI7M,EAAE,GAAG,MAAM8C,IAAI9C,EAAE8C,EAAE64D,QAAQu4K,EAAE,OAAO,KAAKksD,EAAEvzR,EAAED,EAAE5M,EAAE,IAAG,SAAS8C,GAAG,OAAOA,CAAE,KAAG,MAAM+J,IAAI29X,EAAE39X,KAAKA,EADnW,SAAW/J,EAAE8J,GAAG,MAAM,CAAC+7W,SAAS//W,EAAEvI,KAAKyC,EAAEzC,KAAKpG,IAAI2S,EAAElT,IAAIoJ,EAAEpJ,IAAIT,MAAM6J,EAAE7J,MAAMkwY,OAAOrmY,EAAEqmY,OAAQ,CACwQ3gL,CAAE37M,EAAE7M,IAAI6M,EAAE5S,KAAKyX,GAAGA,EAAEzX,MAAM4S,EAAE5S,IAAI,IAAI,GAAG4S,EAAE5S,KAAK0hE,QAAQu4K,EAAE,OAAO,KAAKpxO,IAAI8J,EAAElV,KAAKmV,IAAI,EAAyB,GAAvB6E,EAAE,EAAEH,EAAE,KAAKA,EAAE,IAAIA,EAAE,IAAO2oJ,EAAEp3J,GAAG,IAAI,IAAI2O,EAAE,EAAEA,EAAE3O,EAAElL,OAAO6Z,IAAI,CAC/e,IAAID,EAAED,EAAEg3J,EADwex6F,EACrfjrE,EAAE2O,GAAeA,GAAGC,GAAG0uR,EAAEryN,EAAEnhE,EAAE5M,EAAEwR,EAAE3E,EAAG,MAAK,GAAG2E,EAPsU,SAAW1O,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAsC,oBAAjCA,EAAEzG,GAAGyG,EAAEzG,IAAIyG,EAAE,eAA0CA,EAAE,IAAK,CAO7bgpN,CAAEhpN,GAAG,oBAAoB0O,EAAE,IAAI1O,EAAE0O,EAAEja,KAAKuL,GAAG2O,EAAE,IAAIs8D,EAAEjrE,EAAEtL,QAAQC,MAA6Bia,GAAG0uR,EAA1BryN,EAAEA,EAAEp2E,MAA0BiV,EAAE5M,EAAtBwR,EAAED,EAAEg3J,EAAEx6F,EAAEt8D,KAAkB5E,QAAQ,GAAG,WAAWkhE,EAAE,MAAMnhE,EAAE65B,OAAO3jC,GAAG6H,MAAM,mDAAmD,oBAAoBiC,EAAE,qBAAqB1S,OAAOQ,KAAKoI,GAAG+3D,KAAK,MAAM,IAAIjuD,GAAG,6EAA6E,OAAO8E,CAAE,CAC1Z,SAASu8J,EAAEnrK,EAAE8J,EAAE5M,GAAG,GAAG,MAAM8C,EAAE,OAAOA,EAAE,IAAIyO,EAAE,GAAG1E,EAAE,EAAmD,OAAjDuzR,EAAEt9R,EAAEyO,EAAE,GAAG,IAAG,SAASzO,GAAG,OAAO8J,EAAErV,KAAKyI,EAAE8C,EAAE+J,IAAK,IAAS0E,CAAE,UAAS0yP,EAAEnhQ,GAAG,IAAI,IAAIA,EAAEwrR,QAAQ,CAAC,IAAI1hR,EAAE9J,EAAE2kZ,SAAQ76Y,EAAEA,KAAM3K,MAAK,SAAS2K,GAAM,IAAI9J,EAAEwrR,UAAU,IAAIxrR,EAAEwrR,UAAQxrR,EAAEwrR,QAAQ,EAAExrR,EAAE2kZ,QAAQ76Y,EAAE,IAAC,SAASA,GAAM,IAAI9J,EAAEwrR,UAAU,IAAIxrR,EAAEwrR,UAAQxrR,EAAEwrR,QAAQ,EAAExrR,EAAE2kZ,QAAQ76Y,EAAE,KAAG,IAAI9J,EAAEwrR,UAAUxrR,EAAEwrR,QAAQ,EAAExrR,EAAE2kZ,QAAQ76Y,EAAG,IAAG,IAAI9J,EAAEwrR,QAAQ,OAAOxrR,EAAE2kZ,QAAQj7N,QAAQ,MAAM1pL,EAAE2kZ,OAAS,CAC7Z,IAAIv0G,EAAE,CAAC30S,QAAQ,MAAM0lK,EAAE,CAACzkK,WAAW,MAAM4hV,EAAE,CAACkpD,uBAAuBp3F,EAAEwhF,wBAAwBzwN,EAAEorO,kBAAkBrrO,GAAGr/B,EAAQ+iR,SAAS,CAAC9oZ,IAAIqvK,EAAE5yK,QAAQ,SAASyH,EAAE8J,EAAE5M,GAAGiuK,EAAEnrK,GAAE,WAAW8J,EAAE5R,MAAMhC,KAAKmC,UAAW,GAAC6E,EAAG,EAACwkB,MAAM,SAAS1hB,GAAG,IAAI8J,EAAE,EAAuB,OAArBqhK,EAAEnrK,GAAE,WAAW8J,GAAI,IAASA,CAAE,EAAC0nB,QAAQ,SAASxxB,GAAG,OAAOmrK,EAAEnrK,GAAE,SAASA,GAAG,OAAOA,CAAE,KAAG,EAAG,EAAC6kZ,KAAK,SAAS7kZ,GAAG,IAAI0nY,EAAE1nY,GAAG,MAAM6H,MAAM,yEAAyE,OAAO7H,CAAE,GAAE6hI,EAAQijQ,UAAUl+G,EAAE/kJ,EAAQ+c,SAASltI,EACnemwH,EAAQijR,SAASv1Y,EAAEsyH,EAAQs/Q,cAAc18I,EAAE5iI,EAAQkjR,WAAWlsZ,EAAEgpI,EAAQmjR,SAASjtY,EAAE8pH,EAAQyiP,mDAAmDhmC,EAC9Iz8M,EAAQojR,aAAa,SAASjlZ,EAAE8J,EAAE5M,GAAG,GAAG,OAAO8C,QAAG,IAASA,EAAE,MAAM6H,MAAM,iFAAiF7H,EAAE,KAAK,IAAIyO,EAAEyiL,EAAE,CAAC,EAAElxL,EAAE7J,OAAO4T,EAAE/J,EAAE7I,IAAI8zE,EAAEjrE,EAAEpJ,IAAIgY,EAAE5O,EAAEqmY,OAAO,GAAG,MAAMv8X,EAAE,CAAoE,QAAnE,IAASA,EAAElT,MAAMq0E,EAAEnhE,EAAElT,IAAIgY,EAAEsyJ,EAAEzlK,cAAS,IAASqO,EAAE3S,MAAM4S,EAAE,GAAGD,EAAE3S,KAAQ6I,EAAEzC,MAAMyC,EAAEzC,KAAKwlY,aAAa,IAAIp0X,EAAE3O,EAAEzC,KAAKwlY,aAAa,IAAIr0X,KAAK5E,EAAEuzX,EAAE5oY,KAAKqV,EAAE4E,KAAKy2X,EAAElhO,eAAev1J,KAAKD,EAAEC,QAAG,IAAS5E,EAAE4E,SAAI,IAASC,EAAEA,EAAED,GAAG5E,EAAE4E,GAAI,KAAIA,EAAErW,UAAUvD,OAAO,EAAE,GAAG,IAAI4Z,EAAED,EAAE0U,SAASjmB,OAAO,GAAG,EAAEwR,EAAE,CAACC,EAAE5a,MAAM2a,GACrf,IAAI,IAAI7H,EAAE,EAAEA,EAAE6H,EAAE7H,IAAI8H,EAAE9H,GAAGxO,UAAUwO,EAAE,GAAG4H,EAAE0U,SAASxU,CAAE,OAAM,CAACk3W,SAAS//W,EAAEvI,KAAKyC,EAAEzC,KAAKpG,IAAI4S,EAAEnT,IAAIq0E,EAAE90E,MAAMsY,EAAE43X,OAAOz3X,EAAG,EAACizH,EAAQ6yH,cAAc,SAAS10P,GAAqK,OAAlKA,EAAE,CAAC6lX,SAASzkW,EAAEkiX,cAActjY,EAAEklZ,eAAellZ,EAAEmlZ,aAAa,EAAEzhQ,SAAS,KAAK0hQ,SAAS,KAAKC,cAAc,KAAKC,YAAY,OAAQ5hQ,SAAS,CAACmiO,SAAS9+W,EAAE+iF,SAAS9pF,GAAUA,EAAEolZ,SAASplZ,CAAE,EAAC6hI,EAAQusG,cAAcy1B,EAAEhiI,EAAQ0jR,cAAc,SAASvlZ,GAAG,IAAI8J,EAAE+5P,EAAE9jQ,KAAK,KAAKC,GAAY,OAAT8J,EAAEvM,KAAKyC,EAAS8J,CAAE,EAAC+3H,EAAQ2jR,UAAU,WAAW,MAAM,CAAC/pZ,QAAQ,KAAM,EAC/domI,EAAQ4jR,WAAW,SAASzlZ,GAAG,MAAM,CAAC6lX,SAAS76W,EAAEk/B,OAAOlqC,EAAG,EAAC6hI,EAAQ6jR,eAAehe,EAAE7lQ,EAAQ8jR,KAAK,SAAS3lZ,GAAG,MAAM,CAAC6lX,SAAS1sX,EAAE2sX,SAAS,CAACt6F,SAAS,EAAEm5H,QAAQ3kZ,GAAGyhK,MAAM0/F,EAAG,EAACt/H,EAAQo8F,KAAK,SAASj+N,EAAE8J,GAAG,MAAM,CAAC+7W,SAAS3sX,EAAEqE,KAAKyC,EAAEm8N,aAAQ,IAASryN,EAAE,KAAKA,EAAG,EAAC+3H,EAAQ+jR,gBAAgB,SAAS5lZ,GAAG,IAAI8J,EAAEq3J,EAAEzkK,WAAWykK,EAAEzkK,WAAW,CAAC,EAAE,IAAIsD,GAA2B,CAA/B,QAAgBmhK,EAAEzkK,WAAWoN,CAAE,CAAC,EAAC+3H,EAAQgkR,aAAa,WAAW,MAAMh+Y,MAAM,2DAA6D,EAC3cg6H,EAAQ4oQ,YAAY,SAASzqY,EAAE8J,GAAG,OAAOsmS,EAAE30S,QAAQgvY,YAAYzqY,EAAE8J,EAAG,EAAC+3H,EAAQ6oQ,WAAW,SAAS1qY,GAAG,OAAOowS,EAAE30S,QAAQivY,WAAW1qY,EAAG,EAAC6hI,EAAQmpQ,cAAc,WAAY,EAACnpQ,EAAQopQ,iBAAiB,SAASjrY,GAAG,OAAOowS,EAAE30S,QAAQwvY,iBAAiBjrY,EAAG,EAAC6hI,EAAQxmI,UAAU,SAAS2E,EAAE8J,GAAG,OAAOsmS,EAAE30S,QAAQJ,UAAU2E,EAAE8J,EAAG,EAAC+3H,EAAQwpQ,MAAM,WAAW,OAAOj7F,EAAE30S,QAAQ4vY,OAAQ,EAACxpQ,EAAQ8oQ,oBAAoB,SAAS3qY,EAAE8J,EAAE5M,GAAG,OAAOkzS,EAAE30S,QAAQkvY,oBAAoB3qY,EAAE8J,EAAE5M,EAAG,EAC9b2kI,EAAQ+oQ,mBAAmB,SAAS5qY,EAAE8J,GAAG,OAAOsmS,EAAE30S,QAAQmvY,mBAAmB5qY,EAAE8J,EAAG,EAAC+3H,EAAQgpQ,gBAAgB,SAAS7qY,EAAE8J,GAAG,OAAOsmS,EAAE30S,QAAQovY,gBAAgB7qY,EAAE8J,EAAG,EAAC+3H,EAAQipQ,QAAQ,SAAS9qY,EAAE8J,GAAG,OAAOsmS,EAAE30S,QAAQqvY,QAAQ9qY,EAAE8J,EAAG,EAAC+3H,EAAQkpQ,WAAW,SAAS/qY,EAAE8J,EAAE5M,GAAG,OAAOkzS,EAAE30S,QAAQsvY,WAAW/qY,EAAE8J,EAAE5M,EAAG,EAAC2kI,EAAQ3mI,OAAO,SAAS8E,GAAG,OAAOowS,EAAE30S,QAAQP,OAAO8E,EAAG,EAAC6hI,EAAQ3sI,SAAS,SAAS8K,GAAG,OAAOowS,EAAE30S,QAAQvG,SAAS8K,EAAG,EAAC6hI,EAAQupQ,qBAAqB,SAASprY,EAAE8J,EAAE5M,GAAG,OAAOkzS,EAAE30S,QAAQ2vY,qBAAqBprY,EAAE8J,EAAE5M,EAAG,EAChf2kI,EAAQqpQ,cAAc,WAAW,OAAO96F,EAAE30S,QAAQyvY,eAAgB,EAACrpQ,EAAQ/sH,QAAQ,6CCtBjFukJ,EAAOx3B,QAAU,EAAjBw3B,2CCAAA,EAAOx3B,QAAU,EAAjBw3B,8BCHFA,EAAOx3B,QAAU,EAAjBw3B,4CC0BAA,EAAOx3B,QAAUq7D,EAGjB,IAAIwxE,EAAat3Q,OAAOQ,MAAQ,SAAUV,GACxC,IAAIU,EAAO,GACX,IAAK,IAAIT,KAAOD,EAAKU,EAAKhD,KAAKuC,GAC/B,OAAOS,CACR,EAKGg4K,EAAON,EAAQ,OACnBM,EAAKxV,SAAWkV,EAAQ,OAGxB,IAAIq/F,EAAWr/F,EAAQ,OACnBi9F,EAAWj9F,EAAQ,OASvB,SAAS4tB,EAAOlnM,GACd,KAAME,gBAAgBgnM,GACpB,OAAO,IAAIA,EAAOlnM,GAEpB24Q,EAASl6Q,KAAKyB,KAAMF,GACpBu2Q,EAAS93Q,KAAKyB,KAAMF,GAEhBA,IAAgC,IAArBA,EAAQ++M,WACrB7+M,KAAK6+M,UAAW,GAEd/+M,IAAgC,IAArBA,EAAQwB,WACrBtB,KAAKsB,UAAW,GAElBtB,KAAK04Q,eAAgB,EACjB54Q,IAAqC,IAA1BA,EAAQ44Q,gBACrB14Q,KAAK04Q,eAAgB,GAEvB14Q,KAAKk3J,KAAK,MAAOyhH,EAClB,CAGD,SAASA,IAGH34Q,KAAK04Q,eAAiB14Q,KAAK44Q,eAAeC,OAK9CppI,EAAQyuE,SAASl+M,KAAKq1C,IAAIxrC,KAAK7J,MAChC,CArCD05K,EAAKxV,SAAS8iC,EAAQyxE,GAuCtB,SAAkB0E,EAAI3kQ,GACpB,IAAK,IAAI5a,EAAI,EAAGgS,EAAIutQ,EAAGv+Q,OAAQhB,EAAIgS,EAAGhS,IACpC4a,EAAE2kQ,EAAGv/Q,GAAIA,EAEZ,CAzCDyE,CAAQm2Q,EAAWnC,EAASnsQ,YAAY,SAAS8uF,GAC1CguG,EAAO98L,UAAU8uF,KACpBguG,EAAO98L,UAAU8uF,GAAUq9K,EAASnsQ,UAAU8uF,GACjD,2BCzBDmqE,EAAOx3B,QAAUu7D,EAEjB,IAAIwoE,EAAYt2F,EAAQ,MAGpBM,EAAON,EAAQ,OAMnB,SAAS8tB,EAAYpnM,GACnB,KAAME,gBAAgBknM,GACpB,OAAO,IAAIA,EAAYpnM,GAEzB4vQ,EAAUnxQ,KAAKyB,KAAMF,EACtB,CAVD45K,EAAKxV,SAAWkV,EAAQ,OAGxBM,EAAKxV,SAASgjC,EAAawoE,GAS3BxoE,EAAYh9L,UAAUgvQ,WAAa,SAAS7xE,EAAOpnL,EAAUorB,GAC3DA,EAAG,KAAMg8J,EACV,uCCxBDlkC,EAAOx3B,QAAU8sI,EAGjB,IAAI36Q,EAAUs7K,EAAQ,OAKlBxsC,EAASwsC,EAAAA,OAAAA,OAGbq/F,EAASU,cAAgBA,EAEzB,IAAIy2I,EAAKx2O,EAAAA,OAAAA,aAGJw2O,EAAGz4P,gBAAey4P,EAAGz4P,cAAgB,SAASkiH,EAAShyQ,GAC1D,OAAOgyQ,EAAQhqQ,UAAUhI,GAAMzI,MAChC,GAGD,IAOI66Q,EAPA/+C,EAASthD,EAAQ,OAGjBM,EAAON,EAAQ,OACnBM,EAAKxV,SAAWkV,EAAQ,OAOxB,IAAIjxG,EAAQixG,EAAQ,OAWpB,SAAS+/F,EAAcr5Q,EAASmvG,GAC9B,IAAI+3F,EAAS5tB,EAAQ,OAMjBwxB,GAJJ9qM,EAAUA,GAAW,CAAC,GAIJ+qM,cACdglN,EAAa/vZ,EAAQirM,WAAa,GAAK,MAC3C/qM,KAAK6qM,cAAiBD,GAAe,IAARA,EAAaA,EAAMilN,EAGhD7vZ,KAAK6qM,gBAAkB7qM,KAAK6qM,cAE5B7qM,KAAKs4C,OAAS,GACdt4C,KAAKpB,OAAS,EACdoB,KAAKq6Q,MAAQ,KACbr6Q,KAAKs6Q,WAAa,EAClBt6Q,KAAKu6Q,QAAU,KACfv6Q,KAAK64Q,OAAQ,EACb74Q,KAAKw6Q,YAAa,EAClBx6Q,KAAKy6Q,SAAU,EAMfz6Q,KAAK06Q,MAAO,EAIZ16Q,KAAK26Q,cAAe,EACpB36Q,KAAK46Q,iBAAkB,EACvB56Q,KAAK66Q,mBAAoB,EAKzB76Q,KAAK+qM,aAAejrM,EAAQirM,WAExB97F,aAAkB+3F,IACpBhnM,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQs6Q,oBAKjDp6Q,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAIlDj7Q,KAAK8vZ,QAAS,EAGd9vZ,KAAKk7Q,WAAa,EAGlBl7Q,KAAKm7Q,aAAc,EAEnBn7Q,KAAKgwG,QAAU,KACfhwG,KAAKigB,SAAW,KACZngB,EAAQmgB,WACLw5P,IACHA,EAAgBrgG,EAAAA,OAAAA,GAClBp5K,KAAKgwG,QAAU,IAAIypK,EAAc35Q,EAAQmgB,UACzCjgB,KAAKigB,SAAWngB,EAAQmgB,SAE3B,CAED,SAASw4P,EAAS34Q,GACHs5K,EAAQ,OAErB,KAAMp5K,gBAAgBy4Q,GACpB,OAAO,IAAIA,EAAS34Q,GAEtBE,KAAKg5Q,eAAiB,IAAIG,EAAcr5Q,EAASE,MAGjDA,KAAK6+M,UAAW,EAEhB6b,EAAOn8N,KAAKyB,KACb,CA0BD,SAASs7Q,EAAiBrsK,EAAQvoD,EAAO2gJ,EAAOpnL,EAAUs7P,GACxD,IAAIE,EA8ON,SAAsB/0N,EAAO2gJ,GAC3B,IAAIo0E,EAAK,KACJ/hG,EAAKopB,SAASuE,IACd3tB,EAAKy9D,SAAS9vC,IACd3tB,EAAK4xH,kBAAkBjkG,IACvB3gJ,EAAMqkJ,aACT0wE,EAAK,IAAI18Q,UAAU,oCAErB,OAAO08Q,CACR,CAvPUI,CAAan1N,EAAO2gJ,GAC7B,GAAIo0E,EACFxsK,EAAOqlC,KAAK,QAASmnI,QAChB,GAAI/hG,EAAK4xH,kBAAkBjkG,GAChC3gJ,EAAM+zN,SAAU,EACX/zN,EAAMmyN,OAqPf,SAAoB5pK,EAAQvoD,GAC1B,GAAIA,EAAMspD,UAAYtpD,EAAMmyN,MAAO,CACjC,IAAIxxE,EAAQ3gJ,EAAMspD,QAAQ36D,MACtBgyJ,GAASA,EAAMzoM,SACjB8nD,EAAMpO,OAAO55C,KAAK2oM,GAClB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OAEhD,CACD8nD,EAAMmyN,OAAQ,EAGd6C,EAAazsK,EACd,CAhQK2sK,CAAW3sK,EAAQvoD,QAChB,GAAIA,EAAMqkJ,YAAc1D,GAASA,EAAMzoM,OAAS,EACrD,GAAI8nD,EAAMmyN,QAAU0C,EAAY,CAC9B,IAAIv0Q,EAAI,IAAI2K,MAAM,2BAClBs9F,EAAOqlC,KAAK,QAASttI,EACtB,MAAM,GAAI0/C,EAAM8zN,YAAce,EAAY,CACrCv0Q,EAAI,IAAI2K,MAAM,oCAClBs9F,EAAOqlC,KAAK,QAASttI,EACtB,MACK0/C,EAAMspD,SAAYurK,GAAet7P,IACnConL,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,IAEzBk0E,IACH70N,EAAM+zN,SAAU,GAGd/zN,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAiB8nD,EAAMg0N,MAChDzrK,EAAOqlC,KAAK,OAAQ+yD,GACpBp4F,EAAOE,KAAK,KAGZzoD,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACzC28Q,EACF70N,EAAMpO,OAAO+P,QAAQg/I,GAErB3gJ,EAAMpO,OAAO55C,KAAK2oM,GAEhB3gJ,EAAMi0N,cACRe,EAAazsK,IAqQvB,SAAuBA,EAAQvoD,GACxBA,EAAMy0N,cACTz0N,EAAMy0N,aAAc,EACpB1rI,EAAQyuE,UAAS,YAMrB,SAAwBjvG,EAAQvoD,GAC9B,IAAIp+B,EAAMo+B,EAAM9nD,OAChB,MAAQ8nD,EAAM+zN,UAAY/zN,EAAM6zN,UAAY7zN,EAAMmyN,OAC3CnyN,EAAM9nD,OAAS8nD,EAAMmkJ,gBAC1B1iI,EAAM,wBACN8mC,EAAOE,KAAK,GACR7mF,IAAQo+B,EAAM9nD,SAIhB0pB,EAAMo+B,EAAM9nD,OAEhB8nD,EAAMy0N,aAAc,CACrB,CAlBKsB,CAAextK,EAAQvoD,EACxB,IAEJ,CAzQKs1N,CAAc/sK,EAAQvoD,QAEd60N,IACV70N,EAAM+zN,SAAU,GAGlB,OAYF,SAAsB/zN,GACpB,OAAQA,EAAMmyN,QACNnyN,EAAMi0N,cACNj0N,EAAM9nD,OAAS8nD,EAAMmkJ,eACJ,IAAjBnkJ,EAAM9nD,OACf,CAjBQmxZ,CAAarpW,EACrB,CAhKCyhB,EADEA,GAASA,EAAMqxM,SACTrxM,EAAMqxM,SAAS,UAEf,WAAc,EAKxB9/F,EAAKxV,SAASu0G,EAAU/9C,GAwFxB+9C,EAASvuQ,UAAUxL,KAAO,SAAS2oM,EAAOpnL,GACxC,IAAIymC,EAAQ1mD,KAAKg5Q,eAUjB,OARIt/F,EAAKy9D,SAAS9vC,KAAW3gJ,EAAMqkJ,aACjC9qL,EAAWA,GAAYymC,EAAMu0N,mBACZv0N,EAAMzmC,WACrBonL,EAAQ,IAAIz6D,EAAOy6D,EAAOpnL,GAC1BA,EAAW,IAIRq7P,EAAiBt7Q,KAAM0mD,EAAO2gJ,EAAOpnL,GAAU,EACvD,EAGDw4P,EAASvuQ,UAAUm+C,QAAU,SAASg/I,GAEpC,OAAOi0E,EAAiBt7Q,KADZA,KAAKg5Q,eACoB3xE,EAAO,IAAI,EACjD,EAkEDoxE,EAASvuQ,UAAUkyQ,YAAc,SAASr+G,GAKxC,OAJK07G,IACHA,EAAgBrgG,EAAAA,OAAAA,GAClBp5K,KAAKg5Q,eAAehpK,QAAU,IAAIypK,EAAc17G,GAChD/9J,KAAKg5Q,eAAe/4P,SAAW89I,EACxB/9J,IACR,EAGD,IAAIq8Q,EAAU,QAad,SAASC,EAAc5rQ,EAAGg2C,GACxB,OAAqB,IAAjBA,EAAM9nD,QAAgB8nD,EAAMmyN,MACvB,EAELnyN,EAAMqkJ,WACK,IAANr6L,EAAU,EAAI,EAEnB04B,MAAM14B,IAAMgpK,EAAK2xH,OAAO36R,GAEtBg2C,EAAM6zN,SAAW7zN,EAAMpO,OAAO15C,OACzB8nD,EAAMpO,OAAO,GAAG15C,OAEhB8nD,EAAM9nD,OAGb8R,GAAK,EACA,GAMLA,EAAIg2C,EAAMmkJ,gBACZnkJ,EAAMmkJ,cAnCV,SAA+Bn6L,GAC7B,GAAIA,GAAK2rQ,EACP3rQ,EAAI2rQ,MACC,CAEL3rQ,IACA,IAAK,IAAI8K,EAAI,EAAGA,EAAI,GAAIA,IAAM,EAAG9K,GAAKA,GAAK8K,EAC3C9K,GACD,CACD,OAAOA,CACR,CAyByBs/Y,CAAsBt/Y,IAG1CA,EAAIg2C,EAAM9nD,OACP8nD,EAAMmyN,MAIFnyN,EAAM9nD,QAHb8nD,EAAMi0N,cAAe,EACd,GAKJjqQ,EACR,CAmJD,SAASgrQ,EAAazsK,GACpB,IAAIvoD,EAAQuoD,EAAO+pK,eACnBtyN,EAAMi0N,cAAe,EAChBj0N,EAAMk0N,kBACTzyM,EAAM,eAAgBzhB,EAAM6zN,SAC5B7zN,EAAMk0N,iBAAkB,EACpBl0N,EAAMg0N,KACRjrI,EAAQyuE,UAAS,WACfy9D,EAAc1sK,EACf,IAED0sK,EAAc1sK,GAEnB,CAED,SAAS0sK,EAAc1sK,GACrB9mC,EAAM,iBACN8mC,EAAOqlC,KAAK,YACZkoI,EAAKvtK,EACN,CA8TD,SAASutK,EAAKvtK,GACZ,IAAIvoD,EAAQuoD,EAAO+pK,eAEnB,GADA7wM,EAAM,OAAQzhB,EAAM6zN,SAChB7zN,EAAM6zN,QACR,GACE,IAAIlzE,EAAQp4F,EAAOE,aACZ,OAASk4F,GAAS3gJ,EAAM6zN,QAEpC,CAuED,SAASuC,EAASpsQ,EAAGg2C,GACnB,IAIIsiK,EAJA16I,EAAO5nB,EAAMpO,OACb15C,EAAS8nD,EAAM9nD,OACfqxZ,IAAevpW,EAAMspD,QACrB+6F,IAAerkJ,EAAMqkJ,WAIzB,GAAoB,IAAhBz8H,EAAK1vE,OACP,OAAO,KAET,GAAe,IAAXA,EACFoqN,EAAM,UACH,GAAIje,EACPie,EAAM16I,EAAK8oB,aACR,IAAK1mF,GAAKA,GAAK9R,EAGhBoqN,EADEinM,EACI3hV,EAAKzM,KAAK,IAEV+qE,EAAOmQ,OAAOzuE,EAAM1vE,GAC5B0vE,EAAK1vE,OAAS,MACT,CAEL,GAAI8R,EAAI49D,EAAK,GAAG1vE,OAIdoqN,GADI77C,EAAM7+F,EAAK,IACL3+D,MAAM,EAAGe,GACnB49D,EAAK,GAAK6+F,EAAIx9J,MAAMe,QACf,GAAIA,IAAM49D,EAAK,GAAG1vE,OAEvBoqN,EAAM16I,EAAK8oB,YACN,CAIH4xH,EADEinM,EACI,GAEA,IAAIrjR,EAAOl8H,GAGnB,IADA,IAAImD,EAAI,EACCjW,EAAI,EAAGgS,EAAI0+D,EAAK1vE,OAAQhB,EAAIgS,GAAKiE,EAAInD,EAAG9S,IAAK,CACpD,IAAIuvK,EAAM7+F,EAAK,GACX4hV,EAAM/pZ,KAAKC,IAAIsK,EAAImD,EAAGs5J,EAAIvuK,QAE1BqxZ,EACFjnM,GAAO77C,EAAIx9J,MAAM,EAAGugZ,GAEpB/iP,EAAIrxJ,KAAKktM,EAAKn1M,EAAG,EAAGq8Y,GAElBA,EAAM/iP,EAAIvuK,OACZ0vE,EAAK,GAAK6+F,EAAIx9J,MAAMugZ,GAEpB5hV,EAAK8oB,QAEPvjF,GAAKq8Y,CACN,CACF,CACF,CAED,OAAOlnM,CACR,CAED,SAAS+zD,EAAY9tK,GACnB,IAAIvoD,EAAQuoD,EAAO+pK,eAInB,GAAItyN,EAAM9nD,OAAS,EACjB,MAAM,IAAI+S,MAAM,0CAEb+0C,EAAM8zN,aACT9zN,EAAMmyN,OAAQ,EACdppI,EAAQyuE,UAAS,WAEVx3J,EAAM8zN,YAA+B,IAAjB9zN,EAAM9nD,SAC7B8nD,EAAM8zN,YAAa,EACnBvrK,EAAO4vG,UAAW,EAClB5vG,EAAOqlC,KAAK,OAEf,IAEJ,CAnoBDmkI,EAASvuQ,UAAUilG,KAAO,SAASz+F,GACjCy3D,EAAM,OAAQz3D,GACd,IAAIg2C,EAAQ1mD,KAAKg5Q,eACboE,EAAQ1sQ,EAQZ,KANKgpK,EAAKuP,SAASv4K,IAAMA,EAAI,KAC3Bg2C,EAAMk0N,iBAAkB,GAKhB,IAANlqQ,GACAg2C,EAAMi0N,eACLj0N,EAAM9nD,QAAU8nD,EAAMmkJ,eAAiBnkJ,EAAMmyN,OAMhD,OALA1wM,EAAM,qBAAsBzhB,EAAM9nD,OAAQ8nD,EAAMmyN,OAC3B,IAAjBnyN,EAAM9nD,QAAgB8nD,EAAMmyN,MAC9BkE,EAAY/8Q,MAEZ07Q,EAAa17Q,MACR,KAMT,GAAU,KAHV0Q,EAAI4rQ,EAAc5rQ,EAAGg2C,KAGNA,EAAMmyN,MAGnB,OAFqB,IAAjBnyN,EAAM9nD,QACRm+Q,EAAY/8Q,MACP,KA0BT,IAiCIgpN,EAjCAq0D,EAAS32N,EAAMi0N,aA0DnB,OAzDAxyM,EAAM,gBAAiBk1M,IAGF,IAAjB32N,EAAM9nD,QAAgB8nD,EAAM9nD,OAAS8R,EAAIg2C,EAAMmkJ,gBAEjD1iI,EAAM,6BADNk1M,GAAS,IAMP32N,EAAMmyN,OAASnyN,EAAM+zN,UAEvBtyM,EAAM,mBADNk1M,GAAS,GAIPA,IACFl1M,EAAM,WACNzhB,EAAM+zN,SAAU,EAChB/zN,EAAMg0N,MAAO,EAEQ,IAAjBh0N,EAAM9nD,SACR8nD,EAAMi0N,cAAe,GAEvB36Q,KAAKo7Q,MAAM10N,EAAMmkJ,eACjBnkJ,EAAMg0N,MAAO,GAKX2C,IAAW32N,EAAM+zN,UACnB/pQ,EAAI4rQ,EAAcc,EAAO12N,IAIzBsiK,EADEt4M,EAAI,EACAosQ,EAASpsQ,EAAGg2C,GAEZ,KAEJgzH,EAAK2xH,OAAOriF,KACdtiK,EAAMi0N,cAAe,EACrBjqQ,EAAI,GAGNg2C,EAAM9nD,QAAU8R,EAIK,IAAjBg2C,EAAM9nD,QAAiB8nD,EAAMmyN,QAC/BnyN,EAAMi0N,cAAe,GAGnByC,IAAU1sQ,GAAKg2C,EAAMmyN,OAA0B,IAAjBnyN,EAAM9nD,QACtCm+Q,EAAY/8Q,MAET05K,EAAK2xH,OAAOriF,IACfhpN,KAAKs0I,KAAK,OAAQ00E,GAEbA,CACR,EAuFDyvD,EAASvuQ,UAAUkxQ,MAAQ,SAAS1qQ,GAClC1Q,KAAKs0I,KAAK,QAAS,IAAI3iI,MAAM,mBAC9B,EAED8mQ,EAASvuQ,UAAUovO,KAAO,SAAS9hI,EAAM8lK,GACvC,IAAIl+Q,EAAMY,KACN0mD,EAAQ1mD,KAAKg5Q,eAEjB,OAAQtyN,EAAM4zN,YACZ,KAAK,EACH5zN,EAAM2zN,MAAQ7iK,EACd,MACF,KAAK,EACH9wD,EAAM2zN,MAAQ,CAAC3zN,EAAM2zN,MAAO7iK,GAC5B,MACF,QACE9wD,EAAM2zN,MAAM37Q,KAAK84G,GAGrB9wD,EAAM4zN,YAAc,EACpBnyM,EAAM,wBAAyBzhB,EAAM4zN,WAAYgD,GAEjD,IAIIC,IAJUD,IAA6B,IAAjBA,EAASjoO,MACvBmiE,IAASi4B,EAAQ+tI,QACjBhmK,IAASi4B,EAAQ0yF,OAETw2C,EAAQ75D,EAO5B,SAAS4+D,EAAS7+D,GAChB12I,EAAM,YACF02I,IAAaz/M,GACf0/M,GAEH,CAED,SAAS65D,IACPxwM,EAAM,SACNqvC,EAAKniE,KACN,CAhBGqR,EAAM8zN,WACR/qI,EAAQyuE,SAASq/D,GAEjBn+Q,EAAI83J,KAAK,MAAOqmH,GAElB/lK,EAAK+wB,GAAG,SAAUm1I,GAiBlB,IAAIK,EAuFN,SAAqB3+Q,GACnB,OAAO,WACL,IAAIsnD,EAAQtnD,EAAI45Q,eAChB7wM,EAAM,cAAezhB,EAAMw0N,YACvBx0N,EAAMw0N,YACRx0N,EAAMw0N,aACiB,IAArBx0N,EAAMw0N,YAAoB00I,EAAGz4P,cAAc/3J,EAAK,UAClDsnD,EAAM6zN,SAAU,EAChBiC,EAAKp9Q,GAER,CACF,CAlGe++Q,CAAY/+Q,GAG1B,SAAS0/M,IACP32I,EAAM,WAENqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BtmK,EAAK0+C,eAAe,QAAS6nH,GAC7BvmK,EAAK0+C,eAAe,QAAShjC,GAC7B1b,EAAK0+C,eAAe,SAAUwnH,GAC9Bt+Q,EAAI82J,eAAe,MAAOyiH,GAC1Bv5Q,EAAI82J,eAAe,MAAO4oD,GAC1B1/M,EAAI82J,eAAe,OAAQ8nH,IAOvBt3N,EAAMw0N,YACJ1jK,EAAKohK,iBAAkBphK,EAAKohK,eAAesF,WAC/CH,GACH,CAGD,SAASC,EAAO32E,GACdl/H,EAAM,WAEF,IADMqvC,EAAKkrF,MAAM2E,KAEnBl/H,EAAM,8BACA/oE,EAAI45Q,eAAekC,YACzB97Q,EAAI45Q,eAAekC,aACnB97Q,EAAIg/Q,QAEP,CAID,SAASlrJ,EAAQuoJ,GACftzM,EAAM,UAAWszM,GACjBgC,IACAjmK,EAAK0+C,eAAe,QAAShjC,GACW,IAApC08R,EAAGz4P,cAAc3/C,EAAM,UACzBA,EAAK88B,KAAK,QAASmnI,EACtB,CAaD,SAASoC,IACPrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BL,GACD,CAED,SAASK,IACP31M,EAAM,YACNqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BJ,GACD,CAGD,SAASA,IACPt1M,EAAM,UACN/oE,EAAIq+Q,OAAOjmK,EACZ,CAWD,OAnFAA,EAAK+wB,GAAG,QAASw1I,GAwBjB3+Q,EAAImpI,GAAG,OAAQy1I,GAuBVxmK,EAAK8mK,SAAY9mK,EAAK8mK,QAAQv1Q,MAE1BjL,EAAQ05G,EAAK8mK,QAAQv1Q,OAC5ByuG,EAAK8mK,QAAQv1Q,MAAMs/C,QAAQ6qE,GAE3B1b,EAAK8mK,QAAQv1Q,MAAQ,CAACmqH,EAAS1b,EAAK8mK,QAAQv1Q,OAJ5CyuG,EAAK+wB,GAAG,QAASrV,GAanB1b,EAAK0/C,KAAK,QAAS2mH,GAMnBrmK,EAAK0/C,KAAK,SAAU4mH,GAQpBtmK,EAAK88B,KAAK,OAAQl1I,GAGbsnD,EAAM6zN,UACTpyM,EAAM,eACN/oE,EAAIu9Q,UAGCnlK,CACR,EAgBDihK,EAASvuQ,UAAUuzQ,OAAS,SAASjmK,GACnC,IAAI9wD,EAAQ1mD,KAAKg5Q,eAGjB,GAAyB,IAArBtyN,EAAM4zN,WACR,OAAOt6Q,KAGT,GAAyB,IAArB0mD,EAAM4zN,WAER,OAAI9iK,GAAQA,IAAS9wD,EAAM2zN,QAGtB7iK,IACHA,EAAO9wD,EAAM2zN,OAGf3zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EACZ/iK,GACFA,EAAK88B,KAAK,SAAUt0I,OAVbA,KAgBX,IAAKw3G,EAAM,CAET,IAAI+mK,EAAQ73N,EAAM2zN,MACd/xP,EAAMo+B,EAAM4zN,WAChB5zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EAEhB,IAAK,IAAI38Q,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACvB2gR,EAAM3gR,GAAG02I,KAAK,SAAUt0I,MAC1B,OAAOA,IACR,CAID,OAAW,KADPpC,EAoQN,SAAkBu/Q,EAAIn6Q,GACpB,IAAK,IAAIpF,EAAI,EAAGgS,EAAIutQ,EAAGv+Q,OAAQhB,EAAIgS,EAAGhS,IACpC,GAAIu/Q,EAAGv/Q,KAAOoF,EAAG,OAAOpF,EAE1B,OAAQ,CACT,CAzQSkF,CAAQ4jD,EAAM2zN,MAAO7iK,MAI7B9wD,EAAM2zN,MAAM7qQ,OAAO5R,EAAG,GACtB8oD,EAAM4zN,YAAc,EACK,IAArB5zN,EAAM4zN,aACR5zN,EAAM2zN,MAAQ3zN,EAAM2zN,MAAM,IAE5B7iK,EAAK88B,KAAK,SAAUt0I,OAPXA,IAUV,EAIDy4Q,EAASvuQ,UAAUq+H,GAAK,SAASq2D,EAAI11L,GACnC,IAAI0pG,EAAM8nH,EAAOxwN,UAAUq+H,GAAGhqI,KAAKyB,KAAM4+L,EAAI11L,GAQ7C,GAJW,SAAP01L,IAAiB,IAAU5+L,KAAKg5Q,eAAeuB,SACjDv6Q,KAAK28Q,SAGI,aAAP/9E,GAAqB5+L,KAAK6+M,SAAU,CACtC,IAAIn4J,EAAQ1mD,KAAKg5Q,eACjB,IAAKtyN,EAAMm0N,kBAIT,GAHAn0N,EAAMm0N,mBAAoB,EAC1Bn0N,EAAMk0N,iBAAkB,EACxBl0N,EAAMi0N,cAAe,EAChBj0N,EAAM+zN,QAMA/zN,EAAM9nD,QACf88Q,EAAa17Q,UAPK,CAClB,IAAImJ,EAAOnJ,KACXyvI,EAAQyuE,UAAS,WACf/1I,EAAM,4BACNh/D,EAAKgmG,KAAK,EACX,GACF,CAIJ,CAED,OAAOyD,CACR,EACD6lK,EAASvuQ,UAAU0uJ,YAAc6/G,EAASvuQ,UAAUq+H,GAIpDkwI,EAASvuQ,UAAUyyQ,OAAS,WAC1B,IAAIj2N,EAAQ1mD,KAAKg5Q,eAUjB,OATKtyN,EAAM6zN,UACTpyM,EAAM,UACNzhB,EAAM6zN,SAAU,EACX7zN,EAAM+zN,UACTtyM,EAAM,iBACNnoE,KAAKmvG,KAAK,IAOhB,SAAgBF,EAAQvoD,GACjBA,EAAMo0N,kBACTp0N,EAAMo0N,iBAAkB,EACxBrrI,EAAQyuE,UAAS,YAMrB,SAAiBjvG,EAAQvoD,GACvBA,EAAMo0N,iBAAkB,EACxB7rK,EAAOqlC,KAAK,UACZkoI,EAAKvtK,GACDvoD,EAAM6zN,UAAY7zN,EAAM+zN,SAC1BxrK,EAAOE,KAAK,EACf,CAXK0tK,CAAQ5tK,EAAQvoD,EACjB,IAEJ,CAZGi2N,CAAO38Q,KAAM0mD,IAER1mD,IACR,EAmBDy4Q,EAASvuQ,UAAUk0Q,MAAQ,WAOzB,OANAj2M,EAAM,wBAAyBnoE,KAAKg5Q,eAAeuB,UAC/C,IAAUv6Q,KAAKg5Q,eAAeuB,UAChCpyM,EAAM,SACNnoE,KAAKg5Q,eAAeuB,SAAU,EAC9Bv6Q,KAAKs0I,KAAK,UAELt0I,IACR,EAeDy4Q,EAASvuQ,UAAUsX,KAAO,SAASytF,GACjC,IAAIvoD,EAAQ1mD,KAAKg5Q,eACbl9J,GAAS,EAET3yG,EAAOnJ,KA4BX,IAAK,IAAIpC,KA3BTqxG,EAAOs5B,GAAG,OAAO,WAEf,GADApgE,EAAM,eACFzhB,EAAMspD,UAAYtpD,EAAMmyN,MAAO,CACjC,IAAIxxE,EAAQ3gJ,EAAMspD,QAAQ36D,MACtBgyJ,GAASA,EAAMzoM,QACjBuK,EAAKzK,KAAK2oM,EACb,CAEDl+L,EAAKzK,KAAK,KACX,IAEDuwG,EAAOs5B,GAAG,QAAQ,SAAS8+D,IACzBl/H,EAAM,gBACFzhB,EAAMspD,UACRq3F,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,IACzBA,IAAU3gJ,EAAMqkJ,YAAe1D,EAAMzoM,WAGhCuK,EAAKzK,KAAK2oM,KAElBvrF,GAAS,EACT7M,EAAOmvK,SAEV,IAIanvK,EACRyqE,EAAK2/D,WAAWpqI,EAAOrxG,KAAO87K,EAAKy3D,YAAYnxO,KAAKpC,MACtDoC,KAAKpC,GAAK,SAASo7F,GAAU,OAAO,WAClC,OAAOiW,EAAOjW,GAAQh3F,MAAMitG,EAAQ9sG,UACrC,CAAC,CAFQ,CAEPvE,IAoBP,OA+FF,SAAkBu/Q,EAAI3kQ,GACpB,IAAK,IAAI5a,EAAI,EAAGgS,EAAIutQ,EAAGv+Q,OAAQhB,EAAIgS,EAAGhS,IACpC4a,EAAE2kQ,EAAGv/Q,GAAIA,EAEZ,CAjHCyE,CADa,CAAC,QAAS,QAAS,UAAW,QAAS,WACpC,SAASu8L,GACvB3vF,EAAOs5B,GAAGq2D,EAAIz1L,EAAKmrI,KAAKzqI,KAAKV,EAAMy1L,GACpC,IAIDz1L,EAAKiyQ,MAAQ,SAAS1qQ,GACpBy3D,EAAM,gBAAiBz3D,GACnBorG,IACFA,GAAS,EACT7M,EAAO0tK,SAEV,EAEMxzQ,CACR,EAKDsvQ,EAASgG,UAAY3B,wBClxBrB35G,EAAOx3B,QAAU+jI,EAEjB,IAAI1oE,EAAS5tB,EAAQ,OAGjBM,EAAON,EAAQ,OAOnB,SAAS+2O,EAAerwZ,EAASmvG,GAC/BjvG,KAAK8+Q,eAAiB,SAASrD,EAAIj9P,GACjC,OASJ,SAAwBywF,EAAQwsK,EAAIj9P,GAClC,IAAIugQ,EAAK9vK,EAAO+vK,gBAChBD,EAAGE,cAAe,EAElB,IAAI5zO,EAAK0zO,EAAGG,QAEZ,IAAK7zO,EACH,OAAO4jE,EAAOqlC,KAAK,QAAS,IAAI3iI,MAAM,kCAExCotQ,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KAERxlG,EAAK4xH,kBAAkB9sR,IAC1BywF,EAAOvwG,KAAK8f,GAEV6sB,GACFA,EAAGowO,GAEL,IAAIjrG,EAAKvhE,EAAO+pK,eAChBxoG,EAAGiqG,SAAU,GACTjqG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBACpC57F,EAAOmsK,MAAM5qG,EAAGq6B,cAEnB,CAhCUi0E,CAAe7vK,EAAQwsK,EAAIj9P,EACnC,EAEDxe,KAAKo/Q,eAAgB,EACrBp/Q,KAAKi/Q,cAAe,EACpBj/Q,KAAKk/Q,QAAU,KACfl/Q,KAAKm/Q,WAAa,IACnB,CA4BD,SAASzP,EAAU5vQ,GACjB,KAAME,gBAAgB0vQ,GACpB,OAAO,IAAIA,EAAU5vQ,GAEvBknM,EAAOzoM,KAAKyB,KAAMF,GAElBE,KAAKg/Q,gBAAkB,IAAImxI,EAAerwZ,EAASE,MAGnD,IAAIivG,EAASjvG,KAGbA,KAAKg5Q,eAAe2B,cAAe,EAKnC36Q,KAAKg5Q,eAAe0B,MAAO,EAE3B16Q,KAAKk3J,KAAK,aAAa,WACjBwiB,EAAK2/D,WAAWr5O,KAAKs/Q,QACvBt/Q,KAAKs/Q,QAAO,SAAS7D,GACnBh9Q,EAAKwwG,EAAQwsK,EACd,IAEDh9Q,EAAKwwG,EACR,GACF,CAoDD,SAASxwG,EAAKwwG,EAAQwsK,GACpB,GAAIA,EACF,OAAOxsK,EAAOqlC,KAAK,QAASmnI,GAI9B,IAAIj9G,EAAKvvD,EAAO2pK,eACZmG,EAAK9vK,EAAO+vK,gBAEhB,GAAIxgH,EAAG5/J,OACL,MAAM,IAAI+S,MAAM,8CAElB,GAAIotQ,EAAGE,aACL,MAAM,IAAIttQ,MAAM,kDAElB,OAAOs9F,EAAOvwG,KAAK,KACpB,CA1IDg7K,EAAKxV,SAAWkV,EAAQ,OAGxBM,EAAKxV,SAASwrG,EAAW1oE,GAqEzB0oE,EAAUxlQ,UAAUxL,KAAO,SAAS2oM,EAAOpnL,GAEzC,OADAjgB,KAAKg/Q,gBAAgBI,eAAgB,EAC9Bp4E,EAAO98L,UAAUxL,KAAKH,KAAKyB,KAAMqnM,EAAOpnL,EAChD,EAYDyvP,EAAUxlQ,UAAUgvQ,WAAa,SAAS7xE,EAAOpnL,EAAUorB,GACzD,MAAM,IAAI15B,MAAM,kBACjB,EAED+9P,EAAUxlQ,UAAUk9L,OAAS,SAASC,EAAOpnL,EAAUorB,GACrD,IAAI0zO,EAAK/+Q,KAAKg/Q,gBAId,GAHAD,EAAGG,QAAU7zO,EACb0zO,EAAGI,WAAa93E,EAChB03E,EAAGM,cAAgBp/P,GACd8+P,EAAGE,aAAc,CACpB,IAAIzuG,EAAKxwK,KAAKg5Q,gBACV+F,EAAGK,eACH5uG,EAAGmqG,cACHnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBACjB7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cACjB,CACF,EAKD6kE,EAAUxlQ,UAAUkxQ,MAAQ,SAAS1qQ,GACnC,IAAIquQ,EAAK/+Q,KAAKg/Q,gBAETtlG,EAAK2xH,OAAOtsB,EAAGI,cAAeJ,EAAGG,SAAYH,EAAGE,aAMnDF,EAAGK,eAAgB,GALnBL,EAAGE,cAAe,EAClBj/Q,KAAKk5Q,WAAW6F,EAAGI,WAAYJ,EAAGM,cAAeN,EAAGD,gBAMvD,uCCpKD37G,EAAOx3B,QAAU0qI,EAGjB,IAAIzpI,EAASwsC,EAAAA,OAAAA,OAGbi9F,EAASyJ,cAAgBA,EAIzB,IAAIpmG,EAAON,EAAQ,OACnBM,EAAKxV,SAAWkV,EAAQ,OAGxB,IAAIshD,EAASthD,EAAQ,OAIrB,SAASg3O,EAAS/oN,EAAOpnL,EAAUorB,GACjCrrC,KAAKqnM,MAAQA,EACbrnM,KAAKigB,SAAWA,EAChBjgB,KAAKqnB,SAAWgkB,CACjB,CAED,SAASy0O,EAAchgR,EAASmvG,GAC9B,IAAI+3F,EAAS5tB,EAAQ,OAOjBwxB,GALJ9qM,EAAUA,GAAW,CAAC,GAKJ+qM,cACdglN,EAAa/vZ,EAAQirM,WAAa,GAAK,MAC3C/qM,KAAK6qM,cAAiBD,GAAe,IAARA,EAAaA,EAAMilN,EAIhD7vZ,KAAK+qM,aAAejrM,EAAQirM,WAExB97F,aAAkB+3F,IACpBhnM,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQ0gR,oBAGjDxgR,KAAK6qM,gBAAkB7qM,KAAK6qM,cAE5B7qM,KAAKk+Q,WAAY,EAEjBl+Q,KAAK0gR,QAAS,EAEd1gR,KAAK64Q,OAAQ,EAEb74Q,KAAKk9Q,UAAW,EAKhB,IAAIyD,GAAqC,IAA1B7gR,EAAQ8gR,cACvB5gR,KAAK4gR,eAAiBD,EAKtB3gR,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAKlDj7Q,KAAKpB,OAAS,EAGdoB,KAAK6gR,SAAU,EAGf7gR,KAAK8gR,OAAS,EAMd9gR,KAAK06Q,MAAO,EAKZ16Q,KAAK+gR,kBAAmB,EAGxB/gR,KAAKghR,QAAU,SAASvF,IA+L1B,SAAiBxsK,EAAQwsK,GACvB,IAAI/0N,EAAQuoD,EAAO2pK,eACf8B,EAAOh0N,EAAMg0N,KACbrvO,EAAKqb,EAAMw4N,QAIf,GAdF,SAA4Bx4N,GAC1BA,EAAMm6N,SAAU,EAChBn6N,EAAMw4N,QAAU,KAChBx4N,EAAM9nD,QAAU8nD,EAAMu6N,SACtBv6N,EAAMu6N,SAAW,CAClB,CAOCC,CAAmBx6N,GAEf+0N,GA7BN,SAAsBxsK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,GACzCqvO,EACFjrI,EAAQyuE,UAAS,WACfx3J,EAAMi5N,YACNt0O,EAAGowO,EACJ,KAED/0N,EAAMi5N,YACNt0O,EAAGowO,IAGLxsK,EAAO2pK,eAAewI,cAAe,EACrCnyK,EAAOqlC,KAAK,QAASmnI,EACtB,CAiBG4F,CAAapyK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,OACnC,CAEH,IAAI6xO,EAAWoE,EAAWryK,EAAQvoD,GAE7Bw2N,GACAx2N,EAAMo6N,QACNp6N,EAAMq6N,mBACPr6N,EAAMpO,OAAO15C,QACf4iR,EAAYvyK,EAAQvoD,GAGlBg0N,EACFjrI,EAAQyuE,UAAS,WACfujE,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,EACrC,IAEDo2O,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,EAEvC,CACF,CA1NG21O,CAAQ/xK,EAAQwsK,EACjB,EAGDz7Q,KAAKk/Q,QAAU,KAGfl/Q,KAAKihR,SAAW,EAEhBjhR,KAAKs4C,OAAS,GAIdt4C,KAAK2/Q,UAAY,EAIjB3/Q,KAAK2hR,aAAc,EAGnB3hR,KAAKohR,cAAe,CACrB,CAED,SAAS/K,EAASv2Q,GAChB,IAAIknM,EAAS5tB,EAAQ,OAIrB,KAAMp5K,gBAAgBq2Q,MAAer2Q,gBAAgBgnM,GACnD,OAAO,IAAIqvE,EAASv2Q,GAEtBE,KAAK44Q,eAAiB,IAAIkH,EAAchgR,EAASE,MAGjDA,KAAKsB,UAAW,EAEhBo5N,EAAOn8N,KAAKyB,KACb,CAuHD,SAAS+hR,EAAQ9yK,EAAQvoD,EAAOm7N,EAAQv5P,EAAK++K,EAAOpnL,EAAUorB,GAC5Dqb,EAAMu6N,SAAW34P,EACjBo+B,EAAMw4N,QAAU7zO,EAChBqb,EAAMm6N,SAAU,EAChBn6N,EAAMg0N,MAAO,EACTmH,EACF5yK,EAAO6yK,QAAQz6E,EAAO3gJ,EAAMs6N,SAE5B/xK,EAAOm4F,OAAOC,EAAOpnL,EAAUymC,EAAMs6N,SACvCt6N,EAAMg0N,MAAO,CACd,CAsDD,SAAS+G,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,GACtC6xO,GAUP,SAAsBjuK,EAAQvoD,GACP,IAAjBA,EAAM9nD,QAAgB8nD,EAAMw3N,YAC9Bx3N,EAAMw3N,WAAY,EAClBjvK,EAAOqlC,KAAK,SAEf,CAdG0tI,CAAa/yK,EAAQvoD,GACvBA,EAAMi5N,YACNt0O,IACA81O,EAAYlyK,EAAQvoD,EACrB,CAcD,SAAS86N,EAAYvyK,EAAQvoD,GAG3B,GAFAA,EAAMq6N,kBAAmB,EAErB9xK,EAAO6yK,SAAWp7N,EAAMpO,OAAO15C,OAAS,EAAG,CAG7C,IADA,IAAIq5V,EAAM,GACDpkV,EAAI,EAAGA,EAAI6yC,EAAMpO,OAAO15C,OAAQiV,IACvCokV,EAAIv5V,KAAKgoD,EAAMpO,OAAOzkC,GAAGwT,UAI3Bq/B,EAAMi5N,YACNoC,EAAQ9yK,EAAQvoD,GAAO,EAAMA,EAAM9nD,OAAQ8nD,EAAMpO,OAAQ,IAAI,SAASz5C,GACpE,IAAK,IAAIjB,EAAI,EAAGA,EAAIq6V,EAAIr5V,OAAQhB,IAC9B8oD,EAAMi5N,YACNs4E,EAAIr6V,GAAGiB,EAEV,IAGD6nD,EAAMpO,OAAS,EAChB,KAAM,CAEL,IAASzkC,EAAI,EAAGA,EAAI6yC,EAAMpO,OAAO15C,OAAQiV,IAAK,CAC5C,IAAI6kD,EAAQhS,EAAMpO,OAAOzkC,GACrBwzL,EAAQ3uI,EAAM2uI,MACdpnL,EAAWy4C,EAAMz4C,SACjBorB,EAAKqtB,EAAMrxC,SACXiB,EAAMo+B,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OAQvC,GANAmjR,EAAQ9yK,EAAQvoD,GAAO,EAAOp+B,EAAK++K,EAAOpnL,EAAUorB,GAMhDqb,EAAMm6N,QAAS,CACjBhtQ,IACA,KACD,CACF,CAEGA,EAAI6yC,EAAMpO,OAAO15C,OACnB8nD,EAAMpO,OAASoO,EAAMpO,OAAO3oC,MAAMkE,GAElC6yC,EAAMpO,OAAO15C,OAAS,CACzB,CAED8nD,EAAMq6N,kBAAmB,CAC1B,CAoCD,SAASO,EAAWryK,EAAQvoD,GAC1B,OAAQA,EAAMg6N,QACW,IAAjBh6N,EAAM9nD,SACL8nD,EAAMw2N,WACNx2N,EAAMm6N,OAChB,CAED,SAAStB,EAAUtwK,EAAQvoD,GACpBA,EAAMi7N,cACTj7N,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,aAEf,CAED,SAAS6sI,EAAYlyK,EAAQvoD,GAC3B,IAAI27N,EAAOf,EAAWryK,EAAQvoD,GAS9B,OARI27N,IACsB,IAApB37N,EAAMi5N,WACRJ,EAAUtwK,EAAQvoD,GAClBA,EAAMw2N,UAAW,EACjBjuK,EAAOqlC,KAAK,WAEZirI,EAAUtwK,EAAQvoD,IAEf27N,CACR,CAvaD3oG,EAAKxV,SAASmyG,EAAU37C,GAiHxB27C,EAASnsQ,UAAUovO,KAAO,WACxBt5O,KAAKs0I,KAAK,QAAS,IAAI3iI,MAAM,8BAC9B,EAiCD0kQ,EAASnsQ,UAAUw4L,MAAQ,SAAS2E,EAAOpnL,EAAUorB,GACnD,IAAIqb,EAAQ1mD,KAAK44Q,eACb5vD,GAAM,EAsBV,OApBItvC,EAAK2/D,WAAWp5N,KAClBorB,EAAKprB,EACLA,EAAW,MAGTy5J,EAAKopB,SAASuE,GAChBpnL,EAAW,SACHA,IACRA,EAAWymC,EAAMu0N,iBAEdvhG,EAAK2/D,WAAWhuM,KACnBA,EAAK,WAAa,GAEhBqb,EAAMmyN,MA/CZ,SAAuB5pK,EAAQvoD,EAAOrb,GACpC,IAAIowO,EAAK,IAAI9pQ,MAAM,mBAEnBs9F,EAAOqlC,KAAK,QAASmnI,GACrBhsI,EAAQyuE,UAAS,WACf7yK,EAAGowO,EACJ,GACF,CAyCG+G,CAAcxiR,KAAM0mD,EAAOrb,GAlC/B,SAAoB4jE,EAAQvoD,EAAO2gJ,EAAOh8J,GACxC,IAAI48D,GAAQ,EACZ,IAAKyxE,EAAKopB,SAASuE,KACd3tB,EAAKy9D,SAAS9vC,KACd3tB,EAAK4xH,kBAAkBjkG,KACvB3gJ,EAAMqkJ,WAAY,CACrB,IAAI0wE,EAAK,IAAI18Q,UAAU,mCACvBkwG,EAAOqlC,KAAK,QAASmnI,GACrBhsI,EAAQyuE,UAAS,WACf7yK,EAAGowO,EACJ,IACDxzK,GAAQ,CACT,CACD,OAAOA,CACR,CAqBUw6K,CAAWziR,KAAM0mD,EAAO2gJ,EAAOh8J,KACtCqb,EAAMi5N,YACN32D,EAuCJ,SAAuB/5G,EAAQvoD,EAAO2gJ,EAAOpnL,EAAUorB,GACrDg8J,EAbF,SAAqB3gJ,EAAO2gJ,EAAOpnL,IAC5BymC,EAAMqkJ,aACiB,IAAxBrkJ,EAAMk6N,eACNlnG,EAAKy9D,SAAS9vC,KAChBA,EAAQ,IAAIz6D,EAAOy6D,EAAOpnL,IAE5B,OAAOonL,CACR,CAMSs7E,CAAYj8N,EAAO2gJ,EAAOpnL,GAC9By5J,EAAKopB,SAASuE,KAChBpnL,EAAW,UACb,IAAIqI,EAAMo+B,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OAEvC8nD,EAAM9nD,QAAU0pB,EAEhB,IAAI0gM,EAAMtiK,EAAM9nD,OAAS8nD,EAAMmkJ,cAE1Bme,IACHtiK,EAAMw3N,WAAY,GAEhBx3N,EAAMm6N,SAAWn6N,EAAMo6N,OACzBp6N,EAAMpO,OAAO55C,KAAK,IAAI0xZ,EAAS/oN,EAAOpnL,EAAUorB,IAEhD02O,EAAQ9yK,EAAQvoD,GAAO,EAAOp+B,EAAK++K,EAAOpnL,EAAUorB,GAEtD,OAAO29K,CACR,CA1DS45D,CAAc5iR,KAAM0mD,EAAO2gJ,EAAOpnL,EAAUorB,IAG7C29K,CACR,EAEDqtD,EAASnsQ,UAAU24Q,KAAO,WACZ7iR,KAAK44Q,eAEXkI,QACP,EAEDzK,EAASnsQ,UAAU44Q,OAAS,WAC1B,IAAIp8N,EAAQ1mD,KAAK44Q,eAEblyN,EAAMo6N,SACRp6N,EAAMo6N,SAEDp6N,EAAMm6N,SACNn6N,EAAMo6N,QACNp6N,EAAMw2N,UACNx2N,EAAMq6N,mBACPr6N,EAAMpO,OAAO15C,QACf4iR,EAAYxhR,KAAM0mD,GAEvB,EA0KD2vN,EAASnsQ,UAAUk9L,OAAS,SAASC,EAAOpnL,EAAUorB,GACpDA,EAAG,IAAI15B,MAAM,mBAEd,EAED0kQ,EAASnsQ,UAAU43Q,QAAU,KAE7BzL,EAASnsQ,UAAUmrC,IAAM,SAASgyJ,EAAOpnL,EAAUorB,GACjD,IAAIqb,EAAQ1mD,KAAK44Q,eAEbl/F,EAAK2/D,WAAWhyC,IAClBh8J,EAAKg8J,EACLA,EAAQ,KACRpnL,EAAW,MACFy5J,EAAK2/D,WAAWp5N,KACzBorB,EAAKprB,EACLA,EAAW,MAGRy5J,EAAK4xH,kBAAkBjkG,IAC1BrnM,KAAK0iM,MAAM2E,EAAOpnL,GAGhBymC,EAAMo6N,SACRp6N,EAAMo6N,OAAS,EACf9gR,KAAK8iR,UAIFp8N,EAAMg6N,QAAWh6N,EAAMw2N,UAgC9B,SAAqBjuK,EAAQvoD,EAAOrb,GAClCqb,EAAMg6N,QAAS,EACfS,EAAYlyK,EAAQvoD,GAChBrb,IACEqb,EAAMw2N,SACRztI,EAAQyuE,SAAS7yK,GAEjB4jE,EAAOioD,KAAK,SAAU7rH,IAE1Bqb,EAAMmyN,OAAQ,CACf,CAzCGmK,CAAYhjR,KAAM0mD,EAAOrb,EAC5B,yBCpbD83H,EAAOx3B,QAAU,EAAjBw3B,2CCEA,IAAIktP,EAAOj3O,EAAQ,OACft7K,EAAUs7K,EAAQ,OAClBigE,EAAajgE,EAAQ,OACrBu4L,EAAev4L,EAAQ,OAG3BjW,EAAOx3B,QAAU,SAAU7rI,GAEvB,IAAIwwZ,EAAY,wBAEhB,IAAK3+C,EAAa7xW,GACd,MAAM,IAAIf,UAAUuxZ,GAGxB,IAAKj3K,EAAWv5O,EAAQ6oI,SACpB,MAAM,IAAI5pI,UAAUuxZ,EAAY,YAGpC,IAAKxyZ,EAAQgC,EAAQywZ,SAAqC,IAA1BzwZ,EAAQywZ,OAAO3xZ,OAC3C,MAAM,IAAIG,UAAUuxZ,EAAY,WAIpC,IAAIE,EAAWH,EAAK,CAChBI,YAAa3wZ,EAAQ2wZ,YACrBC,iBAAkB5wZ,EAAQ4wZ,mBAM1BC,EAAe7wZ,EAAQ6oI,QAAQz6B,QAAQhkG,UAAUklD,KAErDtvD,EAAQ6oI,QAAQz6B,QAAQhkG,UAAUklD,KAAO,SAA4BwhW,GASjE,OANIj/C,EAAai/C,IAAoB5wZ,KAAKk8P,WAAcl8P,KAAK6wZ,aAEzDL,EAASphW,KAAK7wD,KAAKyB,KAAM4wZ,GAItBD,EAAa3uZ,MAAMhC,KAAMmC,UAEnC,EAMD,IADA,IAAI2uZ,GAAc,EACRlzZ,EAAI,EAAGA,EAAIkC,EAAQywZ,OAAO3xZ,OAAQhB,GAAG,EAAI,CAE/C,IAAIo7F,EAASl5F,EAAQywZ,OAAO3yZ,GAE5B4yZ,EAAqB,YAAXx3T,EAAuB,gBAAkB,uBAC/Cl5F,EAAQ6oI,QAAQz6B,QAAQhkG,UACxB,KACA,cACA8uF,GAGW,SAAXA,IACA83T,GAAc,EAGrB,CAED,IAAKA,EACD,MAAM,IAAIn/Y,MAAM,uBAGvB,kCCtED,SAASo/Y,EAAa54J,EAAOr4P,EAASguG,GAElC9tG,KAAKsa,KAAO,eACZta,KAAKq3F,QAAU5pD,OAAO0qN,GACtBn4P,KAAKm4P,MAAQA,EACbn4P,KAAK+I,MAAQovP,EACbn4P,KAAKF,QAAUA,EACfE,KAAK8tG,SAAWA,EAEZn8F,MAAM2yM,mBACN3yM,MAAM2yM,kBAAkBtkN,KAG/B,CAKD,SAASgxZ,EAAgBlpF,EAAYp5N,EAAM5uG,EAASguG,GAEhD9tG,KAAKsa,KAAO,kBACZta,KAAK8nU,WAAaA,EAClB9nU,KAAKq3F,QAAUywO,EAAa,OAAS9mT,MAAQA,KAAKE,UAAYF,KAAKE,UAAUwtF,GAAQA,GACrF1uG,KAAK+I,MAAQ2lG,EACb1uG,KAAKF,QAAUA,EACfE,KAAK8tG,SAAWA,EAEZn8F,MAAM2yM,mBACN3yM,MAAM2yM,kBAAkBtkN,KAG/B,CAKD,SAASixZ,EAAe94J,EAAOr4P,EAASguG,GAEpC9tG,KAAKsa,KAAO,iBACZta,KAAKq3F,QAAU5pD,OAAO0qN,GACtBn4P,KAAKm4P,MAAQA,EACbn4P,KAAK+I,MAAQovP,EACbn4P,KAAKF,QAAUA,EACfE,KAAK8tG,SAAWA,EAEZn8F,MAAM2yM,mBACN3yM,MAAM2yM,kBAAkBtkN,KAG/B,CAnCD+wZ,EAAa7mZ,UAAYhJ,OAAO2J,OAAO8G,MAAMzH,WAC7C6mZ,EAAa7mZ,UAAUU,YAAcmmZ,EAiBrCC,EAAgB9mZ,UAAYhJ,OAAO2J,OAAO8G,MAAMzH,WAChD8mZ,EAAgB9mZ,UAAUU,YAAcomZ,EAiBxCC,EAAe/mZ,UAAYhJ,OAAO2J,OAAO8G,MAAMzH,WAC/C+mZ,EAAe/mZ,UAAUU,YAAcqmZ,EAGvC9tP,EAAOx3B,QAAU,CACbolR,aAAcA,EACdC,gBAAiBA,EACjBC,eAAgBA,uCC1DpB,IAAI5vV,EAAS+3G,EAAQ,OACjBigE,EAAajgE,EAAQ,OACrBu4L,EAAev4L,EAAQ,OACvB+9D,EAAW/9D,EAAQ,OACnB+3D,EAAc/3D,EAAQ,OAG1BjW,EAAOx3B,QAAU,SAAU7rI,GAEvB,IAAIwwZ,EAAY,wBAEhB,IAAK3+C,EAAa7xW,GACd,MAAM,IAAIf,UAAUuxZ,GAGxB,IAAKj3K,EAAWv5O,EAAQ2wZ,aACpB,MAAM,IAAI1xZ,UAAUuxZ,EAAY,gBAGpC,IAAKn/K,EAAYrxO,EAAQ4wZ,oBAAsBr3K,EAAWv5O,EAAQ4wZ,kBAC9D,MAAM,IAAI3xZ,UAAUuxZ,EAAY,gBAGpC,IAAIG,EAAc3wZ,EAAQ2wZ,YACtBC,EAAmB5wZ,EAAQ4wZ,iBAG3BF,EAAW,CAEfA,KAAgB,SAAUI,GAEtB,IAAIznZ,EAAOnJ,KAEXmJ,EAAK0nZ,YAAc,IAAIJ,GAAY,SAAUhoZ,EAASC,GAClDS,EAAK+nZ,YAAczoZ,EACnBU,EAAKgoZ,WAAazoZ,EACdgoZ,GACAA,EAAiB1uZ,MAAMmH,EAAMhH,UAEpC,IAEDgH,EAAKioZ,iBAAmBR,EAAevpY,SACvCupY,EAAevpY,SAAWle,EAAKke,SAAW,SAAqBxoB,EAAKivG,EAAUY,GAC1E8hT,EAASnpY,SAAS9oB,KAAK4K,EAAMtK,EAAKivG,EAAUY,EAC/C,EAEGyoI,EAASy5K,EAAe53T,UACxB43T,EAAe53T,OAAS43T,EAAe53T,OAAOt3B,eAGlDkvV,EAAe/oZ,UAAY+oZ,EAAe/oZ,WAAa2oZ,EAASa,uBAAuBT,EAAe53T,QAEtG7vF,EAAKmoZ,YAAcV,EACnBznZ,EAAKmoZ,YAAYxzC,QAAmC,IAA1B8yC,EAAe9yC,OACzC30W,EAAKmoZ,YAAYC,yBAAqE,IAA3CX,EAAeW,wBAC1DpoZ,EAAKmoZ,YAAYE,kBAAuD,IAApCZ,EAAeY,gBAEtD,EAEDhB,uBAAkC,CAC9BiB,KAAM,SAAU/iT,EAAMZ,EAAUyjT,GAC5B,OAAOA,EAA0BzjT,EAAWA,EAASK,OACxD,GAGLqiT,SAAoB,SAAU3xZ,EAAKivG,EAAUY,GAEzC,IAAIvlG,EAAOnJ,KAEP0xZ,GAA6B,EAAOC,EAAkB,KAE1D,GAAIt4K,EAAWlwO,EAAKioZ,kBAChB,IACIjoZ,EAAKioZ,iBAAiBpvZ,MAAMmH,EAAMhH,UAIrC,CAHC,MAAO6E,GACL0qZ,GAA6B,EAC7BC,EAAkB3qZ,CACrB,CAGL,IAAI4qZ,GAAS/yZ,GAAO,KAAK4e,KAAK,GAAKqwF,EAASg6N,YA8C5C,GA5CIjpU,EAEAsK,EAAKgoZ,WAAW,IAAI9vV,EAAO0vV,aAAalyZ,EAAKsK,EAAKmoZ,YAAaxjT,IAExD3kG,EAAKmoZ,YAAYxzC,SAAW8zC,EAE/Bv4K,EAAWlwO,EAAKmoZ,YAAYzpZ,aAAoD,IAAtCsB,EAAKmoZ,YAAYE,iBAE1D,IAAIf,GAAY,SAAUhoZ,GACvBA,EAAQU,EAAKmoZ,YAAYzpZ,UAAU6mG,EAAMZ,EAAU3kG,EAAKmoZ,YAAYC,yBACvE,IACItoZ,MAAK,SAAU4oZ,GACZ1oZ,EAAKgoZ,WAAW,IAAI9vV,EAAO2vV,gBAAgBljT,EAASg6N,WAAYp5N,EAAMvlG,EAAKmoZ,YAAaO,GAC3F,IACA1hT,OAAM,SAAU2hT,GACb3oZ,EAAKgoZ,WAAW,IAAI9vV,EAAO4vV,eAAea,EAAc3oZ,EAAKmoZ,YAAaxjT,GAC7E,IAGL3kG,EAAKgoZ,WAAW,IAAI9vV,EAAO2vV,gBAAgBljT,EAASg6N,WAAYp5N,EAAMvlG,EAAKmoZ,YAAaxjT,IAKxFurI,EAAWlwO,EAAKmoZ,YAAYzpZ,aAAe+pZ,IAA+C,IAAtCzoZ,EAAKmoZ,YAAYE,kBAEpE,IAAIf,GAAY,SAAUhoZ,GACvBA,EAAQU,EAAKmoZ,YAAYzpZ,UAAU6mG,EAAMZ,EAAU3kG,EAAKmoZ,YAAYC,yBACvE,IACItoZ,MAAK,SAAU4oZ,GACZ1oZ,EAAK+nZ,YAAYW,EACpB,IACA1hT,OAAM,SAAU2hT,GACb3oZ,EAAKgoZ,WAAW,IAAI9vV,EAAO4vV,eAAea,EAAc3oZ,EAAKmoZ,YAAaxjT,GAC7E,IAEE3kG,EAAKmoZ,YAAYC,wBACxBpoZ,EAAK+nZ,YAAYpjT,GAEjB3kG,EAAK+nZ,YAAYxiT,GAKrBgjT,EACA,MAAMC,CAGb,EAEDnB,oBAA+B,SAAUuB,EAAUC,EAAQC,EAAoBC,EAAgBC,GAI3F,IAFAA,EAAWA,GAAYD,KAEPH,EACZ,MAAM,IAAIpgZ,MAAM,4BAA8BwgZ,EAAW,KAG7DJ,EAASI,GAAY,WACjB,IAAIhpZ,EAAO6oZ,GAAUhyZ,KACrB,OAAOmJ,EAAK8oZ,GAAoBC,GAAgBlwZ,MAAMmH,EAAK8oZ,GAAqB9vZ,UACnF,CAEJ,EAEDquZ,cAAyB,SAAUuB,EAAUC,EAAQC,EAAoBE,GAIrE,IAFAA,EAAWA,GAAY,aAEPJ,EACZ,MAAM,IAAIpgZ,MAAM,4BAA8BwgZ,EAAW,KAG7DJ,EAASI,GAAY,WAEjB,OADWH,GAAUhyZ,MACTiyZ,EACf,CAEJ,GAED,OAAOzB,CAEV,iDCpKD,IAAI4B,EAAWh5O,EAAAA,OAAAA,oBACXi5O,EAAYj5O,EAAQ,OACpBk5O,EAAkBl5O,EAAQ,OAE9B,IAGI,IAAIzwC,EAAU2pR,EAAgBl5O,EAAAA,GAAe,WACzC,OAAOA,EAAQ,MAClB,IACD,WACIA,EAAQ,MACX,GAAEjW,EASN,CAPC,MAAOtkK,GAEL,IAAI0zZ,EAAMn5O,EAAAA,OAAAA,IAIV,MAFA3kK,QAAQ1L,MAAMwpZ,EAAM,MAAQA,EAAM,oEAAsEA,EAAM,gDAAkDA,EAAM,8BAAgCA,EAAM,iCAAmCA,EAAM,MAAQA,GAEvP1zZ,CACT,CAEDuzZ,EAAS7rN,OAAO,CAACujD,cAAc,IAE/BuoK,EAAU,CACN1pR,QAASA,EACT8nR,YAAa2B,EACb7B,OAAQ,CACJ,OACA,QACA,UACA,SACA,WAGJG,iBAAkB,SAAUjoZ,EAASC,EAAQ0pP,GACzC,IAAIjpP,EAAOnJ,KACXoyP,GAAS,WACLjpP,EAAKmoO,OACR,GACJ,IAGL3oG,EAAQ6pR,QAAU,WACd,MAAM,IAAI7gZ,MAAM,oJACnB,EAGDwxJ,EAAOx3B,QAAUhD,sCCpBjB,IASI0gP,EATAtoC,EAAM3nK,EAAQ,MACdq5O,EAAWr5O,EAAAA,OAAAA,MACXM,EAAON,EAAQ,OACfs5O,EAAYt5O,EAAQ,OACpBu5O,EAAQv5O,EAAAA,OAAAA,EACRw5O,EAAoBx5O,EAAAA,OAAAA,EACpBy5O,EAAYz5O,EAAAA,OAAAA,EACZ84D,EAAU94D,EAAQ,OAGtB,IACEiwM,EAAWjwM,EAAQ,MAGpB,CAFC,MAAMpyK,GACNyN,QAAQC,KAAK,iFACd,CAID,IAAIo+Y,EAAgB,gDAEhBC,EAAgB,cAKhBC,EAAc,CAAC,KAAM,KAAM,MAI3BC,EAAa,wBAIbC,EAAa,6CAEbC,EAAe,CACjBC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EACvCC,IAAI,EAAGC,IAAI,EAAG1yC,IAAI,EAAGh8J,IAAI,EAAG2uM,IAAI,GAAI93K,IAAI,IAEtC+3K,EAAe,CACjB,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAEhEC,EAAa,CACf,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAGlCC,EAAW,aAaf,SAASC,EAAYzmR,EAAO0mR,EAAWC,EAAWC,GAEhD,IADA,IAAI3oY,EAAQ,EACLA,EAAQ+hH,EAAM3uI,QAAQ,CAC3B,IAAIiV,EAAI05H,EAAMsiB,WAAWrkI,GAEzB,GAAI3X,GAAK,IAAQA,GAAK,GACpB,MAEF2X,GACD,CAGD,OAAIA,EAAQyoY,GAAazoY,EAAQ0oY,EACxB,KAGJC,GAAc3oY,GAAS+hH,EAAM3uI,OAI3B0d,SAASixH,EAAMonC,OAAO,EAAEnpJ,GAAQ,IAH9B,IAIV,CAED,SAAS4oY,EAAU7mR,GACjB,IAAI9qI,EAAQ8qI,EAAM5rE,MAAM,KACpByS,EAAS,CAAC,EAAE,EAAE,GAQlB,GAAqB,IAAjB3xE,EAAM7D,OACR,OAAO,KAGT,IAAK,IAAIhB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1B,IAAIu2Z,EAAmB,GAALv2Z,EACdygK,EAAM21P,EAAYvxZ,EAAM7E,GAAI,EAAG,EAAGu2Z,GACtC,GAAY,OAAR91P,EACF,OAAO,KAETjqF,EAAOx2E,GAAKygK,CACb,CAED,OAAOjqF,CACR,CAED,SAASigV,EAAW9mR,GAClBA,EAAQ9/F,OAAO8/F,GAAOonC,OAAO,EAAE,GAAGpkK,cAClC,IAAI8tJ,EAAM80P,EAAa5lR,GACvB,OAAO8wB,GAAO,EAAIA,EAAM,IACzB,CAKD,SAASi2P,EAAU1iP,GACjB,GAAKA,EAAL,CAQA,IAAI2iP,EAAS3iP,EAAIjwG,MAAMuxV,GACvB,GAAKqB,EAAL,CAWA,IAPA,IAAIlzO,EAAO,KACPC,EAAS,KACTC,EAAS,KACTizO,EAAa,KACbtzO,EAAQ,KACRD,EAAO,KAEFrjL,EAAE,EAAGA,EAAE22Z,EAAO31Z,OAAQhB,IAAK,CAClC,IAKIw2E,EALAm5D,EAAQgnR,EAAO32Z,GAAG2jE,OACtB,GAAKgsE,EAAM3uI,OAYI,OAAX2iL,IACFntG,EAASggV,EAAU7mR,KAEjB8zC,EAAOjtG,EAAO,GACdktG,EAASltG,EAAO,GAChBmtG,EAASntG,EAAO,IAUD,OAAfogV,GAGa,QADfpgV,EAAS4/U,EAAYzmR,EAAO,EAAG,GAAG,IAYtB,OAAV2zC,GAEa,QADf9sG,EAASigV,EAAW9mR,IAYT,OAAT0zC,GAGa,QADf7sG,EAAS4/U,EAAYzmR,EAAO,EAAG,GAAG,OAEhC0zC,EAAO7sG,IAOK,IAAM6sG,GAAQ,GACxBA,GAAQ,KACCA,GAAQ,GAAKA,GAAQ,KAC9BA,GAAQ,MAxBVC,EAAQ9sG,EAbRogV,EAAapgV,CAyClB,CAeD,KACiB,OAAfogV,GAAiC,OAAVtzO,GAA2B,OAATD,GAA4B,OAAXM,GAC1DizO,EAAa,GAAKA,EAAa,IAC/BvzO,EAAO,MACPI,EAAO,IACPC,EAAS,IACTC,EAAS,IAKX,OAAO,IAAI/8K,KAAKA,KAAKyhN,IAAIhlC,EAAMC,EAAOszO,EAAYnzO,EAAMC,EAAQC,GA7G/D,CATA,CAuHF,CAED,SAASkzO,EAAWzzO,GAClB,IAAIzoK,EAAIyoK,EAAK6lC,aAActuM,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EACjD,IAAIG,EAAIsoK,EAAK8lC,cAAepuM,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EAClD,IAAI/H,EAAIqwK,EAAK+lC,gBAAiBp2M,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EACpD,IAAI0C,EAAI2tK,EAAKgmC,gBACb,OAD8B3zM,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EAC7CygZ,EAAW9yO,EAAKsiL,aAAe,KACpC/qV,EAAE,IAAKs7Y,EAAa7yO,EAAK4lC,eAAgB,IAAK5lC,EAAK2lC,iBAAkB,IACrEjuM,EAAE,IAAI/H,EAAE,IAAI0C,EAAE,MACjB,CAGD,SAASqhZ,EAAgB9iP,GACvB,OAAW,MAAPA,EACK,MAETA,EAAMA,EAAIrwG,OAAOoB,QAAQ,MAAM,IAG3B0mT,GAAY,mBAAmB5rW,KAAKm0J,KACtCA,EAAMy3M,EAASxD,QAAQj0M,IAGlBA,EAAIrhK,cACZ,CAGD,SAASokZ,EAAY/iP,EAAKgjP,EAAQC,GAChC,GAAW,MAAPjjP,GAAyB,MAAVgjP,EACjB,OAAO,KAYT,IAVqB,IAAjBC,IACFjjP,EAAM8iP,EAAgB9iP,GACtBgjP,EAASF,EAAgBE,IAQvBhjP,GAAOgjP,EACT,OAAO,EAMT,GAAI7zE,EAAI+zE,KAAKljP,GACX,OAAO,EAIT,IAAIkxL,EAAMlxL,EAAI9uK,QAAQ8xZ,GACtB,QAAI9xD,GAAO,KAMPlxL,EAAIhzK,SAAWg2Z,EAAOh2Z,OAASkkW,GAMP,MAAxBlxL,EAAI+C,OAAOmuL,EAAI,EAAE,GAKtB,CAWD,SAASvnC,EAAYp7P,GAGnB,IAAKA,GAA6B,MAArBA,EAAKw0G,OAAO,EAAE,GACzB,MAAO,IAKT,GAAa,MAATx0G,EACF,OAAOA,EAGT,IAAI40V,EAAa50V,EAAKoyC,YAAY,KAClC,OAAmB,IAAfwiT,EACK,IAKF50V,EAAKxwD,MAAM,EAAGolZ,EACtB,CAaD,SAASC,EAAgBC,EAAYC,GAGnC,IAYIC,EAAYC,EAZZC,GAFJJ,EAZF,SAAwBrjP,GACtB,IAAK,IAAI/gK,EAAI,EAAGA,EAAImiZ,EAAYp0Z,OAAQiS,IAAK,CAC3C,IAAIykZ,EAAgB1jP,EAAI9uK,QAAQkwZ,EAAYniZ,KACrB,IAAnBykZ,IACF1jP,EAAMA,EAAI+C,OAAO,EAAE2gP,GAEtB,CAED,OAAO1jP,CACR,CAGc2jP,CAAeN,IAEHnyZ,QAAQ,KACjC,GAAIoyZ,EACc,IAAZG,IAEFA,GADAJ,EAAaA,EAAWtgP,OAAO,IACV7xK,QAAQ,WAG/B,GAAIuyZ,GAAW,EACb,OAaJ,GARIA,GAAW,GACbF,EAAa,GACbC,EAAcH,EAAW1zV,SAEzB4zV,EAAaF,EAAWtgP,OAAO,EAAG0gP,GAAS9zV,OAC3C6zV,EAAcH,EAAWtgP,OAAO0gP,EAAQ,GAAG9zV,SAGzCwxV,EAAct1Y,KAAK03Y,KAAepC,EAAct1Y,KAAK23Y,GAAzD,CAIA,IAAIvhZ,EAAI,IAAI2hZ,EAGZ,OAFA3hZ,EAAE5S,IAAMk0Z,EACRthZ,EAAElV,MAAQy2Z,EACHvhZ,CALN,CAMF,CAED,SAASoN,EAAM2wJ,EAAK9xK,GACbA,GAA8B,kBAAZA,IACrBA,EAAU,CAAC,GAKb,IAAI21Z,GAHJ7jP,EAAMA,EAAIrwG,QAGUz+D,QAAQ,KAExB+Q,EAAImhZ,GADyB,IAAfS,EAAoB7jP,EAAMA,EAAI+C,OAAO,EAAG8gP,KACpB31Z,EAAQ6lJ,OAC9C,GAAK9xI,EAAL,CAIA,IAAmB,IAAf4hZ,EACF,OAAO5hZ,EAMT,IAAI6hZ,EAAW9jP,EAAIjiK,MAAM8lZ,EAAY,GAAGl0V,OAIxC,GAAwB,IAApBm0V,EAAS92Z,OACX,OAAOiV,EAYT,IADA,IAAI8hZ,EAAaD,EAAS/zV,MAAM,KACzBg0V,EAAW/2Z,QAAQ,CACxB,IAAIg3Z,EAAKD,EAAWv+T,QAAQ71B,OAC5B,GAAkB,IAAdq0V,EAAGh3Z,OAAP,CAGA,IACIi3Z,EAAQC,EADRC,EAASH,EAAG9yZ,QAAQ,KAiBxB,QAdgB,IAAZizZ,GACFF,EAASD,EACTE,EAAW,OAEXD,EAASD,EAAGjhP,OAAO,EAAEohP,GACrBD,EAAWF,EAAGjhP,OAAOohP,EAAO,IAG9BF,EAASA,EAAOt0V,OAAOhxD,cAEnBulZ,IACFA,EAAWA,EAASv0V,QAGfs0V,GACP,IAAK,UACH,GAAIC,EAAU,CACZ,IAAIpjZ,EAAM4hZ,EAAUwB,GAGhBpjZ,IAGFmB,EAAEgjL,QAAUnkL,EAEf,CACD,MAEF,IAAK,UACH,GAAIojZ,GAIE,aAAar4Y,KAAKq4Y,GAAW,CAC/B,IAAI74Y,EAAQX,SAASw5Y,EAAU,IAG/BjiZ,EAAEmiZ,UAAU/4Y,EACb,CAEH,MAEF,IAAK,SAGH,GAAI64Y,EAAU,CAGZ,IAAI/6Q,EAAS+6Q,EAASv0V,OAAOoB,QAAQ,MAAO,IACxCo4E,IAEFlnI,EAAEknI,OAASA,EAAOxqI,cAErB,CACD,MAEF,IAAK,OAWHsD,EAAEssD,KAAO21V,GAA4B,MAAhBA,EAAS,GAAaA,EAAW,KACtD,MAEF,IAAK,SAMHjiZ,EAAE+jO,QAAS,EACX,MAEF,IAAK,WACH/jO,EAAEoiZ,UAAW,EACb,MAEF,QACEpiZ,EAAEg9B,WAAah9B,EAAEg9B,YAAc,GAC/Bh9B,EAAEg9B,WAAWnyC,KAAKk3Z,GAzFnB,CA4FF,CAED,OAAO/hZ,CA5HN,CA6HF,CAGD,SAASqiZ,EAAUtkP,GACjB,IAAI5wK,EACJ,IACEA,EAAMggB,KAAKC,MAAM2wJ,EAGlB,CAFC,MAAO5qK,GACP,OAAOA,CACR,CACD,OAAOhG,CACR,CAED,SAASylK,EAASmL,GAChB,IAAKA,EACH,OAAO,KAGT,IAAI5wK,EACJ,GAAmB,kBAAR4wK,GAET,IADA5wK,EAAMk1Z,EAAUtkP,cACGjgK,MACjB,OAAO,UAIT3Q,EAAM4wK,EAIR,IADA,IAAI/9J,EAAI,IAAI2hZ,EACH53Z,EAAE,EAAGA,EAAE43Z,EAAOW,uBAAuBv3Z,OAAQhB,IAAK,CACzD,IAAIsgJ,EAAOs3Q,EAAOW,uBAAuBv4Z,QACvByL,IAAdrI,EAAIk9I,IACJl9I,EAAIk9I,KAAUs3Q,EAAOtrZ,UAAUg0I,KAKtB,YAATA,GACS,aAATA,GACS,iBAATA,EAEgB,OAAdl9I,EAAIk9I,GACNrqI,EAAEqqI,GAAQ,KAEVrqI,EAAEqqI,GAAqB,YAAbl9I,EAAIk9I,GACZ,WAAa,IAAI15I,KAAKxD,EAAIk9I,IAG9BrqI,EAAEqqI,GAAQl9I,EAAIk9I,GAEjB,CAED,OAAOrqI,CACR,CAWD,SAASuiZ,EAActsZ,EAAE8J,GACvB,IAAIyuJ,EAAM,EAGNg0P,EAAWvsZ,EAAEq2D,KAAOr2D,EAAEq2D,KAAKvhE,OAAS,EAGxC,OAAY,KADZyjK,GADezuJ,EAAEusD,KAAOvsD,EAAEusD,KAAKvhE,OAAS,GACvBy3Z,IASL,KADZh0P,GAFYv4J,EAAEwsZ,SAAWxsZ,EAAEwsZ,SAAS1vL,UAAYmtL,IACpCngZ,EAAE0iZ,SAAW1iZ,EAAE0iZ,SAAS1vL,UAAYmtL,IALvC1xP,EAYTA,EAAMv4J,EAAEysZ,cAAgB3iZ,EAAE2iZ,aAG3B,CAwBD,SAASC,EAAiBv3Y,GACxB,GAAIA,aAAe/d,OACjB,OAAO+d,EAIT,IACEA,EAAM+uN,UAAU/uN,EAIjB,CAFD,MAAMpgB,GAEL,CAED,OAAO4zZ,EAASxzY,EACjB,CAED,SAASu2Y,EAAO11Z,GACdA,EAAUA,GAAW,CAAC,EAEtBoB,OAAOQ,KAAK5B,GAASuC,SAAQ,SAAS67I,GAChCs3Q,EAAOtrZ,UAAU6jK,eAAe7vB,IAChCs3Q,EAAOtrZ,UAAUg0I,KAAUp+I,EAAQo+I,IACd,MAArBA,EAAKy2B,OAAO,EAAE,KAEhB30K,KAAKk+I,GAAQp+I,EAAQo+I,GAExB,GAAEl+I,MAEHA,KAAKs2Z,SAAWt2Z,KAAKs2Z,UAAY,IAAI9xZ,KAGrCtD,OAAOC,eAAenB,KAAM,gBAAiB,CAC3CqB,cAAc,EACdD,YAAY,EACZE,UAAU,EACV3C,QAAS62Z,EAAOiB,gBAEnB,CAoQD,SAASC,EAAUC,EAAO72Z,GACD,mBAAZA,EACTA,EAAU,CAAC82Z,qBAAsB92Z,GACb,MAAXA,IACTA,EAAU,CAAC,GAEuB,MAAhCA,EAAQ82Z,uBACV52Z,KAAK42Z,qBAAuB92Z,EAAQ82Z,sBAEb,MAArB92Z,EAAQo1Z,YACVl1Z,KAAK62Z,gBAAkB/2Z,EAAQo1Z,WAG5ByB,IACHA,EAAQ,IAAI/D,GAEd5yZ,KAAK22Z,MAAQA,CACd,CAnRDnB,EAAOiB,eAAiB,EAExBjB,EAAOv0Y,MAAQA,EACfu0Y,EAAO/uP,SAAWA,EAElB+uP,EAAOtrZ,UAAUjJ,IAAM,GACvBu0Z,EAAOtrZ,UAAUvL,MAAQ,GAGzB62Z,EAAOtrZ,UAAU2sL,QAAU,WAC3B2+N,EAAOtrZ,UAAUomU,OAAS,KAC1BklF,EAAOtrZ,UAAU6wI,OAAS,KAC1By6Q,EAAOtrZ,UAAUi2D,KAAO,KACxBq1V,EAAOtrZ,UAAU0tO,QAAS,EAC1B49K,EAAOtrZ,UAAU+rZ,UAAW,EAC5BT,EAAOtrZ,UAAU2mC,WAAa,KAG9B2kX,EAAOtrZ,UAAU4sZ,SAAW,KAC5BtB,EAAOtrZ,UAAU6sZ,cAAgB,KACjCvB,EAAOtrZ,UAAUosZ,SAAW,KAC5Bd,EAAOtrZ,UAAU8sZ,aAAe,KAChC91Z,OAAOC,eAAeq0Z,EAAOtrZ,UAAW,gBAAiB,CACvD7I,cAAc,EACdD,YAAY,EACZE,UAAU,EACV3C,MAAO,IAGT62Z,EAAOW,uBAAyBj1Z,OAAOQ,KAAK8zZ,EAAOtrZ,WAChDrI,QAAO,SAASq8I,GACf,QACEs3Q,EAAOtrZ,UAAUg0I,aAAiBl0I,UACzB,kBAATk0I,GACqB,MAArBA,EAAKy2B,OAAO,EAAE,GAEjB,IAEH6gP,EAAOtrZ,UAAU28J,QAAU,WACzB,IAAIpiK,EAAMD,KAAKC,MACf,MAAO,WAAWzE,KAAKsK,WACrB,eAAgC,MAAjBtK,KAAK82Z,SAAmB92Z,KAAK82Z,SAAW,KACvD,WAAW92Z,KAAKg3Z,aAAgBvyZ,EAAIzE,KAAKg3Z,aAAapwL,UAAW,KAAO,KACxE,WAAW5mO,KAAKs2Z,SAAY7xZ,EAAIzE,KAAKs2Z,SAAS1vL,UAAW,KAAO,KAChE,GACH,EAIGltD,EAAK7S,QAAQ2gB,SACfguO,EAAOtrZ,UAAUwvK,EAAK7S,QAAQ2gB,QAAUguO,EAAOtrZ,UAAU28J,SAG3D2uP,EAAOtrZ,UAAUqX,OAAS,WAIxB,IAHA,IAAIvgB,EAAM,CAAC,EAEPf,EAAQu1Z,EAAOW,uBACVv4Z,EAAE,EAAGA,EAAEqC,EAAMrB,OAAQhB,IAAK,CACjC,IAAIsgJ,EAAOj+I,EAAMrC,GACboC,KAAKk+I,KAAUs3Q,EAAOtrZ,UAAUg0I,KAIvB,YAATA,GACS,aAATA,GACS,iBAATA,EAEiB,OAAfl+I,KAAKk+I,GACPl9I,EAAIk9I,GAAQ,KAEZl9I,EAAIk9I,GAAsB,YAAdl+I,KAAKk+I,GACf,WAAal+I,KAAKk+I,GAAMouF,cAEV,WAATpuF,EACU,OAAfl+I,KAAKk+I,KAEPl9I,EAAIk9I,GAASl+I,KAAKk+I,IAAS9yH,KAAYprB,KAAKk+I,KAAU9yH,IACpDprB,KAAKk+I,GAAM5zI,WAAatK,KAAKk+I,IAG7Bl+I,KAAKk+I,KAAUs3Q,EAAOtrZ,UAAUg0I,KAClCl9I,EAAIk9I,GAAQl+I,KAAKk+I,IAGtB,CAED,OAAOl9I,CACR,EAEDw0Z,EAAOtrZ,UAAU4Z,MAAQ,WACvB,OAAO2iJ,EAASzmK,KAAKuhB,SACtB,EAEDi0Y,EAAOtrZ,UAAUy/F,SAAW,WAC1B,IAAKmpT,EAAcr1Y,KAAKzd,KAAKrB,OAC3B,OAAO,EAET,GAAIqB,KAAK62L,SAAWzrK,OAAcprB,KAAK62L,mBAAmBryL,QAAU8vZ,EAAUt0Z,KAAK62L,SACjF,OAAO,EAET,GAAmB,MAAf72L,KAAKswU,QAAkBtwU,KAAKswU,QAAU,EACxC,OAAO,EAET,GAAiB,MAAbtwU,KAAKmgE,OAAiB8yV,EAAWx1Y,KAAKzd,KAAKmgE,MAC7C,OAAO,EAGT,IAAI82V,EAAUj3Z,KAAKi3Z,UACnB,GAAIA,EAAS,CACX,GAAIA,EAAQv0Z,MAAM,OAChB,OAAO,EAGT,GAAc,MADDgwZ,EAAUwE,gBAAgBD,GAErC,OAAO,CAEV,CACD,OAAO,CACR,EAEDzB,EAAOtrZ,UAAUitZ,WAAa,SAAoBzkZ,GAC5CA,aAAelO,KACjBxE,KAAK62L,QAAUnkL,EAEf1S,KAAK62L,QAAUy9N,EAAU5hZ,IAAQ,UAEpC,EAED8iZ,EAAOtrZ,UAAU8rZ,UAAY,SAAmBoB,GAE5Cp3Z,KAAKswU,OADH8mF,IAAQhsY,KAAYgsY,KAAShsY,IACjBgsY,EAAI9sZ,WAEJ8sZ,CAEjB,EAGD5B,EAAOtrZ,UAAUmtZ,aAAe,WAC9B,IAAI15P,EAAM39J,KAAKrB,MAIf,OAHW,MAAPg/J,IACFA,EAAM,IAES,KAAb39J,KAAKiB,IACA08J,EAEF39J,KAAKiB,IAAI,IAAI08J,CACrB,EAGD63P,EAAOtrZ,UAAUI,SAAW,WAC1B,IAAIsnK,EAAM5xK,KAAKq3Z,eAiCf,OA/BIr3Z,KAAK62L,SAAWzrK,MACdprB,KAAK62L,mBAAmBryL,KAC1BotK,GAAO,aAAa6iP,EAAWz0Z,KAAK62L,SAEpCjlB,GAAO,aAAa5xK,KAAK62L,SAIV,MAAf72L,KAAKswU,QAAkBtwU,KAAKswU,QAAUllT,MACxCwmJ,GAAO,aAAa5xK,KAAKswU,QAGvBtwU,KAAK+6I,SAAW/6I,KAAK82Z,WACvBllP,GAAO,YAAY5xK,KAAK+6I,QAEtB/6I,KAAKmgE,OACPyxG,GAAO,UAAU5xK,KAAKmgE,MAGpBngE,KAAK43O,SACPhmE,GAAO,YAEL5xK,KAAKi2Z,WACPrkP,GAAO,cAEL5xK,KAAK6wC,YACP7wC,KAAK6wC,WAAWxuC,SAAQ,SAAS83H,GAC/By3C,GAAO,KAAKz3C,CACb,IAGIy3C,CACR,EAMD4jP,EAAOtrZ,UAAUotZ,IAAM,SAAa7yZ,GAMlC,GAAmB,MAAfzE,KAAKswU,OACP,OAAOtwU,KAAKswU,QAAQ,EAAI,EAAgB,IAAZtwU,KAAKswU,OAGnC,IAAIz5I,EAAU72L,KAAK62L,QACnB,OAAIA,GAAWzrK,KACPyrK,aAAmBryL,OACvBqyL,EAAUy9N,EAAUz9N,IAAYzrK,KAG9ByrK,GAAWzrK,IACNA,IAGFyrK,EAAQ+vC,WAAaniO,GAAOD,KAAKC,QAGnC2mB,GACR,EAIDoqY,EAAOtrZ,UAAUqtZ,WAAa,SAAoB9yZ,GAChD,GAAmB,MAAfzE,KAAKswU,OAAgB,CACvB,IAAIknF,EAAa/yZ,GAAOzE,KAAKs2Z,UAAY,IAAI9xZ,KACzC4yZ,EAAOp3Z,KAAKswU,QAAU,GAAMllT,IAAuB,IAAZprB,KAAKswU,OAChD,OAAOknF,EAAW5wL,UAAYwwL,CAC/B,CAED,OAAIp3Z,KAAK62L,SAAWzrK,IACXA,IAEFprB,KAAK62L,QAAQ+vC,SACrB,EAID4uL,EAAOtrZ,UAAUutZ,WAAa,SAAoBhzZ,GAChD,IAAIizZ,EAAW13Z,KAAKu3Z,WAAW9yZ,GAC/B,OAAIizZ,GAAYtsY,IACP,IAAI5mB,KAAKuvZ,GACP2D,IAAatsY,IACf,IAAI5mB,KAx2BA,GA02BJ,IAAIA,KAAKkzZ,EAEnB,EAGDlC,EAAOtrZ,UAAUgzX,aAAe,WAC9B,OAAuB,MAAfl9X,KAAKswU,QAAkBtwU,KAAK62L,SAAWzrK,GAChD,EAGDoqY,EAAOtrZ,UAAU+sZ,QACjBzB,EAAOtrZ,UAAUytZ,oBAAsB,WACrC,OAAmB,MAAf33Z,KAAK+6I,OACA,KAEF25Q,EAAgB10Z,KAAK+6I,OAC7B,EAoBD27Q,EAAUxsZ,UAAUysZ,MAAQ,KAC5BD,EAAUxsZ,UAAU0sZ,sBAAuB,EAC3CF,EAAUxsZ,UAAU2sZ,iBAAkB,EACtC,IAAIe,EAAc,GAgclB,SAASC,EAAS7+T,GAChB,OAAO,WACL,IAAKh5F,KAAK22Z,MAAMhjL,YACd,MAAM,IAAIhiO,MAAM,8DAGlB,IACImmZ,EAASC,EADT3uZ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,WAQtC,GANAiH,EAAK1K,MAAK,SAAgBG,EAAKu1E,GAC7B0jV,EAAUj5Z,EACVk5Z,EAAa3jV,CACd,IACDp0E,KAAKg5F,GAAQh3F,MAAMhC,KAAMoJ,GAErB0uZ,EACF,MAAMA,EAER,OAAOC,CACR,CACF,CAjdDH,EAAYl5Z,KAAK,aACjBg4Z,EAAUxsZ,UAAU8tZ,UAAY,SAASngL,EAAQ54N,EAAKnf,EAASurC,GAC7D,IAAIxsC,EACAif,EAAU04Y,EAAiBv3Y,GAC3Bnf,aAAmBkK,WACrBqhC,EAAKvrC,EACLA,EAAU,CAAC,GAGb,IAAIsmM,EAAOsuN,EAAgB52Y,EAAQ6jK,UAC/Bh8B,EAAQ3lJ,KAAK62Z,gBASjB,GARqB,MAAjB/2Z,EAAQ6lJ,QACVA,EAAQ7lJ,EAAQ6lJ,OAIZkyF,aAAkB29K,IACtB39K,EAAS29K,EAAOv0Y,MAAM42N,EAAQ,CAAElyF,MAAOA,MAEpCkyF,EAEH,OADAh5O,EAAM,IAAI8S,MAAM,0BACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAIzC,IAAI4F,EAAM3E,EAAQ2E,KAAO,IAAID,KAO7B,GAAIxE,KAAK42Z,sBAAwB/+K,EAAO98F,QAExB,MADD23Q,EAAUwE,gBAAgBr/K,EAAOo/K,WAG5C,OADAp4Z,EAAM,IAAI8S,MAAM,4CACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAK3C,GAAIg5O,EAAO98F,OAAQ,CACjB,IAAK45Q,EAAYvuN,EAAMyxC,EAAOo/K,WAAW,GAEvC,OADAp4Z,EAAM,IAAI8S,MAAM,4CAA4CkmO,EAAOo/K,UAAU,YAAY7wN,GAClF/6J,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAGlB,MAAnBg5O,EAAOi/K,WACTj/K,EAAOi/K,UAAW,EAGrB,MACCj/K,EAAOi/K,UAAW,EAClBj/K,EAAO98F,OAASqrD,EAelB,GATKyxC,EAAO13K,MAA2B,MAAnB03K,EAAO13K,KAAK,KAC9B03K,EAAO13K,KAAOo7P,EAAYz9S,EAAQ0oL,UAClCqxC,EAAOk/K,eAAgB,IAOJ,IAAjBj3Z,EAAQywV,MAAkB14G,EAAOo+K,SAEnC,OADAp3Z,EAAM,IAAI8S,MAAM,iDACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAGzC,IAAI83Z,EAAQ32Z,KAAK22Z,MAEZA,EAAMuB,eACTvB,EAAMuB,aAAe,SAASC,EAAWC,EAAW/sX,GAClDrrC,KAAKq4Z,UAAUD,EAAW/sX,EAC3B,GAmCHsrX,EAAM2B,WAAWzgL,EAAO98F,OAAQ88F,EAAO13K,KAAM03K,EAAO52O,KAhCpD,SAAoBpC,EAAKs5Z,GACvB,GAAIt5Z,EACF,OAAOwsC,EAAGxsC,GAGZ,IAAIL,EAAO,SAASK,GAClB,GAAIA,EACF,OAAOwsC,EAAGxsC,GAEVwsC,EAAG,KAAMwsM,EAEZ,EAED,GAAIsgL,EAAW,CAGb,IAAqB,IAAjBr4Z,EAAQywV,MAAkB4nE,EAAUlC,SAEtC,OADAp3Z,EAAM,IAAI8S,MAAM,qDACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAEzCg5O,EAAOy+K,SAAW6B,EAAU7B,SAC5Bz+K,EAAO0+K,cAAgB4B,EAAU5B,cACjC1+K,EAAOm/K,aAAevyZ,EAEtBkyZ,EAAMuB,aAAaC,EAAWtgL,EAAQr5O,EAEvC,MACCq5O,EAAOy+K,SAAWz+K,EAAOm/K,aAAevyZ,EACxCkyZ,EAAM0B,UAAUxgL,EAAQr5O,EAE3B,GAGF,EAGDo5Z,EAAYl5Z,KAAK,cACjBg4Z,EAAUxsZ,UAAUquZ,WAAa,SAASt5Y,EAAKnf,EAASurC,GACtD,IAAIvtB,EAAU04Y,EAAiBv3Y,GAC3Bnf,aAAmBkK,WACrBqhC,EAAKvrC,EACLA,EAAU,CAAC,GAGb,IAAIsmM,EAAOsuN,EAAgB52Y,EAAQ6jK,UAC/BxhH,EAAOriD,EAAQ0oL,UAAY,IAE3BoxC,EAAS93O,EAAQ83O,OACP,MAAVA,IAAkB95N,EAAQgoL,UACL,UAApBhoL,EAAQgoL,UAA4C,QAApBhoL,EAAQgoL,WAE3C8xC,GAAS,GAGX,IAAI24G,EAAOzwV,EAAQywV,KACP,MAARA,IACFA,GAAO,GAGT,IAAI9rV,EAAM3E,EAAQ2E,KAAOD,KAAKC,MAC1B+zZ,GAAiC,IAAnB14Z,EAAQ24Z,OACtBC,IAAa54Z,EAAQ44Z,SACrB/B,EAAQ32Z,KAAK22Z,MAEjB,SAASgC,EAAe9kZ,GAOtB,GAAIA,EAAEijZ,UACJ,GAAIjjZ,EAAEknI,QAAUqrD,EACd,OAAO,OAGT,IAAKuuN,EAAYvuN,EAAMvyL,EAAEknI,QAAQ,GAC/B,OAAO,EAKX,SAAK29Q,IAAa7F,EAAU1yV,EAAMtsD,EAAEssD,WAMhCtsD,EAAE+jO,SAAWA,OAMb/jO,EAAEoiZ,WAAa1lE,OAMfioE,GAAe3kZ,EAAE0jZ,cAAgB9yZ,KACnCkyZ,EAAMiC,aAAa/kZ,EAAEknI,OAAQlnI,EAAEssD,KAAMtsD,EAAE5S,KAAK,WAAY,KACjD,KAIV,CAED01Z,EAAMkC,YAAYzyN,EAAMsyN,EAAW,KAAOv4V,GAAM,SAASthE,EAAI+vO,GAC3D,GAAI/vO,EACF,OAAOwsC,EAAGxsC,GAGZ+vO,EAAUA,EAAQ/sO,OAAO82Z,IAGJ,IAAjB74Z,EAAQ85D,OACVg1K,EAAUA,EAAQh1K,KAAKw8V,IAIzB,IAAI3xZ,EAAM,IAAID,KACdoqO,EAAQvsO,SAAQ,SAASwR,GACvBA,EAAEmjZ,aAAevyZ,CAClB,IAGD4mC,EAAG,KAAKujM,EACT,GACF,EAEDgpL,EAAYl5Z,KAAK,mBACjBg4Z,EAAUxsZ,UAAU4uZ,gBAAkB,WACpC,IAAI1vZ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAU,GAC5CkpC,EAAKjiC,EAAKgkE,MACV5uE,EAAO,SAASK,EAAI+vO,GAClB/vO,EACFwsC,EAAGxsC,GAEHwsC,EAAG,KAAMujM,EACNh1K,KAAKw8V,GACLxwZ,KAAI,SAASiO,GACZ,OAAOA,EAAEwjZ,cACV,IACAx1V,KAAK,MAEX,EACDz4D,EAAK1K,KAAKF,GACVwB,KAAKu4Z,WAAWv2Z,MAAMhC,KAAKoJ,EAC5B,EAEDwuZ,EAAYl5Z,KAAK,uBACjBg4Z,EAAUxsZ,UAAU6uZ,oBAAsB,WACxC,IAAI3vZ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAU,GAC5CkpC,EAAKjiC,EAAKgkE,MACV5uE,EAAO,SAASK,EAAI+vO,GAClB/vO,EACFwsC,EAAGxsC,GAEHwsC,EAAG,KAAMujM,EAAQhpO,KAAI,SAASiO,GAC5B,OAAOA,EAAEvJ,UACV,IAEJ,EACDlB,EAAK1K,KAAKF,GACVwB,KAAKu4Z,WAAWv2Z,MAAMhC,KAAKoJ,EAC5B,EAEDwuZ,EAAYl5Z,KAAK,aACjBg4Z,EAAUxsZ,UAAUkxB,UAAY,SAASiQ,GACvC,IAAIhkC,EAAOrH,KAAK22Z,MAAM/rZ,YAAY0P,KACrB,WAATjT,IACFA,EAAO,MAIT,IAAIqrT,EAAa,CAIf9zS,QAAS,gBAAgBszN,EAGzB8mL,UAAW3xZ,EAGXuvZ,uBAAwB52Z,KAAK42Z,qBAG7BhoL,QAAS,IAGX,IAAM5uO,KAAK22Z,MAAMsC,eACyB,oBAA7Bj5Z,KAAK22Z,MAAMsC,cAEtB,OAAO5tX,EAAG,IAAI15B,MAAM,kEAGtB3R,KAAK22Z,MAAMsC,eAAc,SAASp6Z,EAAI+vO,GACpC,OAAI/vO,EACKwsC,EAAGxsC,IAGZ6zT,EAAW9jF,QAAUA,EAAQhpO,KAAI,SAASiyO,GAOxC,cALAA,EAAUA,aAAkB29K,EAAU39K,EAAOt2N,SAAWs2N,GAG1C0+K,cAEP1+K,CACR,IAEMxsM,EAAG,KAAMqnR,GACjB,GACF,EAGDgkG,EAAUxsZ,UAAUqX,OAAS,WAC3B,OAAOvhB,KAAKk5Z,eACb,EAGDtB,EAAYl5Z,KAAK,kBACjBg4Z,EAAUxsZ,UAAUivZ,eAAiB,SAASzmG,EAAYrnR,GACxD,IAAI+tX,EAAMp5Z,KACN4uO,EAAU8jF,EAAW9jF,QACzB,IAAKA,IAAY/wO,MAAMC,QAAQ8wO,GAC7B,OAAOvjM,EAAG,IAAI15B,MAAM,wCAEtBi9N,EAAUA,EAAQj/N,QAElB,SAAS0pZ,EAAQx6Z,GACf,GAAIA,EACF,OAAOwsC,EAAGxsC,GAGZ,IAAK+vO,EAAQhwO,OACX,OAAOysC,EAAGxsC,EAAKu6Z,GAGjB,IAAIvhL,EACJ,IACEA,EAASpxE,EAASmoE,EAAQx3I,QAG3B,CAFC,MAAOpwF,GACP,OAAOqkC,EAAGrkC,EACX,CAED,GAAe,OAAX6wO,EACF,OAAOwhL,EAAQ,MAGjBD,EAAIzC,MAAM0B,UAAUxgL,EAAQwhL,EAC7B,CAEDA,EACD,EAED3C,EAAU4C,YAAc,SAASC,EAAU5C,EAAOtrX,GAOhD,IAAIqnR,EACJ,GAPyB,IAArBvwT,UAAUvD,SAEZysC,EAAKsrX,EACLA,EAAQ,MAIc,kBAAb4C,GAET,IADA7mG,EAAawjG,EAAUqD,cACG5nZ,MACxB,OAAO05B,EAAGqnR,QAGZA,EAAa6mG,EAGf,IAAIH,EAAM,IAAI1C,EAAUC,EAAOjkG,EAAWkkG,sBAC1CwC,EAAID,eAAezmG,GAAY,SAAS7zT,GACtC,GAAIA,EACF,OAAOwsC,EAAGxsC,GAEZwsC,EAAG,KAAM+tX,EACV,GACF,EAED1C,EAAU8C,gBAAkB,SAASD,EAAU5C,GAC7C,IAAIjkG,EAAiC,kBAAb6mG,EACtBv4Y,KAAKC,MAAMs4Y,GAAYA,EACrBH,EAAM,IAAI1C,EAAUC,EAAOjkG,EAAWkkG,sBAG1C,IAAKwC,EAAIzC,MAAMhjL,YACb,MAAM,IAAIhiO,MAAM,8DAIlB,OADAynZ,EAAIK,mBAAmB/mG,GAChB0mG,CACR,EACD1C,EAAUjwP,SAAWiwP,EAAU8C,gBAE/B9C,EAAUxsZ,UAAU4Z,MAAQ,SAAS41Y,EAAUruX,GACpB,IAArBlpC,UAAUvD,SACZysC,EAAKquX,EACLA,EAAW,MAGb15Z,KAAKo7B,WAAU,SAASv8B,EAAI6zT,GAC1B,GAAI7zT,EACF,OAAOwsC,EAAGxsC,GAEZ63Z,EAAU4C,YAAY5mG,EAAYgnG,EAAUruX,EAC7C,GACF,EAEDusX,EAAYl5Z,KAAK,oBACjBg4Z,EAAUxsZ,UAAUyvZ,iBAAmB,SAAStuX,GAC9C,IAAIsrX,EAAQ32Z,KAAK22Z,MAKjB,GAAIA,EAAMgD,4BAA4B3vZ,UAClC2sZ,EAAMgD,mBAAqBhH,EAAMzoZ,UAAUyvZ,iBAE7C,OAAOhD,EAAMgD,iBAAiBtuX,GAGhCsrX,EAAMsC,eAAc,SAASp6Z,EAAK+vO,GAChC,GAAI/vO,EACF,OAAOwsC,EAAGxsC,GAGZ,GAAuB,IAAnB+vO,EAAQhwO,OACV,OAAOysC,EAAG,MAGZ,IAAIuuX,EAAiB,EACjBC,EAAe,GAEnB,SAASC,EAAeC,GAOtB,GANIA,GACFF,EAAan7Z,KAAKq7Z,KAGpBH,IAEuBhrL,EAAQhwO,OAC7B,OAAOysC,EAAGwuX,EAAaj7Z,OAASi7Z,EAAa,GAAK,KAErD,CAEDjrL,EAAQvsO,SAAQ,SAASw1O,GACvB8+K,EAAMiC,aAAa/gL,EAAO98F,OAAQ88F,EAAO13K,KAAM03K,EAAO52O,IAAK64Z,EAC5D,GACF,GACF,EAEDpD,EAAUxsZ,UAAU8vZ,WAAanC,EAAS,SAC1CnB,EAAUxsZ,UAAU+vZ,UAAY,SAASP,GACvC,IAAKA,EAAS/lL,YACZ,MAAM,IAAIhiO,MAAM,gFAElB,OAAO3R,KAAKg6Z,WAAWN,EACxB,EAyBD9B,EAAYv1Z,SAAQ,SAAS22F,GAC3B09T,EAAUxsZ,UAAU8uF,EAAO,QAAU6+T,EAAS7+T,EAC/C,IAED2yC,EAAQ/sH,QAAUszN,EAClBvmG,EAAQ+qR,UAAYA,EACpB/qR,EAAQ6pR,OAASA,EACjB7pR,EAAQgnR,MAAQA,EAChBhnR,EAAQinR,kBAAoBA,EAC5BjnR,EAAQ2oR,UAAYA,EACpB3oR,EAAQ8oR,WAAaA,EACrB9oR,EAAQ1qH,MAAQA,EAChB0qH,EAAQ86B,SAAWA,EACnB96B,EAAQgpR,YAAcA,EACtBhpR,EAAQ4vL,YAAcA,EACtB5vL,EAAQknR,UAAYA,EACpBlnR,EAAQurR,gBAAkBxE,EAAUwE,gBACpCvrR,EAAQyqR,cAAgBA,EACxBzqR,EAAQuuR,cAAgB,EAAxBvuR,MAAAA,cACAA,EAAQwuR,YA3zBR,SAAqBh6V,GACnB,GAAa,MAATA,EACF,MAAO,CAAC,KAENA,EAAKoyC,YAAY,OAASpyC,EAAKvhE,OAAO,IACxCuhE,EAAOA,EAAKw0G,OAAO,EAAEx0G,EAAKvhE,OAAO,IAGnC,IADA,IAAIw7Z,EAAe,CAACj6V,GACbA,EAAKvhE,OAAS,GAAG,CACtB,IAAIy7Z,EAASl6V,EAAKoyC,YAAY,KAC9B,GAAe,IAAX8nT,EACF,MAEFl6V,EAAOA,EAAKw0G,OAAO,EAAE0lP,GACrBD,EAAa17Z,KAAKyhE,EACnB,CAED,OADAi6V,EAAa17Z,KAAK,KACX07Z,CACR,EA0yBDzuR,EAAQ+oR,gBAAkBA,sCC16C1B,IAAI/B,EAAQv5O,EAAAA,OAAAA,EACR8gP,EAAgB9gP,EAAAA,MAAAA,cAChBy5O,EAAYz5O,EAAAA,OAAAA,EACZM,EAAON,EAAQ,OAEnB,SAASw5O,IACPD,EAAMp0Z,KAAKyB,MACXA,KAAK8iW,IAAM,CAAC,CACb,CACDppL,EAAKxV,SAAS0uP,EAAmBD,GACjChnR,EAAQ,EAAoBinR,EAC5BA,EAAkB1oZ,UAAU44V,IAAM,KAGlC8vD,EAAkB1oZ,UAAUypO,aAAc,EAG1Ci/K,EAAkB1oZ,UAAU28J,QAAU,WACpC,MAAO,UAAU6S,EAAK7S,QAAQ7mK,KAAK8iW,KAAK,EAAO,GAAG,IACnD,EAIGppL,EAAK7S,QAAQ2gB,SACforO,EAAkB1oZ,UAAUwvK,EAAK7S,QAAQ2gB,QAAUorO,EAAkB1oZ,UAAU28J,SAGjF+rP,EAAkB1oZ,UAAUouZ,WAAa,SAASv9Q,EAAQ56E,EAAMl/D,EAAKoqC,GACnE,OAAKrrC,KAAK8iW,IAAI/nN,IAGT/6I,KAAK8iW,IAAI/nN,GAAQ56E,GAGf90B,EAAG,KAAKrrC,KAAK8iW,IAAI/nN,GAAQ56E,GAAMl/D,IAAM,MALnCoqC,EAAG,UAAKhiC,EAMlB,EAEDupZ,EAAkB1oZ,UAAU2uZ,YAAc,SAAS99Q,EAAQ56E,EAAM90B,GAC/D,IAKIivX,EALAthT,EAAU,GACd,IAAK+hC,EACH,OAAO1vG,EAAG,KAAK,IAgBfivX,EAZGn6V,EAYW,SAAkBo6V,GAG7Br5Z,OAAOQ,KAAK64Z,GAAal4Z,SAAQ,SAAUm4Z,GACzC,GAAI3H,EAAU1yV,EAAMq6V,GAAa,CAC/B,IAAIC,EAAYF,EAAYC,GAE5B,IAAK,IAAIv5Z,KAAOw5Z,EACdzhT,EAAQt6G,KAAK+7Z,EAAUx5Z,GAE1B,CACF,GACF,EAtBY,SAAkBs5Z,GAC9B,IAAK,IAAIG,KAAWH,EAAa,CAC/B,IAAIE,EAAYF,EAAYG,GAC5B,IAAK,IAAIz5Z,KAAOw5Z,EACdzhT,EAAQt6G,KAAK+7Z,EAAUx5Z,GAE1B,CACF,EAkBH,IAAI05Z,EAAUT,EAAcn/Q,IAAW,CAACA,GACpC+nN,EAAM9iW,KAAK8iW,IACf63D,EAAQt4Z,SAAQ,SAASu4Z,GACvB,IAAIL,EAAcz3D,EAAI83D,GACjBL,GAGLD,EAAYC,EACb,IAEDlvX,EAAG,KAAK2tE,EACT,EAED45S,EAAkB1oZ,UAAUmuZ,UAAY,SAASxgL,EAAQxsM,GAClDrrC,KAAK8iW,IAAIjrH,EAAO98F,UACnB/6I,KAAK8iW,IAAIjrH,EAAO98F,QAAU,CAAC,GAExB/6I,KAAK8iW,IAAIjrH,EAAO98F,QAAQ88F,EAAO13K,QAClCngE,KAAK8iW,IAAIjrH,EAAO98F,QAAQ88F,EAAO13K,MAAQ,CAAC,GAE1CngE,KAAK8iW,IAAIjrH,EAAO98F,QAAQ88F,EAAO13K,MAAM03K,EAAO52O,KAAO42O,EACnDxsM,EAAG,KACJ,EAEDunX,EAAkB1oZ,UAAUguZ,aAAe,SAASC,EAAWC,EAAW/sX,GAIxErrC,KAAKq4Z,UAAUD,EAAU/sX,EAC1B,EAEDunX,EAAkB1oZ,UAAU0uZ,aAAe,SAAS79Q,EAAQ56E,EAAMl/D,EAAKoqC,GACjErrC,KAAK8iW,IAAI/nN,IAAW/6I,KAAK8iW,IAAI/nN,GAAQ56E,IAASngE,KAAK8iW,IAAI/nN,GAAQ56E,GAAMl/D,WAChEjB,KAAK8iW,IAAI/nN,GAAQ56E,GAAMl/D,GAEhCoqC,EAAG,KACJ,EAEDunX,EAAkB1oZ,UAAU2wZ,cAAgB,SAAS9/Q,EAAQ56E,EAAM90B,GAQjE,OAPIrrC,KAAK8iW,IAAI/nN,KACP56E,SACKngE,KAAK8iW,IAAI/nN,GAAQ56E,UAEjBngE,KAAK8iW,IAAI/nN,IAGb1vG,EAAG,KACX,EAEDunX,EAAkB1oZ,UAAUyvZ,iBAAmB,SAAStuX,GAEtD,OADArrC,KAAK8iW,IAAM,CAAC,EACLz3T,EAAG,KACX,EAEDunX,EAAkB1oZ,UAAU+uZ,cAAgB,SAAS5tX,GACnD,IAAIujM,EAAU,GACVk0H,EAAM9iW,KAAK8iW,IAED5hW,OAAOQ,KAAKohW,GAClBzgW,SAAQ,SAAS04I,GACX75I,OAAOQ,KAAKohW,EAAI/nN,IACtB14I,SAAQ,SAAS89D,GACVj/D,OAAOQ,KAAKohW,EAAI/nN,GAAQ56E,IAC9B99D,SAAQ,SAASpB,GACR,OAARA,GACF2tO,EAAQlwO,KAAKokW,EAAI/nN,GAAQ56E,GAAMl/D,GAElC,GACF,GACF,IAID2tO,EAAQh1K,MAAK,SAAS9vD,EAAE8J,GACtB,OAAQ9J,EAAEysZ,eAAe,IAAM3iZ,EAAE2iZ,eAAe,EACjD,IAEDlrX,EAAG,KAAMujM,EACV,oCCxHDjjG,EAAQ,EAzBR,SAAoBmvR,EAASN,GAE3B,GAAIA,IAAeM,EACjB,OAAO,EAIT,GAAY,IADFA,EAAQh4Z,QAAQ03Z,GACX,CAGb,GAA8B,MAA1BA,EAAW7lP,QAAQ,GACrB,OAAO,EAMT,GAA6C,MAAzCmmP,EAAQnmP,OAAO6lP,EAAW57Z,OAAQ,GACpC,OAAO,CAEV,CAED,OAAO,CACR,qCC3BD,IAAI8zZ,EAAYt5O,EAAQ,OAwBxBztC,EAAQuuR,cApBR,SAAwBn/Q,GACtB,IAAIggR,EAASrI,EAAUwE,gBAAgBn8Q,GACvC,IAAKggR,EACH,OAAO,KAET,GAAIA,GAAUhgR,EACZ,MAAO,CAACA,GAOV,IAJA,IACIt4I,EADSs4I,EAAOprI,MAAM,IAAKorZ,EAAOn8Z,OAAS,IAC5B+iE,MAAM,KAAK4iJ,UAC1Boe,EAAMo4L,EACNX,EAAe,CAACz3L,GACblgO,EAAM7D,QACX+jO,EAAMlgO,EAAM20F,QAAU,IAAMurI,EAC5By3L,EAAa17Z,KAAKikO,GAEpB,OAAOy3L,CACR,sCCtBD,IAAIY,EAAM5hP,EAAQ,OAMlBztC,EAAQurR,gBAJR,SAAyBn8Q,GACvB,OAAOigR,EAAIxwZ,IAAIuwI,EAChB,oCCFD,SAAS43Q,IACR,CACDhnR,EAAQ,EAAQgnR,EAKhBA,EAAMzoZ,UAAUypO,aAAc,EAE9Bg/K,EAAMzoZ,UAAUouZ,WAAa,SAASv9Q,EAAQ56E,EAAMl/D,EAAKoqC,GACvD,MAAM,IAAI15B,MAAM,gCACjB,EAEDghZ,EAAMzoZ,UAAU2uZ,YAAc,SAAS99Q,EAAQ56E,EAAM90B,GACnD,MAAM,IAAI15B,MAAM,iCACjB,EAEDghZ,EAAMzoZ,UAAUmuZ,UAAY,SAASxgL,EAAQxsM,GAC3C,MAAM,IAAI15B,MAAM,+BACjB,EAEDghZ,EAAMzoZ,UAAUguZ,aAAe,SAASC,EAAWC,EAAW/sX,GAG5D,MAAM,IAAI15B,MAAM,kCACjB,EAEDghZ,EAAMzoZ,UAAU0uZ,aAAe,SAAS79Q,EAAQ56E,EAAMl/D,EAAKoqC,GACzD,MAAM,IAAI15B,MAAM,kCACjB,EAEDghZ,EAAMzoZ,UAAU2wZ,cAAgB,SAAS9/Q,EAAQ56E,EAAM90B,GACrD,MAAM,IAAI15B,MAAM,mCACjB,EAEDghZ,EAAMzoZ,UAAUyvZ,iBAAmB,SAAStuX,GAC1C,MAAM,IAAI15B,MAAM,sCACjB,EAEDghZ,EAAMzoZ,UAAU+uZ,cAAgB,SAAS5tX,GACvC,MAAM,IAAI15B,MAAM,wEACjB,qBCzEDwxJ,EAAOx3B,QAAU,4CCejB,IAAImmG,EAAS14D,EAAQ,OACjBw1D,EAAUx1D,EAAQ,OAGlB6hP,EAFU7hP,EAAQ,OAEc6hP,sBAGpC,SAASC,EAAYtoS,EAAK9yH,EAASunB,GACV,oBAAZvnB,IACTunB,EAAWvnB,GAGb,IAAIuzD,EAAS,CAAC,EAUd,OATgB,OAAZvzD,GAAuC,kBAAZA,EAC7BgyO,EAAOz+K,EAAQvzD,EAAS,CAAC8yH,IAAKA,IAE9Bk/G,EAAOz+K,EADiB,kBAARu/D,EACD,CAACA,IAAKA,GAENA,GAGjBv/D,EAAOhsC,SAAWA,GAAYgsC,EAAOhsC,SAC9BgsC,CACR,CAED,SAASs1E,EAAS/V,EAAK9yH,EAASunB,GAC9B,GAAmB,qBAARurG,EACT,MAAM,IAAIjhH,MAAM,mDAGlB,IAAI0hD,EAAS6nW,EAAWtoS,EAAK9yH,EAASunB,GAEtC,GAAsB,SAAlBgsC,EAAO2lC,QAAqBiiU,EAAsB5nW,GACpD,MAAM,IAAI1hD,MAAM,uDAGlB,OAAO,IAAIg3H,EAAQz6B,QAAQ76C,EAC5B,CAED,SAAS8nW,EAAUtxL,GACjB,IAAI7wI,EAAS6wI,EAAKnoK,cAClB,OAAO,SAAUkxD,EAAK9yH,EAASunB,GAC7B,IAAIgsC,EAAS6nW,EAAWtoS,EAAK9yH,EAASunB,GAEtC,OADAgsC,EAAO2lC,OAASA,EACT2vC,EAAQt1E,EAAQA,EAAOhsC,SAC/B,CACF,CAoBD,SAAS+zY,EAAmBpiU,EAAQl5F,EAASu7Z,EAAWxxL,GACtD,OAAO,SAAUj3G,EAAK+qD,EAAMt2J,GAC1B,IAAIgsC,EAAS6nW,EAAWtoS,EAAK+qD,EAAMt2J,GAE/BnlB,EAAS,CAAC,EAad,OAZA4vO,GAAO,EAAM5vO,EAAQpC,EAASuzD,GAE9BnxD,EAAOo5Z,KAAOjoW,EAAOioW,MAAQx7Z,EAAQw7Z,KAEjCzxL,IACF3nO,EAAO82F,OAAS6wI,EAAKnoK,eAGE,oBAAd25V,IACTriU,EAASqiU,GAGJriU,EAAO92F,EAAQA,EAAOmlB,SAC9B,CACF,CApCDshH,EAAQn+H,IAAM2wZ,EAAS,OACvBxyR,EAAQg6G,KAAOw4K,EAAS,QACxBxyR,EAAQ7oI,QAAUq7Z,EAAS,WAC3BxyR,EAAQ0T,KAAO8+Q,EAAS,QACxBxyR,EAAQ4zC,IAAM4+O,EAAS,OACvBxyR,EAAQ4yR,MAAQJ,EAAS,SACzBxyR,EAAQgzC,IAAMw/O,EAAS,UACvBxyR,EAAO,OAAawyR,EAAS,UAE7BxyR,EAAQywR,IAAM,SAAUzC,GACtB,OAAO/nL,EAAQwqL,IAAIzC,EACpB,EAEDhuR,EAAQkvG,OAAS,SAAUjmE,GACzB,OAAOg9D,EAAQ3tN,MAAM2wJ,EACtB,EAuBDjpC,EAAQq6C,SAAW,SAAUljL,EAASu7Z,GACpC,IAAIlyZ,EAAOnJ,KAIY,oBAFvBF,EAAUA,GAAW,CAAC,KAGpBu7Z,EAAYv7Z,EACZA,EAAU,CAAC,GAGb,IAAIkjL,EAAWo4O,EAAkBjyZ,EAAMrJ,EAASu7Z,GAUhD,MARY,CAAC,MAAO,OAAQ,OAAQ,MAAO,QAAS,MAAO,UACrDh5Z,SAAQ,SAAUwnO,GACtB7mD,EAAS6mD,GAAQuxL,EAAkBjyZ,EAAK0gO,GAAO/pO,EAASu7Z,EAAWxxL,EACpE,IAED7mD,EAAS60D,OAASujL,EAAkBjyZ,EAAK0uO,OAAQ/3O,EAASu7Z,GAC1Dr4O,EAASo2O,IAAMjwZ,EAAKiwZ,IACpBp2O,EAASA,SAAW75K,EAAK65K,SAClBA,CACR,EAEDr6C,EAAQ6yR,QAAU,SAAUC,EAAcC,GACxC,IAAI57Z,EAAU,CAAC,EASf,OARI47Z,GACF5pL,EAAOhyO,EAAS47Z,GAEdD,IACF37Z,EAAQ27Z,aAAeA,GAGzB37Z,EAAQ07Z,SAAU,EACX7yR,EAAQq6C,SAASljL,EACzB,EAIDqjK,EAAOx3B,QAAUhD,EACjBA,EAAQz6B,QAAUkrE,EAAQ,OAC1BzwC,EAAQuyR,WAAaA,EAGrBh6Z,OAAOC,eAAewnI,EAAS,QAAS,CACtCvnI,YAAY,EACZoJ,IAAK,WACH,OAAOm+H,EAAQz6B,QAAQ/lC,KACxB,EACD19D,IAAK,SAAU09D,GACbwgE,EAAQz6B,QAAQ/lC,MAAQA,CACzB,wCCvJH,IAAIwzV,EAAWviP,EAAQ,OACnBz6J,EAAOy6J,EAAQ,OACfwiP,EAAUxiP,EAAQ,OAElB0wD,EAAM8xL,EAAQ9xL,IACdo7H,EAAW02D,EAAQ12D,SAEvB,SAAS22D,EAAMlzR,GAEb3oI,KAAK2oI,QAAUA,EACf3oI,KAAK87Z,SAAU,EACf97Z,KAAK+7Z,UAAW,EAChB/7Z,KAAKg8Z,YAAc,KACnBh8Z,KAAKslM,KAAO,KACZtlM,KAAKmmM,KAAO,IACb,CAED01N,EAAK3xZ,UAAUu7C,MAAQ,SAAU6/I,EAAMa,EAAM9K,GAC3C,IAAIlyL,EAAOnJ,KAQX,IAPoB,kBAATslM,QAA+Bj8L,IAAT88L,GAAsC,kBAATA,IAC5Dh9L,EAAKw/H,QAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,6CAEvCxI,EAAKm8L,KAAOA,EACZn8L,EAAKg9L,KAAOA,EACZh9L,EAAK2yZ,SAAU,EAEXzgO,GAA8C,qBAApBA,EAAiC,CAC7D,IAAI+wC,EAAa,SAAW84H,EAFjB5/J,EAAO,KAAOa,GAAQ,KAIjC,OADAh9L,EAAK4yZ,UAAW,EACT3vL,CACR,CACF,EAEDyvL,EAAK3xZ,UAAU+xZ,OAAS,SAAUA,EAAQ5gO,GACxC,IAAIlyL,EAAOnJ,KAGX,GAFAmJ,EAAK6yZ,YAAcC,EACnB9yZ,EAAK2yZ,SAAU,EACXzgO,GAA8C,qBAApBA,EAAiC,CACvC,oBAAX4gO,IACTA,EAASA,KAEX,IAAI7vL,EAAa,WAAa6vL,GAAU,IAExC,OADA9yZ,EAAK4yZ,UAAW,EACT3vL,CACR,CACF,EAEDyvL,EAAK3xZ,UAAUyhK,OAAS,SAAU3yE,EAAQ74B,EAAMisK,GAe9C,IAJA,IAAIjjO,EAAOnJ,KAEPouM,EAAY,CAAC,EACbgY,EAAK,gDACI,CACX,IAAI1jN,EAAQ0jN,EAAGhqM,KAAKgwN,GACpB,IAAK1pO,EACH,MAEF0rM,EAAU1rM,EAAM,IAAMA,EAAM,IAAMA,EAAM,EACzC,CAUD,IASIw5Z,EAAM,uBAAuBz+Y,KAAK2wL,EAAU8tN,MAAQ,OACpDC,EAAKD,GAAO,WACZE,EAASF,GAAOv9Y,IAAOgkD,QAAQ,KAAM,IACrC05V,EAZa,SAAUjmJ,EAAW9wE,EAAMiK,EAAOpJ,EAAM1rD,EAAO2hR,GAC9D,IAAIC,EAAMvyL,EAAIxkC,EAAO,IAAMiK,EAAQ,IAAMpJ,GACzC,OAAIiwE,GAAyC,aAA5BA,EAAU7lQ,cAClBu5N,EAAIuyL,EAAM,IAAM5hR,EAAQ,IAAM2hR,GAE9BC,CAEV,CAKSC,CAAWluN,EAAUgoE,UAAWjtQ,EAAKm8L,KAAM8I,EAAUmB,MAAOpmM,EAAKg9L,KAAMiI,EAAU3zD,MAAO2hR,GAC9FG,EAAMzyL,EAAI9wI,EAAS,IAAM74B,GACzBq8V,EACA1yL,EADiBoyL,EACbG,EAAM,IAAMjuN,EAAU3zD,MAAQ,IAAM0hR,EAAK,IAAMC,EAAS,IAAMF,EAAM,IAAMK,EAC1EF,EAAM,IAAMjuN,EAAU3zD,MAAQ,IAAM8hR,GACxCE,EAAa,CACfj3N,SAAUr8L,EAAKm8L,KACfiK,MAAOnB,EAAUmB,MACjB90D,MAAO2zD,EAAU3zD,MACjB7nB,IAAKzyD,EACL+7V,IAAKA,EACLpuT,SAAU0uT,EACVL,GAAIA,EACJC,OAAQA,EACRhmJ,UAAWhoE,EAAUgoE,UACrB5uM,OAAQ4mI,EAAU5mI,QAIpB,IAAK,IAAIuN,KADTq3J,EAAa,GACCqwL,EACRA,EAAW1nV,KACH,QAANA,GAAqB,OAANA,GAAoB,cAANA,EAC/Bq3J,EAAW1tO,KAAKq2E,EAAI,IAAM0nV,EAAW1nV,IAErCq3J,EAAW1tO,KAAKq2E,EAAI,KAAO0nV,EAAW1nV,GAAK,MAMjD,OAFAq3J,EAAa,UAAYA,EAAWvqK,KAAK,MACzC14D,EAAK4yZ,UAAW,EACT3vL,CACR,EAEDyvL,EAAK3xZ,UAAUwyZ,UAAY,SAAUp3N,EAAMa,EAAM9K,EAAiB4gO,GAChE,IAGI7vL,EAHAjjO,EAAOnJ,KACP2oI,EAAUx/H,EAAKw/H,aAGJt/H,IAAX4yZ,QAAiC5yZ,IAATi8L,EAC1Bn8L,EAAKw/H,QAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,8BAErCy6N,OADoB/iO,IAAX4yZ,EACI9yZ,EAAK8yZ,OAAOA,EAAQ5gO,GAEpBlyL,EAAKs8C,MAAM6/I,EAAMa,EAAM9K,GAElC+wC,GACFzjG,EAAQs8I,UAAU,gBAAiB74C,EAEtC,EAEDyvL,EAAK3xZ,UAAUyyZ,WAAa,SAAU7uT,GACpC,IAAI3kG,EAAOnJ,KACP2oI,EAAUx/H,EAAKw/H,QAEnB,IAAKx/H,EAAK2yZ,SAAW3yZ,EAAK4yZ,SAAY,OAAO,KAE7C,IAEI3vL,EAFIuvL,EAAS7tT,EAASK,SAEP3jG,IAAI,oBACnBoyZ,EAAWxwL,GAAcA,EAAWzqK,MAAM,KAAK,GAAGpxD,cAGtD,OAFAo4H,EAAQxgE,MAAM,SAAUy0V,GAEhBA,GACN,IAAK,QACH,OAAOzzZ,EAAKs8C,MAAMt8C,EAAKm8L,KAAMn8L,EAAKg9L,MAAM,GAE1C,IAAK,SACH,OAAOh9L,EAAK8yZ,OAAO9yZ,EAAK6yZ,aAAa,GAEvC,IAAK,SACH,OAAO7yZ,EAAKwiK,OAAOhjC,EAAQ3vC,OAAQ2vC,EAAQxoE,KAAMisK,GAEtD,EAEDzgG,EAAQ,EAAOkwR,sCCpKf,IAAIgB,EAAQzjP,EAAQ,OAEhBo8O,EAASqH,EAAMrH,OACfkB,EAAYmG,EAAMnG,UAatB,SAASoG,EAAYnG,GACR32Z,KACN+8Z,KAAO,IAAIrG,EAAUC,EAAO,CAACzB,WAAW,GAC9C,CAdDvpR,EAAQ1qH,MAAQ,SAAU2wJ,GAIxB,GAHIA,GAAOA,EAAIh/C,MACbg/C,EAAMA,EAAIh/C,KAEO,kBAARg/C,EACT,MAAM,IAAIjgK,MAAM,oDAElB,OAAO6jZ,EAAOv0Y,MAAM2wJ,EAAK,CAACjsB,OAAO,GAClC,EAODm3Q,EAAW5yZ,UAAU8tZ,UAAY,SAAUgF,EAAapqS,EAAK9yH,GAE3D,OADWE,KACC+8Z,KAAKE,cAAcD,EAAapqS,EAAK9yH,GAAW,CAAC,EAC9D,EACDg9Z,EAAW5yZ,UAAU4uZ,gBAAkB,SAAUlmS,GAE/C,OADW5yH,KACC+8Z,KAAKG,oBAAoBtqS,EACtC,EACDkqS,EAAW5yZ,UAAUquZ,WAAa,SAAU3lS,GAE1C,OADW5yH,KACC+8Z,KAAKI,eAAevqS,EACjC,EAED+Y,EAAQytR,IAAM,SAAUzC,GACtB,OAAO,IAAImG,EAAWnG,EACvB,kCCnCD,SAASyG,EAAgBz7O,GAEvB,OAAOA,EAASh/G,QAAQ,OAAQ,KAAKpyD,aACtC,CAED,SAAS8sZ,EAAkBC,GAGzB,IAAIC,GAFJD,EAAOA,EAAK/7V,OAAOhxD,eAEEoxD,MAAM,IAAK,GAKhC,MAAO,CAACggH,SAJOy7O,EAAeG,EAAU,IAIZj3N,KAHbi3N,EAAU,GAGmBC,QAF9BF,EAAKx6Z,QAAQ,MAAQ,EAGpC,CA8DDqgK,EAAOx3B,QAvCP,SAA0B/Y,GAKxB,IAAI6qS,EAAUhuR,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYiuR,UAAYjuR,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYkuR,UAAY,GAI9D,MAAgB,MAAZF,GAMY,KAAZA,GApCN,SAAuB7qS,EAAK6qS,GAC1B,IAAIn3N,EAAO1zE,EAAI0zE,OAA0B,WAAjB1zE,EAAIkzE,SAAwB,MAAQ,MACxDnkB,EAAWy7O,EAAexqS,EAAI+uD,UAIlC,OAHkB87O,EAAQ97V,MAAM,KAGb/7D,IAAIy3Z,GAAkBt6M,MAAK,SAAU66M,GACtD,IAAIC,EAAcl8O,EAAS7+K,QAAQ86Z,EAAYj8O,UAC3Cm8O,EACFD,GAAe,GACZA,IAAgBl8O,EAAS/iL,OAASg/Z,EAAYj8O,SAAS/iL,OAG5D,OAAIg/Z,EAAYJ,QACNl3N,IAASs3N,EAAYt3N,MAASw3N,EAGjCA,CACR,GACF,CAiBuBC,CAAanrS,EAAK6qS,GAL/B,KAWY,UAAjB7qS,EAAIkzE,SACCr2D,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYuuR,YACjBvuR,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYwuR,YAAc,KAGT,WAAjBrrS,EAAIkzE,WACCr2D,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYyuR,aACjBzuR,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAY0uR,aACZ1uR,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYuuR,YACZvuR,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYwuR,aAMT,IACR,sCC1ED,IAAIG,EAAKhlP,EAAQ,OACbwyM,EAAKxyM,EAAQ,OACbzvE,EAAWyvE,EAAQ,OACnB04D,EAAS14D,EAAQ,OAErB,SAASilP,EAAK11R,GACZ3oI,KAAK2oI,QAAUA,CAChB,CAED01R,EAAIn0Z,UAAU0tS,QAAU,SAAU52S,EAAK8wK,GAErC,QAAuBzoK,IAAnBrI,EAAI8wK,EAAKx3J,MAEX,OADAtZ,EAAI8wK,EAAKx3J,MAAQw3J,EAAKnzK,MACfqC,EAIT,IAAIrD,EAAM,CACRqD,EAAI8wK,EAAKx3J,MACTw3J,EAAKnzK,OAKP,OAFAqC,EAAI8wK,EAAKx3J,MAAQ3c,EAEVqD,CACR,EAEDq9Z,EAAIn0Z,UAAUo0Z,KAAO,SAAU9/Y,GAsB7B,GApBAA,EAAK+/Y,SAAW,CAAC,EACjB//Y,EAAKggZ,WAAa,CAAC,EACnBhgZ,EAAKq6T,SAAS4lF,SAAU,EACxBjgZ,EAAKq6T,SAAS6lF,WAAY,EAGtBlgZ,EAAKmgZ,aAAengZ,EAAKmgZ,YAAY//Z,SACvC4f,EAAK+/Y,SAAW//Y,EAAKmgZ,YAAYh8Q,OAAO3iJ,KAAK43S,QAAS,CAAC,IAIrDp5R,EAAK2vF,SAAW3vF,EAAK2vF,QAAQvvG,SAE/B4f,EAAKggZ,WAAahgZ,EAAK2vF,QAAQywT,aAAY,SAAUzwT,EAAS4lB,GAE5D,OADA5lB,EAAQ4lB,EAAOz5G,MAAQy5G,EAAOp1H,MACvBwvG,CACR,GAAE,CAAC,IAIF3vF,EAAKowN,SAAWpwN,EAAKowN,QAAQhwO,OAAQ,CACvC,IAAIgwO,EAAUpwN,EAAKowN,QAAQhpO,KAAI,SAAUiyO,GACvC,OAAOA,EAAOv9N,KAAO,IAAMu9N,EAAOl5O,KACnC,IAEGiwO,EAAQhwO,SACV4f,EAAKggZ,WAAW3mL,OAASjJ,EAAQ/sK,KAAK,MAEzC,CAGD,SAASkhJ,EAAMplN,GACb,OAAOA,EAAIolN,MAAK,SAAU17M,GACxB,OAAgD,IAAzCmX,EAAKq6T,SAASvqO,SAASxrG,QAAQuE,EACvC,GACF,CAED,GAAI07M,EAAK,CACP,kBACA,oBACA,sBACA,0BAEAvkM,EAAKq6T,SAASvqO,SAAW,2BACpB,GAAIy0G,EAAK,CACd,sCACKvkM,EAAKq6T,SAASxlR,QAGjB70C,EAAKq6T,SAAS6lF,UAAYlgZ,EAAKq6T,SAASxlR,OAAOsvF,OAAO3iJ,KAAK43S,QAAS,CAAC,GAGrEp5R,EAAKq6T,SAASjpO,KAAOg8Q,EAAG1qW,UAAU1C,EAAKq6T,SAAS6lF,YALhDlgZ,EAAKq6T,SAASjpO,KAAO,QAOlB,GAAImzG,EAAK,CACd,YACA,cACA,mBACA,yBACAvkM,EAAKq6T,SAASvqO,SAAW,mBAErB9vF,EAAKq6T,SAASjpO,MAChB,IACEpxF,EAAKq6T,SAAS4lF,QAAUz9Y,KAAKC,MAAMzC,EAAKq6T,SAASjpO,KAMlD,CALC,MAAO5oG,GACPhH,KAAK2oI,QAAQxgE,MAAMnhE,GAGnBwX,EAAKq6T,SAASvqO,SAAW,YAC1B,CAIL,OAAO9vF,CACR,EAED6/Y,EAAIn0Z,UAAUpK,QAAU,SAAUA,GAEhC,IAAKA,EAAQwlV,IACX,OAAOxlV,EAGT,IAAIwlV,EAAM,CAAC,EAqBX,GApBAxzG,EAAOwzG,EAAKxlV,EAAQwlV,KAGhBA,EAAIp0U,KAAOo0U,EAAIp0U,IAAIiqH,UACrBmqN,EAAMA,EAAIp0U,IAAIiqH,QAAQ,IAIxBmqN,EAAIrmU,IAAMqmU,EAAIrmU,KAAOnf,EAAQmf,KAAOnf,EAAQ8yH,KAAO9yH,EAAQw4U,SAAW,IACtEgN,EAAIsJ,YAActJ,EAAIsJ,aAAe,WACrCtJ,EAAIq5E,YAAcr5E,EAAIq5E,aAAe,GACrCr5E,EAAIn3O,QAAUm3O,EAAIn3O,SAAW,GAC7Bm3O,EAAI12G,QAAU02G,EAAI12G,SAAW,GAC7B02G,EAAIzM,SAAWyM,EAAIzM,UAAY,CAAC,EAChCyM,EAAIzM,SAASvqO,SAAWg3O,EAAIzM,SAASvqO,UAAY,2BAEjDg3O,EAAIu5E,SAAW,EACfv5E,EAAIw5E,YAAc,EAClBx5E,EAAIzM,SAASr8T,KAAO,GAEfmtF,EAASg/B,QAAQ28M,GACpB,OAAOxlV,EAIT,IAAImuG,EAAMjuG,KAAKs+Z,KAAKh5E,GAmBpB,SAAS7nU,EAAMpW,GACb,OAA+C,IAAxC4mG,EAAI4qO,SAASvqO,SAASxrG,QAAQuE,EACtC,CAyCD,OA3DI4mG,EAAIhvF,MACNnf,EAAQmf,IAAMgvF,EAAIhvF,KAGhBgvF,EAAIjV,SACNl5F,EAAQk5F,OAASiV,EAAIjV,QAGnB93F,OAAOQ,KAAKusG,EAAIswT,UAAU3/Z,SAC5BkB,EAAQ8rX,GAAK39Q,EAAIswT,UAGfr9Z,OAAOQ,KAAKusG,EAAIuwT,YAAY5/Z,SAC9BkB,EAAQquG,QAAUF,EAAIuwT,YAMpB/gZ,EAAK,qCACP3d,EAAQ+6J,KAAO5sD,EAAI4qO,SAAS6lF,UACnBjhZ,EAAK,oBACVwwF,EAAI4qO,SAAS4lF,UACf3+Z,EAAQ4uG,KAAOT,EAAI4qO,SAAS4lF,QAC5B3+Z,EAAQ6gG,MAAO,GAERljF,EAAK,wBACd3d,EAAQw4O,SAAW,CAAC,EAEpBrqI,EAAI4qO,SAASxlR,OAAOhxD,SAAQ,SAAU4iJ,GACpC,IAAI3jE,EAAa,CAAC,EAEb2jE,EAAMqvF,UAAarvF,EAAMqzC,aAM1BrzC,EAAMqvF,WAAarvF,EAAMtmJ,MAC3B2iF,EAAW3iF,MAAQy/Z,EAAGW,iBAAiB95Q,EAAMqvF,UACpCrvF,EAAMtmJ,QACf2iF,EAAW3iF,MAAQsmJ,EAAMtmJ,OAGvBsmJ,EAAMqvF,WACRhzJ,EAAWxhF,QAAU,CACnB2/W,SAAUx6N,EAAMqvF,SAChBh8C,YAAarzC,EAAMqzC,YAAcrzC,EAAMqzC,YAAc,OAIzDx4L,EAAQw4O,SAASrzF,EAAM3qI,MAAQgnE,GAlB7BxhF,EAAQw4O,SAASrzF,EAAM3qI,MAAQ2qI,EAAMtmJ,KAmBxC,KAEGsvG,EAAI4qO,SAASjpO,OACf9vG,EAAQ4uG,KAAOT,EAAI4qO,SAASjpO,MAIzB9vG,CACR,EAED6rI,EAAQ,EAAM0yR,sCC1Md,IAAI/0L,EAASlwD,EAAQ,OAErB,SAAS4lP,EAAcxiZ,GACrB,IAAI08E,EAAoB,GAAZ18E,EAAO,GAGnB,OAFa8sN,EAAOikC,YAAYpnQ,KAAK8K,KAAKioF,EAAO,IAC7B5uF,SAAS,UAAUq4D,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KAAKA,QAAQ,KAAM,IAC/EhzD,MAAM,EAAG6M,EACxB,CAWDmvH,EAAQszR,aAAe,SAAU5wT,EAAasvE,GAC5C,IAAIn3I,EAAa,kBACfm3I,EAAKohG,GAAK,KACVphG,EAAKljC,MAAQ,MACZkjC,EAAK3kF,QAAU,IAAIt3B,cAAgB,KACpCi8G,EAAKqsD,SAAW,KAChBrsD,EAAKyoB,KAAK71L,cAAgB,KAC1BotK,EAAK2oB,KAAO,MACX3oB,EAAKxuG,MAAQ,IAAM,KActB,OAZIwuG,EAAKxjD,MACP3zF,GAA0Bm3I,EAAKxjD,IAAIx3D,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAGzEn8B,GAA0B,KAEtBm3I,EAAKuhP,MACP14X,EAAaA,EAAam3I,EAAKuhP,IAAM,MAAQvhP,EAAKwhP,KAAO,IAAM,MAGtD71L,EAAOG,WAAWp7H,EAAY+nK,UAAW/nK,EAAYptG,KAAK6jB,OAAO0hB,GAC1DmlI,OAAO,SAE1B,EAEDhgC,EAAQ5X,OAAS,SAAUnB,EAAK55B,EAAQ2kF,GACtC,IAAIib,EAAYjb,EAAKib,WAAazyL,KAAKQ,OAAOnC,KAAKC,OAASk5K,EAAKyhP,qBAAuB,IAAM,KAC1F/wT,EAAcsvE,EAAKtvE,YACvB,IAAKA,IAAgBA,EAAYxtG,KAAOwtG,EAAYptG,MAAQotG,EAAY+nK,UACtE,MAAO,GAGT,IAA2D,IAAvD,CAAC,OAAQ,UAAUtzQ,QAAQurG,EAAY+nK,WACzC,MAAO,GAGT,IAAIipJ,EAAY,CACdtgJ,GAAInmF,EACJn+C,MAAOkjC,EAAKljC,OAASukR,EAAa,GAClChmU,OAAQA,EACRgxI,SAAUp3G,EAAI4zE,UAAY5zE,EAAI0L,QAAU,IACxC8nE,KAAMxzE,EAAI+uD,SACV2kB,KAAM1zE,EAAI0zE,OAA0B,UAAjB1zE,EAAIkzE,SAAuB,GAAK,KACnD32H,KAAMwuG,EAAKxuG,KACXgrD,IAAKwjD,EAAKxjD,IACV+kS,IAAKvhP,EAAKuhP,IACVC,IAAKxhP,EAAKwhP,KAGPE,EAAUlwV,OAASwuG,EAAK3+B,SAA4B,KAAjB2+B,EAAK3+B,UAC3CqgR,EAAUlwV,KA3Dd,SAA+B6vE,EAASo3H,EAAW99E,GACjD,IAAInpH,EAAOm6J,EAAOqB,WAAWyrC,GAK7B,OAJAjnM,EAAKrqD,OAAO,oBACZqqD,EAAKrqD,QAAQwzK,EAAcA,EAAY32H,MAAM,KAAK,GAAGJ,OAAOhxD,cAAgB,IAAM,MAClF4+D,EAAKrqD,OAAOk6H,GAAW,IACvB7vE,EAAKrqD,OAAO,MACLqqD,EAAKw8F,OAAO,SACpB,CAoDoB2zP,CAAqB3hP,EAAK3+B,QAAS3wC,EAAY+nK,UAAWz4F,EAAK2a,cAGlF,IAAIsoI,EAAMj1L,EAAQszR,aAAa5wT,EAAagxT,GAExCE,EAA2B,OAAlBF,EAAUllS,UAAkC9wH,IAAlBg2Z,EAAUllS,KAAuC,KAAlBklS,EAAUllS,IAC5EpG,EAAS,YAAc1lB,EAAYxtG,GACrC,UAAYw+Z,EAAUtgJ,GACtB,aAAesgJ,EAAU5kR,OACxB4kR,EAAUlwV,KAAO,YAAckwV,EAAUlwV,KAAO,KAChDowV,EAAS,WAAaF,EAAUllS,IAAIx3D,QAAQ,MAAO,QAAQA,QAAQ,KAAM,OAAS,IACnF,WAAai+P,EAAM,IAMrB,OAJIy+F,EAAUH,MACZnrS,EAASA,EAAS,UAAYsrS,EAAUH,KAAOG,EAAUF,IAAM,WAAaE,EAAUF,IAAM,IAAM,KAG7FprS,CACR,oDCtFGyrS,EAAoBpmP,EAAQ,OAC5BkwD,EAASlwD,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OAET6oF,EAAgC,qBAAjBhkD,aACfxuE,EAAQyuE,SACRD,aAkDJtyE,EAAQsvR,sBAhDR,SAAgC5nW,GAC9B,OACEA,EAAOq7C,MACPr7C,EAAOosW,mBACNpsW,EAAOstC,MAA+B,mBAAhBttC,EAAOstC,MAC9BttC,EAAOqsW,SAEV,EA0CD/zR,EAAQg0R,cAxCR,SAAwB3+Z,EAAK87V,GAC3B,IAAI9zI,EACJ,IACEA,EAAMhoM,KAAKE,UAAUlgB,EAAK87V,EAG3B,CAFC,MAAO91V,GACPgiN,EAAMw2M,EAAkBx+Z,EAAK87V,EAC9B,CACD,OAAO9zI,CACR,EAiCDr9E,EAAQm+F,IA/BR,SAAcl4D,GACZ,OAAO03D,EAAOqB,WAAW,OAAO7lN,OAAO8sJ,GAAKjG,OAAO,MACpD,EA8BDhgC,EAAQi0R,aA5BR,SAAuBpvP,GACrB,OAAOA,EAAGquC,UAAYruC,EAAGrwG,MAAQqwG,EAAGjkH,IACrC,EA2BDo/E,EAAQu5N,SAzBR,SAAmBtzL,GACjB,OAAOhlC,EAAOvtH,KAAKuyJ,GAAO,GAAI,QAAQtnK,SAAS,SAChD,EAwBDqhI,EAAQ7vH,KAtBR,SAAe9a,GACb,IAAIwpG,EAAI,CAAC,EAIT,OAHAtpG,OAAOQ,KAAKV,GAAKqB,SAAQ,SAAUzE,GACjC4sG,EAAE5sG,GAAKoD,EAAIpD,EACZ,IACM4sG,CACR,EAiBDmhC,EAAQ/sH,QAfR,WACE,IAAIihZ,EAAUpwR,EAAQ7wH,QAAQ+jD,QAAQ,IAAK,IAAIhB,MAAM,KACrD,MAAO,CACLm+V,MAAOxjZ,SAASujZ,EAAQ,GAAI,IAC5BE,MAAOzjZ,SAASujZ,EAAQ,GAAI,IAC5BtE,MAAOj/Y,SAASujZ,EAAQ,GAAI,IAE/B,EASDl0R,EAAQs2H,MAAQA,sCC/DhB,IAAItjP,EAAOy6J,EAAQ,OACf2wH,EAAiB3wH,EAAQ,OACzB4mP,EAAW5mP,EAAQ,OACnBxsC,EAASwsC,EAAAA,OAAAA,OAEb,SAAS6mP,EAAWt3R,GAClB3oI,KAAK2oI,QAAUA,EACf3oI,KAAKwyF,SAAW7zE,IAChB3e,KAAKkga,SAAU,EACflga,KAAK0uG,KAAO,IACb,CAEDuxT,EAAU/1Z,UAAUi2Z,UAAY,SAAUrga,GACxC,IAAIqJ,EAAOnJ,KACPkga,GAAU,EACVz9Z,EAAQ3C,EAAQ0e,MAAQ1e,EAyB5B,OAvBK2C,EAAMJ,SACT8G,EAAKw/H,QAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,4CAGftI,IAApBvJ,EAAQoga,UACVA,EAAUpga,EAAQoga,SAGgC,YAAhD/2Z,EAAKw/H,QAAQ8pJ,UAAU,uBACzBytI,GAAU,GAGPA,GACHz9Z,EAAMJ,SAAQ,SAAUukL,GACG,qBAAdA,EAAKl4E,MACdvlG,EAAKw/H,QAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,yCAEnCquZ,EAASp5O,EAAKl4E,QAChBwxT,GAAU,EAEb,IAGIA,CACR,EAEDD,EAAU/1Z,UAAUk2Z,WAAa,SAAUF,GACzC,IAAI/2Z,EAAOnJ,KAEPkga,IAAY/2Z,EAAKw/H,QAAQ6pJ,UAAU,sBACrCrpR,EAAKw/H,QAAQs8I,UAAU,oBAAqB,WAG9C,IAAIlxJ,EAAS5qH,EAAKw/H,QAAQ8pJ,UAAU,gBAE/B1+J,IAA2C,IAAjCA,EAAOjxH,QAAQ,cAGQ,IAAhCixH,EAAOjxH,QAAQ,YACjBqG,EAAKqpF,SAAWuhC,EAAOpxD,QAAQ,yBAA0B,MAEzDx5D,EAAKw/H,QAAQs8I,UAAU,eAAgBlxJ,EAAS,cAAgB5qH,EAAKqpF,UALvErpF,EAAKw/H,QAAQs8I,UAAU,eAAgB,+BAAiC97Q,EAAKqpF,SAQhF,EAEDytU,EAAU/1Z,UAAUsuO,MAAQ,SAAU/1O,EAAOy9Z,GAC3C,IAAI/2Z,EAAOnJ,KACP0uG,EAAOwxT,EAAU,IAAIn2H,EAAmB,GAE5C,SAASh+Q,EAAK66J,GAIZ,MAHoB,kBAATA,IACTA,EAAOA,EAAKt8K,YAEP41Z,EAAUxxT,EAAKiqI,OAAO/xD,GAAQl4E,EAAKhwG,KAAKkuI,EAAOvtH,KAAKunK,GAC5D,CAuBD,OArBIz9K,EAAKw/H,QAAQ03R,cACft0Y,EAAI,QAGNtpB,EAAMJ,SAAQ,SAAUukL,GACtB,IAAI05O,EAAW,KAAOn3Z,EAAKqpF,SAAW,OACtCtxF,OAAOQ,KAAKklL,GAAMvkL,SAAQ,SAAUpB,GACtB,SAARA,IACJq/Z,GAAYr/Z,EAAM,KAAO2lL,EAAK3lL,GAAO,OACtC,IAED8qB,EADAu0Y,GAAY,QAEZv0Y,EAAI66J,EAAKl4E,MACT3iF,EAAI,OACL,IACDA,EAAI,KAAO5iB,EAAKqpF,SAAW,MAEvBrpF,EAAKw/H,QAAQ43R,eACfx0Y,EAAI,QAGC2iF,CACR,EAEDuxT,EAAU/1Z,UAAUwyZ,UAAY,SAAU58Z,GACxC,IAAIqJ,EAAOnJ,KAEPkga,EAAU/2Z,EAAKg3Z,UAAUrga,GACzB2C,EAAQ3C,EAAQ0e,MAAQ1e,EAE5BqJ,EAAKi3Z,WAAWF,GAChB/2Z,EAAK+2Z,QAAUA,EACf/2Z,EAAKulG,KAAOvlG,EAAKqvO,MAAM/1O,EAAOy9Z,EAC/B,EAEDv0R,EAAQ,EAAYs0R,sCC7GpB,IAAIhhZ,EAAMm6J,EAAQ,OACdwyM,EAAKxyM,EAAQ,OACbuiP,EAAWviP,EAAQ,OACnBz6J,EAAOy6J,EAAQ,OACfonP,EAAQpnP,EAAQ,OAChBkwD,EAASlwD,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OAEb,SAASqnP,EAAO93R,GACd3oI,KAAK2oI,QAAUA,EACf3oI,KAAKqzD,OAAS,IACf,CAEDotW,EAAMv2Z,UAAUw2Z,YAAc,SAAUC,EAAQ/tS,EAAK55B,EAAQ4rG,EAAO/pC,EAAM+lQ,GACxE,IAAI5yC,EAAK,CAAC,EACV,IAAK,IAAIpwX,KAAK+ia,EACZ3yC,EAAG,SAAWpwX,GAAK+ia,EAAO/ia,GAEvBowX,EAAG6yC,gBACN7yC,EAAG6yC,cAAgB,OAEhB7yC,EAAG8yC,kBACN9yC,EAAG8yC,gBAAkB36Z,KAAKQ,MAAMnC,KAAKC,MAAQ,KAAM6F,YAEhD0jX,EAAG+yC,cACN/yC,EAAG+yC,YAAcpiZ,IAAOgkD,QAAQ,KAAM,KAEnCqrT,EAAGgzC,yBACNhzC,EAAGgzC,uBAAyB,aAG9B,IAAIC,EAAiCjzC,EAAGkzC,uBAAyBlzC,EAAGmzC,yBAC7DnzC,EAAGkzC,6BACHlzC,EAAGmzC,kBAEV,IAAItqD,EAAemX,EAAGozC,0BACfpzC,EAAGozC,mBAEV,IAAI7xN,EAAQy+K,EAAGqzC,mBACRrzC,EAAGqzC,mBACHrzC,EAAGszC,uBAEV,IAAIC,EAAU3uS,EAAIkzE,SAAW,KAAOlzE,EAAIwzE,KAAOxzE,EAAI4zE,SAC/CnzI,EAASutW,EAAM3/Y,MAAM,GAAG87H,OAAO6nD,EAAO/pC,EAAM+lQ,EAAM1/Y,UAAU8sW,IAAKnsT,KAAK,MAe1E,OAbAmsT,EAAGwzC,gBAAkBhB,EAAMluY,KACzB07V,EAAGgzC,uBACHhoU,EACAuoU,EACAluW,EACA4tW,EACApqD,GAGEtnK,IACFy+K,EAAGz+K,MAAQA,GAGNy+K,CACR,EAEDyyC,EAAMv2Z,UAAUu3Z,cAAgB,SAAUd,EAAQjyT,GAC5C,CAAC,YAAa,YAAY5rG,QAAQ69Z,EAAOe,kBAAoB,aAAe,GAC9E1ha,KAAK2oI,QAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,UAAYgvZ,EAAOe,iBACtD,4DAGJ,IAAIC,EAASr4L,EAAOqB,WAAW,QAC/Bg3L,EAAO78Y,OAAO4pF,GAAQ,IACtB,IAAI83O,EAAOm7E,EAAOh2P,OAAO,OAEzB,OAAO/+B,EAAOvtH,KAAKmnU,EAAM,OAAOl8U,SAAS,SAC1C,EAEDm2Z,EAAMv2Z,UAAU03Z,aAAe,SAAU5zC,EAAI/M,EAAKz/V,GAChDA,EAAOA,GAAQ,GAEf,IAAI6xC,EAASnyD,OAAOQ,KAAKssX,GAAInsX,QAAO,SAAUjE,GAC5C,MAAa,UAANA,GAAuB,oBAANA,CACzB,IAAEg8D,OAOH,OALIo0T,EAAGz+K,OACLl8I,EAAO7jD,OAAO,EAAG,EAAG,SAEtB6jD,EAAO30D,KAAK,mBAEL20D,EAAOztD,KAAI,SAAUhI,GAC1B,OAAOA,EAAI,IAAM4jB,EAAOg/Y,EAAMjqD,QAAQyX,EAAGpwX,IAAM4jB,CAChD,IAAEqgD,KAAKo/S,EACT,EAEDw/C,EAAMv2Z,UAAUwyZ,UAAY,SAAUiE,GACpC,IAAIx3Z,EAAOnJ,KACXmJ,EAAKkqD,OAASstW,EAEd,IAMI9lQ,EACA+pC,EAPAhyE,EAAMzpH,EAAKw/H,QAAQ/V,KAAO,CAAC,EAC3B55B,EAAS7vF,EAAKw/H,QAAQ3vC,QAAU,GAChCmV,EAAUwtT,EAASxyZ,EAAKw/H,QAAQx6B,SAChCO,EAAOvlG,EAAKw/H,QAAQj6B,MAAQ,GAC5BkyT,EAAQz3Z,EAAKw/H,QAAQi4R,OAASh1C,EAI9BtzL,EAAcnqF,EAAQ3jG,IAAI,iBAAmB,GAC7Cq3Z,EAAkB,oCAClB7mI,EAAY2lI,EAAOmB,kBAAoB,SAEvCxpO,EAAY3oL,MAAM,EAAGkyZ,EAAgBjja,UAAYija,IACnDvpO,EAAcupO,EACdhnQ,EAAOnsD,GAELkkB,EAAIgyE,QACNA,EAAQhyE,EAAIgyE,OAEI,SAAdo2F,GAAoC,SAAXhiM,GAAqBs/F,IAAgBupO,GAChE14Z,EAAKw/H,QAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,kEACbkwZ,IAGrBhnQ,GAAoC,mBAArB8lQ,EAAOoB,YACzBpB,EAAOoB,UAAY54Z,EAAKs4Z,cAAcd,EAAQx3Z,EAAKw/H,QAAQj6B,KAAKpkG,aAGlE,IAAI0jX,EAAK7kX,EAAKu3Z,YAAYC,EAAQ/tS,EAAK55B,EAAQ4rG,EAAO/pC,EAAM+lQ,GAE5D,OAAQ5lI,GACN,IAAK,SACH7xR,EAAKw/H,QAAQs8I,UAAU,gBAAiB,SAAW97Q,EAAKy4Z,aAAa5zC,EAAI,IAAK,MAC9E,MAEF,IAAK,QACH,IAAIpkP,EAAOzgI,EAAKw/H,QAAQ/V,IAAIgX,OAASg7D,EAAQ,IAAM,KAAOz7L,EAAKy4Z,aAAa5zC,EAAI,KAChF7kX,EAAKw/H,QAAQ/V,IAAM3zG,EAAIgC,MAAM2oH,GAC7BzgI,EAAKw/H,QAAQxoE,KAAOh3D,EAAKw/H,QAAQ/V,IAAIzyD,KACrC,MAEF,IAAK,OACHh3D,EAAKw/H,QAAQj6B,MAAQmsD,EAAOA,EAAO,IAAM,IAAM1xJ,EAAKy4Z,aAAa5zC,EAAI,KACrE,MAEF,QACE7kX,EAAKw/H,QAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,oCAE1C,EAEDg6H,EAAQ,EAAQ80R,sCCjJhB,IAAI70C,EAAKxyM,EAAQ,OACbmxD,EAAcnxD,EAAQ,OAE1B,SAAS4oP,EAAar5R,GACpB3oI,KAAK2oI,QAAUA,EACf3oI,KAAKiia,IAAM,KACXjia,KAAKkia,eAAiB,KACtBlia,KAAKmia,aAAe,KACpBnia,KAAKoia,iBAAmB,IACzB,CAEDJ,EAAY93Z,UAAUklD,KAAO,SAAUtvD,GACjCE,KAAKiia,MAETjia,KAAKkia,eAAiBpia,EAAQoia,eAC9Blia,KAAKiia,IAAOjia,KAAKkia,eAAiB33L,EAAcqhJ,EAEhD5rX,KAAKmia,aAAeria,EAAQuia,gBAAkB,CAAC,EAC/Cria,KAAKoia,iBAAmBtia,EAAQwia,oBAAsB,CAAC,EACxD,EAEDN,EAAY93Z,UAAUgX,UAAY,SAAUlgB,GAC1C,OAAQhB,KAAKkia,eACTlia,KAAKu2W,QAAQv2W,KAAKiia,IAAI/gZ,UAAUlgB,EAChChB,KAAKoia,iBAAiBnhD,KAAO,KAC7BjhX,KAAKoia,iBAAiB/vQ,IAAM,KAC5BryJ,KAAKoia,mBACLpia,KAAKiia,IAAI/gZ,UAAUlgB,EAAKhB,KAAKoia,iBAClC,EAEDJ,EAAY93Z,UAAU+W,MAAQ,SAAU2wJ,GACtC,OAAQ5xK,KAAKkia,eACTlia,KAAKiia,IAAIhhZ,MAAM2wJ,EACf5xK,KAAKmia,aAAalhD,KAAO,KACzBjhX,KAAKmia,aAAa9vQ,IAAM,KACxBryJ,KAAKmia,cACLnia,KAAKiia,IAAIhhZ,MAAM2wJ,EAAK5xK,KAAKmia,aAC9B,EAEDH,EAAY93Z,UAAUqsW,QAAU,SAAU3kM,GACxC,OAAOA,EAAIjvG,QAAQ,YAAY,SAAU9uD,GACvC,MAAO,IAAMA,EAAEg8I,WAAW,GAAGvlJ,SAAS,IAAIo3D,aAC3C,GACF,EAEDsgW,EAAY93Z,UAAU46L,SAAWylC,EAAYzlC,SAE7Cn5D,EAAQ,EAAcq2R,sCC/CtB,IAAI/iZ,EAAMm6J,EAAQ,OACdmpP,EAAQ,WAEZ,SAASC,EAAU75R,GACjB3oI,KAAK2oI,QAAUA,EACf3oI,KAAKyia,gBAAiB,EACtBzia,KAAK0ia,iBAAkB,EACvB1ia,KAAK2ia,oBAAqB,EAC1B3ia,KAAK4ia,0BAA2B,EAChC5ia,KAAK6ia,cAAgB,WAAc,OAAO,CAAM,EAChD7ia,KAAK8ia,aAAe,GACpB9ia,KAAKqzU,UAAY,GACjBrzU,KAAK+ia,kBAAoB,EACzB/ia,KAAKgja,qBAAsB,CAC5B,CAEDR,EAASt4Z,UAAUwyZ,UAAY,SAAU58Z,GACvC,IAAIqJ,EAAOnJ,UAEkBqJ,IAAzBvJ,EAAQgja,eACV35Z,EAAK25Z,aAAehja,EAAQgja,cAEQ,oBAA3Bhja,EAAQ2ia,iBACjBt5Z,EAAK05Z,cAAgB/ia,EAAQ2ia,qBAEAp5Z,IAA3BvJ,EAAQ2ia,iBACVt5Z,EAAKu5Z,kBAAoB5ia,EAAQ2ia,qBAEAp5Z,IAA/BvJ,EAAQ6ia,qBACVx5Z,EAAKw5Z,mBAAqB7ia,EAAQ6ia,qBAEhCx5Z,EAAKu5Z,iBAAmBv5Z,EAAKw5Z,sBAC/Bx5Z,EAAKkqU,UAAYlqU,EAAKkqU,WAAa,SAEDhqU,IAAhCvJ,EAAQkja,sBACV75Z,EAAK65Z,oBAAsBlja,EAAQkja,0BAEI35Z,IAArCvJ,EAAQ8ia,2BACVz5Z,EAAKy5Z,yBAA2B9ia,EAAQ8ia,yBAE3C,EAEDJ,EAASt4Z,UAAU+4Z,WAAa,SAAUn1T,GACxC,IAAI3kG,EAAOnJ,KACP2oI,EAAUx/H,EAAKw/H,QAEfs6R,EAAa,KACjB,GAAIn1T,EAASg6N,YAAc,KAAOh6N,EAASg6N,WAAa,KAAOh6N,EAAS6tT,SAASpxZ,IAAI,YAAa,CAChG,IAAI2gD,EAAW4iD,EAAS6tT,SAASnxZ,IAAI,YAGrC,GAFAm+H,EAAQxgE,MAAM,WAAYjd,GAEtB/hD,EAAKw5Z,mBACPM,EAAa/3W,OACR,GAAI/hD,EAAKu5Z,gBACd,OAAQ/5R,EAAQ3vC,QACd,IAAK,QACL,IAAK,MACL,IAAK,OACL,IAAK,SAEH,MACF,QACEiqU,EAAa/3W,EAIpB,MAAM,GAA4B,MAAxB4iD,EAASg6N,WAAoB,CACtC,IAAI17F,EAAazjG,EAAQu6R,MAAMvG,WAAW7uT,GACtCs+H,IACFzjG,EAAQs8I,UAAU,gBAAiB74C,GACnC62L,EAAat6R,EAAQ/V,IAExB,CACD,OAAOqwS,CACR,EAEDT,EAASt4Z,UAAUyyZ,WAAa,SAAU7uT,GACxC,IAAI3kG,EAAOnJ,KACP2oI,EAAUx/H,EAAKw/H,QAEfs6R,EAAa95Z,EAAK85Z,WAAWn1T,GACjC,IAAKm1T,IAAe95Z,EAAK05Z,cAActka,KAAKoqI,EAAS76B,GACnD,OAAO,EAYT,GATA66B,EAAQxgE,MAAM,cAAe86V,GAKzBn1T,EAAS6uK,QACX7uK,EAAS6uK,SAGPxzQ,EAAK45Z,mBAAqB55Z,EAAK25Z,aAEjC,OADAn6R,EAAQ2L,KAAK,QAAS,IAAI3iI,MAAM,4DAA8Dg3H,EAAQ/V,IAAIgX,QACnG,EAETzgI,EAAK45Z,mBAAqB,EAErBR,EAAM9kZ,KAAKwlZ,KACdA,EAAahkZ,EAAIxW,QAAQkgI,EAAQ/V,IAAIgX,KAAMq5R,IAG7C,IAAIE,EAAUx6R,EAAQ/V,IA4CtB,OA3CA+V,EAAQ/V,IAAM3zG,EAAIgC,MAAMgiZ,GAGpBt6R,EAAQ/V,IAAIkzE,WAAaq9N,EAAQr9N,iBAC5Bn9D,EAAQy6R,MAGjBj6Z,EAAKkqU,UAAU30U,KAAK,CAAEopU,WAAYh6N,EAASg6N,WAAYu7F,YAAaJ,IAEhE95Z,EAAKw5Z,oBAAyC,SAAnBh6R,EAAQ3vC,QACb,MAAxB8U,EAASg6N,YAA8C,MAAxBh6N,EAASg6N,aACxCn/L,EAAQ3vC,OAAS7vF,EAAKy5Z,yBAA2Bj6R,EAAQ3vC,OAAS,cAG7D2vC,EAAQvpI,WACRupI,EAAQ16B,WACR06B,EAAQ26R,SACa,MAAxBx1T,EAASg6N,YAA8C,MAAxBh6N,EAASg6N,oBAGnCn/L,EAAQj6B,YACRi6B,EAAQ46R,MACX56R,EAAQx6B,UACVw6B,EAAQ+pJ,aAAa,QACrB/pJ,EAAQ+pJ,aAAa,gBACrB/pJ,EAAQ+pJ,aAAa,kBACjB/pJ,EAAQ/V,IAAI+uD,WAAah5C,EAAQ66R,aAAa7hW,MAAM,KAAK,IAI3DgnE,EAAQ+pJ,aAAa,mBAKtBvpR,EAAK65Z,qBACRr6R,EAAQs8I,UAAU,UAAWk+I,EAAQv5R,MAGvCjB,EAAQ2L,KAAK,YAEb3L,EAAQv5E,QAED,CACR,EAEDu8E,EAAQ,EAAW62R,sCCvJnB,IAAIvjZ,EAAMm6J,EAAQ,OACdqqP,EAASrqP,EAAQ,OAEjBsqP,EAA8B,CAChC,SACA,iBACA,kBACA,kBACA,gBACA,gBACA,mBACA,mBACA,mBACA,cACA,gBACA,eACA,aACA,OACA,SACA,eACA,SACA,UACA,KACA,aACA,OAGEC,EAAkC,CACpC,uBA0EF,SAASC,EAAQj7R,GACf3oI,KAAK2oI,QAAUA,EACf3oI,KAAK6ja,qBAAuBH,EAC5B1ja,KAAK8ja,yBAA2B,GACF,qBAAnBn7R,EAAQ86R,SACjBzja,KAAK+ja,eAAiBp7R,EAAQ86R,OAEjC,CAEDG,EAAO15Z,UAAU85Z,UAAY,WAC3B,IAAI76Z,EAAOnJ,KACP2oI,EAAUx/H,EAAKw/H,QAInB,MAAmC,qBAAxBx/H,EAAK46Z,eACP56Z,EAAK46Z,eAIe,WAAzBp7R,EAAQ/V,IAAIkzE,QAMjB,EAED89N,EAAO15Z,UAAUogD,MAAQ,SAAUxqD,GACjC,IAAIqJ,EAAOnJ,KACP2oI,EAAUx/H,EAAKw/H,QAQnB,GANA7oI,EAAUA,GAAW,CAAC,EAEO,kBAAlB6oI,EAAQs7R,QACjBt7R,EAAQs7R,MAAQhlZ,EAAIgC,MAAM0nH,EAAQs7R,SAG/Bt7R,EAAQs7R,QAAUt7R,EAAQ86R,OAC7B,OAAO,EAIL3ja,EAAQ+ja,uBACV16Z,EAAK06Z,qBAAuB/ja,EAAQ+ja,sBAElC/ja,EAAQgka,2BACV36Z,EAAK26Z,yBAA2Bhka,EAAQgka,0BAG1C,IAAIA,EAA2B36Z,EAAK26Z,yBAAyB/mR,OAAO4mR,GAChEE,EAAuB16Z,EAAK06Z,qBAAqB9mR,OAAO+mR,GAIxDI,EA9GN,SAAwC/1T,EAAS01T,GAC/C,IAAIM,EAAYN,EACblhR,QAAO,SAAUl4I,EAAKspH,GAErB,OADAtpH,EAAIspH,EAAOxjH,gBAAiB,EACrB9F,CACR,GAAE,CAAC,GAEN,OAAOvJ,OAAOQ,KAAKysG,GAChBtsG,QAAO,SAAUkyH,GAChB,OAAOowS,EAAUpwS,EAAOxjH,cACzB,IACAoyI,QAAO,SAAUl4I,EAAKspH,GAErB,OADAtpH,EAAIspH,GAAU5lB,EAAQ4lB,GACftpH,CACR,GAAE,CAAC,EACP,CA+FoB25Z,CAA8Bz7R,EAAQx6B,QAAS01T,GAClEK,EAAa99N,KA/Hf,SAA6Bi+N,GAC3B,IAAI/9N,EAAO+9N,EAAU/9N,KACjBR,EAAWu+N,EAAUv+N,SACrBw+N,EAAYD,EAAU1iP,SAAW,IAUrC,OAPE2iP,GADEh+N,IAEoB,WAAbR,EACI,MAEA,MAIhB,CAiHqBy+N,CAAmB57R,EAAQ/V,KAE/CkxS,EAAyBzha,QAAQsmI,EAAQ+pJ,aAAc/pJ,GAGvD,IAAI67R,EApEN,SAAsB77R,GACpB,IAEI87R,GAT0B7xS,EAOpB+V,EAAQ/V,IAPiBqxS,EAQvBt7R,EAAQs7R,MALb,CAF6B,WAAjBrxS,EAAIkzE,SAAwB,QAAU,OACjB,WAAnBm+N,EAAMn+N,SAAwB,QAAU,QACzBjkI,KAAK,SAH3C,IAAgC+wD,EAAKqxS,EAUnC,OAAOR,EAAOgB,EACf,CA+DgBC,CAAY/7R,GACvBg8R,EApGN,SAAiCh8R,EAASu7R,GACxC,IAAID,EAAQt7R,EAAQs7R,MAqBpB,MAnBoB,CAClBA,MAAO,CACL79N,KAAM69N,EAAMtiP,SACZ2kB,MAAO29N,EAAM39N,KACbs+N,UAAWX,EAAMp0L,KACjB1hI,QAAS+1T,GAEX/1T,QAASw6B,EAAQx6B,QACjB4+Q,GAAIpkP,EAAQokP,GACZ83C,KAAMl8R,EAAQk8R,KACd5ja,IAAK0nI,EAAQ1nI,IACbw7W,WAAY9zO,EAAQ8zO,WACpBqoD,IAAKn8R,EAAQm8R,IACbzzJ,QAAS1oI,EAAQ0oI,QACjB0zJ,mBAAoBp8R,EAAQo8R,mBAC5BC,cAAer8R,EAAQq8R,cACvBC,eAAgBt8R,EAAQs8R,eAI3B,CA6EqBC,CAAuBv8R,EAASu7R,GAGpD,OAFAv7R,EAAQy6R,MAAQoB,EAASG,IAElB,CACR,EAEDf,EAAOF,4BAA8BA,EACrCE,EAAOD,gCAAkCA,EACzCh4R,EAAQ,EAASi4R,qBC7KjBzgQ,EAAOx3B,QAAyB,iBAARxiI,KAAmBA,KAAK6tO,SAAWn0O,OAAOm0O,6CC8BlE,IASIqyI,EATAtoC,EAAM3nK,EAAQ,MACdq5O,EAAWr5O,EAAAA,OAAAA,MACXM,EAAON,EAAQ,OACfs5O,EAAYt5O,EAAQ,OACpBu5O,EAAQv5O,EAAAA,OAAAA,EACRw5O,EAAoBx5O,EAAAA,OAAAA,EACpBy5O,EAAYz5O,EAAAA,OAAAA,EACZ84D,EAAU94D,EAAQ,OAGtB,IACEiwM,EAAWjwM,EAAQ,MAGpB,CAFC,MAAMpyK,GACNyN,QAAQC,KAAK,iFACd,CAID,IAAIo+Y,EAAgB,gDAEhBC,EAAgB,cAKhBC,EAAc,CAAC,KAAM,KAAM,MAI3BC,EAAa,wBAIbC,EAAa,6CAEbC,EAAe,CACjBC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EAAGC,IAAI,EACvCC,IAAI,EAAGC,IAAI,EAAG1yC,IAAI,EAAGh8J,IAAI,EAAG2uM,IAAI,GAAI93K,IAAI,IAEtC+3K,EAAe,CACjB,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAEhEC,EAAa,CACf,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAGlCC,EAAW,aAaf,SAASC,EAAYzmR,EAAO0mR,EAAWC,EAAWC,GAEhD,IADA,IAAI3oY,EAAQ,EACLA,EAAQ+hH,EAAM3uI,QAAQ,CAC3B,IAAIiV,EAAI05H,EAAMsiB,WAAWrkI,GAEzB,GAAI3X,GAAK,IAAQA,GAAK,GACpB,MAEF2X,GACD,CAGD,OAAIA,EAAQyoY,GAAazoY,EAAQ0oY,EACxB,KAGJC,GAAc3oY,GAAS+hH,EAAM3uI,OAI3B0d,SAASixH,EAAMonC,OAAO,EAAEnpJ,GAAQ,IAH9B,IAIV,CAED,SAAS4oY,EAAU7mR,GACjB,IAAI9qI,EAAQ8qI,EAAM5rE,MAAM,KACpByS,EAAS,CAAC,EAAE,EAAE,GAQlB,GAAqB,IAAjB3xE,EAAM7D,OACR,OAAO,KAGT,IAAK,IAAIhB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1B,IAAIu2Z,EAAmB,GAALv2Z,EACdygK,EAAM21P,EAAYvxZ,EAAM7E,GAAI,EAAG,EAAGu2Z,GACtC,GAAY,OAAR91P,EACF,OAAO,KAETjqF,EAAOx2E,GAAKygK,CACb,CAED,OAAOjqF,CACR,CAED,SAASigV,EAAW9mR,GAClBA,EAAQ9/F,OAAO8/F,GAAOonC,OAAO,EAAE,GAAGpkK,cAClC,IAAI8tJ,EAAM80P,EAAa5lR,GACvB,OAAO8wB,GAAO,EAAIA,EAAM,IACzB,CAKD,SAASi2P,EAAU1iP,GACjB,GAAKA,EAAL,CAQA,IAAI2iP,EAAS3iP,EAAIjwG,MAAMuxV,GACvB,GAAKqB,EAAL,CAWA,IAPA,IAAIlzO,EAAO,KACPC,EAAS,KACTC,EAAS,KACTizO,EAAa,KACbtzO,EAAQ,KACRD,EAAO,KAEFrjL,EAAE,EAAGA,EAAE22Z,EAAO31Z,OAAQhB,IAAK,CAClC,IAKIw2E,EALAm5D,EAAQgnR,EAAO32Z,GAAG2jE,OACtB,GAAKgsE,EAAM3uI,OAYI,OAAX2iL,IACFntG,EAASggV,EAAU7mR,KAEjB8zC,EAAOjtG,EAAO,GACdktG,EAASltG,EAAO,GAChBmtG,EAASntG,EAAO,IAUD,OAAfogV,GAGa,QADfpgV,EAAS4/U,EAAYzmR,EAAO,EAAG,GAAG,IAYtB,OAAV2zC,GAEa,QADf9sG,EAASigV,EAAW9mR,IAYT,OAAT0zC,GAGa,QADf7sG,EAAS4/U,EAAYzmR,EAAO,EAAG,GAAG,OAEhC0zC,EAAO7sG,IAOK,IAAM6sG,GAAQ,GACxBA,GAAQ,KACCA,GAAQ,GAAKA,GAAQ,KAC9BA,GAAQ,MAxBVC,EAAQ9sG,EAbRogV,EAAapgV,CAyClB,CAeD,KACiB,OAAfogV,GAAiC,OAAVtzO,GAA2B,OAATD,GAA4B,OAAXM,GAC1DizO,EAAa,GAAKA,EAAa,IAC/BvzO,EAAO,MACPI,EAAO,IACPC,EAAS,IACTC,EAAS,IAKX,OAAO,IAAI/8K,KAAKA,KAAKyhN,IAAIhlC,EAAMC,EAAOszO,EAAYnzO,EAAMC,EAAQC,GA7G/D,CATA,CAuHF,CAED,SAASkzO,EAAWzzO,GAClB,IAAIzoK,EAAIyoK,EAAK6lC,aAActuM,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EACjD,IAAIG,EAAIsoK,EAAK8lC,cAAepuM,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EAClD,IAAI/H,EAAIqwK,EAAK+lC,gBAAiBp2M,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EACpD,IAAI0C,EAAI2tK,EAAKgmC,gBACb,OAD8B3zM,EAAIA,GAAK,GAAKA,EAAI,IAAIA,EAC7CygZ,EAAW9yO,EAAKsiL,aAAe,KACpC/qV,EAAE,IAAKs7Y,EAAa7yO,EAAK4lC,eAAgB,IAAK5lC,EAAK2lC,iBAAkB,IACrEjuM,EAAE,IAAI/H,EAAE,IAAI0C,EAAE,MACjB,CAGD,SAASqhZ,EAAgB9iP,GACvB,OAAW,MAAPA,EACK,MAETA,EAAMA,EAAIrwG,OAAOoB,QAAQ,MAAM,IAG3B0mT,GAAY,mBAAmB5rW,KAAKm0J,KACtCA,EAAMy3M,EAASxD,QAAQj0M,IAGlBA,EAAIrhK,cACZ,CAGD,SAASokZ,EAAY/iP,EAAKgjP,EAAQC,GAChC,GAAW,MAAPjjP,GAAyB,MAAVgjP,EACjB,OAAO,KAYT,IAVqB,IAAjBC,IACFjjP,EAAM8iP,EAAgB9iP,GACtBgjP,EAASF,EAAgBE,IAQvBhjP,GAAOgjP,EACT,OAAO,EAMT,GAAI7zE,EAAI+zE,KAAKljP,GACX,OAAO,EAIT,IAAIkxL,EAAMlxL,EAAI9uK,QAAQ8xZ,GACtB,QAAI9xD,GAAO,KAMPlxL,EAAIhzK,SAAWg2Z,EAAOh2Z,OAASkkW,GAMP,MAAxBlxL,EAAI+C,OAAOmuL,EAAI,EAAE,GAKtB,CAWD,SAASvnC,EAAYp7P,GAGnB,IAAKA,GAA6B,MAArBA,EAAKw0G,OAAO,EAAE,GACzB,MAAO,IAKT,GAAa,MAATx0G,EACF,OAAOA,EAGT,IAAI40V,EAAa50V,EAAKoyC,YAAY,KAClC,OAAmB,IAAfwiT,EACK,IAKF50V,EAAKxwD,MAAM,EAAGolZ,EACtB,CAaD,SAASC,EAAgBC,EAAYC,GAGnC,IAYIC,EAAYC,EAZZC,GAFJJ,EAZF,SAAwBrjP,GACtB,IAAK,IAAI/gK,EAAI,EAAGA,EAAImiZ,EAAYp0Z,OAAQiS,IAAK,CAC3C,IAAIykZ,EAAgB1jP,EAAI9uK,QAAQkwZ,EAAYniZ,KACrB,IAAnBykZ,IACF1jP,EAAMA,EAAI+C,OAAO,EAAE2gP,GAEtB,CAED,OAAO1jP,CACR,CAGc2jP,CAAeN,IAEHnyZ,QAAQ,KACjC,GAAIoyZ,EACc,IAAZG,IAEFA,GADAJ,EAAaA,EAAWtgP,OAAO,IACV7xK,QAAQ,WAG/B,GAAIuyZ,GAAW,EACb,OAaJ,GARIA,GAAW,GACbF,EAAa,GACbC,EAAcH,EAAW1zV,SAEzB4zV,EAAaF,EAAWtgP,OAAO,EAAG0gP,GAAS9zV,OAC3C6zV,EAAcH,EAAWtgP,OAAO0gP,EAAQ,GAAG9zV,SAGzCwxV,EAAct1Y,KAAK03Y,KAAepC,EAAct1Y,KAAK23Y,GAAzD,CAIA,IAAIvhZ,EAAI,IAAI2hZ,EAGZ,OAFA3hZ,EAAE5S,IAAMk0Z,EACRthZ,EAAElV,MAAQy2Z,EACHvhZ,CALN,CAMF,CAED,SAASoN,EAAM2wJ,EAAK9xK,GACbA,GAA8B,kBAAZA,IACrBA,EAAU,CAAC,GAKb,IAAI21Z,GAHJ7jP,EAAMA,EAAIrwG,QAGUz+D,QAAQ,KAExB+Q,EAAImhZ,GADyB,IAAfS,EAAoB7jP,EAAMA,EAAI+C,OAAO,EAAG8gP,KACpB31Z,EAAQ6lJ,OAC9C,GAAK9xI,EAAL,CAIA,IAAmB,IAAf4hZ,EACF,OAAO5hZ,EAMT,IAAI6hZ,EAAW9jP,EAAIjiK,MAAM8lZ,EAAY,GAAGl0V,OAIxC,GAAwB,IAApBm0V,EAAS92Z,OACX,OAAOiV,EAYT,IADA,IAAI8hZ,EAAaD,EAAS/zV,MAAM,KACzBg0V,EAAW/2Z,QAAQ,CACxB,IAAIg3Z,EAAKD,EAAWv+T,QAAQ71B,OAC5B,GAAkB,IAAdq0V,EAAGh3Z,OAAP,CAGA,IACIi3Z,EAAQC,EADRC,EAASH,EAAG9yZ,QAAQ,KAiBxB,QAdgB,IAAZizZ,GACFF,EAASD,EACTE,EAAW,OAEXD,EAASD,EAAGjhP,OAAO,EAAEohP,GACrBD,EAAWF,EAAGjhP,OAAOohP,EAAO,IAG9BF,EAASA,EAAOt0V,OAAOhxD,cAEnBulZ,IACFA,EAAWA,EAASv0V,QAGfs0V,GACP,IAAK,UACH,GAAIC,EAAU,CACZ,IAAIpjZ,EAAM4hZ,EAAUwB,GAGhBpjZ,IAGFmB,EAAEgjL,QAAUnkL,EAEf,CACD,MAEF,IAAK,UACH,GAAIojZ,GAIE,aAAar4Y,KAAKq4Y,GAAW,CAC/B,IAAI74Y,EAAQX,SAASw5Y,EAAU,IAG/BjiZ,EAAEmiZ,UAAU/4Y,EACb,CAEH,MAEF,IAAK,SAGH,GAAI64Y,EAAU,CAGZ,IAAI/6Q,EAAS+6Q,EAASv0V,OAAOoB,QAAQ,MAAO,IACxCo4E,IAEFlnI,EAAEknI,OAASA,EAAOxqI,cAErB,CACD,MAEF,IAAK,OAWHsD,EAAEssD,KAAO21V,GAA4B,MAAhBA,EAAS,GAAaA,EAAW,KACtD,MAEF,IAAK,SAMHjiZ,EAAE+jO,QAAS,EACX,MAEF,IAAK,WACH/jO,EAAEoiZ,UAAW,EACb,MAEF,QACEpiZ,EAAEg9B,WAAah9B,EAAEg9B,YAAc,GAC/Bh9B,EAAEg9B,WAAWnyC,KAAKk3Z,GAzFnB,CA4FF,CAED,OAAO/hZ,CA5HN,CA6HF,CAGD,SAASqiZ,EAAUtkP,GACjB,IAAI5wK,EACJ,IACEA,EAAMggB,KAAKC,MAAM2wJ,EAGlB,CAFC,MAAO5qK,GACP,OAAOA,CACR,CACD,OAAOhG,CACR,CAED,SAASylK,EAASmL,GAChB,IAAKA,EACH,OAAO,KAGT,IAAI5wK,EACJ,GAAmB,kBAAR4wK,GAET,IADA5wK,EAAMk1Z,EAAUtkP,cACGjgK,MACjB,OAAO,UAIT3Q,EAAM4wK,EAIR,IADA,IAAI/9J,EAAI,IAAI2hZ,EACH53Z,EAAE,EAAGA,EAAE43Z,EAAOW,uBAAuBv3Z,OAAQhB,IAAK,CACzD,IAAIsgJ,EAAOs3Q,EAAOW,uBAAuBv4Z,QACvByL,IAAdrI,EAAIk9I,IACJl9I,EAAIk9I,KAAUs3Q,EAAOtrZ,UAAUg0I,KAKtB,YAATA,GACS,aAATA,GACS,iBAATA,EAEgB,OAAdl9I,EAAIk9I,GACNrqI,EAAEqqI,GAAQ,KAEVrqI,EAAEqqI,GAAqB,YAAbl9I,EAAIk9I,GACZ,WAAa,IAAI15I,KAAKxD,EAAIk9I,IAG9BrqI,EAAEqqI,GAAQl9I,EAAIk9I,GAEjB,CAED,OAAOrqI,CACR,CAWD,SAASuiZ,EAActsZ,EAAE8J,GACvB,IAAIyuJ,EAAM,EAGNg0P,EAAWvsZ,EAAEq2D,KAAOr2D,EAAEq2D,KAAKvhE,OAAS,EAGxC,OAAY,KADZyjK,GADezuJ,EAAEusD,KAAOvsD,EAAEusD,KAAKvhE,OAAS,GACvBy3Z,IASL,KADZh0P,GAFYv4J,EAAEwsZ,SAAWxsZ,EAAEwsZ,SAAS1vL,UAAYmtL,IACpCngZ,EAAE0iZ,SAAW1iZ,EAAE0iZ,SAAS1vL,UAAYmtL,IALvC1xP,EAYTA,EAAMv4J,EAAEysZ,cAAgB3iZ,EAAE2iZ,aAG3B,CAwBD,SAASC,EAAiBv3Y,GACxB,GAAIA,aAAe/d,OACjB,OAAO+d,EAIT,IACEA,EAAM+uN,UAAU/uN,EAIjB,CAFD,MAAMpgB,GAEL,CAED,OAAO4zZ,EAASxzY,EACjB,CAED,SAASu2Y,EAAO11Z,GACdA,EAAUA,GAAW,CAAC,EAEtBoB,OAAOQ,KAAK5B,GAASuC,SAAQ,SAAS67I,GAChCs3Q,EAAOtrZ,UAAU6jK,eAAe7vB,IAChCs3Q,EAAOtrZ,UAAUg0I,KAAUp+I,EAAQo+I,IACd,MAArBA,EAAKy2B,OAAO,EAAE,KAEhB30K,KAAKk+I,GAAQp+I,EAAQo+I,GAExB,GAAEl+I,MAEHA,KAAKs2Z,SAAWt2Z,KAAKs2Z,UAAY,IAAI9xZ,KAGrCtD,OAAOC,eAAenB,KAAM,gBAAiB,CAC3CqB,cAAc,EACdD,YAAY,EACZE,UAAU,EACV3C,QAAS62Z,EAAOiB,gBAEnB,CAoQD,SAASC,EAAUC,EAAO72Z,GACD,mBAAZA,EACTA,EAAU,CAAC82Z,qBAAsB92Z,GACb,MAAXA,IACTA,EAAU,CAAC,GAEuB,MAAhCA,EAAQ82Z,uBACV52Z,KAAK42Z,qBAAuB92Z,EAAQ82Z,sBAEb,MAArB92Z,EAAQo1Z,YACVl1Z,KAAK62Z,gBAAkB/2Z,EAAQo1Z,WAG5ByB,IACHA,EAAQ,IAAI/D,GAEd5yZ,KAAK22Z,MAAQA,CACd,CAnRDnB,EAAOiB,eAAiB,EAExBjB,EAAOv0Y,MAAQA,EACfu0Y,EAAO/uP,SAAWA,EAElB+uP,EAAOtrZ,UAAUjJ,IAAM,GACvBu0Z,EAAOtrZ,UAAUvL,MAAQ,GAGzB62Z,EAAOtrZ,UAAU2sL,QAAU,WAC3B2+N,EAAOtrZ,UAAUomU,OAAS,KAC1BklF,EAAOtrZ,UAAU6wI,OAAS,KAC1By6Q,EAAOtrZ,UAAUi2D,KAAO,KACxBq1V,EAAOtrZ,UAAU0tO,QAAS,EAC1B49K,EAAOtrZ,UAAU+rZ,UAAW,EAC5BT,EAAOtrZ,UAAU2mC,WAAa,KAG9B2kX,EAAOtrZ,UAAU4sZ,SAAW,KAC5BtB,EAAOtrZ,UAAU6sZ,cAAgB,KACjCvB,EAAOtrZ,UAAUosZ,SAAW,KAC5Bd,EAAOtrZ,UAAU8sZ,aAAe,KAChC91Z,OAAOC,eAAeq0Z,EAAOtrZ,UAAW,gBAAiB,CACvD7I,cAAc,EACdD,YAAY,EACZE,UAAU,EACV3C,MAAO,IAGT62Z,EAAOW,uBAAyBj1Z,OAAOQ,KAAK8zZ,EAAOtrZ,WAChDrI,QAAO,SAASq8I,GACf,QACEs3Q,EAAOtrZ,UAAUg0I,aAAiBl0I,UACzB,kBAATk0I,GACqB,MAArBA,EAAKy2B,OAAO,EAAE,GAEjB,IAEH6gP,EAAOtrZ,UAAU28J,QAAU,WACzB,IAAIpiK,EAAMD,KAAKC,MACf,MAAO,WAAWzE,KAAKsK,WACrB,eAAgC,MAAjBtK,KAAK82Z,SAAmB92Z,KAAK82Z,SAAW,KACvD,WAAW92Z,KAAKg3Z,aAAgBvyZ,EAAIzE,KAAKg3Z,aAAapwL,UAAW,KAAO,KACxE,WAAW5mO,KAAKs2Z,SAAY7xZ,EAAIzE,KAAKs2Z,SAAS1vL,UAAW,KAAO,KAChE,GACH,EAIGltD,EAAK7S,QAAQ2gB,SACfguO,EAAOtrZ,UAAUwvK,EAAK7S,QAAQ2gB,QAAUguO,EAAOtrZ,UAAU28J,SAG3D2uP,EAAOtrZ,UAAUqX,OAAS,WAIxB,IAHA,IAAIvgB,EAAM,CAAC,EAEPf,EAAQu1Z,EAAOW,uBACVv4Z,EAAE,EAAGA,EAAEqC,EAAMrB,OAAQhB,IAAK,CACjC,IAAIsgJ,EAAOj+I,EAAMrC,GACboC,KAAKk+I,KAAUs3Q,EAAOtrZ,UAAUg0I,KAIvB,YAATA,GACS,aAATA,GACS,iBAATA,EAEiB,OAAfl+I,KAAKk+I,GACPl9I,EAAIk9I,GAAQ,KAEZl9I,EAAIk9I,GAAsB,YAAdl+I,KAAKk+I,GACf,WAAal+I,KAAKk+I,GAAMouF,cAEV,WAATpuF,EACU,OAAfl+I,KAAKk+I,KAEPl9I,EAAIk9I,GAASl+I,KAAKk+I,IAAS9yH,KAAYprB,KAAKk+I,KAAU9yH,IACpDprB,KAAKk+I,GAAM5zI,WAAatK,KAAKk+I,IAG7Bl+I,KAAKk+I,KAAUs3Q,EAAOtrZ,UAAUg0I,KAClCl9I,EAAIk9I,GAAQl+I,KAAKk+I,IAGtB,CAED,OAAOl9I,CACR,EAEDw0Z,EAAOtrZ,UAAU4Z,MAAQ,WACvB,OAAO2iJ,EAASzmK,KAAKuhB,SACtB,EAEDi0Y,EAAOtrZ,UAAUy/F,SAAW,WAC1B,IAAKmpT,EAAcr1Y,KAAKzd,KAAKrB,OAC3B,OAAO,EAET,GAAIqB,KAAK62L,SAAWzrK,OAAcprB,KAAK62L,mBAAmBryL,QAAU8vZ,EAAUt0Z,KAAK62L,SACjF,OAAO,EAET,GAAmB,MAAf72L,KAAKswU,QAAkBtwU,KAAKswU,QAAU,EACxC,OAAO,EAET,GAAiB,MAAbtwU,KAAKmgE,OAAiB8yV,EAAWx1Y,KAAKzd,KAAKmgE,MAC7C,OAAO,EAGT,IAAI82V,EAAUj3Z,KAAKi3Z,UACnB,GAAIA,EAAS,CACX,GAAIA,EAAQv0Z,MAAM,OAChB,OAAO,EAGT,GAAc,MADDgwZ,EAAUwE,gBAAgBD,GAErC,OAAO,CAEV,CACD,OAAO,CACR,EAEDzB,EAAOtrZ,UAAUitZ,WAAa,SAAoBzkZ,GAC5CA,aAAelO,KACjBxE,KAAK62L,QAAUnkL,EAEf1S,KAAK62L,QAAUy9N,EAAU5hZ,IAAQ,UAEpC,EAED8iZ,EAAOtrZ,UAAU8rZ,UAAY,SAAmBoB,GAE5Cp3Z,KAAKswU,OADH8mF,IAAQhsY,KAAYgsY,KAAShsY,IACjBgsY,EAAI9sZ,WAEJ8sZ,CAEjB,EAGD5B,EAAOtrZ,UAAUmtZ,aAAe,WAC9B,IAAI15P,EAAM39J,KAAKrB,MAIf,OAHW,MAAPg/J,IACFA,EAAM,IAES,KAAb39J,KAAKiB,IACA08J,EAEF39J,KAAKiB,IAAI,IAAI08J,CACrB,EAGD63P,EAAOtrZ,UAAUI,SAAW,WAC1B,IAAIsnK,EAAM5xK,KAAKq3Z,eAiCf,OA/BIr3Z,KAAK62L,SAAWzrK,MACdprB,KAAK62L,mBAAmBryL,KAC1BotK,GAAO,aAAa6iP,EAAWz0Z,KAAK62L,SAEpCjlB,GAAO,aAAa5xK,KAAK62L,SAIV,MAAf72L,KAAKswU,QAAkBtwU,KAAKswU,QAAUllT,MACxCwmJ,GAAO,aAAa5xK,KAAKswU,QAGvBtwU,KAAK+6I,SAAW/6I,KAAK82Z,WACvBllP,GAAO,YAAY5xK,KAAK+6I,QAEtB/6I,KAAKmgE,OACPyxG,GAAO,UAAU5xK,KAAKmgE,MAGpBngE,KAAK43O,SACPhmE,GAAO,YAEL5xK,KAAKi2Z,WACPrkP,GAAO,cAEL5xK,KAAK6wC,YACP7wC,KAAK6wC,WAAWxuC,SAAQ,SAAS83H,GAC/By3C,GAAO,KAAKz3C,CACb,IAGIy3C,CACR,EAMD4jP,EAAOtrZ,UAAUotZ,IAAM,SAAa7yZ,GAMlC,GAAmB,MAAfzE,KAAKswU,OACP,OAAOtwU,KAAKswU,QAAQ,EAAI,EAAgB,IAAZtwU,KAAKswU,OAGnC,IAAIz5I,EAAU72L,KAAK62L,QACnB,OAAIA,GAAWzrK,KACPyrK,aAAmBryL,OACvBqyL,EAAUy9N,EAAUz9N,IAAYzrK,KAG9ByrK,GAAWzrK,IACNA,IAGFyrK,EAAQ+vC,WAAaniO,GAAOD,KAAKC,QAGnC2mB,GACR,EAIDoqY,EAAOtrZ,UAAUqtZ,WAAa,SAAoB9yZ,GAChD,GAAmB,MAAfzE,KAAKswU,OAAgB,CACvB,IAAIknF,EAAa/yZ,GAAOzE,KAAKs2Z,UAAY,IAAI9xZ,KACzC4yZ,EAAOp3Z,KAAKswU,QAAU,GAAMllT,IAAuB,IAAZprB,KAAKswU,OAChD,OAAOknF,EAAW5wL,UAAYwwL,CAC/B,CAED,OAAIp3Z,KAAK62L,SAAWzrK,IACXA,IAEFprB,KAAK62L,QAAQ+vC,SACrB,EAID4uL,EAAOtrZ,UAAUutZ,WAAa,SAAoBhzZ,GAChD,IAAIizZ,EAAW13Z,KAAKu3Z,WAAW9yZ,GAC/B,OAAIizZ,GAAYtsY,IACP,IAAI5mB,KAAKuvZ,GACP2D,IAAatsY,IACf,IAAI5mB,KAx2BA,GA02BJ,IAAIA,KAAKkzZ,EAEnB,EAGDlC,EAAOtrZ,UAAUgzX,aAAe,WAC9B,OAAuB,MAAfl9X,KAAKswU,QAAkBtwU,KAAK62L,SAAWzrK,GAChD,EAGDoqY,EAAOtrZ,UAAU+sZ,QACjBzB,EAAOtrZ,UAAUytZ,oBAAsB,WACrC,OAAmB,MAAf33Z,KAAK+6I,OACA,KAEF25Q,EAAgB10Z,KAAK+6I,OAC7B,EAoBD27Q,EAAUxsZ,UAAUysZ,MAAQ,KAC5BD,EAAUxsZ,UAAU0sZ,sBAAuB,EAC3CF,EAAUxsZ,UAAU2sZ,iBAAkB,EACtC,IAAIe,EAAc,GAgclB,SAASC,EAAS7+T,GAChB,OAAO,WACL,IAAKh5F,KAAK22Z,MAAMhjL,YACd,MAAM,IAAIhiO,MAAM,8DAGlB,IACImmZ,EAASC,EADT3uZ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,WAQtC,GANAiH,EAAK1K,MAAK,SAAgBG,EAAKu1E,GAC7B0jV,EAAUj5Z,EACVk5Z,EAAa3jV,CACd,IACDp0E,KAAKg5F,GAAQh3F,MAAMhC,KAAMoJ,GAErB0uZ,EACF,MAAMA,EAER,OAAOC,CACR,CACF,CAjdDH,EAAYl5Z,KAAK,aACjBg4Z,EAAUxsZ,UAAU8tZ,UAAY,SAASngL,EAAQ54N,EAAKnf,EAASurC,GAC7D,IAAIxsC,EACAif,EAAU04Y,EAAiBv3Y,GAC3Bnf,aAAmBkK,WACrBqhC,EAAKvrC,EACLA,EAAU,CAAC,GAGb,IAAIsmM,EAAOsuN,EAAgB52Y,EAAQ6jK,UAC/Bh8B,EAAQ3lJ,KAAK62Z,gBASjB,GARqB,MAAjB/2Z,EAAQ6lJ,QACVA,EAAQ7lJ,EAAQ6lJ,OAIZkyF,aAAkB29K,IACtB39K,EAAS29K,EAAOv0Y,MAAM42N,EAAQ,CAAElyF,MAAOA,MAEpCkyF,EAEH,OADAh5O,EAAM,IAAI8S,MAAM,0BACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAIzC,IAAI4F,EAAM3E,EAAQ2E,KAAO,IAAID,KAO7B,GAAIxE,KAAK42Z,sBAAwB/+K,EAAO98F,QAExB,MADD23Q,EAAUwE,gBAAgBr/K,EAAOo/K,WAG5C,OADAp4Z,EAAM,IAAI8S,MAAM,4CACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAK3C,GAAIg5O,EAAO98F,OAAQ,CACjB,IAAK45Q,EAAYvuN,EAAMyxC,EAAOo/K,WAAW,GAEvC,OADAp4Z,EAAM,IAAI8S,MAAM,4CAA4CkmO,EAAOo/K,UAAU,YAAY7wN,GAClF/6J,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAGlB,MAAnBg5O,EAAOi/K,WACTj/K,EAAOi/K,UAAW,EAGrB,MACCj/K,EAAOi/K,UAAW,EAClBj/K,EAAO98F,OAASqrD,EAelB,GATKyxC,EAAO13K,MAA2B,MAAnB03K,EAAO13K,KAAK,KAC9B03K,EAAO13K,KAAOo7P,EAAYz9S,EAAQ0oL,UAClCqxC,EAAOk/K,eAAgB,IAOJ,IAAjBj3Z,EAAQywV,MAAkB14G,EAAOo+K,SAEnC,OADAp3Z,EAAM,IAAI8S,MAAM,iDACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAGzC,IAAI83Z,EAAQ32Z,KAAK22Z,MAEZA,EAAMuB,eACTvB,EAAMuB,aAAe,SAASC,EAAWC,EAAW/sX,GAClDrrC,KAAKq4Z,UAAUD,EAAW/sX,EAC3B,GAmCHsrX,EAAM2B,WAAWzgL,EAAO98F,OAAQ88F,EAAO13K,KAAM03K,EAAO52O,KAhCpD,SAAoBpC,EAAKs5Z,GACvB,GAAIt5Z,EACF,OAAOwsC,EAAGxsC,GAGZ,IAAIL,EAAO,SAASK,GAClB,GAAIA,EACF,OAAOwsC,EAAGxsC,GAEVwsC,EAAG,KAAMwsM,EAEZ,EAED,GAAIsgL,EAAW,CAGb,IAAqB,IAAjBr4Z,EAAQywV,MAAkB4nE,EAAUlC,SAEtC,OADAp3Z,EAAM,IAAI8S,MAAM,qDACT05B,EAAGvrC,EAAQm4Z,YAAc,KAAOp5Z,GAEzCg5O,EAAOy+K,SAAW6B,EAAU7B,SAC5Bz+K,EAAO0+K,cAAgB4B,EAAU5B,cACjC1+K,EAAOm/K,aAAevyZ,EAEtBkyZ,EAAMuB,aAAaC,EAAWtgL,EAAQr5O,EAEvC,MACCq5O,EAAOy+K,SAAWz+K,EAAOm/K,aAAevyZ,EACxCkyZ,EAAM0B,UAAUxgL,EAAQr5O,EAE3B,GAGF,EAGDo5Z,EAAYl5Z,KAAK,cACjBg4Z,EAAUxsZ,UAAUquZ,WAAa,SAASt5Y,EAAKnf,EAASurC,GACtD,IAAIvtB,EAAU04Y,EAAiBv3Y,GAC3Bnf,aAAmBkK,WACrBqhC,EAAKvrC,EACLA,EAAU,CAAC,GAGb,IAAIsmM,EAAOsuN,EAAgB52Y,EAAQ6jK,UAC/BxhH,EAAOriD,EAAQ0oL,UAAY,IAE3BoxC,EAAS93O,EAAQ83O,OACP,MAAVA,IAAkB95N,EAAQgoL,UACL,UAApBhoL,EAAQgoL,UAA4C,QAApBhoL,EAAQgoL,WAE3C8xC,GAAS,GAGX,IAAI24G,EAAOzwV,EAAQywV,KACP,MAARA,IACFA,GAAO,GAGT,IAAI9rV,EAAM3E,EAAQ2E,KAAOD,KAAKC,MAC1B+zZ,GAAiC,IAAnB14Z,EAAQ24Z,OACtBC,IAAa54Z,EAAQ44Z,SACrB/B,EAAQ32Z,KAAK22Z,MAEjB,SAASgC,EAAe9kZ,GAOtB,GAAIA,EAAEijZ,UACJ,GAAIjjZ,EAAEknI,QAAUqrD,EACd,OAAO,OAGT,IAAKuuN,EAAYvuN,EAAMvyL,EAAEknI,QAAQ,GAC/B,OAAO,EAKX,SAAK29Q,IAAa7F,EAAU1yV,EAAMtsD,EAAEssD,WAMhCtsD,EAAE+jO,SAAWA,OAMb/jO,EAAEoiZ,WAAa1lE,OAMfioE,GAAe3kZ,EAAE0jZ,cAAgB9yZ,KACnCkyZ,EAAMiC,aAAa/kZ,EAAEknI,OAAQlnI,EAAEssD,KAAMtsD,EAAE5S,KAAK,WAAY,KACjD,KAIV,CAED01Z,EAAMkC,YAAYzyN,EAAMsyN,EAAW,KAAOv4V,GAAM,SAASthE,EAAI+vO,GAC3D,GAAI/vO,EACF,OAAOwsC,EAAGxsC,GAGZ+vO,EAAUA,EAAQ/sO,OAAO82Z,IAGJ,IAAjB74Z,EAAQ85D,OACVg1K,EAAUA,EAAQh1K,KAAKw8V,IAIzB,IAAI3xZ,EAAM,IAAID,KACdoqO,EAAQvsO,SAAQ,SAASwR,GACvBA,EAAEmjZ,aAAevyZ,CAClB,IAGD4mC,EAAG,KAAKujM,EACT,GACF,EAEDgpL,EAAYl5Z,KAAK,mBACjBg4Z,EAAUxsZ,UAAU4uZ,gBAAkB,WACpC,IAAI1vZ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAU,GAC5CkpC,EAAKjiC,EAAKgkE,MACV5uE,EAAO,SAASK,EAAI+vO,GAClB/vO,EACFwsC,EAAGxsC,GAEHwsC,EAAG,KAAMujM,EACNh1K,KAAKw8V,GACLxwZ,KAAI,SAASiO,GACZ,OAAOA,EAAEwjZ,cACV,IACAx1V,KAAK,MAEX,EACDz4D,EAAK1K,KAAKF,GACVwB,KAAKu4Z,WAAWv2Z,MAAMhC,KAAKoJ,EAC5B,EAEDwuZ,EAAYl5Z,KAAK,uBACjBg4Z,EAAUxsZ,UAAU6uZ,oBAAsB,WACxC,IAAI3vZ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAU,GAC5CkpC,EAAKjiC,EAAKgkE,MACV5uE,EAAO,SAASK,EAAI+vO,GAClB/vO,EACFwsC,EAAGxsC,GAEHwsC,EAAG,KAAMujM,EAAQhpO,KAAI,SAASiO,GAC5B,OAAOA,EAAEvJ,UACV,IAEJ,EACDlB,EAAK1K,KAAKF,GACVwB,KAAKu4Z,WAAWv2Z,MAAMhC,KAAKoJ,EAC5B,EAEDwuZ,EAAYl5Z,KAAK,aACjBg4Z,EAAUxsZ,UAAUkxB,UAAY,SAASiQ,GACvC,IAAIhkC,EAAOrH,KAAK22Z,MAAM/rZ,YAAY0P,KACrB,WAATjT,IACFA,EAAO,MAIT,IAAIqrT,EAAa,CAIf9zS,QAAS,gBAAgBszN,EAGzB8mL,UAAW3xZ,EAGXuvZ,uBAAwB52Z,KAAK42Z,qBAG7BhoL,QAAS,IAGX,IAAM5uO,KAAK22Z,MAAMsC,eACyB,oBAA7Bj5Z,KAAK22Z,MAAMsC,cAEtB,OAAO5tX,EAAG,IAAI15B,MAAM,kEAGtB3R,KAAK22Z,MAAMsC,eAAc,SAASp6Z,EAAI+vO,GACpC,OAAI/vO,EACKwsC,EAAGxsC,IAGZ6zT,EAAW9jF,QAAUA,EAAQhpO,KAAI,SAASiyO,GAOxC,cALAA,EAAUA,aAAkB29K,EAAU39K,EAAOt2N,SAAWs2N,GAG1C0+K,cAEP1+K,CACR,IAEMxsM,EAAG,KAAMqnR,GACjB,GACF,EAGDgkG,EAAUxsZ,UAAUqX,OAAS,WAC3B,OAAOvhB,KAAKk5Z,eACb,EAGDtB,EAAYl5Z,KAAK,kBACjBg4Z,EAAUxsZ,UAAUivZ,eAAiB,SAASzmG,EAAYrnR,GACxD,IAAI+tX,EAAMp5Z,KACN4uO,EAAU8jF,EAAW9jF,QACzB,IAAKA,IAAY/wO,MAAMC,QAAQ8wO,GAC7B,OAAOvjM,EAAG,IAAI15B,MAAM,wCAEtBi9N,EAAUA,EAAQj/N,QAElB,SAAS0pZ,EAAQx6Z,GACf,GAAIA,EACF,OAAOwsC,EAAGxsC,GAGZ,IAAK+vO,EAAQhwO,OACX,OAAOysC,EAAGxsC,EAAKu6Z,GAGjB,IAAIvhL,EACJ,IACEA,EAASpxE,EAASmoE,EAAQx3I,QAG3B,CAFC,MAAOpwF,GACP,OAAOqkC,EAAGrkC,EACX,CAED,GAAe,OAAX6wO,EACF,OAAOwhL,EAAQ,MAGjBD,EAAIzC,MAAM0B,UAAUxgL,EAAQwhL,EAC7B,CAEDA,EACD,EAED3C,EAAU4C,YAAc,SAASC,EAAU5C,EAAOtrX,GAOhD,IAAIqnR,EACJ,GAPyB,IAArBvwT,UAAUvD,SAEZysC,EAAKsrX,EACLA,EAAQ,MAIc,kBAAb4C,GAET,IADA7mG,EAAawjG,EAAUqD,cACG5nZ,MACxB,OAAO05B,EAAGqnR,QAGZA,EAAa6mG,EAGf,IAAIH,EAAM,IAAI1C,EAAUC,EAAOjkG,EAAWkkG,sBAC1CwC,EAAID,eAAezmG,GAAY,SAAS7zT,GACtC,GAAIA,EACF,OAAOwsC,EAAGxsC,GAEZwsC,EAAG,KAAM+tX,EACV,GACF,EAED1C,EAAU8C,gBAAkB,SAASD,EAAU5C,GAC7C,IAAIjkG,EAAiC,kBAAb6mG,EACtBv4Y,KAAKC,MAAMs4Y,GAAYA,EACrBH,EAAM,IAAI1C,EAAUC,EAAOjkG,EAAWkkG,sBAG1C,IAAKwC,EAAIzC,MAAMhjL,YACb,MAAM,IAAIhiO,MAAM,8DAIlB,OADAynZ,EAAIK,mBAAmB/mG,GAChB0mG,CACR,EACD1C,EAAUjwP,SAAWiwP,EAAU8C,gBAE/B9C,EAAUxsZ,UAAU4Z,MAAQ,SAAS41Y,EAAUruX,GACpB,IAArBlpC,UAAUvD,SACZysC,EAAKquX,EACLA,EAAW,MAGb15Z,KAAKo7B,WAAU,SAASv8B,EAAI6zT,GAC1B,GAAI7zT,EACF,OAAOwsC,EAAGxsC,GAEZ63Z,EAAU4C,YAAY5mG,EAAYgnG,EAAUruX,EAC7C,GACF,EAEDusX,EAAYl5Z,KAAK,oBACjBg4Z,EAAUxsZ,UAAUyvZ,iBAAmB,SAAStuX,GAC9C,IAAIsrX,EAAQ32Z,KAAK22Z,MAKjB,GAAIA,EAAMgD,4BAA4B3vZ,UAClC2sZ,EAAMgD,mBAAqBhH,EAAMzoZ,UAAUyvZ,iBAE7C,OAAOhD,EAAMgD,iBAAiBtuX,GAGhCsrX,EAAMsC,eAAc,SAASp6Z,EAAK+vO,GAChC,GAAI/vO,EACF,OAAOwsC,EAAGxsC,GAGZ,GAAuB,IAAnB+vO,EAAQhwO,OACV,OAAOysC,EAAG,MAGZ,IAAIuuX,EAAiB,EACjBC,EAAe,GAEnB,SAASC,EAAeC,GAOtB,GANIA,GACFF,EAAan7Z,KAAKq7Z,KAGpBH,IAEuBhrL,EAAQhwO,OAC7B,OAAOysC,EAAGwuX,EAAaj7Z,OAASi7Z,EAAa,GAAK,KAErD,CAEDjrL,EAAQvsO,SAAQ,SAASw1O,GACvB8+K,EAAMiC,aAAa/gL,EAAO98F,OAAQ88F,EAAO13K,KAAM03K,EAAO52O,IAAK64Z,EAC5D,GACF,GACF,EAEDpD,EAAUxsZ,UAAU8vZ,WAAanC,EAAS,SAC1CnB,EAAUxsZ,UAAU+vZ,UAAY,SAASP,GACvC,IAAKA,EAAS/lL,YACZ,MAAM,IAAIhiO,MAAM,gFAElB,OAAO3R,KAAKg6Z,WAAWN,EACxB,EAyBD9B,EAAYv1Z,SAAQ,SAAS22F,GAC3B09T,EAAUxsZ,UAAU8uF,EAAO,QAAU6+T,EAAS7+T,EAC/C,IAED2yC,EAAQ/sH,QAAUszN,EAClBvmG,EAAQ+qR,UAAYA,EACpB/qR,EAAQ6pR,OAASA,EACjB7pR,EAAQgnR,MAAQA,EAChBhnR,EAAQinR,kBAAoBA,EAC5BjnR,EAAQ2oR,UAAYA,EACpB3oR,EAAQ8oR,WAAaA,EACrB9oR,EAAQ1qH,MAAQA,EAChB0qH,EAAQ86B,SAAWA,EACnB96B,EAAQgpR,YAAcA,EACtBhpR,EAAQ4vL,YAAcA,EACtB5vL,EAAQknR,UAAYA,EACpBlnR,EAAQurR,gBAAkBxE,EAAUwE,gBACpCvrR,EAAQyqR,cAAgBA,EACxBzqR,EAAQuuR,cAAgB,EAAxBvuR,OAAAA,cACAA,EAAQwuR,YA3zBR,SAAqBh6V,GACnB,GAAa,MAATA,EACF,MAAO,CAAC,KAENA,EAAKoyC,YAAY,OAASpyC,EAAKvhE,OAAO,IACxCuhE,EAAOA,EAAKw0G,OAAO,EAAEx0G,EAAKvhE,OAAO,IAGnC,IADA,IAAIw7Z,EAAe,CAACj6V,GACbA,EAAKvhE,OAAS,GAAG,CACtB,IAAIy7Z,EAASl6V,EAAKoyC,YAAY,KAC9B,GAAe,IAAX8nT,EACF,MAEFl6V,EAAOA,EAAKw0G,OAAO,EAAE0lP,GACrBD,EAAa17Z,KAAKyhE,EACnB,CAED,OADAi6V,EAAa17Z,KAAK,KACX07Z,CACR,EA0yBDzuR,EAAQ+oR,gBAAkBA,sCC16C1B,IAAI/B,EAAQv5O,EAAAA,OAAAA,EACR8gP,EAAgB9gP,EAAAA,OAAAA,cAChBy5O,EAAYz5O,EAAAA,OAAAA,EACZM,EAAON,EAAQ,OAEnB,SAASw5O,IACPD,EAAMp0Z,KAAKyB,MACXA,KAAK8iW,IAAM,CAAC,CACb,CACDppL,EAAKxV,SAAS0uP,EAAmBD,GACjChnR,EAAQ,EAAoBinR,EAC5BA,EAAkB1oZ,UAAU44V,IAAM,KAGlC8vD,EAAkB1oZ,UAAUypO,aAAc,EAG1Ci/K,EAAkB1oZ,UAAU28J,QAAU,WACpC,MAAO,UAAU6S,EAAK7S,QAAQ7mK,KAAK8iW,KAAK,EAAO,GAAG,IACnD,EAIGppL,EAAK7S,QAAQ2gB,SACforO,EAAkB1oZ,UAAUwvK,EAAK7S,QAAQ2gB,QAAUorO,EAAkB1oZ,UAAU28J,SAGjF+rP,EAAkB1oZ,UAAUouZ,WAAa,SAASv9Q,EAAQ56E,EAAMl/D,EAAKoqC,GACnE,OAAKrrC,KAAK8iW,IAAI/nN,IAGT/6I,KAAK8iW,IAAI/nN,GAAQ56E,GAGf90B,EAAG,KAAKrrC,KAAK8iW,IAAI/nN,GAAQ56E,GAAMl/D,IAAM,MALnCoqC,EAAG,UAAKhiC,EAMlB,EAEDupZ,EAAkB1oZ,UAAU2uZ,YAAc,SAAS99Q,EAAQ56E,EAAM90B,GAC/D,IAKIivX,EALAthT,EAAU,GACd,IAAK+hC,EACH,OAAO1vG,EAAG,KAAK,IAgBfivX,EAZGn6V,EAYW,SAAkBo6V,GAG7Br5Z,OAAOQ,KAAK64Z,GAAal4Z,SAAQ,SAAUm4Z,GACzC,GAAI3H,EAAU1yV,EAAMq6V,GAAa,CAC/B,IAAIC,EAAYF,EAAYC,GAE5B,IAAK,IAAIv5Z,KAAOw5Z,EACdzhT,EAAQt6G,KAAK+7Z,EAAUx5Z,GAE1B,CACF,GACF,EAtBY,SAAkBs5Z,GAC9B,IAAK,IAAIG,KAAWH,EAAa,CAC/B,IAAIE,EAAYF,EAAYG,GAC5B,IAAK,IAAIz5Z,KAAOw5Z,EACdzhT,EAAQt6G,KAAK+7Z,EAAUx5Z,GAE1B,CACF,EAkBH,IAAI05Z,EAAUT,EAAcn/Q,IAAW,CAACA,GACpC+nN,EAAM9iW,KAAK8iW,IACf63D,EAAQt4Z,SAAQ,SAASu4Z,GACvB,IAAIL,EAAcz3D,EAAI83D,GACjBL,GAGLD,EAAYC,EACb,IAEDlvX,EAAG,KAAK2tE,EACT,EAED45S,EAAkB1oZ,UAAUmuZ,UAAY,SAASxgL,EAAQxsM,GAClDrrC,KAAK8iW,IAAIjrH,EAAO98F,UACnB/6I,KAAK8iW,IAAIjrH,EAAO98F,QAAU,CAAC,GAExB/6I,KAAK8iW,IAAIjrH,EAAO98F,QAAQ88F,EAAO13K,QAClCngE,KAAK8iW,IAAIjrH,EAAO98F,QAAQ88F,EAAO13K,MAAQ,CAAC,GAE1CngE,KAAK8iW,IAAIjrH,EAAO98F,QAAQ88F,EAAO13K,MAAM03K,EAAO52O,KAAO42O,EACnDxsM,EAAG,KACJ,EAEDunX,EAAkB1oZ,UAAUguZ,aAAe,SAASC,EAAWC,EAAW/sX,GAIxErrC,KAAKq4Z,UAAUD,EAAU/sX,EAC1B,EAEDunX,EAAkB1oZ,UAAU0uZ,aAAe,SAAS79Q,EAAQ56E,EAAMl/D,EAAKoqC,GACjErrC,KAAK8iW,IAAI/nN,IAAW/6I,KAAK8iW,IAAI/nN,GAAQ56E,IAASngE,KAAK8iW,IAAI/nN,GAAQ56E,GAAMl/D,WAChEjB,KAAK8iW,IAAI/nN,GAAQ56E,GAAMl/D,GAEhCoqC,EAAG,KACJ,EAEDunX,EAAkB1oZ,UAAU2wZ,cAAgB,SAAS9/Q,EAAQ56E,EAAM90B,GAQjE,OAPIrrC,KAAK8iW,IAAI/nN,KACP56E,SACKngE,KAAK8iW,IAAI/nN,GAAQ56E,UAEjBngE,KAAK8iW,IAAI/nN,IAGb1vG,EAAG,KACX,EAEDunX,EAAkB1oZ,UAAUyvZ,iBAAmB,SAAStuX,GAEtD,OADArrC,KAAK8iW,IAAM,CAAC,EACLz3T,EAAG,KACX,EAEDunX,EAAkB1oZ,UAAU+uZ,cAAgB,SAAS5tX,GACnD,IAAIujM,EAAU,GACVk0H,EAAM9iW,KAAK8iW,IAED5hW,OAAOQ,KAAKohW,GAClBzgW,SAAQ,SAAS04I,GACX75I,OAAOQ,KAAKohW,EAAI/nN,IACtB14I,SAAQ,SAAS89D,GACVj/D,OAAOQ,KAAKohW,EAAI/nN,GAAQ56E,IAC9B99D,SAAQ,SAASpB,GACR,OAARA,GACF2tO,EAAQlwO,KAAKokW,EAAI/nN,GAAQ56E,GAAMl/D,GAElC,GACF,GACF,IAID2tO,EAAQh1K,MAAK,SAAS9vD,EAAE8J,GACtB,OAAQ9J,EAAEysZ,eAAe,IAAM3iZ,EAAE2iZ,eAAe,EACjD,IAEDlrX,EAAG,KAAMujM,EACV,oCCxHDjjG,EAAQ,EAzBR,SAAoBmvR,EAASN,GAE3B,GAAIA,IAAeM,EACjB,OAAO,EAIT,GAAY,IADFA,EAAQh4Z,QAAQ03Z,GACX,CAGb,GAA8B,MAA1BA,EAAW7lP,QAAQ,GACrB,OAAO,EAMT,GAA6C,MAAzCmmP,EAAQnmP,OAAO6lP,EAAW57Z,OAAQ,GACpC,OAAO,CAEV,CAED,OAAO,CACR,sCC3BD,IAAI8zZ,EAAYt5O,EAAQ,OAwBxBztC,EAAQuuR,cApBR,SAAwBn/Q,GACtB,IAAIggR,EAASrI,EAAUwE,gBAAgBn8Q,GACvC,IAAKggR,EACH,OAAO,KAET,GAAIA,GAAUhgR,EACZ,MAAO,CAACA,GAOV,IAJA,IACIt4I,EADSs4I,EAAOprI,MAAM,IAAKorZ,EAAOn8Z,OAAS,IAC5B+iE,MAAM,KAAK4iJ,UAC1Boe,EAAMo4L,EACNX,EAAe,CAACz3L,GACblgO,EAAM7D,QACX+jO,EAAMlgO,EAAM20F,QAAU,IAAMurI,EAC5By3L,EAAa17Z,KAAKikO,GAEpB,OAAOy3L,CACR,sCCtBD,IAAIY,EAAM5hP,EAAQ,OAMlBztC,EAAQurR,gBAJR,SAAyBn8Q,GACvB,OAAOigR,EAAIxwZ,IAAIuwI,EAChB,oCCFD,SAAS43Q,IACR,CACDhnR,EAAQ,EAAQgnR,EAKhBA,EAAMzoZ,UAAUypO,aAAc,EAE9Bg/K,EAAMzoZ,UAAUouZ,WAAa,SAASv9Q,EAAQ56E,EAAMl/D,EAAKoqC,GACvD,MAAM,IAAI15B,MAAM,gCACjB,EAEDghZ,EAAMzoZ,UAAU2uZ,YAAc,SAAS99Q,EAAQ56E,EAAM90B,GACnD,MAAM,IAAI15B,MAAM,iCACjB,EAEDghZ,EAAMzoZ,UAAUmuZ,UAAY,SAASxgL,EAAQxsM,GAC3C,MAAM,IAAI15B,MAAM,+BACjB,EAEDghZ,EAAMzoZ,UAAUguZ,aAAe,SAASC,EAAWC,EAAW/sX,GAG5D,MAAM,IAAI15B,MAAM,kCACjB,EAEDghZ,EAAMzoZ,UAAU0uZ,aAAe,SAAS79Q,EAAQ56E,EAAMl/D,EAAKoqC,GACzD,MAAM,IAAI15B,MAAM,kCACjB,EAEDghZ,EAAMzoZ,UAAU2wZ,cAAgB,SAAS9/Q,EAAQ56E,EAAM90B,GACrD,MAAM,IAAI15B,MAAM,mCACjB,EAEDghZ,EAAMzoZ,UAAUyvZ,iBAAmB,SAAStuX,GAC1C,MAAM,IAAI15B,MAAM,sCACjB,EAEDghZ,EAAMzoZ,UAAU+uZ,cAAgB,SAAS5tX,GACvC,MAAM,IAAI15B,MAAM,wEACjB,qBCzEDwxJ,EAAOx3B,QAAU,4CCCjB,IAAI4kN,EAAOn3K,EAAQ,OACfo3K,EAAQp3K,EAAQ,OAChBn6J,EAAMm6J,EAAQ,OACdM,EAAON,EAAQ,OACfnqE,EAASmqE,EAAQ,OACjB+rP,EAAO/rP,EAAQ,OACfgsP,EAAOhsP,EAAQ,OACfkxD,EAAOlxD,EAAQ,OACfisP,EAAgBjsP,EAAQ,OACxB88L,EAAO98L,EAAQ,OACfuiP,EAAWviP,EAAQ,OACnBunK,EAAevnK,EAAQ,OACvB49D,EAAW59D,EAAQ,OACnB04D,EAAS14D,EAAQ,OACjB4mP,EAAW5mP,EAAQ,OACnBn2E,EAAem2E,EAAAA,OAAAA,OACfwiP,EAAUxiP,EAAQ,OAClBw1D,EAAUx1D,EAAQ,OAClBksP,EAAkBlsP,EAAQ,OAC1B4oP,EAAc5oP,EAAAA,OAAAA,EACdilP,EAAMjlP,EAAAA,OAAAA,EACNyiP,EAAOziP,EAAAA,OAAAA,EACPqnP,EAAQrnP,EAAAA,OAAAA,EACRmsP,EAAOnsP,EAAQ,OACf6mP,EAAY7mP,EAAAA,OAAAA,EACZopP,EAAWppP,EAAAA,OAAAA,EACXwqP,EAASxqP,EAAAA,OAAAA,EACT30K,EAAM20K,EAAQ,OACdxsC,EAASwsC,EAAAA,OAAAA,OAETumP,EAAgB/D,EAAQ+D,cACxBC,EAAehE,EAAQgE,aACvB16D,EAAW02D,EAAQ12D,SACnBjjG,EAAQ25J,EAAQ35J,MAChBnmP,EAAO8/Y,EAAQ9/Y,KACf8C,EAAUg9Y,EAAQh9Y,QAClB4mZ,EAAkB52L,EAAQwqL,MAE1BqM,EAAa,CAAC,EAgClB,SAASC,IACP,IAAIv8Z,EAAOnJ,KACX,MAAO,CACL4yH,IAAKzpH,EAAKypH,IACV55B,OAAQ7vF,EAAK6vF,OACbmV,QAAShlG,EAAKglG,QAEjB,CAGD,SAASw3T,IACP,IAAIx8Z,EAAOnJ,KACX,MAAO,CACL8nU,WAAY3+T,EAAK2+T,WACjBp5N,KAAMvlG,EAAKulG,KACXP,QAAShlG,EAAKglG,QACdw6B,QAAS+8R,EAAcnna,KAAK4K,EAAKw/H,SAEpC,CAED,SAASz6B,EAASpuG,GAQhB,IAAIqJ,EAAOnJ,KAGPF,EAAQwlV,MACVn8U,EAAKy8Z,KAAO,IAAIvH,EAAIl1Z,GACpBrJ,EAAUqJ,EAAKy8Z,KAAK9la,QAAQA,IAG9BmvG,EAAOyrH,OAAOn8N,KAAK4K,GACnB,IAAI08Z,EAAW3ka,OAAOQ,KAAKwsG,EAAQhkG,WAC/B47Z,EApEN,SAA+BD,EAAU/la,GAIvC,IAAI0B,EAAS,CAAC,EACd,IAAK,IAAI5D,KAAKkC,GACgC,IAAzB+la,EAAS/ia,QAAQlF,KAElC4D,EAAO5D,GAAKkC,EAAQlC,IAGxB,OAAO4D,CACR,CAwDmBuka,CAAqBF,EAAU/la,GAEjDgyO,EAAO3oO,EAAM28Z,GACbhma,EAzDF,SAAqC+la,EAAU/la,GAI7C,IAAI0B,EAAS,CAAC,EACd,IAAK,IAAI5D,KAAKkC,EAAS,CACrB,IAAIkma,KAAwC,IAAzBH,EAAS/ia,QAAQlF,IAChCy7O,EAAoC,oBAAfv5O,EAAQlC,GAC3Booa,GAAc3sL,IAClB73O,EAAO5D,GAAKkC,EAAQlC,GAEvB,CACD,OAAO4D,CACR,CA4CWyka,CAA2BJ,EAAU/la,GAE/CqJ,EAAK01M,UAAW,EAChB11M,EAAK7H,UAAW,EACZxB,EAAQk5F,SACV7vF,EAAK+8Z,gBAAiB,GAExB/8Z,EAAKg9Z,IAAM,IAAInE,EAAY74Z,GAC3BA,EAAK+5Z,MAAQ,IAAIrH,EAAK1yZ,GACtBA,EAAKw3Z,OAAS,IAAIF,EAAMt3Z,GACxBA,EAAKi9Z,WAAa,IAAInG,EAAU92Z,GAChCA,EAAKk9Z,UAAY,IAAI7D,EAASr5Z,GAC9BA,EAAKm9Z,QAAU,IAAI1C,EAAOz6Z,GAC1BA,EAAKimD,KAAKtvD,EACX,CAMD,SAASqoE,IACH+lC,EAAQ/lC,OACV1zD,QAAQ1L,MAAM,aAAc2wK,EAAK35J,OAAO/d,MAAM03K,EAAMv3K,WAEvD,CARDu3K,EAAKxV,SAASh2D,EAASe,EAAOyrH,QAG9BxsH,EAAQ/lC,MAAQsnE,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,YAAc,cAAchhW,KAAKgyH,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,YAMzEvwQ,EAAQhkG,UAAUi+D,MAAQA,EAE1B+lC,EAAQhkG,UAAUklD,KAAO,SAAUtvD,GAIjC,IAAIqJ,EAAOnJ,KAQX,IAAK,IAAIs5R,KAPJx5R,IACHA,EAAU,CAAC,GAEbqJ,EAAKglG,QAAUhlG,EAAKglG,QAAUryF,EAAK3S,EAAKglG,SAAW,CAAC,EAI7BhlG,EAAKglG,QACc,qBAA7BhlG,EAAKglG,QAAQmrL,WACfnwR,EAAKglG,QAAQmrL,GA4CxB,GAxCAqiI,EAASrpI,QAAQnpR,EAAMA,EAAKglG,SAEvBhlG,EAAK6vF,SACR7vF,EAAK6vF,OAASl5F,EAAQk5F,QAAU,OAE7B7vF,EAAKg4U,eACRh4U,EAAKg4U,aAAerhV,EAAQqhV,cAG9Bh4U,EAAKg9Z,IAAI/2W,KAAKtvD,GAEdqoE,EAAMroE,GACDqJ,EAAKmyZ,OAAsB,IAAdnyZ,EAAKmyZ,OACrBnyZ,EAAKmyZ,KAAOmK,GAEdt8Z,EAAKo1Q,MAAQp1Q,EAAKo1Q,OAAS,GAC3Bp1Q,EAAKo9Z,oBAAqB,GAGrBp9Z,EAAK+yP,WAAa/yP,EAAKke,WAC1Ble,EAAK+yP,UAAY/yP,EAAKke,SACtBle,EAAKke,SAAW,WACVle,EAAKq9Z,kBAGTr9Z,EAAKq9Z,iBAAkB,EACvBr9Z,EAAK+yP,UAAUl6P,MAAMmH,EAAMhH,WAC5B,EACDgH,EAAKo/H,GAAG,QAASp/H,EAAKke,SAASxd,QAC/BV,EAAKo/H,GAAG,WAAYp/H,EAAKke,SAASxd,KAAKV,EAAM,SAI1CA,EAAKypH,KAAOzpH,EAAK8V,MACpB9V,EAAKypH,IAAMzpH,EAAK8V,WACT9V,EAAK8V,KAKV9V,EAAKmvU,QAAS,CAChB,GAA4B,kBAAjBnvU,EAAKmvU,QACd,OAAOnvU,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,qCAGtC,GAAwB,kBAAbxI,EAAKypH,IACd,OAAOzpH,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,4DAGtC,GAA+B,IAA3BxI,EAAKypH,IAAI9vH,QAAQ,QAA4C,IAA7BqG,EAAKypH,IAAI9vH,QAAQ,OACnD,OAAOqG,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,0DAKtC,IAAI80Z,EAAuBt9Z,EAAKmvU,QAAQ/lO,YAAY,OAASppG,EAAKmvU,QAAQ15U,OAAS,EAC/E8na,EAA+C,IAA1Bv9Z,EAAKypH,IAAI9vH,QAAQ,KAEtC2ja,GAAwBC,EAC1Bv9Z,EAAKypH,IAAMzpH,EAAKmvU,QAAUnvU,EAAKypH,IAAIjjH,MAAM,GAChC82Z,GAAwBC,EACjCv9Z,EAAKypH,IAAMzpH,EAAKmvU,QAAUnvU,EAAKypH,IACT,KAAbzpH,EAAKypH,IACdzpH,EAAKypH,IAAMzpH,EAAKmvU,QAEhBnvU,EAAKypH,IAAMzpH,EAAKmvU,QAAU,IAAMnvU,EAAKypH,WAEhCzpH,EAAKmvU,OACb,CAGD,IAAKnvU,EAAKypH,IACR,OAAOzpH,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,uCActC,GAVwB,kBAAbxI,EAAKypH,MACdzpH,EAAKypH,IAAM3zG,EAAIgC,MAAM9X,EAAKypH,MAIvBzpH,EAAKypH,IAAIgX,OACZzgI,EAAKypH,IAAIgX,KAAO3qH,EAAIc,OAAO5W,EAAKypH,MAIR,UAAtBzpH,EAAKypH,IAAIkzE,SACX,OAAO38L,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,iGActC,GAVsB,SAAlBxI,EAAKypH,IAAIwzE,MACXj9L,EAAKw9Z,oBAGgB,IAAnBx9Z,EAAKy9Z,YACPz9Z,EAAK47Z,oBAAqB,GAGvB57Z,EAAKypH,IAAI4zE,WAAYr9L,EAAKypH,IAAI4zE,SAAW,OAExCr9L,EAAKypH,IAAIwzE,MAASj9L,EAAKypH,IAAI+uD,UAAYx4K,EAAKypH,IAAI0zE,QAAWn9L,EAAKypH,IAAIi0S,OAAQ,CAGhF,IACIxvU,EAAU,gBADEp4E,EAAIc,OAAO5W,EAAKypH,KACY,IAS5C,OARoC,IAAhC1xH,OAAOQ,KAAK5B,GAASlB,SAIvBy4F,GAAW,iDAGbluF,EAAKmoO,QACEnoO,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM0lF,GACrC,CAcD,GAZKluF,EAAK4kK,eAAe,WACvB5kK,EAAK86Z,MAAQqB,EAAgBn8Z,EAAKypH,MAGpCzpH,EAAKs6Z,OAASt6Z,EAAKm9Z,QAAQtC,YACvB76Z,EAAK86Z,OACP96Z,EAAKm9Z,QAAQh8W,MAAMxqD,GAGrBqJ,EAAKk9Z,UAAU3J,UAAU58Z,GAEzBqJ,EAAK29Z,SAAU,GACV39Z,EAAKqpR,UAAU,QAAS,CAC3B,IAAIu0I,EAAiB59Z,EAAK69Z,wBAA0B,OACpD79Z,EAAK87Q,UAAU8hJ,EAAgB59Z,EAAKypH,IAAIwzE,MAEpCj9L,EAAKypH,IAAI0zE,OACY,OAAlBn9L,EAAKypH,IAAI0zE,MAAuC,UAAtBn9L,EAAKypH,IAAIkzE,UACjB,QAAlB38L,EAAKypH,IAAI0zE,MAAwC,WAAtBn9L,EAAKypH,IAAIkzE,WACvC38L,EAAK87Q,UAAU8hJ,EAAgB59Z,EAAKypH,IAAI+uD,UAG5Cx4K,EAAK29Z,SAAU,CAChB,CAoBD,GAlBA39Z,EAAKiwZ,IAAIjwZ,EAAK4zZ,MAAQj9Z,EAAQs5Z,KAEzBjwZ,EAAKypH,IAAI0zE,OACc,UAAtBn9L,EAAKypH,IAAIkzE,SAAwB38L,EAAKypH,IAAI0zE,KAAO,GAAoC,WAAtBn9L,EAAKypH,IAAIkzE,WAAyB38L,EAAKypH,IAAI0zE,KAAO,MAGnHn9L,EAAK86Z,QAAU96Z,EAAKs6Z,QACtBt6Z,EAAKm9L,KAAOn9L,EAAK86Z,MAAM39N,KACvBn9L,EAAKi9L,KAAOj9L,EAAK86Z,MAAMtiP,WAEvBx4K,EAAKm9L,KAAOn9L,EAAKypH,IAAI0zE,KACrBn9L,EAAKi9L,KAAOj9L,EAAKypH,IAAI+uD,UAGnB7hL,EAAQ+6J,MACV1xJ,EAAK0xJ,KAAK/6J,EAAQ+6J,MAGhB/6J,EAAQw4O,SAAU,CACpB,IAAIA,EAAWx4O,EAAQw4O,SACnB2uL,EAAc99Z,EAAK0xJ,OACnBqsQ,EAAkB,SAAUjma,EAAKtC,GAC/BA,GAASA,EAAMovK,eAAe,UAAYpvK,EAAMovK,eAAe,WACjEk5P,EAAYtuL,OAAO13O,EAAKtC,EAAMA,MAAOA,EAAMmB,SAE3Cmna,EAAYtuL,OAAO13O,EAAKtC,EAE3B,EACD,IAAK,IAAIwoa,KAAW7uL,EAClB,GAAIA,EAASvqE,eAAeo5P,GAAU,CACpC,IAAIC,EAAY9uL,EAAS6uL,GACzB,GAAIC,aAAqBvpa,MACvB,IAAK,IAAI6wB,EAAI,EAAGA,EAAI04Y,EAAUxoa,OAAQ8vB,IACpCw4Y,EAAgBC,EAASC,EAAU14Y,SAGrCw4Y,EAAgBC,EAASC,EAE5B,CAEJ,CAiDD,GA/CItna,EAAQ8rX,IACVziX,EAAKyiX,GAAG9rX,EAAQ8rX,IAGdziX,EAAKypH,IAAIzyD,KACXh3D,EAAKg3D,KAAOh3D,EAAKypH,IAAIzyD,KAErBh3D,EAAKg3D,KAAOh3D,EAAKypH,IAAI4zE,UAAYr9L,EAAKypH,IAAI0L,QAAU,IAG7B,IAArBn1H,EAAKg3D,KAAKvhE,SACZuK,EAAKg3D,KAAO,KAIVrgE,EAAQuna,KACVl+Z,EAAKk+Z,IAAIvna,EAAQuna,KAGfvna,EAAQyla,MACVp8Z,EAAKo8Z,KAAKzla,EAAQyla,MAGhBzla,EAAQula,eACVl8Z,EAAKk8Z,cAAcvla,EAAQula,eAGzBvla,EAAQ+vO,OACN3uO,OAAOgJ,UAAU6jK,eAAexvK,KAAKuB,EAAQ+vO,KAAM,cACrD/vO,EAAQ+vO,KAAKvqC,KAAOxlM,EAAQ+vO,KAAKrqC,UAE/BtkM,OAAOgJ,UAAU6jK,eAAexvK,KAAKuB,EAAQ+vO,KAAM,cACrD/vO,EAAQ+vO,KAAK1pC,KAAOrmM,EAAQ+vO,KAAKpqC,UAGnCt8L,EAAK0mO,KACH/vO,EAAQ+vO,KAAKvqC,KACbxlM,EAAQ+vO,KAAK1pC,KACbrmM,EAAQ+vO,KAAKx0C,gBACbv7L,EAAQ+vO,KAAKosL,SAIb9yZ,EAAKm+Z,OAASn+Z,EAAKqpR,UAAU,oBAC/BrpR,EAAK87Q,UAAU,kBAAmB,iBAGhC97Q,EAAKypH,IAAIi9G,OAAS1mO,EAAKqpR,UAAU,iBAAkB,CACrD,IAAI+0I,EAAgBp+Z,EAAKypH,IAAIi9G,KAAKluK,MAAM,KAAK/7D,KAAI,SAAUC,GAAQ,OAAOsD,EAAKg9Z,IAAIrhO,SAASj/L,EAAO,IACnGsD,EAAK0mO,KAAK03L,EAAc,GAAIA,EAAc53Z,MAAM,GAAGkyD,KAAK,MAAM,EAC/D,CAED,IAAK14D,EAAKs6Z,QAAUt6Z,EAAK86Z,OAAS96Z,EAAK86Z,MAAMp0L,OAAS1mO,EAAKqpR,UAAU,uBAAwB,CAC3F,IAAIg1I,EAAkBr+Z,EAAK86Z,MAAMp0L,KAAKluK,MAAM,KAAK/7D,KAAI,SAAUC,GAAQ,OAAOsD,EAAKg9Z,IAAIrhO,SAASj/L,EAAO,IACnGumO,EAAa,SAAW84H,EAASsiE,EAAgB3lW,KAAK,MAC1D14D,EAAK87Q,UAAU,sBAAuB74C,EACvC,CAoBD,SAASq7L,IAML,IAAI7oa,GALFqkG,EAAa95F,EAAKulG,QACpBvlG,EAAKulG,KAAOk+B,EAAOvtH,KAAKlW,EAAKulG,OAG1BvlG,EAAKqpR,UAAU,sBAGhB5zR,EADuB,kBAAduK,EAAKulG,KACLk+B,EAAOv9B,WAAWlmG,EAAKulG,MACvB7wG,MAAMC,QAAQqL,EAAKulG,MACnBvlG,EAAKulG,KAAKi0C,QAAO,SAAU74I,EAAG8J,GAAK,OAAO9J,EAAI8J,EAAEhV,MAAQ,GAAE,GAE1DuK,EAAKulG,KAAK9vG,QAInBuK,EAAK87Q,UAAU,iBAAkBrmR,GAEjCuK,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,kCAGlC,CAvCGxI,EAAK86Z,QAAU96Z,EAAKs6Z,SACtBt6Z,EAAKg3D,KAAQh3D,EAAKypH,IAAIkzE,SAAW,KAAO38L,EAAKypH,IAAIwzE,KAAOj9L,EAAKg3D,MAG3DrgE,EAAQ6gG,MACVx3F,EAAKw3F,KAAK7gG,EAAQ6gG,MAEhB7gG,EAAQ4/Z,WACVv2Z,EAAKu2Z,UAAU5/Z,EAAQ4/Z,WAGrB5/Z,EAAQ4E,OACVyE,EAAKu+Z,QAAS,EAGdv+Z,EAAK+pG,YAAc/pG,EAAK+pG,aAAe,GAyBrC/pG,EAAKulG,OAASsxT,EAAS72Z,EAAKulG,OAC9B+4T,IAGE3na,EAAQ0ga,MACVr3Z,EAAKq3Z,MAAM1ga,EAAQ0ga,OACVr3Z,EAAKw3Z,OAAOttW,QAAUlqD,EAAKqpR,UAAU,kBAC9CrpR,EAAKq3Z,MAAMr3Z,EAAKw3Z,OAAOttW,QAGzB,IAAIyyI,EAAW38L,EAAK86Z,QAAU96Z,EAAKs6Z,OAASt6Z,EAAK86Z,MAAMn+N,SAAW38L,EAAKypH,IAAIkzE,SACvE6hO,EAAiB,CAAC,QAASp3E,EAAM,SAAUC,GAC3Co3E,EAAcz+Z,EAAKy+Z,aAAe,CAAC,EAIvC,GAFAz+Z,EAAK0+Z,WAAaD,EAAY9hO,IAAa6hO,EAAe7hO,IAErD38L,EAAK0+Z,WACR,OAAO1+Z,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,qBAAuBm0L,IAO7D,GAJIhmM,EAAQitX,KACV5jX,EAAK4jX,GAAKjtX,EAAQitX,KAGf5jX,EAAKi6Z,MAKR,GAJItja,EAAQ27Z,eACVtyZ,EAAKsyZ,aAAe37Z,EAAQ27Z,cAG1B37Z,EAAQgoa,WACV3+Z,EAAK2+Z,WAAahoa,EAAQgoa,gBACrB,GAAIhoa,EAAQ07Z,QAAS,CAC1B,IAAI1mZ,EAAI8J,IAEQ,IAAZ9J,EAAEgrZ,OAAehrZ,EAAEirZ,OAAS,GAC9B52Z,EAAK2+Z,WAA0B,UAAbhiO,EAAuB66I,EAAeA,EAAaC,KAErEz3U,EAAK2+Z,WAAa3+Z,EAAK0+Z,WAAW/mF,MAClC33U,EAAKsyZ,aAAetyZ,EAAKsyZ,cAAgB,CAAC,EAC1CtyZ,EAAKsyZ,aAAaz1N,WAAY,EAEjC,MACC78L,EAAK2+Z,WAAa3+Z,EAAK0+Z,WAAW/mF,OAIpB,IAAd33U,EAAKmyZ,KACPnyZ,EAAKi6Z,OAAQ,EAEbj6Z,EAAKi6Z,MAAQj6Z,EAAKi6Z,OAASj6Z,EAAK4+Z,cAGlC5+Z,EAAKo/H,GAAG,QAAQ,SAAUnpI,GAKxB,GAJI+J,EAAK6+Z,OAAS7+Z,EAAKm6Z,UACrBn6Z,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,2EAE/BxI,EAAK/J,IAAMA,EACPwga,EAAaxga,GACV+J,EAAKqpR,UAAU,iBAClBrpR,EAAK87Q,UAAU,eAAgBixF,EAAKp7H,OAAO17O,EAAI+gE,WAE5C,CACL,GAAI/gE,EAAI+uG,QACN,IAAK,IAAIvwG,KAAKwB,EAAI+uG,QACXhlG,EAAKqpR,UAAU50R,IAClBuL,EAAK87Q,UAAUrnR,EAAGwB,EAAI+uG,QAAQvwG,IAIhCuL,EAAK8+Z,QAAU9+Z,EAAKqpR,UAAU,iBAChCrpR,EAAK87Q,UAAU,eAAgB,oBAE7B7lR,EAAI45F,SAAW7vF,EAAK+8Z,iBACtB/8Z,EAAK6vF,OAAS55F,EAAI45F,OAErB,CAKF,IAEDipK,GAAM,WACJ,IAAI94P,EAAK++Z,SAAT,CAIA,IAAI7yX,EAAM,WAWR,GAVIlsC,EAAKo6Z,QACFp6Z,EAAK+5Z,MAAMpH,QAEL3yZ,EAAK+5Z,MAAMpH,SAAW3yZ,EAAK+5Z,MAAMnH,UAC1C5yZ,EAAKo6Z,MAAMjqL,KAAKnwO,GAFhBA,EAAKo6Z,MAAMjqL,KAAKnwO,IAKhBA,EAAKi9Z,YAAcj9Z,EAAKi9Z,WAAWlG,SACrC/2Z,EAAKi9Z,WAAW13T,KAAK4qI,KAAKnwO,GAExBA,EAAKulG,KACHsxT,EAAS72Z,EAAKulG,MAChBvlG,EAAKulG,KAAK4qI,KAAKnwO,IAEfs+Z,IACI5pa,MAAMC,QAAQqL,EAAKulG,MACrBvlG,EAAKulG,KAAKrsG,SAAQ,SAAUukL,GAC1Bz9K,EAAKu5L,MAAM9b,EACZ,IAEDz9K,EAAKu5L,MAAMv5L,EAAKulG,MAElBvlG,EAAKksC,YAEF,GAAIlsC,EAAKs2Z,kBACdhrZ,QAAQC,KAAK,2FACbvL,EAAKs2Z,kBAAkBnmL,KAAKnwO,QACvB,IAAKA,EAAK/J,IAAK,CACpB,GAAI+J,EAAK+5Z,MAAMpH,UAAY3yZ,EAAK+5Z,MAAMnH,SAEpC,YADA5yZ,EAAKksC,MAGa,QAAhBlsC,EAAK6vF,QAA2C,qBAAhB7vF,EAAK6vF,QACvC7vF,EAAK87Q,UAAU,iBAAkB,GAEnC97Q,EAAKksC,KACN,CACF,EAEGlsC,EAAKo6Z,QAAUp6Z,EAAKqpR,UAAU,mBAEhCrpR,EAAK87Q,UAAU97Q,EAAKo6Z,MAAM4E,cAAc,GACxCh/Z,EAAKo6Z,MAAMr2P,WAAU,SAAUruK,EAAKD,GAC7BC,GAAQuqC,MAAMxqC,IACjBuK,EAAK87Q,UAAU,iBAAkBrmR,GAEnCy2C,GACD,KAEDA,IAGFlsC,EAAK6+Z,OAAQ,CAvDZ,CAwDF,GACF,EAED95T,EAAQhkG,UAAU69Z,YAAc,WAC9B,IAAI5+Z,EAAOnJ,KACP8gV,EAAQ33U,EAAK2+Z,WACbhoa,EAAU,CAAC,EACf,GAAIqJ,EAAKsyZ,aACP,IAAK,IAAI79Z,KAAKuL,EAAKsyZ,aACjB37Z,EAAQlC,GAAKuL,EAAKsyZ,aAAa79Z,GAG/BuL,EAAK4jX,KACPjtX,EAAQitX,GAAK5jX,EAAK4jX,IAEhB5jX,EAAKkoQ,UACPvxQ,EAAQuxQ,QAAUloQ,EAAKkoQ,SAErBloQ,EAAK87Z,iBACPnla,EAAQmla,eAAiB97Z,EAAK87Z,gBAE5B97Z,EAAK67Z,gBACPlla,EAAQkla,cAAgB77Z,EAAK67Z,eAEQ,qBAA5B77Z,EAAK47Z,qBACdjla,EAAQila,mBAAqB57Z,EAAK47Z,oBAGhC57Z,EAAK07Z,MAAQ17Z,EAAKlI,MACpBnB,EAAQmB,IAAMkI,EAAKlI,IACnBnB,EAAQ+ka,KAAO17Z,EAAK07Z,MAGlB17Z,EAAK27Z,MACPhla,EAAQgla,IAAM37Z,EAAK27Z,KAGjB37Z,EAAKszW,aACP38W,EAAQ28W,WAAatzW,EAAKszW,YAG5B,IAAI2rD,EAAU,GAGVtnF,IAAU33U,EAAK0+Z,WAAW/mF,QAC5BsnF,GAAWtnF,EAAMxmU,MAInB,IAAI2pZ,EAAQ96Z,EAAK86Z,MAyDjB,MAxDqB,kBAAVA,IACTA,EAAQhlZ,EAAIgC,MAAMgjZ,KAELA,GAA4B,WAAnBA,EAAMn+N,UAAgD,WAAtB9lM,KAAK4yH,IAAIkzE,YAG3DhmM,EAAQitX,KACNq7C,IACFA,GAAW,KAEbA,GAAWtoa,EAAQitX,IAGqB,qBAA/BjtX,EAAQila,qBACbqD,IACFA,GAAW,KAEbA,GAAWtoa,EAAQila,oBAGjBjla,EAAQ+ka,OACNuD,IACFA,GAAW,KAEbA,GAAWtoa,EAAQ+ka,KAAKv6Z,SAAS,SAAWxK,EAAQmB,IAAIqJ,SAAS,UAG/DxK,EAAQgla,MACNsD,IACFA,GAAW,KAEbA,GAAWtoa,EAAQgla,IAAIx6Z,SAAS,UAG9BxK,EAAQuxQ,UACN+2J,IACFA,GAAW,KAEbA,GAAWtoa,EAAQuxQ,SAGjBvxQ,EAAQmla,iBACNmD,IACFA,GAAW,KAEbA,GAAWtoa,EAAQmla,gBAGjBnla,EAAQkla,gBACNoD,IACFA,GAAW,KAEbA,GAAWtoa,EAAQkla,gBAInB77Z,EAAKmyZ,OAASmK,IAAe2C,GAA2C,IAAhClna,OAAOQ,KAAK5B,GAASlB,QAAgBuK,EAAK0+Z,WAAWQ,YAExFl/Z,EAAK0+Z,WAAWQ,aAIzBD,EAAUj/Z,EAAKypH,IAAIkzE,SAAWsiO,EAGzBj/Z,EAAKmyZ,KAAK8M,KACbj/Z,EAAKmyZ,KAAK8M,GAAW,IAAItnF,EAAMhhV,GAE3BqJ,EAAKmyZ,KAAK/5E,aACZp4U,EAAKmyZ,KAAK8M,GAAS7mF,WAAap4U,EAAKmyZ,KAAK/5E,aAIvCp4U,EAAKmyZ,KAAK8M,GAClB,EAEDl6T,EAAQhkG,UAAUi+B,MAAQ,WAGxB,IAAIh/B,EAAOnJ,KAEX,GAAImJ,EAAKu+Z,OAMP,IAAI5/T,GAAY,IAAItjG,MAAOoiO,UACvB0hM,EAAe7ja,IAGrB,IAAI0E,EAAK++Z,SAAT,CAIA/+Z,EAAKm6Z,UAAW,EAChBn6Z,EAAK6vF,OAAS7vF,EAAK6vF,QAAU,MAC7B7vF,EAAKygI,KAAOzgI,EAAKypH,IAAIgX,KAEjBzgI,EAAK/J,KAAO+J,EAAK/J,IAAImpa,MAAQp/Z,EAAK/J,IAAImpa,KAAK/rZ,OAASrT,EAAKqpR,UAAU,mBACrErpR,EAAK87Q,UAAU,iBAAkB97Q,EAAK/J,IAAImpa,KAAK/rZ,MAE7CrT,EAAKq/Z,MACPr/Z,EAAKk+Z,IAAIl+Z,EAAKq/Z,MAAM,GAKtB,IA0BIpsR,EA1BAqsR,EAAa3sZ,EAAK3S,UACfs/Z,EAAW54L,KAElB1nK,EAAM,eAAgBh/D,EAAKypH,IAAIgX,aAKxB6+R,EAAWrsR,QAElB,IACEjzI,EAAK8kG,IAAM9kG,EAAK0+Z,WAAWl/R,QAAQ8/R,EAIpC,CAHC,MAAO5pa,GAEP,YADAsK,EAAKmrI,KAAK,QAASz1I,EAEpB,CAEGsK,EAAKu+Z,SACPv+Z,EAAK2+F,UAAYA,EACjB3+F,EAAKm/Z,aAAeA,EAIpBn/Z,EAAKs8U,QAAU,CAAC,GAIdt8U,EAAKizI,UAAYjzI,EAAKu/Z,eACpBv/Z,EAAKizI,QAAU,EACjBA,EAAU,EACuB,kBAAjBjzI,EAAKizI,SAAwBxxG,SAASzhC,EAAKizI,WAC3DA,EAAUjzI,EAAKizI,UAInBjzI,EAAK8kG,IAAIs6B,GAAG,WAAYp/H,EAAKw/Z,kBAAkB9+Z,KAAKV,IACpDA,EAAK8kG,IAAIs6B,GAAG,QAASp/H,EAAKy/Z,eAAe/+Z,KAAKV,IAC9CA,EAAK8kG,IAAIs6B,GAAG,SAAS,WACnBp/H,EAAKmrI,KAAK,QACX,IAEDnrI,EAAK8kG,IAAIs6B,GAAG,UAAU,SAAUo5M,GAE9B,IAAIknF,EAAelnF,EAAOmnF,aAAennF,EAAOonF,WAChD,GAAI5/Z,EAAKu+Z,SACPv+Z,EAAKs8U,QAAQ9D,OAASl9U,IAAQ0E,EAAKm/Z,aAE/BO,GAAc,CAChB,IAAIG,EAAiB,WACnB7/Z,EAAKs8U,QAAQ3qG,OAASr2O,IAAQ0E,EAAKm/Z,YACpC,EAEGW,EAAkB,WACpB9/Z,EAAKs8U,QAAQx5M,QAAUxnI,IAAQ0E,EAAKm/Z,YACrC,EAED3mF,EAAOzqL,KAAK,SAAU8xQ,GACtBrnF,EAAOzqL,KAAK,UAAW+xQ,GAGvB9/Z,EAAK8kG,IAAIipD,KAAK,SAAS,WACrByqL,EAAOzrL,eAAe,SAAU8yQ,GAChCrnF,EAAOzrL,eAAe,UAAW+yQ,EAClC,GACF,CAGH,IAAIC,EAAgB,WAMlB//Z,EAAK8kG,IAAID,WAAWouC,GAAS,WAC3B,GAAIjzI,EAAK8kG,IAAK,CACZ9kG,EAAKmoO,QACL,IAAItqO,EAAI,IAAI2K,MAAM,mBAClB3K,EAAEgjE,KAAO,kBACThjE,EAAEilI,SAAU,EACZ9iI,EAAKmrI,KAAK,QAASttI,EACpB,CACF,GACF,EACD,QAAgBqC,IAAZ+yI,EAKF,GAAIysR,EAAc,CAChB,IAAIM,EAAmB,SAAnBA,IACFxnF,EAAOzrL,eAAe,UAAWizQ,GACjChga,EAAK6/P,eACLkgK,GACD,EAEDvnF,EAAOp5M,GAAG,UAAW4gS,GAErBhga,EAAK8kG,IAAIs6B,GAAG,SAAS,SAAU1pI,GAC7B8iV,EAAOzrL,eAAe,UAAWizQ,EAClC,IAMDhga,EAAKu/Z,aAAe16T,YAAW,WAC7B2zO,EAAOzrL,eAAe,UAAWizQ,GACjChga,EAAKmoO,QACL,IAAItqO,EAAI,IAAI2K,MAAM,aAClB3K,EAAEgjE,KAAO,YACThjE,EAAEilI,SAAU,EACZ9iI,EAAKmrI,KAAK,QAASttI,EACpB,GAAEo1I,EACJ,MAEC8sR,IAGJ//Z,EAAKmrI,KAAK,SAAUqtM,EACrB,IAEDx4U,EAAKmrI,KAAK,UAAWnrI,EAAK8kG,IAxIzB,CAyIF,EAEDC,EAAQhkG,UAAU0+Z,eAAiB,SAAU7/Z,GAC3C,IAAII,EAAOnJ,KACX,IAAImJ,EAAK++Z,SAAT,CAGA,GAAI/+Z,EAAK8kG,KAAO9kG,EAAK8kG,IAAIm0O,eAAgC,eAAfr5U,EAAMihE,MAC9C7gE,EAAKi6Z,MAAMphF,kBAIX,OAHA74U,EAAKi6Z,MAAQ,CAAEnhF,WAAY94U,EAAKi6Z,MAAMphF,kBAAkBn4U,KAAKV,EAAKi6Z,QAClEj6Z,EAAKg/B,aACLh/B,EAAK8kG,IAAI54D,MAGXlsC,EAAK6/P,eACL7/P,EAAKmrI,KAAK,QAASvrI,EATlB,CAUF,EAEDmlG,EAAQhkG,UAAUy+Z,kBAAoB,SAAU76T,GAC9C,IAAI3kG,EAAOnJ,KAmDX,GAjDImJ,EAAKu+Z,SACPv+Z,EAAKs8U,QAAQ33O,SAAWrpG,IAAQ0E,EAAKm/Z,cAGvCngW,EAAM,oBAAqBh/D,EAAKypH,IAAIgX,KAAM97B,EAASg6N,WAAYh6N,EAASK,SACxEL,EAASy6B,GAAG,OAAO,WACbp/H,EAAKu+Z,SACPv+Z,EAAKs8U,QAAQpwS,IAAM5wC,IAAQ0E,EAAKm/Z,aAChCx6T,EAASs7T,YAAcjga,EAAK2+F,UAIvB3+F,EAAKs8U,QAAQ9D,SAChBx4U,EAAKs8U,QAAQ9D,OAAS,GAEnBx4U,EAAKs8U,QAAQ3qG,SAChB3xO,EAAKs8U,QAAQ3qG,OAAS3xO,EAAKs8U,QAAQ9D,QAEhCx4U,EAAKs8U,QAAQx5M,UAChB9iI,EAAKs8U,QAAQx5M,QAAU9iI,EAAKs8U,QAAQ3qG,QAEjC3xO,EAAKs8U,QAAQ33O,WAChB3kG,EAAKs8U,QAAQ33O,SAAW3kG,EAAKs8U,QAAQx5M,SAGvC9jE,EAAM,eAAgBh/D,EAAKs8U,QAAQpwS,KAGnClsC,EAAK+pG,aAAe/sG,KAAK0L,MAAM1I,EAAKs8U,QAAQpwS,KAG5Cy4D,EAASoF,YAAc/pG,EAAK+pG,YAG5BpF,EAAS23O,QAAUt8U,EAAKs8U,QAGxB33O,EAASu7T,aAAe,CACtB1zQ,KAAMxsJ,EAAKs8U,QAAQ9D,OACnB2nF,IAAKnga,EAAKs8U,QAAQ3qG,OAAS3xO,EAAKs8U,QAAQ9D,OACxC4nF,IAAKpga,EAAKs8U,QAAQx5M,QAAU9iI,EAAKs8U,QAAQ3qG,OACzC6xC,UAAWxjR,EAAKs8U,QAAQ33O,SAAW3kG,EAAKs8U,QAAQx5M,QAChDu9R,SAAUrga,EAAKs8U,QAAQpwS,IAAMlsC,EAAKs8U,QAAQ33O,SAC1CiB,MAAO5lG,EAAKs8U,QAAQpwS,MAGxB8yB,EAAM,eAAgBh/D,EAAKypH,IAAIgX,KAAM97B,EAASg6N,WAAYh6N,EAASK,QACpE,IAEGhlG,EAAK++Z,SAGP,OAFA//V,EAAM,UAAWh/D,EAAKypH,IAAIgX,WAC1B97B,EAAS6uK,SASX,GALAxzQ,EAAK2kG,SAAWA,EAChBA,EAAS66B,QAAUx/H,EACnB2kG,EAASvsF,OAASokZ,EAGdx8Z,EAAK0+Z,aAAer3E,IACtBrnV,EAAKy9Z,WAAe94T,EAASigE,eAAe,WAC3CjgE,EAAS6zO,OAAO8nF,WAFnB,CAaAtga,EAAKq6Z,aAAer6Z,EAAKspR,UAAU,QAC9BtpR,EAAK69Z,yBACR79Z,EAAK69Z,uBAAyB79Z,EAAKqpR,UAAU,SAE3CrpR,EAAK29Z,SACP39Z,EAAKupR,aAAa,QAEpBvpR,EAAK6/P,eAEL,IAAI0gK,EAAmBvga,EAAK4zZ,MAAQ5zZ,EAAK4zZ,KAAK/E,UAAa7uZ,EAAK4zZ,KAAOyI,EACnEmE,EAAY,SAAU9xL,GAExB,IACE6xL,EAAgB1R,UAAUngL,EAAQ1uO,EAAKypH,IAAIgX,KAAM,CAACquR,aAAa,GAGhE,CAFC,MAAOjxZ,GACPmC,EAAKmrI,KAAK,QAASttI,EACpB,CACF,EAID,GAFA8mG,EAAS6tT,SAAWA,EAAS7tT,EAASK,SAElCL,EAAS6tT,SAASpxZ,IAAI,gBAAmBpB,EAAKyga,gBAAkB,CAClE,IAAItwI,EAAaxrL,EAAS6tT,SAASpxZ,IAAI,cACnC1M,MAAMC,QAAQgwG,EAASK,QAAQmrL,IACjCxrL,EAASK,QAAQmrL,GAAYj3R,QAAQsna,GAErCA,EAAU77T,EAASK,QAAQmrL,GAE9B,CAED,IAAInwR,EAAKk9Z,UAAU1J,WAAW7uT,GAA9B,CAKEA,EAASy6B,GAAG,SAAS,WACdp/H,EAAK0ga,QACR1ga,EAAK2kG,SAASwmC,KAAK,MAEtB,IAEDxmC,EAASopD,KAAK,OAAO,WACnB/tJ,EAAK0ga,QAAS,CACf,IAED,IAYIC,EAZmB9/V,EAavB,IAAI7gE,EAAKm+Z,OAbct9V,EAaE8jC,EAASg6N,WAXd,SAAhB3+T,EAAK6vF,QAEJhvB,GAAQ,KAAOA,EAAO,KAEd,MAATA,GAES,MAATA,GAiCF8/V,EAAkBh8T,MA5B2B,CAC7C,IAAIyqF,EAAkBzqF,EAASK,QAAQ,qBAAuB,WAC9DoqF,EAAkBA,EAAgBh3H,OAAOhxD,cAMzC,IAAIw5Z,EAAc,CAChBt3J,MAAO0yJ,EAAK6E,aACZC,YAAa9E,EAAK6E,cAGI,SAApBzxO,GACFuxO,EAAkB3E,EAAK+E,aAAaH,GACpCj8T,EAASwrI,KAAKwwL,IACe,YAApBvxO,GACTuxO,EAAkB3E,EAAKgF,cAAcJ,GACrCj8T,EAASwrI,KAAKwwL,KAIU,aAApBvxO,GACFpwH,EAAM,0CAA4CowH,GAEpDuxO,EAAkBh8T,EAErB,CAIG3kG,EAAK8W,WACmB,IAAtB9W,EAAKo1Q,MAAM3/Q,OACb6V,QAAQ1L,MAAM,wHAEd+ga,EAAgB1tJ,YAAYjzQ,EAAK8W,WAIjC9W,EAAKiha,SACPN,EAAgB1rJ,QAGlBj1Q,EAAK2ga,gBAAkBA,EAEvB3ga,EAAKmrI,KAAK,WAAYxmC,GAEtB3kG,EAAKo1Q,MAAMl8Q,SAAQ,SAAUm1G,GAC3BruG,EAAKkha,SAAS7yT,EACf,IAEDsyT,EAAgBvhS,GAAG,QAAQ,SAAU8+D,GAC/Bl+L,EAAKu+Z,SAAWv+Z,EAAKmha,kBACvBnha,EAAKoha,mBAAqB,IAAI/la,MAAQoiO,UAGtC94H,EAASy8T,kBAAoBpha,EAAKoha,mBAEpCpha,EAAKqha,WAAY,EACjBrha,EAAKmrI,KAAK,OAAQ+yD,EACnB,IACDyiO,EAAgB5yQ,KAAK,OAAO,SAAUmwC,GACpCl+L,EAAKmrI,KAAK,MAAO+yD,EAClB,IACDyiO,EAAgBvhS,GAAG,SAAS,SAAUx/H,GACpCI,EAAKmrI,KAAK,QAASvrI,EACpB,IACD+ga,EAAgBvhS,GAAG,SAAS,WAAcp/H,EAAKmrI,KAAK,QAAU,IAE1DnrI,EAAKke,SACPle,EAAKsha,iBAAiB38T,GAEtB3kG,EAAKo/H,GAAG,OAAO,WACTp/H,EAAK++Z,SACP//V,EAAM,UAAWh/D,EAAKypH,IAAIgX,MAG5BzgI,EAAKmrI,KAAK,WAAYxmC,EACvB,IAGL3lC,EAAM,uBAAwBh/D,EAAKypH,IAAIgX,KADtC,CAhJA,KAPD,CAGEzhE,EAAM,mBAAoBh/D,EAAKypH,IAAIgX,MACnC,IAAI8gS,EAAS58T,EAASigE,eAAe,UAAYjgE,EAAS6zO,OAAOgpF,mBAAqBxha,EAAKypH,IAAIgX,KAAO,wBACtGzgI,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,cAAgB+4Z,GAE9C,CAkJF,EAEDx8T,EAAQhkG,UAAUuga,iBAAmB,SAAU38T,GAC7C,IAAI3kG,EAAOnJ,KACXmoE,EAAM,2BACN,IAAIhwB,EAAU,GACVyyX,EAAe,EACf7qa,EAAU,GAEdoJ,EAAKo/H,GAAG,QAAQ,SAAU8+D,GACnBz6D,EAAOk2D,SAASuE,GAEVA,EAAMzoM,SACfgsa,GAAgBvjO,EAAMzoM,OACtBu5C,EAAQz5C,KAAK2oM,IAHbtnM,EAAQrB,KAAK2oM,EAKhB,IACDl+L,EAAKo/H,GAAG,OAAO,WAEb,GADApgE,EAAM,YAAah/D,EAAKypH,IAAIgX,MACxBzgI,EAAK++Z,SAMP,OALA//V,EAAM,UAAWh/D,EAAKypH,IAAIgX,MAG1BzxF,EAAU,QACVyyX,EAAe,GAuBjB,GAnBIA,GACFziW,EAAM,WAAYh/D,EAAKypH,IAAIgX,KAAMghS,GACjC98T,EAASY,KAAOk+B,EAAOmQ,OAAO5kG,EAASyyX,GACjB,OAAlBzha,EAAK8W,WACP6tF,EAASY,KAAOZ,EAASY,KAAKpkG,SAASnB,EAAK8W,WAI9Ck4B,EAAU,GACVyyX,EAAe,GACN7qa,EAAQnB,SAGK,SAAlBuK,EAAK8W,UAAuBlgB,EAAQ,GAAGnB,OAAS,GAAuB,WAAlBmB,EAAQ,GAAG,KAClEA,EAAQ,GAAKA,EAAQ,GAAGm5G,UAAU,IAEpCpL,EAASY,KAAO3uG,EAAQ8hE,KAAK,KAG3B14D,EAAK8+Z,MACP,IACEn6T,EAASY,KAAO1tF,KAAKC,MAAM6sF,EAASY,KAAMvlG,EAAK0ha,aAGhD,CAFC,MAAO7ja,GACPmhE,EAAM,wBAAyBh/D,EAAKypH,IAAIgX,KACzC,CAEHzhE,EAAM,oBAAqBh/D,EAAKypH,IAAIgX,MACP,qBAAlB97B,EAASY,MAAyBvlG,EAAK8+Z,QAChDn6T,EAASY,KAAyB,OAAlBvlG,EAAK8W,SAAoB2sH,EAAOivD,MAAM,GAAK,IAE7D1yL,EAAKmrI,KAAK,WAAYxmC,EAAUA,EAASY,KAC1C,GACF,EAEDR,EAAQhkG,UAAUonO,MAAQ,WACxB,IAAInoO,EAAOnJ,KACXmJ,EAAK++Z,UAAW,EAEZ/+Z,EAAK8kG,IACP9kG,EAAK8kG,IAAIqjI,QACAnoO,EAAK2kG,UACd3kG,EAAK2kG,SAASvtG,UAGhB4I,EAAK6/P,eACL7/P,EAAKmrI,KAAK,QACX,EAEDpmC,EAAQhkG,UAAUmga,SAAW,SAAU7yT,GACrC,IAAIruG,EAAOnJ,KACP8tG,EAAW3kG,EAAK2kG,SAEpB,GAAI0J,EAAKrJ,UAAYqJ,EAAKszT,YAAa,CACrC,GAAIh9T,EAAS6tT,SAASpxZ,IAAI,gBAAiB,CACzC,IAAIwga,EAASj9T,EAAS6tT,SAASpxZ,IAAI,gBAC/BitG,EAAKytK,UACPztK,EAAKytK,UAAU8lJ,EAAQj9T,EAASK,QAAQ48T,IAExCvzT,EAAKrJ,QAAQ48T,GAAUj9T,EAASK,QAAQ48T,EAE3C,CAED,GAAIj9T,EAAS6tT,SAASpxZ,IAAI,kBAAmB,CAC3C,IAAIyga,EAASl9T,EAAS6tT,SAASpxZ,IAAI,kBAC/BitG,EAAKytK,UACPztK,EAAKytK,UAAU+lJ,EAAQl9T,EAASK,QAAQ68T,IAExCxzT,EAAKrJ,QAAQ68T,GAAUl9T,EAASK,QAAQ68T,EAE3C,CACF,CACD,GAAIxzT,EAAKytK,YAAcztK,EAAKszT,YAAa,CACvC,IAAK,IAAIlta,KAAKkwG,EAASK,QAGhBhlG,EAAKm+Z,MAAc,qBAAN1pa,GAChB45G,EAAKytK,UAAUrnR,EAAGkwG,EAASK,QAAQvwG,IAGvC45G,EAAKswN,WAAah6N,EAASg6N,UAC5B,CACG3+T,EAAK8ha,YACP9ha,EAAK8ha,WAAWn9T,EAAU0J,EAE7B,EAEDtJ,EAAQhkG,UAAU0hX,GAAK,SAAUjpX,EAAG0vR,GAClC,IACItoH,EADA5gK,EAAOnJ,KAQX,IAAK,IAAIpC,KALPmsK,GADGsoH,GAAWlpR,EAAKypH,IAAIgyE,MAChBz7L,EAAKg9Z,IAAIllZ,MAAM9X,EAAKypH,IAAIgyE,OAExB,CAAC,EAGIjiM,EACZonK,EAAKnsK,GAAK+E,EAAE/E,GAGd,IAAIguX,EAAKziX,EAAKg9Z,IAAIjlZ,UAAU6oJ,GAE5B,MAAW,KAAP6hN,IAIJziX,EAAKypH,IAAM3zG,EAAIgC,MAAM9X,EAAKypH,IAAIgX,KAAKjoE,MAAM,KAAK,GAAK,IAAMiqT,GACzDziX,EAAK8V,IAAM9V,EAAKypH,IAChBzpH,EAAKg3D,KAAOh3D,EAAKypH,IAAIzyD,KAEC,SAAlBh3D,EAAKypH,IAAIwzE,MACXj9L,EAAKw9Z,oBAREx9Z,CAYV,EACD+kG,EAAQhkG,UAAU2wJ,KAAO,SAAUA,GACjC,IAAI1xJ,EAAOnJ,KACX,OAAI66J,GACG,wCAAwCp9I,KAAKtU,EAAKspR,UAAU,kBAC/DtpR,EAAK87Q,UAAU,eAAgB,qCAEjC97Q,EAAKulG,KAAwB,kBAATmsD,EAChB1xJ,EAAKg9Z,IAAI5vD,QAAQ17M,EAAKvwJ,SAAS,SAC/BnB,EAAKg9Z,IAAIjlZ,UAAU25I,GAAMvwJ,SAAS,QAC/BnB,IAGTA,EAAKo6Z,MAAQ,IAAIvsL,EACjB7tO,EAAKo6Z,MAAMh7R,GAAG,SAAS,SAAU1pI,GAC/BA,EAAIw4F,QAAU,cAAgBx4F,EAAIw4F,QAClCluF,EAAKmrI,KAAK,QAASz1I,GACnBsK,EAAKmoO,OACN,IACMnoO,EAAKo6Z,MACb,EACDr1T,EAAQhkG,UAAUw1Z,UAAY,SAAUA,GACtC,IAAIv2Z,EAAOnJ,KAQX,OANAmJ,EAAKi9Z,WAAW1J,UAAUgD,GAErBv2Z,EAAKi9Z,WAAWlG,UACnB/2Z,EAAKulG,KAAOvlG,EAAKi9Z,WAAW13T,MAGvBvlG,CACR,EACD+kG,EAAQhkG,UAAUy2F,KAAO,SAAUg9D,GACjC,IAAIx0J,EAAOnJ,KAiCX,OA/BKmJ,EAAKqpR,UAAU,WAClBrpR,EAAK87Q,UAAU,SAAU,oBAGM,oBAAtB97Q,EAAK+ha,eACd/ha,EAAKgia,cAAgBhia,EAAK+ha,cAG5B/ha,EAAK8+Z,OAAQ,EACM,mBAARtqQ,OACSt0J,IAAdF,EAAKulG,OACF,wCAAwCjxF,KAAKtU,EAAKspR,UAAU,iBAG/DtpR,EAAKulG,KAAOvlG,EAAKg9Z,IAAI5vD,QAAQptW,EAAKulG,MAFlCvlG,EAAKulG,KAAOixT,EAAcx2Z,EAAKulG,KAAMvlG,EAAKgia,eAIvChia,EAAKqpR,UAAU,iBAClBrpR,EAAK87Q,UAAU,eAAgB,sBAInC97Q,EAAKulG,KAAOixT,EAAchiQ,EAAKx0J,EAAKgia,eAC/Bhia,EAAKqpR,UAAU,iBAClBrpR,EAAK87Q,UAAU,eAAgB,qBAIH,oBAArB97Q,EAAKiia,cACdjia,EAAK0ha,aAAe1ha,EAAKiia,aAGpBjia,CACR,EACD+kG,EAAQhkG,UAAUuoR,UAAY,SAAUn4Q,EAAM6zF,GAC5C,IACI/5B,EAAQgyI,EAcZ,OAbKj4G,IACHA,EAHSnuG,KAGMmuG,SAEjBjtG,OAAOQ,KAAKysG,GAAS9rG,SAAQ,SAAUpB,GACjCA,EAAIrC,SAAW0b,EAAK1b,SAGxBwnN,EAAK,IAAIvwG,OAAOv7F,EAAM,KACdrZ,EAAIyB,MAAM0jN,KAEhBhyI,EAAS+5B,EAAQltG,IAEpB,IACMmzE,CACR,EACD85B,EAAQhkG,UAAUy8Z,iBAAmB,WAEnC,IAAI0E,EAAYrra,KAAK4yH,IAAIzyD,KAAKwB,MAAM,KAChCykI,EAAOilO,EAAU,GACjBlrW,EAAOkrW,EAAU,GAErBrra,KAAKsra,WAAallO,EAClBpmM,KAAK4yH,IAAI4zE,SAAWrmI,EACpBngE,KAAK4yH,IAAIzyD,KAAOA,EAChBngE,KAAK4yH,IAAIwzE,KAAOA,EAChBpmM,KAAK4yH,IAAI+uD,SAAWykB,EACpBpmM,KAAK4yH,IAAIi0S,QAAS,CACnB,EAED34T,EAAQhkG,UAAU2lO,KAAO,SAAUvqC,EAAMa,EAAM9K,EAAiB4gO,GAK9D,OAJWj8Z,KAENkja,MAAMxG,UAAUp3N,EAAMa,EAAM9K,EAAiB4gO,GAFvCj8Z,IAKZ,EACDkuG,EAAQhkG,UAAUm9Z,IAAM,SAAU1pP,EAAMl5K,GACtC,IAAI0E,EAAOnJ,KAEX,IAAKyE,EAEH,OADA0E,EAAKq/Z,KAAO7qP,EACLx0K,EAGT,GAA0B,IAAtBw0K,EAAK4tP,cAA4C,MAAtB5tP,EAAK4tP,aAAsB,CAExD,IAAIzra,EAAU,CACZsmM,KAAMj9L,EAAKypH,IAAIwzE,KACfjmI,KAAMh3D,EAAKypH,IAAIzyD,KACf64B,OAAQ7vF,EAAK6vF,OACbmV,QAAShlG,EAAKglG,QACdO,KAAMvlG,EAAKulG,MAETivE,EAAKutD,UACPprO,EAAQorO,QAAUvtD,EAAKutD,SAEzB,IAAIsgM,EAAUlhM,EAAKh4M,KAAKxyB,EAAS,CAC/BisO,YAAapuD,EAAK18K,IAClB0rO,gBAAiBhvD,EAAK+rD,OACtBkC,aAAcjuD,EAAKj2H,UAErBv+C,EAAK87Q,UAAU,gBAAiBumJ,EAAQr9T,QAAQg+H,eAChDhjO,EAAK87Q,UAAU,aAAcumJ,EAAQr9T,QAAQ,eACzCq9T,EAAQr9T,QAAQ,yBAClBhlG,EAAK87Q,UAAU,uBAAwBumJ,EAAQr9T,QAAQ,wBAE1D,KAAM,CAEL,IAAI6yE,EAAO,IAAIx8K,KACf2E,EAAK87Q,UAAU,OAAQjkG,EAAK+oD,eAC5B,IAAI8F,EAAO,CACT5uO,IAAK08K,EAAK18K,IACVyoO,OAAQ/rD,EAAK+rD,OACbG,KAAM1gO,EAAK6vF,OAAOt3B,cAClBs/G,KAAMA,EACNsX,YAAanvL,EAAKspR,UAAU,iBAAmB,GAC/C3oD,IAAK3gO,EAAKspR,UAAU,gBAAkB,GACtC7oD,cAAew7L,EAAKj7L,oBAAoBhhO,EAAKglG,UAE3ChuC,EAAOh3D,EAAKypH,IAAIzyD,KAChBw9G,EAAK7yB,QAAU3qF,EACjB0vK,EAAK7F,SAAW,IAAMrsD,EAAK7yB,OAAS3qF,EAC3Bw9G,EAAK7yB,SAAW3qF,EACzB0vK,EAAK7F,SAAW,IAAMrsD,EAAK7yB,QACjB6yB,EAAK7yB,QAAU3qF,EACzB0vK,EAAK7F,SAAW7pK,EACNw9G,EAAK7yB,QAAW3qF,IAC1B0vK,EAAK7F,SAAW,KAElB6F,EAAK7F,SAAWo7L,EAAK/6L,qBAAqBwF,EAAK7F,UAC/C7gO,EAAK87Q,UAAU,gBAAiBmgJ,EAAK77L,cAAcsG,GACpD,CAED,OAAO1mO,CACR,EACD+kG,EAAQhkG,UAAUm7Z,cAAgB,SAAU1nP,GAC1C,IAAIx0K,EAAOnJ,KAaX,OAZAqla,EAAcx4E,YAAY,CACxBp6D,UAAW,SAAU1+J,GACnB,OAAO5qH,EAAKspR,UAAU1+J,EAAQ5qH,EAAKglG,QACpC,EACD82K,UAAW,SAAUlxJ,EAAQp1H,GAC3BwK,EAAK87Q,UAAUlxJ,EAAQp1H,EACxB,EACDq6F,OAAQ7vF,EAAK6vF,OACb74B,KAAMh3D,EAAKg3D,MACVw9G,GACHx1G,EAAM,8BAA+Bh/D,EAAKspR,UAAU,kBAE7CtpR,CACR,EACD+kG,EAAQhkG,UAAUq7Z,KAAO,SAAU5nP,GACjC,IAAIx0K,EAAOnJ,KACXmJ,EAAK87Q,UAAU,gBAAiBsgJ,EAAKxxS,OAAO5qH,EAAKypH,IAAKzpH,EAAK6vF,OAAQ2kF,GACpE,EACDzvE,EAAQhkG,UAAUs2Z,MAAQ,SAAUG,GAKlC,OAJW3ga,KAEN2ga,OAAOjE,UAAUiE,GAFX3ga,IAKZ,EAEDkuG,EAAQhkG,UAAUkvZ,IAAM,SAAUA,GAChC,IACIxqL,EADAzlO,EAAOnJ,KAOX,GAJyC,IAArCmJ,EAAKk9Z,UAAUtD,oBACjB55Z,EAAKsia,qBAAuBtia,EAAKspR,UAAU,WAGxC2mI,EAIE,CACL,IAAIsQ,EAAkBtQ,EAAIN,gBAAkBM,EAAMoM,EAC9CkG,EAAUvia,EAAKypH,IAAIgX,KAEnB8/R,IACF96L,EAAU86L,EAAgB5Q,gBAAgB4S,GAE7C,MATC98L,GAAU,EACVzlO,EAAKyga,iBAAkB,EAoBzB,OATIh7L,GAAWA,EAAQhwO,SACjBuK,EAAKsia,qBAEPtia,EAAK87Q,UAAU,SAAU97Q,EAAKsia,qBAAuB,KAAO78L,GAE5DzlO,EAAK87Q,UAAU,SAAUr2C,IAG7BzlO,EAAK4zZ,KAAO3D,EACLjwZ,CACR,EAGD+kG,EAAQhkG,UAAUovO,KAAO,SAAU9hI,EAAMmmE,GACvC,IAAIx0K,EAAOnJ,KAEX,IAAImJ,EAAK2kG,SAaP,OAFA3kG,EAAKo1Q,MAAM7/Q,KAAK84G,GAChBvI,EAAOyrH,OAAOxwN,UAAUovO,KAAK/6O,KAAK4K,EAAMquG,EAAMmmE,GACvCnmE,EAZP,GAAIruG,EAAKqha,UACPrha,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,uEACxB,KAAIxI,EAAK0ga,OAKd,OAFA56T,EAAOyrH,OAAOxwN,UAAUovO,KAAK/6O,KAAK4K,EAAMquG,EAAMmmE,GAC9Cx0K,EAAKkha,SAAS7yT,GACPA,EAJPruG,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,sDAK9B,CAMJ,EACDu8F,EAAQhkG,UAAUw4L,MAAQ,WACxB,IAAIv5L,EAAOnJ,KACX,IAAImJ,EAAK++Z,SAKT,OAHK/+Z,EAAKm6Z,UACRn6Z,EAAKg/B,QAEHh/B,EAAK8kG,IACA9kG,EAAK8kG,IAAIy0F,MAAM1gM,MAAMmH,EAAK8kG,IAAK9rG,gBADxC,CAGD,EACD+rG,EAAQhkG,UAAUmrC,IAAM,SAAUgyJ,GAChC,IAAIl+L,EAAOnJ,KACPmJ,EAAK++Z,WAEL7gO,GACFl+L,EAAKu5L,MAAM2E,GAERl+L,EAAKm6Z,UACRn6Z,EAAKg/B,QAEHh/B,EAAK8kG,KACP9kG,EAAK8kG,IAAI54D,MAEZ,EACD64D,EAAQhkG,UAAUk0Q,MAAQ,WACxB,IAAIj1Q,EAAOnJ,KACNmJ,EAAK2ga,gBAGR3ga,EAAK2ga,gBAAgB1rJ,MAAMp8Q,MAAMmH,EAAK2ga,gBAAiB3na,WAFvDgH,EAAKiha,SAAU,CAIlB,EACDl8T,EAAQhkG,UAAUyyQ,OAAS,WACzB,IAAIxzQ,EAAOnJ,KACNmJ,EAAK2ga,gBAGR3ga,EAAK2ga,gBAAgBntJ,OAAO36Q,MAAMmH,EAAK2ga,gBAAiB3na,WAFxDgH,EAAKiha,SAAU,CAIlB,EACDl8T,EAAQhkG,UAAU3J,QAAU,WAC1B,IAAI4I,EAAOnJ,KACXA,KAAKgpQ,eACA7/P,EAAK0ga,OAEC1ga,EAAK2kG,UACd3kG,EAAK2kG,SAASvtG,UAFd4I,EAAKksC,KAIR,EAED64D,EAAQhkG,UAAU8+P,aAAe,WAC3BhpQ,KAAK0oa,eACP1/J,aAAahpQ,KAAK0oa,cAClB1oa,KAAK0oa,aAAe,KAEvB,EAEDx6T,EAAQw1T,4BACNE,EAAOF,4BAA4B/zZ,QAErCu+F,EAAQy1T,gCACNC,EAAOD,gCAAgCh0Z,QAIzCu+F,EAAQhkG,UAAUqX,OAASmkZ,EAC3BviQ,EAAOx3B,QAAUz9B,kCCrgDjBi1D,EAAOx3B,QAAU,SAAkB26D,EAAMR,GAIvC,GAHAA,EAAWA,EAASnkI,MAAM,KAAK,KAC/B2kI,GAAQA,GAEG,OAAO,EAElB,OAAQR,GACN,IAAK,OACL,IAAK,KACL,OAAgB,KAATQ,EAEP,IAAK,QACL,IAAK,MACL,OAAgB,MAATA,EAEP,IAAK,MACL,OAAgB,KAATA,EAEP,IAAK,SACL,OAAgB,KAATA,EAEP,IAAK,OACL,OAAO,EAGT,OAAgB,IAATA,CACR,sCCpCD,IAAI15D,EAASwsC,EAAAA,OAAAA,OACTlV,EAAWkV,EAAQ,OACnB6sK,EAAW7sK,EAAQ,OAEnB27L,EAAU,IAAIl3W,MAAM,IAEpBssV,EAAK,CACP,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAClD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACnD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAClD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACnD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,IAGhDwhF,EAAK,CACP,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAClD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EACnD,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAClD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAClD,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,IAGhD5rB,EAAK,CACP,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EACrD,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GACpD,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GACpD,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAGnD6rB,EAAK,CACP,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GACpD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EACrD,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,IAGlD5/E,EAAK,CAAC,EAAY,WAAY,WAAY,WAAY,YACtDk3B,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,GAE1D,SAASh2E,IACP+4C,EAAS1nV,KAAKyB,KAAM,IAGpBA,KAAK6gT,GAAK,WACV7gT,KAAKi/I,GAAK,WACVj/I,KAAKw0T,GAAK,WACVx0T,KAAK1B,GAAK,UACV0B,KAAK7B,GAAK,UACX,CAuFD,SAAS62W,EAAMhyW,EAAG0N,GAChB,OAAQ1N,GAAK0N,EAAM1N,IAAO,GAAK0N,CAChC,CAED,SAASm7Z,EAAK/ha,EAAG8J,EAAGC,EAAG0E,EAAGvR,EAAG2J,EAAGokE,EAAG1hE,GACjC,OAAQ2hW,EAAMlrW,GAAK8J,EAAIC,EAAI0E,GAAK5H,EAAIokE,EAAK,EAAG1hE,GAAKrM,EAAK,CACvD,CAED,SAAS8ka,EAAKhia,EAAG8J,EAAGC,EAAG0E,EAAGvR,EAAG2J,EAAGokE,EAAG1hE,GACjC,OAAQ2hW,EAAMlrW,GAAM8J,EAAIC,GAAQD,EAAK2E,GAAM5H,EAAIokE,EAAK,EAAG1hE,GAAKrM,EAAK,CAClE,CAED,SAAS+ka,EAAKjia,EAAG8J,EAAGC,EAAG0E,EAAGvR,EAAG2J,EAAGokE,EAAG1hE,GACjC,OAAQ2hW,EAAMlrW,IAAM8J,GAAMC,GAAM0E,GAAK5H,EAAIokE,EAAK,EAAG1hE,GAAKrM,EAAK,CAC5D,CAED,SAASgla,EAAKlia,EAAG8J,EAAGC,EAAG0E,EAAGvR,EAAG2J,EAAGokE,EAAG1hE,GACjC,OAAQ2hW,EAAMlrW,GAAM8J,EAAI2E,EAAM1E,GAAM0E,GAAO5H,EAAIokE,EAAK,EAAG1hE,GAAKrM,EAAK,CAClE,CAED,SAASila,EAAKnia,EAAG8J,EAAGC,EAAG0E,EAAGvR,EAAG2J,EAAGokE,EAAG1hE,GACjC,OAAQ2hW,EAAMlrW,GAAK8J,GAAKC,GAAM0E,IAAO5H,EAAIokE,EAAK,EAAG1hE,GAAKrM,EAAK,CAC5D,CA3GDk9J,EAASgpI,EAAW+4C,GAEpB/4C,EAAUhjS,UAAUw4G,QAAU,WAE5B,IADA,IAAIi3E,EAAQo7K,EACHrmV,EAAI,EAAGA,EAAI,KAAMA,EAAGirK,EAAMjrK,GAAK1uB,KAAK6rU,OAAOjrF,YAAgB,EAAJlyN,GAehE,IAbA,IAAI88T,EAAe,EAAVxrV,KAAK6gT,GACVttC,EAAe,EAAVvzQ,KAAKi/I,GACVysM,EAAe,EAAV1rV,KAAKw0T,GACVm3B,EAAe,EAAV3rV,KAAK1B,GACVgC,EAAe,EAAVN,KAAK7B,GAEVqgX,EAAe,EAAVx+W,KAAK6gT,GACV+zE,EAAe,EAAV50X,KAAKi/I,GACV4pG,EAAe,EAAV7oP,KAAKw0T,GACV03G,EAAe,EAAVlsa,KAAK1B,GACVm9Q,EAAe,EAAVz7Q,KAAK7B,GAGLP,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC9B,IAAIwiZ,EACA+rB,EACAvua,EAAI,IACNwiZ,EAAKyrB,EAAIrgF,EAAIj4E,EAAIm4E,EAAIC,EAAIrrV,EAAIq5L,EAAMwwJ,EAAGvsV,IAAKouV,EAAG,GAAI+zD,EAAGniZ,IACrDuua,EAAKF,EAAIztD,EAAIoW,EAAI/rI,EAAIqjL,EAAIzwJ,EAAI9hF,EAAMgyO,EAAG/ta,IAAKslX,EAAG,GAAI0oD,EAAGhua,KAC5CA,EAAI,IACbwiZ,EAAK0rB,EAAItgF,EAAIj4E,EAAIm4E,EAAIC,EAAIrrV,EAAIq5L,EAAMwwJ,EAAGvsV,IAAKouV,EAAG,GAAI+zD,EAAGniZ,IACrDuua,EAAKH,EAAIxtD,EAAIoW,EAAI/rI,EAAIqjL,EAAIzwJ,EAAI9hF,EAAMgyO,EAAG/ta,IAAKslX,EAAG,GAAI0oD,EAAGhua,KAC5CA,EAAI,IACbwiZ,EAAK2rB,EAAIvgF,EAAIj4E,EAAIm4E,EAAIC,EAAIrrV,EAAIq5L,EAAMwwJ,EAAGvsV,IAAKouV,EAAG,GAAI+zD,EAAGniZ,IACrDuua,EAAKJ,EAAIvtD,EAAIoW,EAAI/rI,EAAIqjL,EAAIzwJ,EAAI9hF,EAAMgyO,EAAG/ta,IAAKslX,EAAG,GAAI0oD,EAAGhua,KAC5CA,EAAI,IACbwiZ,EAAK4rB,EAAIxgF,EAAIj4E,EAAIm4E,EAAIC,EAAIrrV,EAAIq5L,EAAMwwJ,EAAGvsV,IAAKouV,EAAG,GAAI+zD,EAAGniZ,IACrDuua,EAAKL,EAAIttD,EAAIoW,EAAI/rI,EAAIqjL,EAAIzwJ,EAAI9hF,EAAMgyO,EAAG/ta,IAAKslX,EAAG,GAAI0oD,EAAGhua,MAErDwiZ,EAAK6rB,EAAIzgF,EAAIj4E,EAAIm4E,EAAIC,EAAIrrV,EAAIq5L,EAAMwwJ,EAAGvsV,IAAKouV,EAAG,GAAI+zD,EAAGniZ,IACrDuua,EAAKN,EAAIrtD,EAAIoW,EAAI/rI,EAAIqjL,EAAIzwJ,EAAI9hF,EAAMgyO,EAAG/ta,IAAKslX,EAAG,GAAI0oD,EAAGhua,KAGvD4tV,EAAKlrV,EACLA,EAAKqrV,EACLA,EAAKqpB,EAAKtpB,EAAI,IACdA,EAAKn4E,EACLA,EAAK6sI,EAEL5hC,EAAK/iG,EACLA,EAAKywJ,EACLA,EAAKl3D,EAAKnsH,EAAI,IACdA,EAAK+rI,EACLA,EAAKu3C,CACN,CAGD,IAAIt7Z,EAAK7Q,KAAKi/I,GAAKysM,EAAKwgF,EAAM,EAC9Blsa,KAAKi/I,GAAMj/I,KAAKw0T,GAAKm3B,EAAKlwE,EAAM,EAChCz7Q,KAAKw0T,GAAMx0T,KAAK1B,GAAKgC,EAAKk+W,EAAM,EAChCx+W,KAAK1B,GAAM0B,KAAK7B,GAAKqtV,EAAKopC,EAAM,EAChC50X,KAAK7B,GAAM6B,KAAK6gT,GAAKttC,EAAK1qB,EAAM,EAChC7oP,KAAK6gT,GAAKhwS,CACX,EAEDq8R,EAAUhjS,UAAUo8U,QAAU,WAE5BtmV,KAAK6rU,OAAO7rU,KAAKmmV,gBAAkB,IAC/BnmV,KAAKmmV,aAAe,KACtBnmV,KAAK6rU,OAAOz3Q,KAAK,EAAGp0D,KAAKmmV,aAAc,IACvCnmV,KAAK0iH,UACL1iH,KAAKmmV,aAAe,GAGtBnmV,KAAK6rU,OAAOz3Q,KAAK,EAAGp0D,KAAKmmV,aAAc,IACvCnmV,KAAK6rU,OAAOzrF,cAAcpgP,KAAK+qP,QAAQ,GAAI,IAC3C/qP,KAAK6rU,OAAOzrF,cAAcpgP,KAAK+qP,QAAQ,GAAI,IAC3C/qP,KAAK0iH,UAGL,IAAIpqE,EAASs0F,EAAOivD,MAAQjvD,EAAOivD,MAAM,IAAM,IAAIjvD,EAAO,IAM1D,OALAt0F,EAAOqwO,aAAa3oR,KAAK6gT,GAAI,GAC7BvoQ,EAAOqwO,aAAa3oR,KAAKi/I,GAAI,GAC7B3mG,EAAOqwO,aAAa3oR,KAAKw0T,GAAI,GAC7Bl8Q,EAAOqwO,aAAa3oR,KAAK1B,GAAI,IAC7Bg6C,EAAOqwO,aAAa3oR,KAAK7B,GAAI,IACtBm6C,CACR,EA0BD6qH,EAAOx3B,QAAUuhK,kOClKjB,kBAkCA,SAASk/H,EAAat3Z,EAAWi1J,GAC/B,GAAa,MAATj1J,EAAE,IAAuB,MAATA,EAAE,GACpB,MAAM,IAAInD,MAAM,4BAGlB,OAAO2K,SAASxH,EAAGi1J,EACpB,CAED,SAASsiQ,EAAa/jZ,EAAa3oB,GACjC,GAAI2oB,EAAM,GACR,OAAOskH,EAAOvtH,KAAK,CAACiJ,EAAM3oB,IAE1B,IAAM2sa,EAAYl4G,EAAS9rS,GAErBqkQ,EAAYynC,EAASz0T,EAAS,GADpB2sa,EAAU1ta,OAAS,GAEnC,OAAOguI,EAAOvtH,KAAKstQ,EAAY2/I,EAAW,MAE7C,CA4DD,SAAS/uQ,EAAQp7B,GACf,IAAIvjI,EAAQ2ta,EAAS/tZ,EAAMguZ,EAAgBj0Z,EACrC+kJ,EAAU,GACVqvH,EAAYxqJ,EAAM,GAExB,GAAIwqJ,GAAa,IAEf,MAAO,CACLnuQ,KAAM2jH,EAAMxyH,MAAM,EAAG,GACrB4qV,UAAWp4N,EAAMxyH,MAAM,IAEpB,GAAIg9Q,GAAa,IAAM,CAY5B,GATA/tR,EAAS+tR,EAAY,IAInBnuQ,EADgB,MAAdmuQ,EACK//I,EAAOvtH,KAAK,IAEZ8iH,EAAMxyH,MAAM,EAAG/Q,GAGT,IAAXA,GAAgB4f,EAAK,GAAK,IAC5B,MAAM,IAAI7M,MAAM,gDAGlB,MAAO,CACL6M,KAAMA,EACN+7U,UAAWp4N,EAAMxyH,MAAM/Q,GAE1B,CAAM,GAAI+tR,GAAa,IAAM,CAI5B,GADA4/I,EAAU5/I,EAAY,IAClBxqJ,EAAMvjI,OAAS,EAAI2ta,EACrB,MAAM,IAAI56Z,MAAM,mDAGlB,IADA/S,EAASwta,EAAajqS,EAAMxyH,MAAM,EAAG48Z,GAASjia,SAAS,OAAQ,MACjD,GACZ,MAAM,IAAIqH,MAAM,6DAGlB,IADA6M,EAAO2jH,EAAMxyH,MAAM48Z,EAAS3ta,EAAS2ta,IAC5B3ta,OAASA,EAChB,MAAM,IAAI+S,MAAM,4CAGlB,MAAO,CACL6M,KAAMA,EACN+7U,UAAWp4N,EAAMxyH,MAAM/Q,EAAS2ta,GAEnC,CAAM,GAAI5/I,GAAa,IAAM,CAI5B,IAFA/tR,EAAS+tR,EAAY,IACrB6/I,EAAiBrqS,EAAMxyH,MAAM,EAAG/Q,GACzB4ta,EAAe5ta,QACpB2Z,EAAIglJ,EAAQivQ,GACZlvQ,EAAQ5+J,KAAK6Z,EAAEiG,MACfguZ,EAAiBj0Z,EAAEgiV,UAGrB,MAAO,CACL/7U,KAAM8+I,EACNi9L,UAAWp4N,EAAMxyH,MAAM/Q,GAE1B,CAIC,IAAM6ta,GAFNF,EAAU5/I,EAAY,MACtB/tR,EAASwta,EAAajqS,EAAMxyH,MAAM,EAAG48Z,GAASjia,SAAS,OAAQ,KAE/D,GAAImia,EAActqS,EAAMvjI,OACtB,MAAM,IAAI+S,MAAM,qDAIlB,GAA8B,KAD9B66Z,EAAiBrqS,EAAMxyH,MAAM48Z,EAASE,IACnB7ta,OACjB,MAAM,IAAI+S,MAAM,0CAGlB,KAAO66Z,EAAe5ta,QACpB2Z,EAAIglJ,EAAQivQ,GACZlvQ,EAAQ5+J,KAAK6Z,EAAEiG,MACfguZ,EAAiBj0Z,EAAEgiV,UAErB,MAAO,CACL/7U,KAAM8+I,EACNi9L,UAAWp4N,EAAMxyH,MAAM88Z,GAG5B,CAGD,SAAS3gH,EAAcl6I,GACrB,MAA2B,OAApBA,EAAIjiK,MAAM,EAAG,EACrB,CAWD,SAASykT,EAASnsI,GAChB,GAAIA,EAAU,EACZ,MAAM,IAAIt2K,MAAM,kDAElB,IAAMqK,EAAMisK,EAAQ39K,SAAS,IAC7B,OAAO0R,EAAIpd,OAAS,EAAI,IAAIod,EAAQA,CACrC,CAcD,SAASmhI,EAASroI,GAChB,IAAK83H,EAAOk2D,SAAShuL,GAAI,CACvB,GAAiB,kBAANA,EACT,OAAIg3S,EAAch3S,GACT83H,EAAOvtH,MAfHvV,EAhBE,kBADG8nK,EAgC4B98J,GA9BzC88J,EAEFk6I,EAAcl6I,GAAOA,EAAIjiK,MAAM,GAAKiiK,GAclChzK,OAAS,EAAI,IAAIkL,EAAMA,EAcuB,OAE1C8iI,EAAOvtH,KAAKvK,GAEhB,GAAiB,kBAANA,GAA+B,kBAANA,EACzC,OAAKA,EAfX,SAAqBmzK,GACnB,IAAMjsK,EAAMo4S,EAASnsI,GACrB,OAAOr7C,EAAOvtH,KAAKrD,EAAK,MACzB,CAecyyS,CAAY35S,GAFZ83H,EAAOvtH,KAAK,IAIhB,GAAU,OAANvK,QAAoBzL,IAANyL,EACvB,OAAO83H,EAAOvtH,KAAK,IACd,GAAIvK,aAAatD,WACtB,OAAOo7H,EAAOvtH,KAAKvK,GACd,GAAIqvS,EAAAA,QAAG78F,KAAKxyM,GAEjB,OAAO83H,EAAOvtH,KAAKvK,EAAEwmB,WAErB,MAAM,IAAI3pB,MAAM,eAEnB,CAnCH,IAAmB7H,EAjBK8nK,EAqDtB,OAAO98J,CACR,CAzPD62H,EAAAA,OAAA,SAAgB2O,EAAOnY,GACrB,GAAItkI,MAAMC,QAAQqkI,GAAQ,CAExB,IADA,IAAMnjH,EAAmB,GAChBphB,EAAI,EAAGA,EAAIukI,EAAMvjI,OAAQhB,IAChCohB,EAAOtgB,KAAK47I,EAAOnY,EAAMvkI,KAE3B,IAAMuvK,EAAMvgC,EAAOmQ,OAAO/9H,GAC1B,OAAO4tH,EAAOmQ,OAAO,CAACsvR,EAAal/P,EAAIvuK,OAAQ,KAAMuuK,GACtD,CACC,IAAMu/P,EAAWvvR,EAAShb,GAC1B,OAA2B,IAApBuqS,EAAS9ta,QAAgB8ta,EAAS,GAAK,IAC1CA,EACA9/R,EAAOmQ,OAAO,CAACsvR,EAAaK,EAAS9ta,OAAQ,KAAM8ta,GAE1D,EAmCD/gS,EAAAA,OAAA,SAAuBxJ,EAAclzB,GACnC,QADmC,IAAAA,IAAAA,GAAAA,IAC9BkzB,GAAmC,IAAzBA,EAAcvjI,OAC3B,OAAOguI,EAAOvtH,KAAK,IAGrB,IACMi+I,EAAUC,EADIpgB,EAAShb,IAG7B,GAAIlzB,EACF,OAAOquD,EAET,GAAiC,IAA7BA,EAAQi9L,UAAU37V,OACpB,MAAM,IAAI+S,MAAM,qBAGlB,OAAO2rJ,EAAQ9+I,IAChB,EAODmtH,EAAAA,UAAA,SAA0BxJ,GACxB,IAAKA,GAAmC,IAAzBA,EAAcvjI,OAC3B,OAAOguI,EAAOvtH,KAAK,IAGrB,IAAMstZ,EAAcxvR,EAAShb,GACvBwqJ,EAAYggJ,EAAY,GAE9B,GAAIhgJ,GAAa,IACf,OAAOggJ,EAAY/ta,OACd,GAAI+tR,GAAa,IACtB,OAAOA,EAAY,IACd,GAAIA,GAAa,IACtB,OAAOA,EAAY,IACd,GAAIA,GAAa,IAEtB,OAAOA,EAAY,IAGnB,IAAM4/I,EAAU5/I,EAAY,IAE5B,OAAO4/I,EADQH,EAAaO,EAAYh9Z,MAAM,EAAG48Z,GAASjia,SAAS,OAAQ,GAG9E,yBC3GD,IAAIguC,EAAS8gI,EAAQ,OACjBxsC,EAASt0F,EAAOs0F,OAGpB,SAAS+4I,EAAWvmR,EAAKkoB,GACvB,IAAK,IAAIrmB,KAAO7B,EACdkoB,EAAIrmB,GAAO7B,EAAI6B,EAElB,CASD,SAAS2kR,EAAY/8Q,EAAKg9Q,EAAkBjnR,GAC1C,OAAOguI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,CAVGguI,EAAOvtH,MAAQutH,EAAOivD,OAASjvD,EAAOigI,aAAejgI,EAAOk5I,gBAC9D3iH,EAAOx3B,QAAUrzF,GAGjBqtO,EAAUrtO,EAAQqzF,GAClBA,EAAQiB,OAASg5I,GAQnBD,EAAU/4I,EAAQg5I,GAElBA,EAAWvmQ,KAAO,SAAUxW,EAAKg9Q,EAAkBjnR,GACjD,GAAmB,kBAARiK,EACT,MAAM,IAAI9J,UAAU,iCAEtB,OAAO6tI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,EAEDgnR,EAAW/pF,MAAQ,SAAUr/K,EAAM43C,EAAMn0C,GACvC,GAAoB,kBAATzD,EACT,MAAM,IAAIzd,UAAU,6BAEtB,IAAIouK,EAAMvgC,EAAOpwH,GAUjB,YATanT,IAAT+qD,EACsB,kBAAbn0C,EACTktJ,EAAI/4G,KAAKA,EAAMn0C,GAEfktJ,EAAI/4G,KAAKA,GAGX+4G,EAAI/4G,KAAK,GAEJ+4G,CACR,EAEDy4G,EAAW/Y,YAAc,SAAUrwP,GACjC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAO6tI,EAAOpwH,EACf,EAEDopQ,EAAWE,gBAAkB,SAAUtpQ,GACrC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAOu5C,EAAOytO,WAAWvpQ,EAC1B,0CCpDGvb,YALAq3C,EAAS8gI,EAAQ,OACjBxsC,EAASt0F,EAAOs0F,OAEhBggS,EAAQ,CAAC,EAIb,IAAK3ra,KAAOq3C,EACLA,EAAOy1H,eAAe9sK,IACf,eAARA,GAAgC,WAARA,IAC5B2ra,EAAM3ra,GAAOq3C,EAAOr3C,IAGtB,IAAI4ra,EAAQD,EAAMhgS,OAAS,CAAC,EAC5B,IAAK3rI,KAAO2rI,EACLA,EAAOmhC,eAAe9sK,IACf,gBAARA,GAAiC,oBAARA,IAC7B4ra,EAAM5ra,GAAO2rI,EAAO3rI,IAqCtB,GAlCA2ra,EAAMhgS,OAAO1iI,UAAY0iI,EAAO1iI,UAE3B2ia,EAAMxtZ,MAAQwtZ,EAAMxtZ,OAAS7N,WAAW6N,OAC3CwtZ,EAAMxtZ,KAAO,SAAU1gB,EAAOknR,EAAkBjnR,GAC9C,GAAqB,kBAAVD,EACT,MAAM,IAAII,UAAU,yEAA2EJ,GAEjG,GAAIA,GAAiC,qBAAjBA,EAAMC,OACxB,MAAM,IAAIG,UAAU,yHAA2HJ,GAEjJ,OAAOiuI,EAAOjuI,EAAOknR,EAAkBjnR,EACxC,GAGEiua,EAAMhxO,QACTgxO,EAAMhxO,MAAQ,SAAUr/K,EAAM43C,EAAMn0C,GAClC,GAAoB,kBAATzD,EACT,MAAM,IAAIzd,UAAU,oEAAsEyd,GAE5F,GAAIA,EAAO,GAAKA,GAAQ,GAAK,GAAK,IAChC,MAAM,IAAI6nN,WAAW,cAAgB7nN,EAAO,kCAE9C,IAAI2wJ,EAAMvgC,EAAOpwH,GAQjB,OAPK43C,GAAwB,IAAhBA,EAAKx1D,OAEa,kBAAbqhB,EAChBktJ,EAAI/4G,KAAKA,EAAMn0C,GAEfktJ,EAAI/4G,KAAKA,GAJT+4G,EAAI/4G,KAAK,GAMJ+4G,CACR,IAGEy/P,EAAME,iBACT,IACEF,EAAME,iBAAmBr9R,EAAQ/7B,QAAQ,UAAUo5T,gBAIpD,CAHC,MAAO9la,GAGR,CAGE4la,EAAMpwO,YACTowO,EAAMpwO,UAAY,CAChBuwO,WAAYH,EAAMz/I,YAEhBy/I,EAAME,mBACRF,EAAMpwO,UAAUwwO,kBAAoBJ,EAAME,mBAI9C3pQ,EAAOx3B,QAAUihS,oCCnEJ,SAASp0Z,EAAE1O,EAAE8J,GAAG,IAAIC,EAAE/J,EAAElL,OAAOkL,EAAEpL,KAAKkV,GAAG9J,EAAE,KAAK,EAAE+J,GAAG,CAAC,IAAI0E,EAAE1E,EAAE,IAAI,EAAE7M,EAAE8C,EAAEyO,GAAG,KAAG,EAAEE,EAAEzR,EAAE4M,IAA0B,MAAM9J,EAA7BA,EAAEyO,GAAG3E,EAAE9J,EAAE+J,GAAG7M,EAAE6M,EAAE0E,CAAe,CAAC,UAASG,EAAE5O,GAAG,OAAO,IAAIA,EAAElL,OAAO,KAAKkL,EAAE,EAAG,UAASirE,EAAEjrE,GAAG,GAAG,IAAIA,EAAElL,OAAO,OAAO,KAAK,IAAIgV,EAAE9J,EAAE,GAAG+J,EAAE/J,EAAEsjE,MAAM,GAAGv5D,IAAID,EAAE,CAAC9J,EAAE,GAAG+J,EAAE/J,EAAE,IAAI,IAAIyO,EAAE,EAAEvR,EAAE8C,EAAElL,OAAOijB,EAAE7a,IAAI,EAAEuR,EAAEsJ,GAAG,CAAC,IAAIlR,EAAE,GAAG4H,EAAE,GAAG,EAAEyiL,EAAElxL,EAAE6G,GAAGD,EAAEC,EAAE,EAAE3N,EAAE8G,EAAE4G,GAAG,GAAG,EAAE+H,EAAEuiL,EAAEnnL,GAAGnD,EAAE1J,GAAG,EAAEyR,EAAEzV,EAAEg4L,IAAIlxL,EAAEyO,GAAGvV,EAAE8G,EAAE4G,GAAGmD,EAAE0E,EAAE7H,IAAI5G,EAAEyO,GAAGyiL,EAAElxL,EAAE6G,GAAGkD,EAAE0E,EAAE5H,OAAQ,MAAGD,EAAE1J,GAAG,EAAEyR,EAAEzV,EAAE6Q,IAA0B,MAAM/J,EAA7BA,EAAEyO,GAAGvV,EAAE8G,EAAE4G,GAAGmD,EAAE0E,EAAE7H,CAAO,CAAQ,CAAC,QAAOkD,CAAE,CAC5c,SAAS6E,EAAE3O,EAAE8J,GAAG,IAAIC,EAAE/J,EAAEmja,UAAUr5Z,EAAEq5Z,UAAU,OAAO,IAAIp5Z,EAAEA,EAAE/J,EAAEjJ,GAAG+S,EAAE/S,EAAG,IAAG,kBAAkB2yG,aAAa,oBAAoBA,YAAY/uG,IAAI,CAAC,IAAImL,EAAE4jG,YAAYm4B,EAAQksP,aAAa,WAAW,OAAOjoX,EAAEnL,KAAM,CAAC,KAAI,CAAC,IAAI+W,EAAEhX,KAAK7B,EAAE6Y,EAAE/W,MAAMknI,EAAQksP,aAAa,WAAW,OAAOr8W,EAAE/W,MAAM9B,CAAE,CAAC,KAAI0W,EAAE,GAAGxI,EAAE,GAAGqa,EAAE,EAAEpW,EAAE,KAAK7R,EAAE,EAAEI,GAAE,EAAGyvN,GAAE,EAAGC,GAAE,EAAGC,EAAE,oBAAoBhlH,WAAWA,WAAW,KAAK0iL,EAAE,oBAAoB1nB,aAAaA,aAAa,KAAK7tB,EAAE,qBAAqBl9B,aAAaA,aAAa,KACnT,SAASswD,EAAEzkQ,GAAG,IAAI,IAAI8J,EAAE8E,EAAE7H,GAAG,OAAO+C,GAAG,CAAC,GAAG,OAAOA,EAAEyT,SAAS0tD,EAAElkE,OAAQ,MAAG+C,EAAEk0F,WAAWh+F,GAAgD,MAA9CirE,EAAElkE,GAAG+C,EAAEq5Z,UAAUr5Z,EAAEs5Z,eAAe10Z,EAAEa,EAAEzF,EAAa,CAACA,EAAE8E,EAAE7H,EAAG,CAAC,UAASgnQ,EAAE/tQ,GAAa,GAAVipN,GAAE,EAAGw7C,EAAEzkQ,IAAOgpN,EAAE,GAAG,OAAOp6M,EAAEW,GAAGy5M,GAAE,EAAG5xD,EAAEimO,OAAO,CAAC,IAAIvzX,EAAE8E,EAAE7H,GAAG,OAAO+C,GAAGo3J,EAAE6sG,EAAEjkQ,EAAEk0F,UAAUh+F,EAAG,CAAC,CACta,SAASq9X,EAAEr9X,EAAE8J,GAAGk/M,GAAE,EAAGC,IAAIA,GAAE,EAAG29D,EAAEu+G,GAAGA,GAAG,GAAG5rY,GAAE,EAAG,IAAIwQ,EAAE5Q,EAAE,IAAS,IAALsrQ,EAAE36P,GAAOkB,EAAE4D,EAAEW,GAAG,OAAOvE,MAAMA,EAAEo4Z,eAAet5Z,IAAI9J,IAAI6jQ,MAAM,CAAC,IAAIp1P,EAAEzD,EAAEuS,SAAS,GAAG,oBAAoB9O,EAAE,CAACzD,EAAEuS,SAAS,KAAKpkB,EAAE6R,EAAEq4Z,cAAc,IAAInma,EAAEuR,EAAEzD,EAAEo4Z,gBAAgBt5Z,GAAGA,EAAE+3H,EAAQksP,eAAe,oBAAoB7wX,EAAE8N,EAAEuS,SAASrgB,EAAE8N,IAAI4D,EAAEW,IAAI07D,EAAE17D,GAAGk1P,EAAE36P,EAAG,MAAKmhE,EAAE17D,GAAGvE,EAAE4D,EAAEW,EAAG,IAAG,OAAOvE,EAAE,IAAI+M,GAAE,MAAO,CAAC,IAAIlR,EAAE+H,EAAE7H,GAAG,OAAOF,GAAGq6J,EAAE6sG,EAAElnQ,EAAEm3F,UAAUl0F,GAAGiO,GAAE,CAAG,QAAOA,CAA0B,CAApX,QAAoW/M,EAAE,KAAK7R,EAAE4Q,EAAExQ,GAAE,CAAG,CAAC,CAD3a,qBAAqB45E,gBAAW,IAASA,UAAUmwV,iBAAY,IAASnwV,UAAUmwV,WAAWC,gBAAgBpwV,UAAUmwV,WAAWC,eAAexja,KAAKozE,UAAUmwV,YAC2Q,IACzPn4P,EAD6Pu6C,GAAE,EAAGgiL,EAAE,KAAKvC,GAAG,EAAE/zJ,EAAE,EAAE3rE,GAAG,EACvc,SAASo+F,IAAI,QAAOhiI,EAAQksP,eAAetoN,EAAE2rE,EAAQ,UAASksD,IAAI,GAAG,OAAOoqG,EAAE,CAAC,IAAI1nY,EAAE6hI,EAAQksP,eAAetoN,EAAEzlK,EAAE,IAAI8J,GAAE,EAAG,IAAIA,EAAE49X,GAAE,EAAG1nY,EAA+B,CAA1C,QAAsB8J,EAAEqhK,KAAKu6C,GAAE,EAAGgiL,EAAE,KAAM,CAAC,MAAKhiL,GAAE,CAAG,CAAM,GAAG,oBAAoB2rB,EAAElmE,EAAE,WAAWkmE,EAAEisD,EAAG,OAAM,GAAG,qBAAqBkmI,eAAe,CAAC,IAAIriK,EAAE,IAAIqiK,eAAepzH,EAAEjvC,EAAEsiK,MAAMtiK,EAAEuiK,MAAMvwI,UAAUmK,EAAEnyH,EAAE,WAAWilI,EAAEuzH,YAAY,KAAM,CAAC,MAAKx4P,EAAE,WAAW+9C,EAAEo0E,EAAE,EAAG,EAAC,SAASlmI,EAAEp3J,GAAG0nY,EAAE1nY,EAAE0lN,IAAIA,GAAE,EAAGv6C,IAAK,UAASjK,EAAElhK,EAAE8J,GAAGq7X,EAAEj8K,GAAE,WAAWlpN,EAAE6hI,EAAQksP,eAAgB,GAACjkX,EAAG,CAC7d+3H,EAAQ4sP,sBAAsB,EAAE5sP,EAAQqsP,2BAA2B,EAAErsP,EAAQ0sP,qBAAqB,EAAE1sP,EAAQysP,wBAAwB,EAAEzsP,EAAQ+hS,mBAAmB,KAAK/hS,EAAQusP,8BAA8B,EAAEvsP,EAAQ8rP,wBAAwB,SAAS3tX,GAAGA,EAAEud,SAAS,IAAK,EAACskH,EAAQgiS,2BAA2B,WAAW76M,GAAGzvN,IAAIyvN,GAAE,EAAG5xD,EAAEimO,GAAI,EAC3Ux7P,EAAQiiS,wBAAwB,SAAS9ja,GAAG,EAAEA,GAAG,IAAIA,EAAE2K,QAAQ1L,MAAM,mHAAmHmyO,EAAE,EAAEpxO,EAAE3D,KAAKQ,MAAM,IAAImD,GAAG,CAAE,EAAC6hI,EAAQmsP,iCAAiC,WAAW,OAAO70X,CAAE,EAAC0oI,EAAQkiS,8BAA8B,WAAW,OAAOn1Z,EAAEW,EAAG,EAACsyH,EAAQmiS,cAAc,SAAShka,GAAG,OAAO7G,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI2Q,EAAE,EAAE,MAAM,QAAQA,EAAE3Q,EAAE,IAAI4Q,EAAE5Q,EAAEA,EAAE2Q,EAAE,IAAI,OAAO9J,GAAgB,CAA3B,QAAuB7G,EAAE4Q,CAAE,CAAC,EAAC83H,EAAQoiS,wBAAwB,WAAY,EAC/fpiS,EAAQisP,sBAAsB,WAAY,EAACjsP,EAAQqiS,yBAAyB,SAASlka,EAAE8J,GAAG,OAAO9J,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQA,EAAE,EAAE,IAAI+J,EAAE5Q,EAAEA,EAAE6G,EAAE,IAAI,OAAO8J,GAAgB,CAA3B,QAAuB3Q,EAAE4Q,CAAE,CAAC,EACjM83H,EAAQ6rP,0BAA0B,SAAS1tX,EAAE8J,EAAEC,GAAG,IAAI0E,EAAEozH,EAAQksP,eAA8F,OAA/E,kBAAkBhkX,GAAG,OAAOA,EAAaA,EAAE,kBAAZA,EAAEA,EAAEq1P,QAA6B,EAAEr1P,EAAE0E,EAAE1E,EAAE0E,EAAG1E,EAAE0E,EAASzO,GAAG,KAAK,EAAE,IAAI9C,GAAG,EAAE,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,KAAK,EAAEA,EAAE,WAAW,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,QAAQA,EAAE,IAAmN,OAAzM8C,EAAE,CAACjJ,GAAGqqB,IAAI7D,SAASzT,EAAEu5Z,cAAcrja,EAAEg+F,UAAUj0F,EAAEq5Z,eAAvDlma,EAAE6M,EAAE7M,EAAoEima,WAAW,GAAGp5Z,EAAE0E,GAAGzO,EAAEmja,UAAUp5Z,EAAE2E,EAAE3H,EAAE/G,GAAG,OAAO4O,EAAEW,IAAIvP,IAAI4O,EAAE7H,KAAKkiN,GAAG29D,EAAEu+G,GAAGA,GAAG,GAAGl8K,GAAE,EAAG/nD,EAAE6sG,EAAEhkQ,EAAE0E,MAAMzO,EAAEmja,UAAUjma,EAAEwR,EAAEa,EAAEvP,GAAGgpN,GAAGzvN,IAAIyvN,GAAE,EAAG5xD,EAAEimO,KAAYr9X,CAAE,EACpe6hI,EAAQ+rP,qBAAqB/pH,EAAEhiI,EAAQsiS,sBAAsB,SAASnka,GAAG,IAAI8J,EAAE3Q,EAAE,OAAO,WAAW,IAAI4Q,EAAE5Q,EAAEA,EAAE2Q,EAAE,IAAI,OAAO9J,EAAE9H,MAAMhC,KAAKmC,UAAuB,CAA/C,QAA2Cc,EAAE4Q,CAAE,CAAC,CAAC,sCCf9JsvJ,EAAOx3B,QAAU,EAAjBw3B,wCCDF,SAAUtqD,GACN,IAAMq1T,EAAY,WAIlB,SAAS7lF,EAAO13U,GACZ,IAAMq6J,EAAI,IAAI7wJ,YAAY,CACvB,WAAY,WAAY,WAAY,WAAY,UAChD,WAAY,WAAY,WAAY,WAAY,UAChD,UAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,UAAY,UAChD,UAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,UAAY,UAAY,UAAY,UAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,UAAY,UAAY,UAChD,UAAY,UAAY,UAAY,WAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,aAGnCg0Z,EAAK,WAAYrqL,EAAK,WAAYr8E,EAAK,WAAYC,EAAK,WACxDq8E,EAAK,WAAYqqL,EAAK,WAAYC,EAAK,UAAYC,EAAK,WACtDzsZ,EAAI,IAAI1H,YAAY,IAE1B,SAAS0hO,EAAOrgO,GAEZ,IADA,IAAI4yI,EAAM,EAAG9lI,EAAM9M,EAAE5c,OACd0pB,GAAO,IAAI,CACd,IAAIxe,EAAIqka,EAAIv6Z,EAAIkwO,EAAIjwO,EAAI4zJ,EAAIlvJ,EAAImvJ,EAAI1gK,EAAI+8O,EAAIvrO,EAAI41Z,EAAI31Z,EAAI41Z,EAAI31Z,EAAI41Z,EAAIpjZ,OAAC,EAAEttB,OAAC,EAAE8wB,OAAC,EAAE8C,OAAE,EAAE42I,OAAE,EAEnF,IAAKxqK,EAAI,EAAGA,EAAI,GAAIA,IAChB8wB,EAAI0/H,EAAQ,EAAFxwJ,EACVikB,EAAEjkB,IAAc,IAAP4d,EAAEkT,KAAY,IAAiB,IAATlT,EAAEkT,EAAE,KAAY,IACpC,IAATlT,EAAEkT,EAAE,KAAY,EAAe,IAATlT,EAAEkT,EAAE,GAGhC,IAAK9wB,EAAI,GAAIA,EAAI,GAAIA,IAEjB4zB,IADAtG,EAAIrJ,EAAEjkB,EAAE,MACG,GAAOstB,GAAI,KAAaA,IAAI,GAAOA,GAAI,IAAYA,IAAI,GAGlEk9I,IADAl9I,EAAIrJ,EAAEjkB,EAAE,OACG,EAAMstB,GAAI,KAAYA,IAAI,GAAOA,GAAI,IAAYA,IAAI,EAEhErJ,EAAEjkB,IAAQ4zB,EAAK3P,EAAEjkB,EAAE,GAAM,IAAOwqK,EAAKvmJ,EAAEjkB,EAAE,IAAO,GAAM,EAG1D,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChB4zB,KAAWxqB,IAAI,EAAMA,GAAI,KAAYA,IAAI,GAAOA,GAAI,KACzCA,IAAI,GAAOA,GAAI,KAAcA,EAAIwR,GAAOxR,EAAIyR,GAAO,IACtDC,GAAMsyJ,EAAEptK,GAAKikB,EAAEjkB,GAAM,GAAM,GAAM,EAEzCwqK,IAASt+J,IAAI,EAAMA,GAAI,KAAYA,IAAI,GAAOA,GAAI,KACzCA,IAAI,GAAOA,GAAI,MAAcA,EAAI8J,EAAM9J,EAAI+J,EAAMD,EAAIC,GAAO,EAErE6E,EAAID,EACJA,EAAID,EACJA,EAAIxR,EACJA,EAAKuR,EAAIiZ,EAAM,EACfjZ,EAAI1E,EACJA,EAAID,EACJA,EAAI9J,EACJA,EAAK0nB,EAAK42I,EAAM,EAGpB+lQ,EAAMA,EAAKrka,EAAK,EAChBg6O,EAAMA,EAAKlwO,EAAK,EAChB6zJ,EAAMA,EAAK5zJ,EAAK,EAChB6zJ,EAAMA,EAAKnvJ,EAAK,EAChBwrO,EAAMA,EAAK/8O,EAAK,EAChBona,EAAMA,EAAK51Z,EAAK,EAChB61Z,EAAMA,EAAK51Z,EAAK,EAChB61Z,EAAMA,EAAK51Z,EAAK,EAEhB01I,GAAO,GACP9lI,GAAO,EACV,CACJ,CAEDuzN,EAAOlrO,GAEP,IAAI/S,EAAG2wa,EAAY59Z,EAAE/R,OAAS,GAC9B4va,EAAY79Z,EAAE/R,OAAS,UAAc,EACrC6va,EAAW99Z,EAAE/R,QAAU,EACvB8va,EAAYH,EAAY,GAAM,GAAK,IACnC/yZ,EAAI7K,EAAEhB,MAAMgB,EAAE/R,OAAS2va,EAAW59Z,EAAE/R,QAGpC,IADA4c,EAAE9c,KAAK,KACFd,EAAI2wa,EAAY,EAAG3wa,EAAI8wa,EAAU9wa,IAAO4d,EAAE9c,KAAK,GAYpD,OAXA8c,EAAE9c,KAAM8va,IAAa,GAAM,KAC3BhzZ,EAAE9c,KAAM8va,IAAa,GAAM,KAC3BhzZ,EAAE9c,KAAM8va,IAAa,EAAM,KAC3BhzZ,EAAE9c,KAAM8va,IAAa,EAAM,KAC3BhzZ,EAAE9c,KAAM+va,IAAa,GAAM,KAC3BjzZ,EAAE9c,KAAM+va,IAAa,GAAM,KAC3BjzZ,EAAE9c,KAAM+va,IAAa,EAAM,KAC3BjzZ,EAAE9c,KAAM+va,IAAa,EAAM,KAE3B5yL,EAAOrgO,GAEA,CACF2yZ,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IACvErqL,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IACvEr8E,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IACvEC,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IACvEq8E,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IACvEqqL,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IACvEC,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IACvEC,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAOA,IAAO,EAAK,IAE/E,CAED,SAASK,EAA2BlpO,EAAUlrD,EAAMkkL,GAEhDh5H,EAAYA,EAAS7mM,QAAU,GAAM6mM,EAAW4iJ,EAAO5iJ,GAEvD,IAII7nM,EAJEgxa,EAAW,GAAKr0R,EAAK37I,OAAS,EAC9BooV,EAAQ,IAAInpV,MAAM+wa,GAClBC,EAAW,IAAIhxa,MAAM,IAGvBq9Y,EAAK,GAGT,IAAKt9Y,EAAI,EAAGA,EAAI,GAAIA,IAAOopV,EAAMppV,GAAK,GACtC,IAAKA,EAAI,EAAGA,EAAI6nM,EAAS7mM,OAAQhB,IAAOopV,EAAMppV,IAAM6nM,EAAS7nM,GAC7D,IAAKA,EAAI,EAAGA,EAAI28I,EAAK37I,OAAQhB,IAAOopV,EAAM,GAAKppV,GAAK28I,EAAK38I,GACzD,IAAKA,EAAIgxa,EAAW,EAAGhxa,EAAIgxa,EAAUhxa,IAAOopV,EAAMppV,GAAK,EAGvD,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKixa,EAASjxa,GAAK,GACvC,IAAKA,EAAI,EAAGA,EAAI6nM,EAAS7mM,OAAQhB,IAAKixa,EAASjxa,IAAM6nM,EAAS7nM,GAG9D,SAASkxa,IACL,IAAK,IAAIlxa,EAAIgxa,EAAW,EAAGhxa,GAAKgxa,EAAW,EAAGhxa,IAAK,CAE/C,GADAopV,EAAMppV,KACFopV,EAAMppV,IAAM,IAAM,OACtBopV,EAAMppV,GAAK,CACd,CACJ,CAGD,KAAO6gU,GAAS,IACZqwG,IACA5zB,EAAKA,EAAGn+P,OAAOsrM,EAAOwmF,EAAS9xR,OAAOsrM,EAAOrB,MAC7CvoB,GAAS,GAOb,OALIA,EAAQ,IACRqwG,IACA5zB,EAAKA,EAAGn+P,OAAOsrM,EAAOwmF,EAAS9xR,OAAOsrM,EAAOrB,KAASr3U,MAAM,EAAG8uT,KAG5Dy8E,CACV,CAID,SAAS6zB,EAAgBC,EAAI14B,EAAIj9X,EAAGrW,EAAGisa,GACnC,IAAIrxa,EAGJ,IADAsxa,EAAUF,EAAkB,IAAb,EAAI31Z,EAAI,GAAS41Z,EAAI,EAAG,IAClCrxa,EAAI,EAAGA,EAAI,EAAIyb,EAAGzb,IACnBuxa,EAASH,EAAQ,GAAJpxa,EAAQqxa,EAAI,IACzBG,EAAUH,EAAIjsa,GACdksa,EAAUD,EAAI,EAAGD,EAAI14B,EAAU,GAAJ14Y,EAAS,IAGxC,IAAKA,EAAI,EAAGA,EAAIyb,EAAGzb,IACfsxa,EAAUF,EAAI14B,EAAU,EAAJ14Y,EAAS,GAAIoxa,EAAS,GAAJpxa,EAAS,IAGnD,IAAKA,EAAI,EAAGA,EAAIyb,EAAGzb,IACfsxa,EAAUF,EAAI14B,EAAmB,IAAT,EAAJ14Y,EAAQ,GAASoxa,EAAc,IAATpxa,EAAIyb,GAAS,GAE9D,CAED,SAAS+tR,EAAEt9R,EAAG8J,GACV,OAAQ9J,GAAK8J,EAAM9J,IAAO,GAAK8J,CAClC,CAED,SAASw7Z,EAAUr8M,EAAG/vN,GAClBksa,EAAUn8M,EAAG,EAAG/vN,EAAG,EAAG,IAEtB,IAAK,IAAIpF,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACxBoF,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAE,IAAK,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAE,KAAOokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAE,IAAMA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAE,KAAOokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAE,IAAMA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAE,IAAK,IAC1BA,EAAE,KAAOokS,EAAEpkS,EAAE,IAAMA,EAAG,GAAI,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAE,IAAK,IAC1BA,EAAE,KAAOokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAE,IAAK,GAC1BA,EAAE,KAAOokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAE,KAAOokS,EAAEpkS,EAAE,IAAMA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAE,KAAOokS,EAAEpkS,EAAE,IAAMA,EAAG,GAAI,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAG,IAAMokS,EAAEpkS,EAAG,GAAKA,EAAE,IAAK,IAC1BA,EAAE,KAAOokS,EAAEpkS,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAE,KAAOokS,EAAEpkS,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAE,KAAOokS,EAAEpkS,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAE,KAAOokS,EAAEpkS,EAAE,IAAMA,EAAE,IAAK,IAC1BA,EAAE,KAAOokS,EAAEpkS,EAAE,IAAMA,EAAE,IAAK,IAG9B,IAAK,IAAIpF,EAAI,EAAGA,EAAI,KAAMA,EACtBm1N,EAAEn1N,IAAMoF,EAAEpF,EAEjB,CAGD,SAASuxa,EAASl6P,EAAGC,EAAI89C,EAAG1qM,GACxB,IAAK,IAAI1qB,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACrBo1N,EAAEp1N,IAAMq3K,EAAEC,EAAKt3K,EAEtB,CAED,SAASsxa,EAAU9va,EAAKiwa,EAAQ73T,EAAM6iN,EAASz7T,GAC3C,KAAOA,KACH44G,EAAK6iN,KAAaj7T,EAAIiwa,IAE7B,CAED,SAASC,EAAe9kU,GACpB,IAAKA,GAA0B,kBAAdA,EAAE5rG,OAAwB,OAAO,EAElD,IAAK,IAAIhB,EAAI,EAAGA,EAAI4sG,EAAE5rG,OAAQhB,IAAK,CAC/B,IAAMkX,EAAI01F,EAAE5sG,GACZ,GAAkB,kBAAPkX,GAAmBA,EAAI,GAAKA,EAAI,GAAKA,GAAK,IACjD,OAAO,CAEd,CAED,OAAO,CACV,CAED,SAASy6Z,EAAc5wa,EAAO2b,GAC1B,GAAsB,kBAAX3b,GAAwBA,EAAQ,EAAM,MAAM,IAAIgT,MAAM,WAAa2I,GAC9E,OAAO3b,CACV,CAID,SAAS6wa,EAAQ/pO,EAAUlrD,EAAMi1E,EAAGn2M,EAAGmC,EAAGijT,EAAOp3S,GAQ7C,GANAmoM,EAAI+/M,EAAc//M,EAAG,KACrBn2M,EAAIk2Z,EAAcl2Z,EAAG,KACrBmC,EAAI+zZ,EAAc/zZ,EAAG,KAErBijT,EAAQ8wG,EAAc9wG,EAAO,SAEnB,IAANjvG,GAA6B,KAAjBA,EAAKA,EAAI,GAAa,MAAM,IAAI79M,MAAM,wBAEtD,GAAI69M,EAAI0+M,EAAY,IAAM70Z,EAAK,MAAM,IAAI1H,MAAM,eAC/C,GAAI0H,EAAI60Z,EAAY,IAAM1yZ,EAAK,MAAM,IAAI7J,MAAM,eAE/C,IAAK29Z,EAAe7pO,GAChB,MAAM,IAAI9zL,MAAM,uCAIpB,GAFA8zL,EAAW5nM,MAAMqM,UAAUyF,MAAMpR,KAAKknM,IAEjC6pO,EAAe/0R,GAChB,MAAM,IAAI5oI,MAAM,mCAEpB4oI,EAAO18I,MAAMqM,UAAUyF,MAAMpR,KAAKg8I,GAIlC,IAFA,IAAI3mI,EAAI+6Z,EAA2BlpO,EAAUlrD,EAAU,IAAJ/+H,EAAUnC,GACvD05M,EAAI,IAAI54M,YAAgB,GAAJqB,EAASnC,GAC1Bzb,EAAI,EAAGA,EAAIm1N,EAAEn0N,OAAQhB,IAAK,CAC/B,IAAM8wB,EAAQ,EAAJ9wB,EACVm1N,EAAEn1N,IAAkB,IAAXgW,EAAE8a,EAAI,KAAc,IACT,IAAX9a,EAAE8a,EAAI,KAAc,IACT,IAAX9a,EAAE8a,EAAI,KAAc,GACT,IAAX9a,EAAE8a,EAAI,KAAc,CAChC,CAED,IAkBY8O,EACRq2W,EAnBE47B,EAAK,IAAIt1Z,YAAY,GAAKd,GAC1B4xJ,EAAI,IAAI9wJ,YAAY,GAAKd,EAAIm2M,GAE7B8mL,EAAK,GAAKj9X,EAGVrW,EAAI,IAAImX,YAAY,IACpB80Z,EAAK,IAAI90Z,YAAY,IAErBu1Z,EAAWl0Z,EAAIg0M,EAAI,EACrBmgN,EAAY,EACZC,EAAgB,KAGhBj4X,GAAO,EAGP+O,EAAQ,EACRnpB,EAAK,EAIHwpJ,EAAQ1/J,EAAW/K,SAAS,IAAOjD,GAAI,WAGvC6kM,EAAqC,qBAAlBD,aAAiCA,aAAejwG,WAInE6hU,EAAkB,SAAlBA,IACF,GAAIl4X,EACA,OAAOtwB,EAAS,IAAI1V,MAAM,aAAcg+Z,EAAYD,GAGxD,IAAII,EAEJ,OAAQppX,GACJ,KAAK,EAIDwoX,EAAUn8M,EAFV8gL,EAAU,GAALt2W,EAAUlkB,EAEEo2Z,EAAI,EAAGn5B,GAExB5vV,EAAQ,EACRlpB,EAAK,EAIT,KAAK,GAGDsyY,EAAQtgN,EAAIhyL,GACAupJ,IAAS+oP,EAAQ/oP,GAC7B,IAAK,IAAInpL,EAAI,EAAGA,EAAIkya,EAAOlya,IACvBsxa,EAAUO,EAAI,EAAGxkQ,GAAIztI,EAAK5/B,GAAK04Y,EAAIA,GACnCy4B,EAAgBU,EAAIn5B,EAAIj9X,EAAGrW,EAAGisa,GAOlC,GAHAzxY,GAAMsyY,EACNH,GAAaG,EAETzoZ,EAAU,CAEV,IAAM0oZ,EAAYzzZ,SAAS,IAAOqzZ,EAAYD,GAC9C,GAAIK,IAAcH,EAAe,CAE7B,GADAj4X,EAAOtwB,EAAS,KAAMsoZ,EAAYD,GACtB,MACZE,EAAgBG,CACnB,CACJ,CAED,GAAIvyY,EAAKgyL,EAAK,MAEdhyL,EAAK,EACLkpB,EAAQ,EAIZ,KAAK,GAGDopX,EAAQtgN,EAAIhyL,GACAupJ,IAAS+oP,EAAQ/oP,GAC7B,IAAK,IAAInpL,EAAI,EAAGA,EAAIkya,EAAOlya,IAAK,CAC5B,IACM8wB,EAAI+gZ,EADmB,IAAb,EAAIp2Z,EAAI,IACAm2M,EAAI,EAC5B2/M,EAASlkQ,EAAGv8I,EAAI4nX,EAAIm5B,EAAIn5B,GACxBy4B,EAAgBU,EAAIn5B,EAAIj9X,EAAGrW,EAAGisa,EACjC,CAOD,GAJAzxY,GAAMsyY,EACNH,GAAaG,EAGTzoZ,EAAU,CACV,IAAM0oZ,EAAYzzZ,SAAS,IAAOqzZ,EAAYD,GAC9C,GAAIK,IAAcH,EAAe,CAE7B,GADAj4X,EAAOtwB,EAAS,KAAMsoZ,EAAYD,GACtB,MACZE,EAAgBG,CACnB,CACJ,CAED,GAAIvyY,EAAKgyL,EAAK,MAMd,GAJA0/M,EAAUO,EAAI,EAAG18M,EAAG8gL,EAAIyC,KAGxB/4W,EACS/hB,EAAG,CACRkrC,EAAQ,EACR,KACH,CAED9yC,EAAI,GACJ,IAAK,IAAIhW,EAAI,EAAGA,EAAIm1N,EAAEn0N,OAAQhB,IAC1BgW,EAAElV,KAAMq0N,EAAEn1N,IAAO,EAAK,KACtBgW,EAAElV,KAAMq0N,EAAEn1N,IAAO,EAAK,KACtBgW,EAAElV,KAAMq0N,EAAEn1N,IAAM,GAAM,KACtBgW,EAAElV,KAAMq0N,EAAEn1N,IAAM,GAAM,KAG1B,IAAM8iU,EAAaiuG,EAA2BlpO,EAAU7xL,EAAG6qT,GAM3D,OAHIp3S,GAAYA,EAAS,KAAM,EAAKq5S,GAG7BA,EAIXr5S,GAAY62L,EAAS2xN,EAC5B,EAGD,IAAKxoZ,EACD,OAAa,CACT,IAAMq5S,EAAamvG,IACnB,QAAkBxma,GAAdq3T,EAA2B,OAAOA,CACzC,CAILmvG,GACH,CAED,IAAM5N,EAAM,CACRliG,OAAQ,SAASt6H,EAAUlrD,EAAMi1E,EAAGn2M,EAAGmC,EAAGijT,EAAOM,GAC7C,OAAO,IAAI/1T,SAAQ,SAASP,EAASC,GACjC,IAAIsna,EAAe,EACfjxG,GAAoBA,EAAiB,GACzCywG,EAAQ/pO,EAAUlrD,EAAMi1E,EAAGn2M,EAAGmC,EAAGijT,GAAO,SAAS11T,EAAOy/Y,EAAUvnZ,GAC9D,GAAI8H,EACAL,EAAOK,QACJ,GAAI9H,EACH89T,GAAqC,IAAjBixG,GACpBjxG,EAAiB,GAErBt2T,EAAQ,IAAI+I,WAAWvQ,SACpB,GAAI89T,GAAoBypF,IAAawnB,EAExC,OADAA,EAAexnB,EACRzpF,EAAiBypF,EAE/B,GACJ,GACJ,EACDynB,WAAY,SAASxqO,EAAUlrD,EAAMi1E,EAAGn2M,EAAGmC,EAAGijT,GAC1C,OAAO,IAAIjtT,WAAWg+Z,EAAQ/pO,EAAUlrD,EAAMi1E,EAAGn2M,EAAGmC,EAAGijT,GAC1D,GAKFt7J,EAAOx3B,QAAUs2R,CAldxB,2BCFA9+P,EAAOx3B,QAAUytC,EAAQ,MAARA,CAAiBA,EAAQ,+BCA1C,IAEMnN,EAAK,IAAI6B,EAFJsL,EAAAA,MAAAA,IAEO,aACZo4I,EAAWvlJ,EAAGpL,MAId9P,EAAKygK,EAAS9gT,EAAE9F,YAoCtB,SAASsla,EAAel4J,GAEtB,IAAMlyD,EAAQkyD,EAAO,GACrB,OAAQlyD,GACN,KAAK,EACL,KAAK,EACH,OAAsB,KAAlBkyD,EAAOp5Q,OAAsB,KAxCvC,SAAkCknN,EAAOqqN,GACvC,IAAInta,EAAI,IAAI+tJ,EAAGo/Q,GAGf,GAAInta,EAAEq/J,IAAImvJ,EAASh2S,IAAM,EAAG,OAAO,KAInC,IAAIvY,GAHJD,EAAIA,EAAE+8J,MAAMyxJ,EAAS5xJ,MAGXqG,SAASquD,QAAQtxN,GAAGkjK,QAAQsrJ,EAAS59S,GAAGsxJ,UAGlD,OAFe,IAAV4gD,IAAoB7iN,EAAE07J,UAAS17J,EAAIA,EAAEs/J,UAEnC0J,EAAGgC,QAAQ,CAAE9B,IAAK,CAAEnpK,EAAGA,EAAGC,EAAGA,IACrC,CA6BYmta,CAAwBtqN,EAAOkyD,EAAO9+N,SAAS,EAAG,KAC3D,KAAK,EACL,KAAK,EACL,KAAK,EACH,OAAsB,KAAlB8+N,EAAOp5Q,OAAsB,KA/BvC,SAAoCknN,EAAOqqN,EAAME,GAC/C,IAAIrta,EAAI,IAAI+tJ,EAAGo/Q,GACXlta,EAAI,IAAI8tJ,EAAGs/Q,GAGf,GAAIrta,EAAEq/J,IAAImvJ,EAASh2S,IAAM,GAAKvY,EAAEo/J,IAAImvJ,EAASh2S,IAAM,EAAG,OAAO,KAM7D,GAJAxY,EAAIA,EAAE+8J,MAAMyxJ,EAAS5xJ,KACrB38J,EAAIA,EAAE88J,MAAMyxJ,EAAS5xJ,MAGN,IAAVkmD,GAA4B,IAAVA,IAAmB7iN,EAAE07J,WAAuB,IAAVmnD,GAAiB,OAAO,KAGjF,IAAMwyF,EAAKt1S,EAAEijK,SAASquD,QAAQtxN,GAC9B,OAAKC,EAAEgjK,SAASG,QAAQkyI,EAAGpyI,QAAQsrJ,EAAS59S,IAAIuvI,SAEzC8oB,EAAGgC,QAAQ,CAAE9B,IAAK,CAAEnpK,EAAGA,EAAGC,EAAGA,KAF6B,IAGlE,CAcYqta,CAA0BxqN,EAAOkyD,EAAO9+N,SAAS,EAAG,IAAK8+N,EAAO9+N,SAAS,GAAI,KACtF,QACE,OAAO,KAEZ,CAED,SAASq3X,EAAevxZ,EAAQsN,GAI9B,IAHA,IAAM0rP,EAAS1rP,EAAMguH,OAAO,KAAwB,KAAlBt7H,EAAOpgB,QAGhChB,EAAI,EAAGA,EAAIohB,EAAOpgB,SAAUhB,EAAGohB,EAAOphB,GAAKo6Q,EAAOp6Q,EAC5D,CAEDulK,EAAOx3B,QAAU,CACf6kS,iBADe,WAEb,OAAO,CACR,EAEDtiH,iBALe,SAKGuiH,GAChB,IAAMtkI,EAAK,IAAIp7I,EAAG0/Q,GAClB,OAAOtkI,EAAG9pI,IAAImvJ,EAAS9gT,GAAK,IAAMy7R,EAAGhpJ,SAAW,EAAI,CACrD,EAEDssK,iBAVe,SAUGghH,GAChB,IAAMtkI,EAAK,IAAIp7I,EAAG0/Q,GACZ5nY,EAAS2oR,EAAS9gT,EAAE8Z,IAAI2hR,GAAIt6I,KAAK2/J,EAAS9gT,GAAGu4M,YAAYz3M,WAAY,KAAM,IAEjF,OADAi/Z,EAAOhma,IAAIo+B,GACJ,CACR,EAED+mR,mBAjBe,SAiBK6gH,EAAQ9gH,GAC1B,IAAMxjB,EAAK,IAAIp7I,EAAG4+J,GAClB,GAAIxjB,EAAG9pI,IAAImvJ,EAAS9gT,IAAM,EAAG,OAAO,EAIpC,GAFAy7R,EAAGriI,KAAK,IAAI/Y,EAAG0/Q,IACXtkI,EAAG9pI,IAAImvJ,EAAS9gT,IAAM,GAAGy7R,EAAG3hF,KAAKgnG,EAAS9gT,GAC1Cy7R,EAAGhpJ,SAAU,OAAO,EAExB,IAAMutR,EAAUvkI,EAAGljF,YAAYz3M,WAAY,KAAM,IAGjD,OAFAi/Z,EAAOhma,IAAIima,GAEJ,CACR,EAED7gH,mBA/Be,SA+BK4gH,EAAQ9gH,GAC1B,IAAIxjB,EAAK,IAAIp7I,EAAG4+J,GAChB,GAAIxjB,EAAG9pI,IAAImvJ,EAAS9gT,IAAM,GAAKy7R,EAAGhpJ,SAAU,OAAO,EAEnDgpJ,EAAG74R,KAAK,IAAIy9I,EAAG0/Q,IACXtkI,EAAG9pI,IAAImvJ,EAAS9gT,IAAM,IAAGy7R,EAAKA,EAAGt6I,KAAK2/J,EAAS9gT,IAEnD,IAAMgga,EAAUvkI,EAAGljF,YAAYz3M,WAAY,KAAM,IAGjD,OAFAi/Z,EAAOhma,IAAIima,GAEJ,CACR,EAEDtiH,gBA5Ce,SA4CEp2C,GAEf,OAAgB,OADHk4J,EAAcl4J,GACJ,EAAI,CAC5B,EAEDu2C,gBAjDe,SAiDEvvS,EAAQyxZ,GACvB,IAAMtkI,EAAK,IAAIp7I,EAAG0/Q,GAClB,OAAItkI,EAAG9pI,IAAImvJ,EAAS9gT,IAAM,GAAKy7R,EAAGhpJ,SAAiB,GAGnDotR,EAAcvxZ,EADAitJ,EAAGiC,eAAeuiQ,GAAQ/jQ,aAGjC,EACR,EAED4hJ,iBA3De,SA2DGtvS,EAAQg5P,GACxB,IAAMlmG,EAAOo+P,EAAcl4J,GAC3B,OAAa,OAATlmG,EAAsB,GAG1By+P,EAAcvxZ,EADA8yJ,EAAKpF,aAGZ,EACR,EAEDikQ,gBArEe,SAqEE3xZ,EAAQg5P,GACvB,IAAMlmG,EAAOo+P,EAAcl4J,GAC3B,GAAa,OAATlmG,EAAe,OAAO,EAE1B,IAAMxlJ,EAAQwlJ,EAAKpF,YAInB,OAHApgJ,EAAMrpB,EAAIqpB,EAAMrpB,EAAEs/J,SAClBguQ,EAAcvxZ,EAAQsN,GAEf,CACR,EAED2jS,iBAhFe,SAgFGjxS,EAAQ4xZ,GAExB,IADA,IAAM1kD,EAAQ,IAAIruX,MAAM+ya,EAAQhya,QACvBhB,EAAI,EAAGA,EAAIgza,EAAQhya,SAAUhB,EAEpC,GADAsuX,EAAMtuX,GAAKsya,EAAcU,EAAQhza,IAChB,OAAbsuX,EAAMtuX,GAAa,OAAO,EAIhC,IADA,IAAI0uB,EAAQ4/V,EAAM,GAAGx/M,YACZ9uK,EAAI,EAAGA,EAAIsuX,EAAMttX,SAAUhB,EAAG0uB,EAAQA,EAAMP,IAAImgW,EAAMtuX,GAAGuuK,KAClE,OAAI7/I,EAAMw6I,aAAqB,GAE/BypQ,EAAcvxZ,EAAQsN,GAEf,EACR,EAEDwjS,kBAhGe,SAgGI9wS,EAAQg5P,EAAQ23C,GACjC,IAAM79I,EAAOo+P,EAAcl4J,GAC3B,GAAa,OAATlmG,EAAe,OAAO,EAG1B,IADA69I,EAAQ,IAAI5+J,EAAG4+J,IACLttJ,IAAImvJ,EAAS9gT,IAAM,EAAG,OAAO,EAEvC,IAAM4b,EAAQwlJ,EAAKpF,YAAY3gJ,IAAIylS,EAAS/4S,EAAE0rI,IAAIwrK,IAClD,OAAIrjS,EAAMw6I,aAAqB,GAE/BypQ,EAAcvxZ,EAAQsN,GAEf,EACR,EAEDyjS,kBA/Ge,SA+GI/wS,EAAQg5P,EAAQ23C,GACjC,IAAM79I,EAAOo+P,EAAcl4J,GAC3B,OAAa,OAATlmG,EAAsB,GAE1B69I,EAAQ,IAAI5+J,EAAG4+J,IACLttJ,IAAImvJ,EAAS9gT,IAAM,GAAKi/S,EAAMxsK,SAAiB,GAGzDotR,EAAcvxZ,EADA8yJ,EAAKpF,YAAYvoB,IAAIwrK,IAG5B,EACR,EAEDO,mBA5He,SA4HKlmK,GAClB,IAAM3wI,EAAI,IAAI03I,EAAG/G,EAAI9wG,SAAS,EAAG,KAC3B7lC,EAAI,IAAI09I,EAAG/G,EAAI9wG,SAAS,GAAI,KAClC,OAAI7/B,EAAEgpJ,IAAImvJ,EAAS9gT,IAAM,GAAK2C,EAAEgvJ,IAAImvJ,EAAS9gT,IAAM,EAAU,GAExC,IAAjB2C,EAAEgvJ,IAAI4J,EAAG+B,KACXhkB,EAAIv/I,IAAI+mT,EAAS9gT,EAAE8Z,IAAInX,GAAG41M,YAAYz3M,WAAY,KAAM,IAAK,IAGxD,EACR,EAID2+S,gBA1Ie,SA0IEnvT,EAAKgpJ,GACpB,IAAM6mR,EAAO7mR,EAAI9wG,SAAS,EAAG,IACvB43X,EAAO9mR,EAAI9wG,SAAS,GAAI,IAC9B,GAAI,IAAI63G,EAAG8/Q,GAAMxuQ,IAAImvJ,EAAS9gT,IAAM,EAAG,OAAO,EAC9C,GAAI,IAAIqgJ,EAAG+/Q,GAAMzuQ,IAAImvJ,EAAS9gT,IAAM,EAAG,OAAO,EAE9C,IAAQsO,EAAWhe,EAAXge,OAGJ3F,EAAI2F,EAAOk6B,SAAS,EAAG,IAC3B7/B,EAAE,GAAK,EACPA,EAAE5O,IAAIoma,EAAM,GAIZ,IAFA,IAAIE,EAAO,GACPC,EAAO,EACJD,EAAO,GAAiB,IAAZ13Z,EAAE23Z,MAAkC,IAAd33Z,EAAE23Z,EAAO,MAAcD,IAAQC,GAGxE,GAAW,KADX33Z,EAAIA,EAAE6/B,SAAS83X,IACT,GAAW,OAAO,EACxB,GAAID,EAAO,GAAe,IAAT13Z,EAAE,MAAyB,IAAPA,EAAE,IAAY,OAAO,EAG1D,IAAIhG,EAAI2L,EAAOk6B,SAAS,GAAQ,IAChC7lC,EAAE,GAAK,EACPA,EAAE5I,IAAIqma,EAAM,GAIZ,IAFA,IAAIG,EAAO,GACPC,EAAO,EACJD,EAAO,GAAiB,IAAZ59Z,EAAE69Z,MAAkC,IAAd79Z,EAAE69Z,EAAO,MAAcD,IAAQC,GAGxE,OAAW,KADX79Z,EAAIA,EAAE6lC,SAASg4X,IACT,IACFD,EAAO,GAAe,IAAT59Z,EAAE,MAAyB,IAAPA,EAAE,IADf,GAIxBrS,EAAImwa,UAAY,EAAIJ,EAAOE,EAI3BjyZ,EAAO,GAAK,GACZA,EAAO,GAAKhe,EAAImwa,UAAY,EAC5BnyZ,EAAO,GAAK,EACZA,EAAO,GAAK3F,EAAEza,OACdogB,EAAOvU,IAAI4O,EAAG,GACd2F,EAAO,EAAI+xZ,GAAQ,EACnB/xZ,EAAO,EAAI+xZ,GAAQ19Z,EAAEzU,OACrBogB,EAAOvU,IAAI4I,EAAG,EAAI09Z,GAEX,EACR,EAID3gH,gBA/Le,SA+LEpxS,EAAQgrI,GACvB,GAAIA,EAAIprJ,OAAS,EAAG,OAAO,EAC3B,GAAIorJ,EAAIprJ,OAAS,GAAI,OAAO,EAC5B,GAAe,KAAXorJ,EAAI,GAAa,OAAO,EAC5B,GAAIA,EAAI,KAAOA,EAAIprJ,OAAS,EAAG,OAAO,EACtC,GAAe,IAAXorJ,EAAI,GAAa,OAAO,EAE5B,IAAM+mR,EAAO/mR,EAAI,GACjB,GAAa,IAAT+mR,EAAY,OAAO,EACvB,GAAI,EAAIA,GAAQ/mR,EAAIprJ,OAAQ,OAAO,EACnC,GAAsB,IAAlBorJ,EAAI,EAAI+mR,GAAgB,OAAO,EAEnC,IAAME,EAAOjnR,EAAI,EAAI+mR,GACrB,GAAa,IAATE,EAAY,OAAO,EACvB,GAAK,EAAIF,EAAOE,IAAUjnR,EAAIprJ,OAAQ,OAAO,EAE7C,GAAa,IAATorJ,EAAI,GAAW,OAAO,EAC1B,GAAI+mR,EAAO,GAAiB,IAAX/mR,EAAI,MAA2B,IAATA,EAAI,IAAY,OAAO,EAE9D,GAAoB,IAAhBA,EAAI+mR,EAAO,GAAW,OAAO,EACjC,GAAIE,EAAO,GAAwB,IAAlBjnR,EAAI+mR,EAAO,MAAkC,IAAhB/mR,EAAI+mR,EAAO,IAAY,OAAO,EAE5E,IAAIF,EAAO7mR,EAAI9wG,SAAS,EAAG,EAAI63X,GAE/B,GADoB,KAAhBF,EAAKjya,QAA6B,IAAZiya,EAAK,KAAaA,EAAOA,EAAK33X,SAAS,IAC7D23X,EAAKjya,OAAS,GAAI,OAAO,EAE7B,IAAIkya,EAAO9mR,EAAI9wG,SAAS,EAAI63X,GAE5B,GADoB,KAAhBD,EAAKlya,QAA6B,IAAZkya,EAAK,KAAaA,EAAOA,EAAKnha,MAAM,IAC1Dmha,EAAKlya,OAAS,GAAI,MAAM,IAAI+S,MAAM,wBAEtC,IAAI0H,EAAI,IAAI03I,EAAG8/Q,GACXx3Z,EAAEgpJ,IAAImvJ,EAAS9gT,IAAM,IAAG2I,EAAI,IAAI03I,EAAG,IAEvC,IAAI19I,EAAI,IAAI09I,EAAG/G,EAAI9wG,SAAS,EAAI63X,IAMhC,OALI19Z,EAAEgvJ,IAAImvJ,EAAS9gT,IAAM,IAAG2C,EAAI,IAAI09I,EAAG,IAEvC/xI,EAAOvU,IAAI4O,EAAE4vM,YAAYz3M,WAAY,KAAM,IAAK,GAChDwN,EAAOvU,IAAI4I,EAAE41M,YAAYz3M,WAAY,KAAM,IAAK,IAEzC,CACR,EAEDk/S,UAzOe,SAyOJ1vT,EAAKq2F,EAASo5U,EAAQjyZ,EAAMgyS,GACrC,GAAIA,EAAS,CACX,IAAM4gH,EAAW5gH,EACjBA,EAAU,SAACt4I,GACT,IAAMz9B,EAAQ22R,EAAS/5U,EAASo5U,EAAQ,KAAMjyZ,EAAM05J,GAGpD,KADgBz9B,aAAiBjpI,YAA+B,KAAjBipI,EAAM77I,QACvC,MAAM,IAAI+S,MAAM,mBAE9B,OAAO,IAAIo/I,EAAGtW,EACf,CACF,CAED,IAGIuP,EAHEzxI,EAAI,IAAIw4I,EAAG0/Q,GACjB,GAAIl4Z,EAAE8pJ,IAAImvJ,EAAS9gT,IAAM,GAAK6H,EAAE4qI,SAAU,OAAO,EAGjD,IACE6G,EAAMiiB,EAAG35I,KAAK+kE,EAASo5U,EAAQ,CAAEzhQ,WAAW,EAAMj6F,EAAGy7O,EAASnlJ,KAAM7sJ,GAGrE,CAFC,MAAO3f,GACP,OAAO,CACR,CAMD,OAJAmC,EAAIq3I,UAAU5tI,IAAIu/I,EAAI3wI,EAAE4vM,YAAYz3M,WAAY,KAAM,IAAK,GAC3DxQ,EAAIq3I,UAAU5tI,IAAIu/I,EAAI32I,EAAE41M,YAAYz3M,WAAY,KAAM,IAAK,IAC3DxQ,EAAI4yK,MAAQ5pB,EAAI4J,cAET,CACR,EAEDg9J,YAvQe,SAuQF5mK,EAAKqnR,EAAOr5J,GACvB,IAAMq4C,EAAS,CAAEh3S,EAAG2wI,EAAI9wG,SAAS,EAAG,IAAK7lC,EAAG22I,EAAI9wG,SAAS,GAAI,KAEvDo4X,EAAO,IAAIvgR,EAAGs/J,EAAOh3S,GACrBk4Z,EAAO,IAAIxgR,EAAGs/J,EAAOh9S,GAC3B,GAAIi+Z,EAAKjvQ,IAAImvJ,EAAS9gT,IAAM,GAAK6ga,EAAKlvQ,IAAImvJ,EAAS9gT,IAAM,EAAG,OAAO,EACnE,GAAwB,IAApB6ga,EAAKlvQ,IAAI4J,EAAG+B,KAAasjQ,EAAKnuR,UAAYouR,EAAKpuR,SAAU,OAAO,EAEpE,IAAM2uB,EAAOo+P,EAAcl4J,GAC3B,GAAa,OAATlmG,EAAe,OAAO,EAE1B,IAAMxlJ,EAAQwlJ,EAAKpF,YAEnB,OADgBT,EAAGY,OAAOwkQ,EAAOhhH,EAAQ/jS,GACxB,EAAI,CACtB,EAEDukS,aAvRe,SAuRD7xS,EAAQgrI,EAAK4pB,EAAOy9P,GAChC,IASI/kZ,EATE+jS,EAAS,CAAEh3S,EAAG2wI,EAAIr6I,MAAM,EAAG,IAAK0D,EAAG22I,EAAIr6I,MAAM,GAAI,KAEjD2ha,EAAO,IAAIvgR,EAAGs/J,EAAOh3S,GACrBk4Z,EAAO,IAAIxgR,EAAGs/J,EAAOh9S,GAC3B,GAAIi+Z,EAAKjvQ,IAAImvJ,EAAS9gT,IAAM,GAAK6ga,EAAKlvQ,IAAImvJ,EAAS9gT,IAAM,EAAG,OAAO,EAEnE,GAAI4ga,EAAKnuR,UAAYouR,EAAKpuR,SAAU,OAAO,EAI3C,IACE72H,EAAQ2/I,EAAGiD,cAAcmiQ,EAAOhhH,EAAQz8I,EAGzC,CAFC,MAAO/0K,GACP,OAAO,CACR,CAID,OAFA0xa,EAAcvxZ,EAAQsN,GAEf,CACR,EAEDwkS,KA7Se,SA6ST9xS,EAAQg5P,EAAQy4J,EAAQjyZ,EAAMgzZ,EAAQrB,EAAME,GAChD,IAAMv+P,EAAOo+P,EAAcl4J,GAC3B,GAAa,OAATlmG,EAAe,OAAO,EAE1B,IAAMj9J,EAAS,IAAIk8I,EAAG0/Q,GACtB,GAAI57Z,EAAOwtJ,IAAImvJ,EAAS9gT,IAAM,GAAKmE,EAAOsuI,SAAU,OAAO,EAE3D,IAAM72H,EAAQwlJ,EAAKpF,YAAYvoB,IAAItvI,GAEnC,QAAexL,IAAXmoa,EAGF,IAFA,IAAMhzZ,EAAO8N,EAAMguH,OAAO,MAAM,GAC1B4jK,EAASjyI,EAAG98F,OAAOrqD,OAAOtG,GAAMmtJ,SAC7B/tK,EAAI,EAAGA,EAAI,KAAMA,EAAGohB,EAAOphB,GAAKsgT,EAAOtgT,OAC3C,CACAuya,IAAMA,EAAO,IAAI3+Z,WAAW,KAEjC,IADA,IAAMxO,EAAIspB,EAAMxW,OAAOwlB,QAAQ,KAAM,IAC5B19B,EAAI,EAAGA,EAAI,KAAMA,EAAGuya,EAAKvya,GAAKoF,EAAEpF,GAEpCyya,IAAMA,EAAO,IAAI7+Z,WAAW,KAEjC,IADA,IAAMvO,EAAIqpB,EAAMvW,OAAOulB,QAAQ,KAAM,IAC5B19B,EAAI,EAAGA,EAAI,KAAMA,EAAGyya,EAAKzya,GAAKqF,EAAErF,GAEzC,IAAMuxE,EAAOqiW,EAAOrB,EAAME,EAAM7xZ,GAGhC,KADgB2wD,aAAgB39D,YAAc29D,EAAKvwE,SAAWogB,EAAOpgB,QACvD,OAAO,EAErBogB,EAAOvU,IAAI0kE,EACZ,CAED,OAAO,CACR,iDChZG9N,EACa,wCADbA,EAGF,oEAHEA,EAIO,8CAJPA,EAKsB,wCALtBA,EAMY,yBANZA,EAOU,iCAPVA,EAQc,iCARdA,EASY,0CATZA,EAUO,gCAVPA,EAWE,uEAXFA,EAYK,kCAZLA,EAaE,wCAGR,SAASq8F,EAAQ+zQ,EAAMhjS,GACrB,IAAKgjS,EAAM,MAAM,IAAI9/Z,MAAM88H,EAC5B,CAED,SAASijS,EAAcp3Z,EAAM3b,EAAOC,GAGlC,GAFA8+J,EAAO/+J,aAAiB6S,WAAlB,mBAA0C8I,EAA1C,8BAESjR,IAAXzK,EACF,GAAIf,MAAMC,QAAQc,GAAS,CACzB,IAAMiha,EAAUjha,EAAOijE,KAAK,MACtB4sE,EAAM,YAAH,OAAen0H,EAAf,6CAAwDulZ,EAAxD,KACTniQ,EAAO9+J,EAAOo+I,SAASr+I,EAAMC,QAAS6vI,EACvC,KAAM,CACL,IAAMA,EAAM,YAAH,OAAen0H,EAAf,4CAAuD1b,GAChE8+J,EAAO/+J,EAAMC,SAAWA,EAAQ6vI,EACjC,CAEJ,CAED,SAAS1rD,EAAcpkF,GACrB++J,EAA+B,YAAxBi0Q,EAAahza,GAAsB,sCAC3C,CAED,SAASiza,IAAkE,IAA/C5yZ,EAA+C,uDAAtC,SAACsJ,GAAD,OAAS,IAAI9W,WAAW8W,EAAxB,EAA8B1pB,EAAQ,uCAGzE,MAFsB,oBAAXogB,IAAuBA,EAASA,EAAOpgB,IAClD8ya,EAAa,SAAU1yZ,EAAQpgB,GACxBogB,CACR,CAED,SAAS2yZ,EAAchza,GACrB,OAAOuC,OAAOgJ,UAAUI,SAAS/L,KAAKI,GAAOgR,MAAM,GAAI,EACxD,CAEDwzJ,EAAOx3B,QAAU,SAAC+/J,GAChB,MAAO,CACL8kI,iBADK,SACahlQ,GAOhB,GANA9N,EACW,OAAT8N,GAAiBA,aAAgBh6J,WACjC,6CAEW,OAATg6J,GAAekmQ,EAAa,OAAQlmQ,EAAM,IAGvC,IADCkgI,EAAU8kI,iBAAiBhlQ,GAE/B,MAAM,IAAI75J,MAAM0vD,EAErB,EAED6sP,iBAdK,SAcauiH,GAGhB,OAFAiB,EAAa,cAAejB,EAAQ,IAEU,IAAvC/kI,EAAUwiB,iBAAiBuiH,EACnC,EAEDhhH,iBApBK,SAoBaghH,GAGhB,OAFAiB,EAAa,cAAejB,EAAQ,IAE5B/kI,EAAU+jB,iBAAiBghH,IACjC,KAAK,EACH,OAAOA,EACT,KAAK,EACH,MAAM,IAAI9+Z,MAAM0vD,GAErB,EAEDuuP,mBA/BK,SA+Be6gH,EAAQ9gH,GAI1B,OAHA+hH,EAAa,cAAejB,EAAQ,IACpCiB,EAAa,QAAS/hH,EAAO,IAErBjkB,EAAUkkB,mBAAmB6gH,EAAQ9gH,IAC3C,KAAK,EACH,OAAO8gH,EACT,KAAK,EACH,MAAM,IAAI9+Z,MAAM0vD,GAErB,EAEDwuP,mBA3CK,SA2Ce4gH,EAAQ9gH,GAI1B,OAHA+hH,EAAa,cAAejB,EAAQ,IACpCiB,EAAa,QAAS/hH,EAAO,IAErBjkB,EAAUmkB,mBAAmB4gH,EAAQ9gH,IAC3C,KAAK,EACH,OAAO8gH,EACT,KAAK,EACH,MAAM,IAAI9+Z,MAAM0vD,GAErB,EAED+sP,gBAvDK,SAuDYp2C,GAGf,OAFA05J,EAAa,aAAc15J,EAAQ,CAAC,GAAI,KAEK,IAAtC0zB,EAAU0iB,gBAAgBp2C,EAClC,EAEDu2C,gBA7DK,SA6DYkiH,GAAmC,IAA3BhgQ,IAA2B,yDAARzxJ,EAAQ,uCAKlD,OAJA0yZ,EAAa,cAAejB,EAAQ,IACpC1tV,EAAa0tF,GACbzxJ,EAAS4yZ,EAAkB5yZ,EAAQyxJ,EAAa,GAAK,IAE7Ci7H,EAAU6iB,gBAAgBvvS,EAAQyxZ,IACxC,KAAK,EACH,OAAOzxZ,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEDitP,iBA5EK,SA4Eat2C,GAAmC,IAA3BvnG,IAA2B,yDAARzxJ,EAAQ,uCAKnD,OAJA0yZ,EAAa,aAAc15J,EAAQ,CAAC,GAAI,KACxCj1L,EAAa0tF,GACbzxJ,EAAS4yZ,EAAkB5yZ,EAAQyxJ,EAAa,GAAK,IAE7Ci7H,EAAU4iB,iBAAiBtvS,EAAQg5P,IACzC,KAAK,EACH,OAAOh5P,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEDsvW,gBA3FK,SA2FY34J,GAAmC,IAA3BvnG,IAA2B,yDAARzxJ,EAAQ,uCAKlD,OAJA0yZ,EAAa,aAAc15J,EAAQ,CAAC,GAAI,KACxCj1L,EAAa0tF,GACbzxJ,EAAS4yZ,EAAkB5yZ,EAAQyxJ,EAAa,GAAK,IAE7Ci7H,EAAUilI,gBAAgB3xZ,EAAQg5P,IACxC,KAAK,EACH,OAAOh5P,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAED4uP,iBA5GK,SA4Ga2gH,GAAoC,IAA3BngQ,IAA2B,yDAARzxJ,EAAQ,uCACpD0+I,EAAO7/J,MAAMC,QAAQ8ya,GAAU,uCAC/BlzQ,EAAOkzQ,EAAQhya,OAAS,EAAG,6DAFyB,UAG/Bgya,GAH+B,IAGpD,IAAK,EAAL,qBAA8B,KAAnB54J,EAAmB,QAC5B05J,EAAa,aAAc15J,EAAQ,CAAC,GAAI,IACzC,CALmD,+BASpD,OAHAj1L,EAAa0tF,GACbzxJ,EAAS4yZ,EAAkB5yZ,EAAQyxJ,EAAa,GAAK,IAE7Ci7H,EAAUukB,iBAAiBjxS,EAAQ4xZ,IACzC,KAAK,EACH,OAAO5xZ,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEDyuP,kBAjIK,SAiIc93C,EAAQ23C,GAAkC,IAA3Bl/I,IAA2B,yDAARzxJ,EAAQ,uCAM3D,OALA0yZ,EAAa,aAAc15J,EAAQ,CAAC,GAAI,KACxC05J,EAAa,QAAS/hH,EAAO,IAC7B5sO,EAAa0tF,GACbzxJ,EAAS4yZ,EAAkB5yZ,EAAQyxJ,EAAa,GAAK,IAE7Ci7H,EAAUokB,kBAAkB9wS,EAAQg5P,EAAQ23C,IAClD,KAAK,EACH,OAAO3wS,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAED0uP,kBAjJK,SAiJc/3C,EAAQ23C,GAAkC,IAA3Bl/I,IAA2B,yDAARzxJ,EAAQ,uCAM3D,OALA0yZ,EAAa,aAAc15J,EAAQ,CAAC,GAAI,KACxC05J,EAAa,QAAS/hH,EAAO,IAC7B5sO,EAAa0tF,GACbzxJ,EAAS4yZ,EAAkB5yZ,EAAQyxJ,EAAa,GAAK,IAE7Ci7H,EAAUqkB,kBAAkB/wS,EAAQg5P,EAAQ23C,IAClD,KAAK,EACH,OAAO3wS,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAED6uP,mBAjKK,SAiKelmK,GAGlB,OAFA0nR,EAAa,YAAa1nR,EAAK,IAEvB0hJ,EAAUwkB,mBAAmBlmK,IACnC,KAAK,EACH,OAAOA,EACT,KAAK,EACH,MAAM,IAAIr4I,MAAM0vD,GAErB,EAED8uP,gBA5KK,SA4KYnmK,EAAKhrI,GACpB0yZ,EAAa,YAAa1nR,EAAK,IAG/B,IAAMhpJ,EAAM,CAAEge,OAFdA,EAAS4yZ,EAAkB5yZ,EAAQ,IAEbmyZ,UAAW,IACjC,OAAQzlI,EAAUykB,gBAAgBnvT,EAAKgpJ,IACrC,KAAK,EACH,OAAOhrI,EAAOrP,MAAM,EAAG3O,EAAImwa,WAC7B,KAAK,EACH,MAAM,IAAIx/Z,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAED+uP,gBA3LK,SA2LYpmK,EAAKhrI,GAIpB,OAHA0yZ,EAAa,YAAa1nR,GAC1BhrI,EAAS4yZ,EAAkB5yZ,EAAQ,IAE3B0sR,EAAU0kB,gBAAgBpxS,EAAQgrI,IACxC,KAAK,EACH,OAAOhrI,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEDqvP,UAzMK,SAyMM2gH,EAAOZ,GAA8B,IAAtB3wa,EAAsB,uDAAZ,CAAC,EAAGkf,EAAQ,uCAC9C0yZ,EAAa,UAAWL,EAAO,IAC/BK,EAAa,cAAejB,EAAQ,IACpC/yQ,EAAiC,WAA1Bi0Q,EAAa7xa,GAAuB,yCACtBuJ,IAAjBvJ,EAAQ0e,MAAoBkzZ,EAAa,eAAgB5xa,EAAQ0e,WAC7CnV,IAApBvJ,EAAQ0wT,SAAuB9yJ,EAAyC,aAAlCi0Q,EAAa7xa,EAAQ0wT,SAAyB,6CAGxF,IAAMxvT,EAAM,CAAEq3I,UAFdr5H,EAAS4yZ,EAAkB5yZ,EAAQ,IAEF40J,MAAO,MACxC,OAAQ83H,EAAUglB,UAAU1vT,EAAKqwa,EAAOZ,EAAQ3wa,EAAQ0e,KAAM1e,EAAQ0wT,UACpE,KAAK,EACH,OAAOxvT,EACT,KAAK,EACH,MAAM,IAAI2Q,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEDuvP,YA5NK,SA4NQ5mK,EAAKqnR,EAAOr5J,GAKvB,OAJA05J,EAAa,YAAa1nR,EAAK,IAC/B0nR,EAAa,UAAWL,EAAO,IAC/BK,EAAa,aAAc15J,EAAQ,CAAC,GAAI,KAEhC0zB,EAAUklB,YAAY5mK,EAAKqnR,EAAOr5J,IACxC,KAAK,EACH,OAAO,EACT,KAAK,EACH,OAAO,EACT,KAAK,EACH,MAAM,IAAIrmQ,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEDwvP,aA7OK,SA6OS7mK,EAAK4pB,EAAOy9P,GAAkC,IAA3B5gQ,IAA2B,yDAARzxJ,EAAQ,uCAY1D,OAXA0yZ,EAAa,YAAa1nR,EAAK,IAC/B0T,EAC0B,WAAxBi0Q,EAAa/9P,IACXA,GAAS,GACTA,GAAS,EACX,8DAEF89P,EAAa,UAAWL,EAAO,IAC/BtuV,EAAa0tF,GACbzxJ,EAAS4yZ,EAAkB5yZ,EAAQyxJ,EAAa,GAAK,IAE7Ci7H,EAAUmlB,aAAa7xS,EAAQgrI,EAAK4pB,EAAOy9P,IACjD,KAAK,EACH,OAAOryZ,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEDyvP,KArQK,SAqQC94C,EAAQy4J,GAA8B,IAAtB3wa,EAAsB,uDAAZ,CAAC,EAAGkf,EAAQ,uCAc1C,OAbA0yZ,EAAa,aAAc15J,EAAQ,CAAC,GAAI,KACxC05J,EAAa,cAAejB,EAAQ,IACpC/yQ,EAAiC,WAA1Bi0Q,EAAa7xa,GAAuB,yCACtBuJ,IAAjBvJ,EAAQ0e,MAAoBkzZ,EAAa,eAAgB5xa,EAAQ0e,WAC9CnV,IAAnBvJ,EAAQ0xa,QACV9zQ,EAAwC,aAAjCi0Q,EAAa7xa,EAAQ0xa,QAAwB,iDAC/Bnoa,IAAjBvJ,EAAQqwa,MAAoBuB,EAAa,eAAgB5xa,EAAQqwa,KAAM,SACtD9ma,IAAjBvJ,EAAQuwa,MAAoBqB,EAAa,eAAgB5xa,EAAQuwa,KAAM,IAC3EqB,EAAa,SAAU1yZ,IAEvBA,EAAS4yZ,EAAkB5yZ,EAAQ,IAG7B0sR,EAAUolB,KAAK9xS,EAAQg5P,EAAQy4J,EAAQ3wa,EAAQ0e,KAAM1e,EAAQ0xa,OAAQ1xa,EAAQqwa,KAAMrwa,EAAQuwa,OACjG,KAAK,EACH,OAAOrxZ,EACT,KAAK,EACH,MAAM,IAAIrN,MAAM0vD,GAClB,KAAK,EACH,MAAM,IAAI1vD,MAAM0vD,GAErB,EAEJ,6BC7UG8G,YAFJwjE,EAAUw3B,EAAOx3B,QAAUkmS,EAQzB1pW,EAJqB,kBAAZsnE,GAEPA,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,YACZ,cAAchhW,KAAKgyH,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,YACzB,WACN,IAAIr1W,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAW,GACjDiH,EAAKi/C,QAAQ,UACb5zC,QAAQvD,IAAIlP,MAAMyS,QAASrL,EAC5B,EAEO,WAAc,EAKxBuiI,EAAQmmS,oBAAsB,QAE9B,IACIj4W,EAAmBj3D,OAAOi3D,kBACD,iBAMzBusJ,EAAKz6E,EAAQy6E,GAAK,GAClBhnN,EAAMusI,EAAQvsI,IAAM,GACpBgoS,EAAI,EAQJ2qI,EAAoB3qI,IACxBhoS,EAAI2ya,GAAqB,cACzB,IAAIC,EAAyB5qI,IAC7BhoS,EAAI4ya,GAA0B,SAM9B,IAAIC,EAAuB7qI,IAC3BhoS,EAAI6ya,GAAwB,6BAK5B,IAAIC,EAAc9qI,IAClBhoS,EAAI8ya,GAAe,IAAM9ya,EAAI2ya,GAAV,QACM3ya,EAAI2ya,GADV,QAEM3ya,EAAI2ya,GAAqB,IAElD,IAAII,EAAmB/qI,IACvBhoS,EAAI+ya,GAAoB,IAAM/ya,EAAI4ya,GAAV,QACM5ya,EAAI4ya,GADV,QAEM5ya,EAAI4ya,GAA0B,IAK5D,IAAII,EAAuBhrI,IAC3BhoS,EAAIgza,GAAwB,MAAQhza,EAAI2ya,GACZ,IAAM3ya,EAAI6ya,GAAwB,IAE9D,IAAII,EAA4BjrI,IAChChoS,EAAIiza,GAA6B,MAAQjza,EAAI4ya,GACZ,IAAM5ya,EAAI6ya,GAAwB,IAMnE,IAAIK,EAAalrI,IACjBhoS,EAAIkza,GAAc,QAAUlza,EAAIgza,GACd,SAAWhza,EAAIgza,GAAwB,OAEzD,IAAIG,EAAkBnrI,IACtBhoS,EAAImza,GAAmB,SAAWnza,EAAIiza,GACf,SAAWjza,EAAIiza,GAA6B,OAKnE,IAAIG,EAAkBprI,IACtBhoS,EAAIoza,GAAmB,gBAMvB,IAAIC,EAAQrrI,IACZhoS,EAAIqza,GAAS,UAAYrza,EAAIoza,GAChB,SAAWpza,EAAIoza,GAAmB,OAW/C,IAAIztG,EAAO39B,IACPsrI,EAAY,KAAOtza,EAAI8ya,GACX9ya,EAAIkza,GAAc,IAClBlza,EAAIqza,GAAS,IAE7Brza,EAAI2lU,GAAQ,IAAM2tG,EAAY,IAK9B,IAAIC,EAAa,WAAavza,EAAI+ya,GACjB/ya,EAAImza,GAAmB,IACvBnza,EAAIqza,GAAS,IAE1BG,EAAQxrI,IACZhoS,EAAIwza,GAAS,IAAMD,EAAa,IAEhC,IAAIE,EAAOzrI,IACXhoS,EAAIyza,GAAQ,eAKZ,IAAIC,EAAwB1rI,IAC5BhoS,EAAI0za,GAAyB1za,EAAI4ya,GAA0B,WAC3D,IAAIe,EAAmB3rI,IACvBhoS,EAAI2za,GAAoB3za,EAAI2ya,GAAqB,WAEjD,IAAIiB,EAAc5rI,IAClBhoS,EAAI4za,GAAe,YAAc5za,EAAI2za,GAAlB,WACY3za,EAAI2za,GADhB,WAEY3za,EAAI2za,GAFhB,OAGQ3za,EAAIkza,GAAc,KAC1Blza,EAAIqza,GAJJ,QAOnB,IAAIQ,EAAmB7rI,IACvBhoS,EAAI6za,GAAoB,YAAc7za,EAAI0za,GAAlB,WACY1za,EAAI0za,GADhB,WAEY1za,EAAI0za,GAFhB,OAGQ1za,EAAImza,GAAmB,KAC/Bnza,EAAIqza,GAJJ,QAOxB,IAAIS,EAAS9rI,IACbhoS,EAAI8za,GAAU,IAAM9za,EAAIyza,GAAQ,OAASzza,EAAI4za,GAAe,IAC5D,IAAIG,EAAc/rI,IAClBhoS,EAAI+za,GAAe,IAAM/za,EAAIyza,GAAQ,OAASzza,EAAI6za,GAAoB,IAItE,IAAIG,EAAShsI,IACbhoS,EAAIg0a,GAAU,4EAQd,IAAIC,EAAYjsI,IAChBhoS,EAAIi0a,GAAa,UAEjB,IAAIC,EAAYlsI,IAChBhoS,EAAIk0a,GAAa,SAAWl0a,EAAIi0a,GAAa,OAC7CjtN,EAAGktN,GAAa,IAAIz9T,OAAOz2G,EAAIk0a,GAAY,KAC3C,IAEIC,EAAQnsI,IACZhoS,EAAIm0a,GAAS,IAAMn0a,EAAIi0a,GAAaj0a,EAAI4za,GAAe,IACvD,IAAIQ,EAAapsI,IACjBhoS,EAAIo0a,GAAc,IAAMp0a,EAAIi0a,GAAaj0a,EAAI6za,GAAoB,IAIjE,IAAIQ,EAAYrsI,IAChBhoS,EAAIq0a,GAAa,UAEjB,IAAIC,EAAYtsI,IAChBhoS,EAAIs0a,GAAa,SAAWt0a,EAAIq0a,GAAa,OAC7CrtN,EAAGstN,GAAa,IAAI79T,OAAOz2G,EAAIs0a,GAAY,KAC3C,IAEIC,EAAQvsI,IACZhoS,EAAIu0a,GAAS,IAAMv0a,EAAIq0a,GAAar0a,EAAI4za,GAAe,IACvD,IAAIY,EAAaxsI,IACjBhoS,EAAIw0a,GAAc,IAAMx0a,EAAIq0a,GAAar0a,EAAI6za,GAAoB,IAGjE,IAAIY,EAAkBzsI,IACtBhoS,EAAIy0a,GAAmB,IAAMz0a,EAAIyza,GAAQ,QAAUF,EAAa,QAChE,IAAImB,EAAa1sI,IACjBhoS,EAAI00a,GAAc,IAAM10a,EAAIyza,GAAQ,QAAUH,EAAY,QAI1D,IAAIqB,EAAiB3sI,IACrBhoS,EAAI20a,GAAkB,SAAW30a,EAAIyza,GACf,QAAUF,EAAa,IAAMvza,EAAI4za,GAAe,IAGtE5sN,EAAG2tN,GAAkB,IAAIl+T,OAAOz2G,EAAI20a,GAAiB,KACrD,IAMIC,EAAc5sI,IAClBhoS,EAAI40a,GAAe,SAAW50a,EAAI4za,GAAf,cAEM5za,EAAI4za,GAFV,SAKnB,IAAIiB,EAAmB7sI,IACvBhoS,EAAI60a,GAAoB,SAAW70a,EAAI6za,GAAf,cAEM7za,EAAI6za,GAFV,SAMxB,IAAIiB,EAAO9sI,IACXhoS,EAAI80a,GAAQ,kBAIZ,IAAK,IAAIt2a,EAAI,EAAGA,EALLwpS,GAKYxpS,IACrBuqE,EAAMvqE,EAAGwB,EAAIxB,IACRwoN,EAAGxoN,KACNwoN,EAAGxoN,GAAK,IAAIi4G,OAAOz2G,EAAIxB,KAK3B,SAASqjB,EAAOrC,EAAS9e,GAQvB,GAPKA,GAA8B,kBAAZA,IACrBA,EAAU,CACR6lJ,QAAS7lJ,EACTq0a,mBAAmB,IAInBv1Z,aAAmBizZ,EACrB,OAAOjzZ,EAGT,GAAuB,kBAAZA,EACT,OAAO,KAGT,GAAIA,EAAQhgB,OA/OG,IAgPb,OAAO,KAIT,KADQkB,EAAQ6lJ,MAAQygE,EAAGwsN,GAASxsN,EAAG2+G,IAChCtnT,KAAKmB,GACV,OAAO,KAGT,IACE,OAAO,IAAIizZ,EAAOjzZ,EAAS9e,EAG5B,CAFC,MAAO27Q,GACP,OAAO,IACR,CACF,CAgBD,SAASo2J,EAAQjzZ,EAAS9e,GAOxB,GANKA,GAA8B,kBAAZA,IACrBA,EAAU,CACR6lJ,QAAS7lJ,EACTq0a,mBAAmB,IAGnBv1Z,aAAmBizZ,EAAQ,CAC7B,GAAIjzZ,EAAQ+mI,QAAU7lJ,EAAQ6lJ,MAC5B,OAAO/mI,EAEPA,EAAUA,EAAQA,OAErB,MAAM,GAAuB,kBAAZA,EAChB,MAAM,IAAI7f,UAAU,oBAAsB6f,GAG5C,GAAIA,EAAQhgB,OA9RG,IA+Rb,MAAM,IAAIG,UAAU,yCAGtB,KAAMiB,gBAAgB6xa,GACpB,OAAO,IAAIA,EAAOjzZ,EAAS9e,GAG7BqoE,EAAM,SAAUvpD,EAAS9e,GACzBE,KAAKF,QAAUA,EACfE,KAAK2lJ,QAAU7lJ,EAAQ6lJ,MAEvB,IAAIh1I,EAAIiO,EAAQ2iD,OAAO7+D,MAAM5C,EAAQ6lJ,MAAQygE,EAAGwsN,GAASxsN,EAAG2+G,IAE5D,IAAKp0T,EACH,MAAM,IAAI5R,UAAU,oBAAsB6f,GAU5C,GAPA5e,KAAKuzK,IAAM30J,EAGX5e,KAAK8/Z,OAASnvZ,EAAE,GAChB3Q,KAAK+/Z,OAASpvZ,EAAE,GAChB3Q,KAAKu7Z,OAAS5qZ,EAAE,GAEZ3Q,KAAK8/Z,MAAQjmW,GAAoB75D,KAAK8/Z,MAAQ,EAChD,MAAM,IAAI/ga,UAAU,yBAGtB,GAAIiB,KAAK+/Z,MAAQlmW,GAAoB75D,KAAK+/Z,MAAQ,EAChD,MAAM,IAAIhha,UAAU,yBAGtB,GAAIiB,KAAKu7Z,MAAQ1hW,GAAoB75D,KAAKu7Z,MAAQ,EAChD,MAAM,IAAIx8Z,UAAU,yBAIjB4R,EAAE,GAGL3Q,KAAKo0a,WAAazja,EAAE,GAAGgxD,MAAM,KAAK/7D,KAAI,SAAU/E,GAC9C,GAAI,WAAW4c,KAAK5c,GAAK,CACvB,IAAIw9J,GAAOx9J,EACX,GAAIw9J,GAAO,GAAKA,EAAMxkG,EACpB,OAAOwkG,CAEV,CACD,OAAOx9J,CACR,IAVDb,KAAKo0a,WAAa,GAapBp0a,KAAKw4O,MAAQ7nO,EAAE,GAAKA,EAAE,GAAGgxD,MAAM,KAAO,GACtC3hE,KAAK+f,QACN,CAtHD4rH,EAAQ1qH,MAAQA,EAiChB0qH,EAAQ1jC,MACR,SAAgBrpF,EAAS9e,GACvB,IAAIgV,EAAImM,EAAMrC,EAAS9e,GACvB,OAAOgV,EAAIA,EAAE8J,QAAU,IACxB,EAED+sH,EAAQ0oS,MACR,SAAgBz1Z,EAAS9e,GACvB,IAAIuT,EAAI4N,EAAMrC,EAAQ2iD,OAAOoB,QAAQ,SAAU,IAAK7iE,GACpD,OAAOuT,EAAIA,EAAEuL,QAAU,IACxB,EAED+sH,EAAQkmS,OAASA,EA2EjBA,EAAO3na,UAAU6V,OAAS,WAKxB,OAJA/f,KAAK4e,QAAU5e,KAAK8/Z,MAAQ,IAAM9/Z,KAAK+/Z,MAAQ,IAAM//Z,KAAKu7Z,MACtDv7Z,KAAKo0a,WAAWx1a,SAClBoB,KAAK4e,SAAW,IAAM5e,KAAKo0a,WAAWvyW,KAAK,MAEtC7hE,KAAK4e,OACb,EAEDizZ,EAAO3na,UAAUI,SAAW,WAC1B,OAAOtK,KAAK4e,OACb,EAEDizZ,EAAO3na,UAAU+7N,QAAU,SAAUjjH,GAMnC,OALA76C,EAAM,iBAAkBnoE,KAAK4e,QAAS5e,KAAKF,QAASkjH,GAC9CA,aAAiB6uT,IACrB7uT,EAAQ,IAAI6uT,EAAO7uT,EAAOhjH,KAAKF,UAG1BE,KAAKs0a,YAAYtxT,IAAUhjH,KAAKu0a,WAAWvxT,EACnD,EAED6uT,EAAO3na,UAAUoqa,YAAc,SAAUtxT,GAKvC,OAJMA,aAAiB6uT,IACrB7uT,EAAQ,IAAI6uT,EAAO7uT,EAAOhjH,KAAKF,UAG1B00a,EAAmBx0a,KAAK8/Z,MAAO98S,EAAM88S,QACrC0U,EAAmBx0a,KAAK+/Z,MAAO/8S,EAAM+8S,QACrCyU,EAAmBx0a,KAAKu7Z,MAAOv4S,EAAMu4S,MAC7C,EAEDsW,EAAO3na,UAAUqqa,WAAa,SAAUvxT,GAMtC,GALMA,aAAiB6uT,IACrB7uT,EAAQ,IAAI6uT,EAAO7uT,EAAOhjH,KAAKF,UAI7BE,KAAKo0a,WAAWx1a,SAAWokH,EAAMoxT,WAAWx1a,OAC9C,OAAQ,EACH,IAAKoB,KAAKo0a,WAAWx1a,QAAUokH,EAAMoxT,WAAWx1a,OACrD,OAAO,EACF,IAAKoB,KAAKo0a,WAAWx1a,SAAWokH,EAAMoxT,WAAWx1a,OACtD,OAAO,EAGT,IAAIhB,EAAI,EACR,EAAG,CACD,IAAIkM,EAAI9J,KAAKo0a,WAAWx2a,GACpBgW,EAAIovG,EAAMoxT,WAAWx2a,GAEzB,GADAuqE,EAAM,qBAAsBvqE,EAAGkM,EAAG8J,QACxBvK,IAANS,QAAyBT,IAANuK,EACrB,OAAO,EACF,QAAUvK,IAANuK,EACT,OAAO,EACF,QAAUvK,IAANS,EACT,OAAQ,EACH,GAAIA,IAAM8J,EAGf,OAAO4ga,EAAmB1qa,EAAG8J,EAEhC,SAAUhW,EACZ,EAIDi0a,EAAO3na,UAAUuqa,IAAM,SAAU/iI,EAASgjI,GACxC,OAAQhjI,GACN,IAAK,WACH1xS,KAAKo0a,WAAWx1a,OAAS,EACzBoB,KAAKu7Z,MAAQ,EACbv7Z,KAAK+/Z,MAAQ,EACb//Z,KAAK8/Z,QACL9/Z,KAAKy0a,IAAI,MAAOC,GAChB,MACF,IAAK,WACH10a,KAAKo0a,WAAWx1a,OAAS,EACzBoB,KAAKu7Z,MAAQ,EACbv7Z,KAAK+/Z,QACL//Z,KAAKy0a,IAAI,MAAOC,GAChB,MACF,IAAK,WAIH10a,KAAKo0a,WAAWx1a,OAAS,EACzBoB,KAAKy0a,IAAI,QAASC,GAClB10a,KAAKy0a,IAAI,MAAOC,GAChB,MAGF,IAAK,aAC4B,IAA3B10a,KAAKo0a,WAAWx1a,QAClBoB,KAAKy0a,IAAI,QAASC,GAEpB10a,KAAKy0a,IAAI,MAAOC,GAChB,MAEF,IAAK,QAKgB,IAAf10a,KAAK+/Z,OACU,IAAf//Z,KAAKu7Z,OACsB,IAA3Bv7Z,KAAKo0a,WAAWx1a,QAClBoB,KAAK8/Z,QAEP9/Z,KAAK+/Z,MAAQ,EACb//Z,KAAKu7Z,MAAQ,EACbv7Z,KAAKo0a,WAAa,GAClB,MACF,IAAK,QAKgB,IAAfp0a,KAAKu7Z,OAA0C,IAA3Bv7Z,KAAKo0a,WAAWx1a,QACtCoB,KAAK+/Z,QAEP//Z,KAAKu7Z,MAAQ,EACbv7Z,KAAKo0a,WAAa,GAClB,MACF,IAAK,QAK4B,IAA3Bp0a,KAAKo0a,WAAWx1a,QAClBoB,KAAKu7Z,QAEPv7Z,KAAKo0a,WAAa,GAClB,MAGF,IAAK,MACH,GAA+B,IAA3Bp0a,KAAKo0a,WAAWx1a,OAClBoB,KAAKo0a,WAAa,CAAC,OACd,CAEL,IADA,IAAIx2a,EAAIoC,KAAKo0a,WAAWx1a,SACfhB,GAAK,GACsB,kBAAvBoC,KAAKo0a,WAAWx2a,KACzBoC,KAAKo0a,WAAWx2a,KAChBA,GAAK,IAGE,IAAPA,GAEFoC,KAAKo0a,WAAW11a,KAAK,EAExB,CACGg2a,IAGE10a,KAAKo0a,WAAW,KAAOM,EACrBtrY,MAAMppC,KAAKo0a,WAAW,MACxBp0a,KAAKo0a,WAAa,CAACM,EAAY,IAGjC10a,KAAKo0a,WAAa,CAACM,EAAY,IAGnC,MAEF,QACE,MAAM,IAAI/ia,MAAM,+BAAiC+/R,GAIrD,OAFA1xS,KAAK+f,SACL/f,KAAKuzK,IAAMvzK,KAAK4e,QACT5e,IACR,EAED2rI,EAAQ8oS,IACR,SAAc71Z,EAAS8yR,EAAS/rJ,EAAO+uR,GACd,kBAAX/uR,IACV+uR,EAAa/uR,EACbA,OAAQt8I,GAGV,IACE,OAAO,IAAIwoa,EAAOjzZ,EAAS+mI,GAAO8uR,IAAI/iI,EAASgjI,GAAY91Z,OAG5D,CAFC,MAAO68P,GACP,OAAO,IACR,CACF,EAED9vI,EAAQr4B,KACR,SAAeqhU,EAAUC,GACvB,GAAIviR,GAAGsiR,EAAUC,GACf,OAAO,KAEP,IAAIj/Z,EAAKsL,EAAM0zZ,GACX/+Z,EAAKqL,EAAM2zZ,GACX7rW,EAAS,GACb,GAAIpzD,EAAGy+Z,WAAWx1a,QAAUgX,EAAGw+Z,WAAWx1a,OAAQ,CAChDmqE,EAAS,MACT,IAAI8rW,EAAgB,YACrB,CACD,IAAK,IAAI5za,KAAO0U,EACd,IAAY,UAAR1U,GAA2B,UAARA,GAA2B,UAARA,IACpC0U,EAAG1U,KAAS2U,EAAG3U,GACjB,OAAO8nE,EAAS9nE,EAItB,OAAO4za,CAEV,EAEDlpS,EAAQ6oS,mBAAqBA,EAE7B,IAAI9hQ,EAAU,WACd,SAAS8hQ,EAAoB1qa,EAAG8J,GAC9B,IAAIkha,EAAOpiQ,EAAQj1J,KAAK3T,GACpBira,EAAOriQ,EAAQj1J,KAAK7J,GAOxB,OALIkha,GAAQC,IACVjra,GAAKA,EACL8J,GAAKA,GAGA9J,IAAM8J,EAAI,EACZkha,IAASC,GAAS,EAClBA,IAASD,EAAQ,EAClBhra,EAAI8J,GAAK,EACT,CACL,CAuBD,SAASqyN,EAASn8N,EAAG8J,EAAG+xI,GACtB,OAAO,IAAIksR,EAAO/na,EAAG67I,GAAOsgF,QAAQ,IAAI4rM,EAAOj+Z,EAAG+xI,GACnD,CA2BD,SAAS3B,EAAIl6I,EAAG8J,EAAG+xI,GACjB,OAAOsgF,EAAQn8N,EAAG8J,EAAG+xI,GAAS,CAC/B,CAGD,SAAS1B,EAAIn6I,EAAG8J,EAAG+xI,GACjB,OAAOsgF,EAAQn8N,EAAG8J,EAAG+xI,GAAS,CAC/B,CAGD,SAAS0M,GAAIvoJ,EAAG8J,EAAG+xI,GACjB,OAAgC,IAAzBsgF,EAAQn8N,EAAG8J,EAAG+xI,EACtB,CAGD,SAASqvR,GAAKlra,EAAG8J,EAAG+xI,GAClB,OAAgC,IAAzBsgF,EAAQn8N,EAAG8J,EAAG+xI,EACtB,CAGD,SAAS4M,GAAKzoJ,EAAG8J,EAAG+xI,GAClB,OAAOsgF,EAAQn8N,EAAG8J,EAAG+xI,IAAU,CAChC,CAGD,SAAS2M,GAAKxoJ,EAAG8J,EAAG+xI,GAClB,OAAOsgF,EAAQn8N,EAAG8J,EAAG+xI,IAAU,CAChC,CAGD,SAAS0c,GAAKv4J,EAAG8vV,EAAIhmV,EAAG+xI,GACtB,OAAQi0M,GACN,IAAK,MAKH,MAJiB,kBAAN9vV,IACTA,EAAIA,EAAE8U,SACS,kBAANhL,IACTA,EAAIA,EAAEgL,SACD9U,IAAM8J,EAEf,IAAK,MAKH,MAJiB,kBAAN9J,IACTA,EAAIA,EAAE8U,SACS,kBAANhL,IACTA,EAAIA,EAAEgL,SACD9U,IAAM8J,EAEf,IAAK,GACL,IAAK,IACL,IAAK,KACH,OAAOy+I,GAAGvoJ,EAAG8J,EAAG+xI,GAElB,IAAK,KACH,OAAOqvR,GAAIlra,EAAG8J,EAAG+xI,GAEnB,IAAK,IACH,OAAO3B,EAAGl6I,EAAG8J,EAAG+xI,GAElB,IAAK,KACH,OAAO4M,GAAIzoJ,EAAG8J,EAAG+xI,GAEnB,IAAK,IACH,OAAO1B,EAAGn6I,EAAG8J,EAAG+xI,GAElB,IAAK,KACH,OAAO2M,GAAIxoJ,EAAG8J,EAAG+xI,GAEnB,QACE,MAAM,IAAI5mJ,UAAU,qBAAuB66V,GAEhD,CAGD,SAASq7E,GAAYxtR,EAAM3nJ,GAQzB,GAPKA,GAA8B,kBAAZA,IACrBA,EAAU,CACR6lJ,QAAS7lJ,EACTq0a,mBAAmB,IAInB1sR,aAAgBwtR,GAAY,CAC9B,GAAIxtR,EAAK9B,UAAY7lJ,EAAQ6lJ,MAC3B,OAAO8B,EAEPA,EAAOA,EAAK9oJ,KAEf,CAED,KAAMqB,gBAAgBi1a,IACpB,OAAO,IAAIA,GAAWxtR,EAAM3nJ,GAG9BqoE,EAAM,aAAcs/E,EAAM3nJ,GAC1BE,KAAKF,QAAUA,EACfE,KAAK2lJ,QAAU7lJ,EAAQ6lJ,MACvB3lJ,KAAKihB,MAAMwmI,GAEPznJ,KAAKy9V,SAAWy3E,GAClBl1a,KAAKrB,MAAQ,GAEbqB,KAAKrB,MAAQqB,KAAKi7N,SAAWj7N,KAAKy9V,OAAO7+U,QAG3CupD,EAAM,OAAQnoE,KACf,CA1JD2rI,EAAQwpS,oBACR,SAA8Brra,EAAG8J,GAC/B,OAAO4ga,EAAmB5ga,EAAG9J,EAC9B,EAED6hI,EAAQm0R,MACR,SAAgBh2Z,EAAG67I,GACjB,OAAO,IAAIksR,EAAO/na,EAAG67I,GAAOm6Q,KAC7B,EAEDn0R,EAAQo0R,MACR,SAAgBj2Z,EAAG67I,GACjB,OAAO,IAAIksR,EAAO/na,EAAG67I,GAAOo6Q,KAC7B,EAEDp0R,EAAQ4vR,MACR,SAAgBzxZ,EAAG67I,GACjB,OAAO,IAAIksR,EAAO/na,EAAG67I,GAAO41Q,KAC7B,EAED5vR,EAAQs6F,QAAUA,EAKlBt6F,EAAQypS,aACR,SAAuBtra,EAAG8J,GACxB,OAAOqyN,EAAQn8N,EAAG8J,GAAG,EACtB,EAED+3H,EAAQ0pS,SACR,SAAmBvra,EAAG8J,EAAG+xI,GACvB,OAAOsgF,EAAQryN,EAAG9J,EAAG67I,EACtB,EAEDha,EAAQ/xE,KACR,SAAe0U,EAAMq3E,GACnB,OAAOr3E,EAAK1U,MAAK,SAAU9vD,EAAG8J,GAC5B,OAAO+3H,EAAQs6F,QAAQn8N,EAAG8J,EAAG+xI,EAC9B,GACF,EAEDha,EAAQ2pS,MACR,SAAgBhnW,EAAMq3E,GACpB,OAAOr3E,EAAK1U,MAAK,SAAU9vD,EAAG8J,GAC5B,OAAO+3H,EAAQ0pS,SAASvra,EAAG8J,EAAG+xI,EAC/B,GACF,EAEDha,EAAQqY,GAAKA,EAKbrY,EAAQsY,GAAKA,EAKbtY,EAAQ0mB,GAAKA,GAKb1mB,EAAQqpS,IAAMA,GAKdrpS,EAAQ4mB,IAAMA,GAKd5mB,EAAQ2mB,IAAMA,GAKd3mB,EAAQ02B,IAAMA,GA0Cd12B,EAAQspS,WAAaA,GAmCrB,IAAIC,GAAM,CAAC,EAuFX,SAASK,GAAOpia,EAAOrT,GAQrB,GAPKA,GAA8B,kBAAZA,IACrBA,EAAU,CACR6lJ,QAAS7lJ,EACTq0a,mBAAmB,IAInBhha,aAAiBoia,GACnB,OAAIpia,EAAMwyI,UAAY7lJ,EAAQ6lJ,OAC1BxyI,EAAMgha,sBAAwBr0a,EAAQq0a,kBACjChha,EAEA,IAAIoia,GAAMpia,EAAMogK,IAAKzzK,GAIhC,GAAIqT,aAAiB8ha,GACnB,OAAO,IAAIM,GAAMpia,EAAMxU,MAAOmB,GAGhC,KAAME,gBAAgBu1a,IACpB,OAAO,IAAIA,GAAMpia,EAAOrT,GAgB1B,GAbAE,KAAKF,QAAUA,EACfE,KAAK2lJ,QAAU7lJ,EAAQ6lJ,MACvB3lJ,KAAKm0a,oBAAsBr0a,EAAQq0a,kBAGnCn0a,KAAKuzK,IAAMpgK,EACXnT,KAAKyK,IAAM0I,EAAMwuD,MAAM,cAAc/7D,KAAI,SAAUuN,GACjD,OAAOnT,KAAKw1a,WAAWria,EAAMouD,OAC9B,GAAEvhE,MAAM6B,QAAO,SAAUgS,GAExB,OAAOA,EAAEjV,MACV,KAEIoB,KAAKyK,IAAI7L,OACZ,MAAM,IAAIG,UAAU,yBAA2BoU,GAGjDnT,KAAK+f,QACN,CA+FD,SAAS01Z,GAAK50a,GACZ,OAAQA,GAA2B,MAArBA,EAAG0P,eAAgC,MAAP1P,CAC3C,CAiMD,SAAS60a,GAAeC,EACtBt2Z,EAAMu2Z,EAAIC,EAAIC,EAAIC,EAAKt+M,EACvBj4N,EAAIw2a,EAAIC,EAAIC,EAAIC,EAAK1hD,GAuBrB,QArBEp1W,EADEo2Z,GAAIG,GACC,GACEH,GAAII,GACN,KAAOD,EAAK,OACVH,GAAIK,GACN,KAAOF,EAAK,IAAMC,EAAK,KAEvB,KAAOx2Z,GAeD,KAXb7f,EADEi2a,GAAIO,GACD,GACIP,GAAIQ,GACR,MAAQD,EAAK,GAAK,OACdP,GAAIS,GACR,IAAMF,EAAK,MAAQC,EAAK,GAAK,KACzBE,EACJ,KAAOH,EAAK,IAAMC,EAAK,IAAMC,EAAK,IAAMC,EAExC,KAAO32a,IAGW+hE,MAC1B,CAoBD,SAAS60W,GAAS3ra,EAAKmU,EAAS9e,GAC9B,IAAK,IAAIlC,EAAI,EAAGA,EAAI6M,EAAI7L,OAAQhB,IAC9B,IAAK6M,EAAI7M,GAAG6f,KAAKmB,GACf,OAAO,EAIX,GAAIA,EAAQw1Z,WAAWx1a,SAAWkB,EAAQq0a,kBAAmB,CAM3D,IAAKv2a,EAAI,EAAGA,EAAI6M,EAAI7L,OAAQhB,IAE1B,GADAuqE,EAAM19D,EAAI7M,GAAG6/V,QACThzV,EAAI7M,GAAG6/V,SAAWy3E,IAIlBzqa,EAAI7M,GAAG6/V,OAAO22E,WAAWx1a,OAAS,EAAG,CACvC,IAAI+3U,EAAUlsU,EAAI7M,GAAG6/V,OACrB,GAAI9mB,EAAQmpF,QAAUlhZ,EAAQkhZ,OAC1BnpF,EAAQopF,QAAUnhZ,EAAQmhZ,OAC1BppF,EAAQ4kF,QAAU38Y,EAAQ28Y,MAC5B,OAAO,CAEV,CAIH,OAAO,CACR,CAED,OAAO,CACR,CAGD,SAAS79D,GAAW9+U,EAASzL,EAAOrT,GAClC,IACEqT,EAAQ,IAAIoia,GAAMpia,EAAOrT,EAG1B,CAFC,MAAO27Q,GACP,OAAO,CACR,CACD,OAAOtoQ,EAAMsK,KAAKmB,EACnB,CA4HD,SAASy3Z,GAASz3Z,EAASzL,EAAOmja,EAAMx2a,GAItC,IAAIy2a,EAAMC,EAAOC,EAAMhvR,EAAMivR,EAC7B,OAJA93Z,EAAU,IAAIizZ,EAAOjzZ,EAAS9e,GAC9BqT,EAAQ,IAAIoia,GAAMpia,EAAOrT,GAGjBw2a,GACN,IAAK,IACHC,EAAOvyR,EACPwyR,EAAQlkR,GACRmkR,EAAOxyR,EACPwD,EAAO,IACPivR,EAAQ,KACR,MACF,IAAK,IACHH,EAAOtyR,EACPuyR,EAAQjkR,GACRkkR,EAAOzyR,EACPyD,EAAO,IACPivR,EAAQ,KACR,MACF,QACE,MAAM,IAAI33a,UAAU,yCAIxB,GAAI2+V,GAAU9+U,EAASzL,EAAOrT,GAC5B,OAAO,EAMT,IAAK,IAAIlC,EAAI,EAAGA,EAAIuV,EAAM1I,IAAI7L,SAAUhB,EAAG,CACzC,IAAI+4a,EAAcxja,EAAM1I,IAAI7M,GAExBoV,EAAO,KACPD,EAAM,KAiBV,GAfA4ja,EAAYt0a,SAAQ,SAAUu0a,GACxBA,EAAWn5E,SAAWy3E,KACxB0B,EAAa,IAAI3B,GAAW,YAE9Bjia,EAAOA,GAAQ4ja,EACf7ja,EAAMA,GAAO6ja,EACTL,EAAKK,EAAWn5E,OAAQzqV,EAAKyqV,OAAQ39V,GACvCkT,EAAO4ja,EACEH,EAAKG,EAAWn5E,OAAQ1qV,EAAI0qV,OAAQ39V,KAC7CiT,EAAM6ja,EAET,IAIG5ja,EAAKioN,WAAaxzE,GAAQz0I,EAAKioN,WAAay7M,EAC9C,OAAO,EAKT,KAAM3ja,EAAIkoN,UAAYloN,EAAIkoN,WAAaxzE,IACnC+uR,EAAM53Z,EAAS7L,EAAI0qV,QACrB,OAAO,EACF,GAAI1qV,EAAIkoN,WAAay7M,GAASD,EAAK73Z,EAAS7L,EAAI0qV,QACrD,OAAO,CAEV,CACD,OAAO,CACR,CA5rBDw3E,GAAW/qa,UAAU+W,MAAQ,SAAUwmI,GACrC,IAAIpuI,EAAIrZ,KAAKF,QAAQ6lJ,MAAQygE,EAAGytN,GAAmBztN,EAAG0tN,GAClDnja,EAAI82I,EAAK/kJ,MAAM2W,GAEnB,IAAK1I,EACH,MAAM,IAAI5R,UAAU,uBAAyB0oJ,GAG/CznJ,KAAKi7N,SAAWtqN,EAAE,GACI,MAAlB3Q,KAAKi7N,WACPj7N,KAAKi7N,SAAW,IAIbtqN,EAAE,GAGL3Q,KAAKy9V,OAAS,IAAIo0E,EAAOlha,EAAE,GAAI3Q,KAAKF,QAAQ6lJ,OAF5C3lJ,KAAKy9V,OAASy3E,EAIjB,EAEDD,GAAW/qa,UAAUI,SAAW,WAC9B,OAAOtK,KAAKrB,KACb,EAEDs2a,GAAW/qa,UAAUuT,KAAO,SAAUmB,GAGpC,OAFAupD,EAAM,kBAAmBvpD,EAAS5e,KAAKF,QAAQ6lJ,OAE3C3lJ,KAAKy9V,SAAWy3E,KAIG,kBAAZt2Z,IACTA,EAAU,IAAIizZ,EAAOjzZ,EAAS5e,KAAKF,UAG9BuiK,GAAIzjJ,EAAS5e,KAAKi7N,SAAUj7N,KAAKy9V,OAAQz9V,KAAKF,SACtD,EAEDm1a,GAAW/qa,UAAUyjC,WAAa,SAAU85G,EAAM3nJ,GAChD,KAAM2nJ,aAAgBwtR,IACpB,MAAM,IAAIl2a,UAAU,4BAUtB,IAAI83a,EAEJ,GATK/2a,GAA8B,kBAAZA,IACrBA,EAAU,CACR6lJ,QAAS7lJ,EACTq0a,mBAAmB,IAMD,KAAlBn0a,KAAKi7N,SAEP,OADA47M,EAAW,IAAItB,GAAM9tR,EAAK9oJ,MAAOmB,GAC1B49V,GAAU19V,KAAKrB,MAAOk4a,EAAU/2a,GAClC,GAAsB,KAAlB2nJ,EAAKwzE,SAEd,OADA47M,EAAW,IAAItB,GAAMv1a,KAAKrB,MAAOmB,GAC1B49V,GAAUj2M,EAAKg2M,OAAQo5E,EAAU/2a,GAG1C,IAAIg3a,GACiB,OAAlB92a,KAAKi7N,UAAuC,MAAlBj7N,KAAKi7N,YACb,OAAlBxzE,EAAKwzE,UAAuC,MAAlBxzE,EAAKwzE,UAC9B87M,GACiB,OAAlB/2a,KAAKi7N,UAAuC,MAAlBj7N,KAAKi7N,YACb,OAAlBxzE,EAAKwzE,UAAuC,MAAlBxzE,EAAKwzE,UAC9B+7M,EAAah3a,KAAKy9V,OAAO7+U,UAAY6oI,EAAKg2M,OAAO7+U,QACjDq4Z,GACiB,OAAlBj3a,KAAKi7N,UAAuC,OAAlBj7N,KAAKi7N,YACb,OAAlBxzE,EAAKwzE,UAAuC,OAAlBxzE,EAAKwzE,UAC9Bi8M,EACF70Q,GAAIriK,KAAKy9V,OAAQ,IAAKh2M,EAAKg2M,OAAQ39V,KACf,OAAlBE,KAAKi7N,UAAuC,MAAlBj7N,KAAKi7N,YACd,OAAlBxzE,EAAKwzE,UAAuC,MAAlBxzE,EAAKwzE,UAC9Bk8M,EACF90Q,GAAIriK,KAAKy9V,OAAQ,IAAKh2M,EAAKg2M,OAAQ39V,KACf,OAAlBE,KAAKi7N,UAAuC,MAAlBj7N,KAAKi7N,YACd,OAAlBxzE,EAAKwzE,UAAuC,MAAlBxzE,EAAKwzE,UAElC,OAAO67M,GAA2BC,GAC/BC,GAAcC,GACfC,GAA8BC,CACjC,EAEDxrS,EAAQ4pS,MAAQA,GA8ChBA,GAAMrra,UAAU6V,OAAS,WAIvB,OAHA/f,KAAKmT,MAAQnT,KAAKyK,IAAI7E,KAAI,SAAU0jJ,GAClC,OAAOA,EAAMznF,KAAK,KAAKN,MACxB,IAAEM,KAAK,MAAMN,OACPvhE,KAAKmT,KACb,EAEDoia,GAAMrra,UAAUI,SAAW,WACzB,OAAOtK,KAAKmT,KACb,EAEDoia,GAAMrra,UAAUsra,WAAa,SAAUria,GACrC,IAAIwyI,EAAQ3lJ,KAAKF,QAAQ6lJ,MACzBxyI,EAAQA,EAAMouD,OAEd,IAAI2hT,EAAKv9N,EAAQygE,EAAG6tN,GAAoB7tN,EAAG4tN,GAC3C7ga,EAAQA,EAAMwvD,QAAQugT,EAAIwyD,IAC1BvtW,EAAM,iBAAkBh1D,GAExBA,EAAQA,EAAMwvD,QAAQyjJ,EAAG2tN,GA9qBC,UA+qB1B5rW,EAAM,kBAAmBh1D,EAAOizM,EAAG2tN,IASnC5ga,GAHAA,GAHAA,EAAQA,EAAMwvD,QAAQyjJ,EAAGktN,GAttBJ,QAytBP3wW,QAAQyjJ,EAAGstN,GA1sBJ,QA6sBP/xW,MAAM,OAAOE,KAAK,KAKhC,IAAIu1W,EAASzxR,EAAQygE,EAAGytN,GAAmBztN,EAAG0tN,GAC1Crpa,EAAM0I,EAAMwuD,MAAM,KAAK/7D,KAAI,SAAU6hJ,GACvC,OA4CJ,SAA0BA,EAAM3nJ,GAU9B,OATAqoE,EAAM,OAAQs/E,EAAM3nJ,GACpB2nJ,EA6DF,SAAwBA,EAAM3nJ,GAC5B,OAAO2nJ,EAAKlmF,OAAOI,MAAM,OAAO/7D,KAAI,SAAU6hJ,GAC5C,OAIJ,SAAuBA,EAAM3nJ,GAC3BqoE,EAAM,QAASs/E,EAAM3nJ,GACrB,IAAIuZ,EAAIvZ,EAAQ6lJ,MAAQygE,EAAGwtN,GAAcxtN,EAAGutN,GAC5C,OAAOlsR,EAAK9kF,QAAQtpD,GAAG,SAAUoyI,EAAGkiH,EAAGh9P,EAAG6K,EAAG67Z,GAE3C,IAAIruN,EA2CJ,OA5CA7gJ,EAAM,QAASs/E,EAAMgE,EAAGkiH,EAAGh9P,EAAG6K,EAAG67Z,GAG7B5B,GAAI9nK,GACN3kD,EAAM,GACGysN,GAAI9ka,GACbq4M,EAAM,KAAO2kD,EAAI,WAAaA,EAAI,GAAK,OAC9B8nK,GAAIj6Z,GAEXwtM,EADQ,MAAN2kD,EACI,KAAOA,EAAI,IAAMh9P,EAAI,OAASg9P,EAAI,MAAQh9P,EAAI,GAAK,KAEnD,KAAOg9P,EAAI,IAAMh9P,EAAI,SAAWg9P,EAAI,GAAK,OAExC0pK,GACTlvW,EAAM,kBAAmBkvW,GAGrBruN,EAFM,MAAN2kD,EACQ,MAANh9P,EACI,KAAOg9P,EAAI,IAAMh9P,EAAI,IAAM6K,EAAI,IAAM67Z,EACrC,KAAO1pK,EAAI,IAAMh9P,EAAI,MAAQ6K,EAAI,GAEjC,KAAOmyP,EAAI,IAAMh9P,EAAI,IAAM6K,EAAI,IAAM67Z,EACrC,KAAO1pK,EAAI,MAAQh9P,EAAI,GAAK,KAG9B,KAAOg9P,EAAI,IAAMh9P,EAAI,IAAM6K,EAAI,IAAM67Z,EACrC,OAAS1pK,EAAI,GAAK,SAG1BxlM,EAAM,SAGF6gJ,EAFM,MAAN2kD,EACQ,MAANh9P,EACI,KAAOg9P,EAAI,IAAMh9P,EAAI,IAAM6K,EAC3B,KAAOmyP,EAAI,IAAMh9P,EAAI,MAAQ6K,EAAI,GAEjC,KAAOmyP,EAAI,IAAMh9P,EAAI,IAAM6K,EAC3B,KAAOmyP,EAAI,MAAQh9P,EAAI,GAAK,KAG9B,KAAOg9P,EAAI,IAAMh9P,EAAI,IAAM6K,EAC3B,OAASmyP,EAAI,GAAK,QAI5BxlM,EAAM,eAAgB6gJ,GACfA,CACR,GACF,CAtDUsuN,CAAa7vR,EAAM3nJ,EAC3B,IAAE+hE,KAAK,IACT,CAjEQ01W,CAAc9vR,EAAM3nJ,GAC3BqoE,EAAM,QAASs/E,GACfA,EAmBF,SAAwBA,EAAM3nJ,GAC5B,OAAO2nJ,EAAKlmF,OAAOI,MAAM,OAAO/7D,KAAI,SAAU6hJ,GAC5C,OAIJ,SAAuBA,EAAM3nJ,GAC3B,IAAIuZ,EAAIvZ,EAAQ6lJ,MAAQygE,EAAGotN,GAAcptN,EAAGmtN,GAC5C,OAAO9rR,EAAK9kF,QAAQtpD,GAAG,SAAUoyI,EAAGkiH,EAAGh9P,EAAG6K,EAAG67Z,GAE3C,IAAIruN,EAoBJ,OArBA7gJ,EAAM,QAASs/E,EAAMgE,EAAGkiH,EAAGh9P,EAAG6K,EAAG67Z,GAG7B5B,GAAI9nK,GACN3kD,EAAM,GACGysN,GAAI9ka,GACbq4M,EAAM,KAAO2kD,EAAI,WAAaA,EAAI,GAAK,OAC9B8nK,GAAIj6Z,GAEbwtM,EAAM,KAAO2kD,EAAI,IAAMh9P,EAAI,OAASg9P,EAAI,MAAQh9P,EAAI,GAAK,KAChD0ma,GACTlvW,EAAM,kBAAmBkvW,GACzBruN,EAAM,KAAO2kD,EAAI,IAAMh9P,EAAI,IAAM6K,EAAI,IAAM67Z,EACrC,KAAO1pK,EAAI,MAAQh9P,EAAI,GAAK,MAGlCq4M,EAAM,KAAO2kD,EAAI,IAAMh9P,EAAI,IAAM6K,EAC3B,KAAOmyP,EAAI,MAAQh9P,EAAI,GAAK,KAGpCw3D,EAAM,eAAgB6gJ,GACfA,CACR,GACF,CA9BUwuN,CAAa/vR,EAAM3nJ,EAC3B,IAAE+hE,KAAK,IACT,CAvBQ41W,CAAchwR,EAAM3nJ,GAC3BqoE,EAAM,SAAUs/E,GAChBA,EAmHF,SAAyBA,EAAM3nJ,GAE7B,OADAqoE,EAAM,iBAAkBs/E,EAAM3nJ,GACvB2nJ,EAAK9lF,MAAM,OAAO/7D,KAAI,SAAU6hJ,GACrC,OAIJ,SAAwBA,EAAM3nJ,GAC5B2nJ,EAAOA,EAAKlmF,OACZ,IAAIloD,EAAIvZ,EAAQ6lJ,MAAQygE,EAAG+sN,GAAe/sN,EAAG8sN,GAC7C,OAAOzrR,EAAK9kF,QAAQtpD,GAAG,SAAU2vM,EAAK0uN,EAAM/pK,EAAGh9P,EAAG6K,EAAG67Z,GACnDlvW,EAAM,SAAUs/E,EAAMuhE,EAAK0uN,EAAM/pK,EAAGh9P,EAAG6K,EAAG67Z,GAC1C,IAAIM,EAAKlC,GAAI9nK,GACTiqK,EAAKD,GAAMlC,GAAI9ka,GACfuiN,EAAK0kN,GAAMnC,GAAIj6Z,GAwDnB,MArDa,MAATk8Z,GAFOxkN,IAGTwkN,EAAO,IAGLC,EAGA3uN,EAFW,MAAT0uN,GAAyB,MAATA,EAEZ,SAGA,IAECA,GAdAxkN,GAiBL0kN,IACFjna,EAAI,GAEN6K,EAAI,EAES,MAATk8Z,GAIFA,EAAO,KACHE,GACFjqK,GAAKA,EAAI,EACTh9P,EAAI,EACJ6K,EAAI,IAEJ7K,GAAKA,EAAI,EACT6K,EAAI,IAEY,OAATk8Z,IAGTA,EAAO,IACHE,EACFjqK,GAAKA,EAAI,EAETh9P,GAAKA,EAAI,GAIbq4M,EAAM0uN,EAAO/pK,EAAI,IAAMh9P,EAAI,IAAM6K,GACxBo8Z,EACT5uN,EAAM,KAAO2kD,EAAI,WAAaA,EAAI,GAAK,OAC9Bz6C,IACTlK,EAAM,KAAO2kD,EAAI,IAAMh9P,EAAI,OAASg9P,EAAI,MAAQh9P,EAAI,GAAK,MAG3Dw3D,EAAM,gBAAiB6gJ,GAEhBA,CACR,GACF,CArEU6uN,CAAcpwR,EAAM3nJ,EAC5B,IAAE+hE,KAAK,IACT,CAxHQi2W,CAAerwR,EAAM3nJ,GAC5BqoE,EAAM,SAAUs/E,GAChBA,EA6LF,SAAuBA,EAAM3nJ,GAG3B,OAFAqoE,EAAM,eAAgBs/E,EAAM3nJ,GAErB2nJ,EAAKlmF,OAAOoB,QAAQyjJ,EAAG8tN,GAAO,GACtC,CAjMQ6D,CAAatwR,EAAM3nJ,GAC1BqoE,EAAM,QAASs/E,GACRA,CACR,CAvDUuwR,CAAgBvwR,EAAMznJ,KAAKF,QACnC,GAAEE,MAAM6hE,KAAK,KAAKF,MAAM,OAWzB,OAVI3hE,KAAKF,QAAQ6lJ,QAEfl7I,EAAMA,EAAI5I,QAAO,SAAU4lJ,GACzB,QAASA,EAAK/kJ,MAAM00a,EACrB,KAEH3sa,EAAMA,EAAI7E,KAAI,SAAU6hJ,GACtB,OAAO,IAAIwtR,GAAWxtR,EAAMznJ,KAAKF,QAClC,GAAEE,KAGJ,EAEDu1a,GAAMrra,UAAUyjC,WAAa,SAAUx6B,EAAOrT,GAC5C,KAAMqT,aAAiBoia,IACrB,MAAM,IAAIx2a,UAAU,uBAGtB,OAAOiB,KAAKyK,IAAIs4M,MAAK,SAAUk1N,GAC7B,OAAOA,EAAgB1yP,OAAM,SAAU2yP,GACrC,OAAO/ka,EAAM1I,IAAIs4M,MAAK,SAAUo1N,GAC9B,OAAOA,EAAiB5yP,OAAM,SAAU6yP,GACtC,OAAOF,EAAevqY,WAAWyqY,EAAiBt4a,EACnD,GACF,GACF,GACF,GACF,EAGD6rI,EAAQ0sS,cACR,SAAwBlla,EAAOrT,GAC7B,OAAO,IAAIy1a,GAAMpia,EAAOrT,GAAS2K,IAAI7E,KAAI,SAAU6hJ,GACjD,OAAOA,EAAK7hJ,KAAI,SAAUiO,GACxB,OAAOA,EAAElV,KACV,IAAEkjE,KAAK,KAAKN,OAAOI,MAAM,IAC3B,GACF,EAkPD4zW,GAAMrra,UAAUuT,KAAO,SAAUmB,GAC/B,IAAKA,EACH,OAAO,EAGc,kBAAZA,IACTA,EAAU,IAAIizZ,EAAOjzZ,EAAS5e,KAAKF,UAGrC,IAAK,IAAIlC,EAAI,EAAGA,EAAIoC,KAAKyK,IAAI7L,OAAQhB,IACnC,GAAIw4a,GAAQp2a,KAAKyK,IAAI7M,GAAIghB,EAAS5e,KAAKF,SACrC,OAAO,EAGX,OAAO,CACR,EAsCD6rI,EAAQ+xN,UAAYA,GAUpB/xN,EAAQ2sS,cACR,SAAwB/rK,EAAUp5P,EAAOrT,GACvC,IAAIuG,EAAM,KACNkya,EAAQ,KACZ,IACE,IAAIC,EAAW,IAAIjD,GAAMpia,EAAOrT,EAGjC,CAFC,MAAO27Q,GACP,OAAO,IACR,CAWD,OAVAlP,EAASlqQ,SAAQ,SAAUyS,GACrB0ja,EAAS/6Z,KAAK3I,KAEXzO,IAA6B,IAAtBkya,EAAMtyM,QAAQnxN,KAGxByja,EAAQ,IAAI1G,EADZxra,EAAMyO,EACkBhV,IAG7B,IACMuG,CACR,EAEDslI,EAAQ8sS,cACR,SAAwBlsK,EAAUp5P,EAAOrT,GACvC,IAAIsG,EAAM,KACNsya,EAAQ,KACZ,IACE,IAAIF,EAAW,IAAIjD,GAAMpia,EAAOrT,EAGjC,CAFC,MAAO27Q,GACP,OAAO,IACR,CAWD,OAVAlP,EAASlqQ,SAAQ,SAAUyS,GACrB0ja,EAAS/6Z,KAAK3I,KAEX1O,GAA4B,IAArBsya,EAAMzyM,QAAQnxN,KAGxB4ja,EAAQ,IAAI7G,EADZzra,EAAM0O,EACkBhV,IAG7B,IACMsG,CACR,EAEDulI,EAAQgtS,WACR,SAAqBxla,EAAOwyI,GAC1BxyI,EAAQ,IAAIoia,GAAMpia,EAAOwyI,GAEzB,IAAIizR,EAAS,IAAI/G,EAAO,SACxB,GAAI1+Z,EAAMsK,KAAKm7Z,GACb,OAAOA,EAIT,GADAA,EAAS,IAAI/G,EAAO,WAChB1+Z,EAAMsK,KAAKm7Z,GACb,OAAOA,EAGTA,EAAS,KACT,IAAK,IAAIh7a,EAAI,EAAGA,EAAIuV,EAAM1I,IAAI7L,SAAUhB,EAAG,CACvBuV,EAAM1I,IAAI7M,GAEhByE,SAAQ,SAAUu0a,GAE5B,IAAIiC,EAAU,IAAIhH,EAAO+E,EAAWn5E,OAAO7+U,SAC3C,OAAQg4Z,EAAW37M,UACjB,IAAK,IAC+B,IAA9B49M,EAAQzE,WAAWx1a,OACrBi6a,EAAQtd,QAERsd,EAAQzE,WAAW11a,KAAK,GAE1Bm6a,EAAQtlQ,IAAMslQ,EAAQ94Z,SAExB,IAAK,GACL,IAAK,KACE64Z,IAAU50R,EAAG40R,EAAQC,KACxBD,EAASC,GAEX,MACF,IAAK,IACL,IAAK,KAEH,MAEF,QACE,MAAM,IAAIlna,MAAM,yBAA2Bila,EAAW37M,UAE3D,GACF,CAED,GAAI29M,GAAUzla,EAAMsK,KAAKm7Z,GACvB,OAAOA,EAGT,OAAO,IACR,EAEDjtS,EAAQmtS,WACR,SAAqB3la,EAAOrT,GAC1B,IAGE,OAAO,IAAIy1a,GAAMpia,EAAOrT,GAASqT,OAAS,GAG3C,CAFC,MAAOsoQ,GACP,OAAO,IACR,CACF,EAGD9vI,EAAQotS,IACR,SAAcn6Z,EAASzL,EAAOrT,GAC5B,OAAOu2a,GAAQz3Z,EAASzL,EAAO,IAAKrT,EACrC,EAGD6rI,EAAQqtS,IACR,SAAcp6Z,EAASzL,EAAOrT,GAC5B,OAAOu2a,GAAQz3Z,EAASzL,EAAO,IAAKrT,EACrC,EAED6rI,EAAQ0qS,QAAUA,GAsElB1qS,EAAQyoS,WACR,SAAqBx1Z,EAAS9e,GAC5B,IAAIi2J,EAAS90I,EAAMrC,EAAS9e,GAC5B,OAAQi2J,GAAUA,EAAOq+Q,WAAWx1a,OAAUm3J,EAAOq+Q,WAAa,IACnE,EAEDzoS,EAAQh+F,WACR,SAAqBsrY,EAAIrmN,EAAI9yN,GAG3B,OAFAm5a,EAAK,IAAI1D,GAAM0D,EAAIn5a,GACnB8yN,EAAK,IAAI2iN,GAAM3iN,EAAI9yN,GACZm5a,EAAGtrY,WAAWilL,EACtB,EAEDjnF,EAAQsX,OACR,SAAiBrkI,GACf,GAAIA,aAAmBizZ,EACrB,OAAOjzZ,EAGT,GAAuB,kBAAZA,EACT,OAAO,KAGT,IAAIlc,EAAQkc,EAAQlc,MAAM0jN,EAAGgtN,IAE7B,GAAa,MAAT1wa,EACF,OAAO,KAGT,OAAOue,EAAMve,EAAM,GACjB,KAAOA,EAAM,IAAM,KACnB,KAAOA,EAAM,IAAM,KACtB,iMCx8CKw2a,EAAAA,SAAAA,qBACL,WAAY7hV,GAAS,uBACpB,cAAM6hV,EAASC,qBAAqB9hV,IACpCn2F,OAAOC,eAAP,KAA4B,OAAQ,CACnCxC,MAAO,WACP0C,cAAc,EACdC,UAAU,IAGPqQ,MAAM2yM,mBACT3yM,MAAM2yM,kBAAN,KAA8B40N,GATX,CAWpB,oDAED,SAA4B7hV,GAC3B,IACC,OAAOr2E,KAAKE,UAAUm2E,EAGtB,CAFC,SACD,OAAO5pD,OAAO4pD,EACd,CACD,OApBI6hV,sBAAiBvna,QAuBjByna,EAAmB,CACxB,CAACrpY,SAAU,OAAQ3uC,YAAY,GAC/B,CAAC2uC,SAAU,UAAW3uC,YAAY,GAClC,CAAC2uC,SAAU,QAAS3uC,YAAY,GAChC,CAAC2uC,SAAU,OAAQ3uC,YAAY,IAG1Bi4a,EAAWr7a,OAAO,kBASlBs7a,EAAkB,SAAlBA,EAAmB,GAOnB,IANLj6Z,EAMK,EANLA,KACAghU,EAKK,EALLA,KACAk5F,EAIK,EAJLA,IACAC,EAGK,EAHLA,gBACAC,EAEK,EAFLA,SACAr2Z,EACK,EADLA,MAEM5jB,EAAK+5a,IAAQ17a,MAAMC,QAAQuhB,GAAQ,GAAK,CAAC,GAI/C,GAFAghU,EAAK3hV,KAAK2gB,GAEN+D,GAASq2Z,EACZ,OAAOj6a,EAGR,GAA2B,oBAAhB6f,EAAKkC,SAA4C,IAAnBlC,EAAKg6Z,GAC7C,OAxBa,SAAAh6Z,GACdA,EAAKg6Z,IAAY,EACjB,IAAM14U,EAAOthF,EAAKkC,SAElB,cADOlC,EAAKg6Z,GACL14U,CACP,CAmBQp/E,CAAOlC,GAGf,IAAK,IAAL,MAA2Bne,OAAOi6H,QAAQ97G,GAA1C,eAAiD,CAA5C,gBAAOpe,EAAP,KAAYtC,EAAZ,KACkB,oBAAXiuI,GAAyBA,EAAOk2D,SAASnkM,GACnDa,EAAGyB,GAAO,kBAIU,oBAAVtC,IAINA,GAA0B,kBAAVA,EAKhB0hV,EAAKrjM,SAAS39H,EAAKpe,IAaxBzB,EAAGyB,GAAO,cAZTmiB,IAEA5jB,EAAGyB,GAAOq4a,EAAgB,CACzBj6Z,KAAMA,EAAKpe,GACXo/U,KAAMA,EAAK1wU,QACX6pa,gBAAAA,EACAC,SAAAA,EACAr2Z,MAAAA,KAZD5jB,EAAGyB,GAAOtC,EAkBX,CA1CI,UA4CgCy6a,GA5ChC,IA4CL,IAAK,EAAL,qBAAuD,eAA3CrpY,EAA2C,EAA3CA,SAAU3uC,EAAiC,EAAjCA,WACS,kBAAnBie,EAAK0wB,IACf7uC,OAAOC,eAAe3B,EAAIuwC,EAAU,CACnCpxC,MAAO0gB,EAAK0wB,GACZ3uC,aAAYo4a,GAAyBp4a,EACrCC,cAAc,EACdC,UAAU,GAGZ,CArDI,+BAuDL,OAAO9B,CACP,EA8CD2jK,EAAOx3B,QAAU,CAChByU,eA7CsB,SAACzhJ,GAAwB,IAAjBmB,EAAiB,uDAAP,CAAC,EACzC,EAA8CA,EAAvC25a,SAAAA,OAAP,MAAkB72a,OAAO82a,kBAAzB,EAEA,MAAqB,kBAAV/6a,GAAgC,OAAVA,EACzB26a,EAAgB,CACtBj6Z,KAAM1gB,EACN0hV,KAAM,GACNm5F,iBAAiB,EACjBC,SAAAA,EACAr2Z,MAAO,IAKY,oBAAVzkB,EAEH,cAAP,OAAsBA,EAAM2b,MAAQ,YAApC,KAGM3b,CACP,EA0BAg7a,iBAxBwB,SAACh7a,GAAwB,IAAjBmB,EAAiB,uDAAP,CAAC,EAC3C,EAA8CA,EAAvC25a,SAAAA,OAAP,MAAkB72a,OAAO82a,kBAAzB,EAEA,GAAI/6a,aAAiBgT,MACpB,OAAOhT,EAGR,GAAqB,kBAAVA,GAAgC,OAAVA,IAAmBd,MAAMC,QAAQa,GAAQ,CACzE,IAAMi7a,EAAW,IAAIjoa,MAQrB,OAPA2na,EAAgB,CACfj6Z,KAAM1gB,EACN0hV,KAAM,GACNk5F,IAAKK,EACLH,SAAAA,EACAr2Z,MAAO,IAEDw2Z,CACP,CAED,OAAO,IAAIV,EAASv6a,EACpB,0BCpJD,IAAIiuI,EAASwsC,EAAAA,OAAAA,OAGb,SAASg0H,EAAMryO,EAAW8+W,GACxB75a,KAAK6rU,OAASj/L,EAAOivD,MAAM9gI,GAC3B/6D,KAAK85a,WAAaD,EAClB75a,KAAKkmV,WAAanrR,EAClB/6D,KAAKs2N,KAAO,CACb,CAED82E,EAAKljS,UAAU4a,OAAS,SAAUtG,EAAMu/I,GAClB,kBAATv/I,IACTu/I,EAAMA,GAAO,OACbv/I,EAAOouH,EAAOvtH,KAAKb,EAAMu/I,IAQ3B,IALA,IAAIpQ,EAAQ3tJ,KAAK6rU,OACb9wQ,EAAY/6D,KAAKkmV,WACjBtnV,EAAS4f,EAAK5f,OACdgkJ,EAAQ5iJ,KAAKs2N,KAER32N,EAAS,EAAGA,EAASf,GAAS,CAIrC,IAHA,IAAIm7a,EAAWn3R,EAAQ7nF,EACnBw/R,EAAYp0V,KAAKC,IAAIxH,EAASe,EAAQo7D,EAAYg/W,GAE7Cn8a,EAAI,EAAGA,EAAI28V,EAAW38V,IAC7B+vJ,EAAMosR,EAAWn8a,GAAK4gB,EAAK7e,EAAS/B,GAItC+B,GAAU46V,GADV33M,GAAS23M,GAGIx/R,IAAe,GAC1B/6D,KAAK0iH,QAAQirC,EAEhB,CAGD,OADA3tJ,KAAKs2N,MAAQ13N,EACNoB,IACR,EAEDotS,EAAKljS,UAAUyhK,OAAS,SAAU5N,GAChC,IAAI43I,EAAM31S,KAAKs2N,KAAOt2N,KAAKkmV,WAE3BlmV,KAAK6rU,OAAOl2B,GAAO,IAInB31S,KAAK6rU,OAAOz3Q,KAAK,EAAGuhP,EAAM,GAEtBA,GAAO31S,KAAK85a,aACd95a,KAAK0iH,QAAQ1iH,KAAK6rU,QAClB7rU,KAAK6rU,OAAOz3Q,KAAK,IAGnB,IAAI8kC,EAAmB,EAAZl5F,KAAKs2N,KAGhB,GAAIp9H,GAAQ,WACVl5F,KAAK6rU,OAAOjpI,cAAc1pG,EAAMl5F,KAAKkmV,WAAa,OAG7C,CACL,IAAI8zF,GAAkB,WAAP9gV,KAAuB,EAClC+gV,GAAY/gV,EAAO8gV,GAAW,WAElCh6a,KAAK6rU,OAAOjpI,cAAcq3O,EAAUj6a,KAAKkmV,WAAa,GACtDlmV,KAAK6rU,OAAOjpI,cAAco3O,EAASh6a,KAAKkmV,WAAa,EACtD,CAEDlmV,KAAK0iH,QAAQ1iH,KAAK6rU,QAClB,IAAI18P,EAAOnvE,KAAKu2Q,QAEhB,OAAOx4G,EAAM5uF,EAAK7kE,SAASyzJ,GAAO5uF,CACnC,EAEDi+N,EAAKljS,UAAUw4G,QAAU,WACvB,MAAM,IAAI/wG,MAAM,0CACjB,EAEDwxJ,EAAOx3B,QAAUyhK,yBChFjB,IAAIzhK,EAAUw3B,EAAOx3B,QAAU,SAAcyqI,GAC3CA,EAAYA,EAAU7lQ,cAEtB,IAAI2pa,EAAYvuS,EAAQyqI,GACxB,IAAK8jK,EAAW,MAAM,IAAIvoa,MAAMykQ,EAAY,+CAE5C,OAAO,IAAI8jK,CACZ,EAEDvuS,EAAQwhK,IAAM/zH,EAAQ,OACtBztC,EAAQ66M,KAAOptK,EAAQ,OACvBztC,EAAQ86M,OAASrtK,EAAQ,OACzBztC,EAAQuyK,OAAS9kI,EAAQ,OACzBztC,EAAQwyK,OAAS/kI,EAAQ,KACzBztC,EAAQyyK,OAAShlI,EAAQ,8BCNzB,IAAIlV,EAAWkV,EAAQ,OACnBg0H,EAAOh0H,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAETpO,EAAI,CACN,WAAY,YAAY,YAAgB,WAGtCo9K,EAAI,IAAIvqV,MAAM,IAElB,SAASs8a,IACPn6a,KAAKovD,OACLpvD,KAAK0kB,GAAK0jU,EAEVh7C,EAAK7uS,KAAKyB,KAAM,GAAI,GACrB,CAkBD,SAASo6a,EAAQ/7Q,GACf,OAAQA,GAAO,GAAOA,IAAQ,CAC/B,CAED,SAASg8Q,EAAIhna,EAAGO,EAAGC,EAAG0E,GACpB,OAAU,IAANlF,EAAiBO,EAAIC,GAAQD,EAAK2E,EAC5B,IAANlF,EAAiBO,EAAIC,EAAMD,EAAI2E,EAAM1E,EAAI0E,EACtC3E,EAAIC,EAAI0E,CAChB,CAxBD2rJ,EAASi2Q,EAAK/sI,GAEd+sI,EAAIjwa,UAAUklD,KAAO,WAOnB,OANApvD,KAAK6gT,GAAK,WACV7gT,KAAKi/I,GAAK,WACVj/I,KAAKw0T,GAAK,WACVx0T,KAAK1B,GAAK,UACV0B,KAAK7B,GAAK,WAEH6B,IACR,EAgBDm6a,EAAIjwa,UAAUw4G,QAAU,SAAUirJ,GAShC,IARA,IAfctvG,EAeV+pL,EAAIpoV,KAAK0kB,GAET5a,EAAc,EAAV9J,KAAK6gT,GACTjtS,EAAc,EAAV5T,KAAKi/I,GACTprI,EAAc,EAAV7T,KAAKw0T,GACTj8S,EAAc,EAAVvY,KAAK1B,GACT0I,EAAc,EAAVhH,KAAK7B,GAEJP,EAAI,EAAGA,EAAI,KAAMA,EAAGwqV,EAAExqV,GAAK+vQ,EAAE/pE,YAAgB,EAAJhmM,GAClD,KAAOA,EAAI,KAAMA,EAAGwqV,EAAExqV,GAAKwqV,EAAExqV,EAAI,GAAKwqV,EAAExqV,EAAI,GAAKwqV,EAAExqV,EAAI,IAAMwqV,EAAExqV,EAAI,IAEnE,IAAK,IAAI8wB,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIrb,KAAOqb,EAAI,IACX7d,EAAoD,IA5B5CwtJ,EA4BGv0J,IA3BF,EAAMu0J,IAAQ,IA2BPg8Q,EAAGhna,EAAGO,EAAGC,EAAG0E,GAAKvR,EAAIohV,EAAE15T,GAAKs8I,EAAE33J,GAElDrM,EAAIuR,EACJA,EAAI1E,EACJA,EAAIuma,EAAOxma,GACXA,EAAI9J,EACJA,EAAI+G,CACL,CAED7Q,KAAK6gT,GAAM/2S,EAAI9J,KAAK6gT,GAAM,EAC1B7gT,KAAKi/I,GAAMrrI,EAAI5T,KAAKi/I,GAAM,EAC1Bj/I,KAAKw0T,GAAM3gT,EAAI7T,KAAKw0T,GAAM,EAC1Bx0T,KAAK1B,GAAMia,EAAIvY,KAAK1B,GAAM,EAC1B0B,KAAK7B,GAAM6I,EAAIhH,KAAK7B,GAAM,CAC3B,EAEDg8a,EAAIjwa,UAAUqsQ,MAAQ,WACpB,IAAIsB,EAAIjrI,EAAOigI,YAAY,IAQ3B,OANAgL,EAAE30E,aAAuB,EAAVljM,KAAK6gT,GAAQ,GAC5BhpC,EAAE30E,aAAuB,EAAVljM,KAAKi/I,GAAQ,GAC5B44H,EAAE30E,aAAuB,EAAVljM,KAAKw0T,GAAQ,GAC5B38C,EAAE30E,aAAuB,EAAVljM,KAAK1B,GAAQ,IAC5Bu5Q,EAAE30E,aAAuB,EAAVljM,KAAK7B,GAAQ,IAErB05Q,CACR,EAED10G,EAAOx3B,QAAUwuS,yBCpFjB,IAAIj2Q,EAAWkV,EAAQ,OACnBg0H,EAAOh0H,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAETpO,EAAI,CACN,WAAY,YAAY,YAAgB,WAGtCo9K,EAAI,IAAIvqV,MAAM,IAElB,SAASy8a,IACPt6a,KAAKovD,OACLpvD,KAAK0kB,GAAK0jU,EAEVh7C,EAAK7uS,KAAKyB,KAAM,GAAI,GACrB,CAkBD,SAASu6a,EAAOl8Q,GACd,OAAQA,GAAO,EAAMA,IAAQ,EAC9B,CAED,SAAS+7Q,EAAQ/7Q,GACf,OAAQA,GAAO,GAAOA,IAAQ,CAC/B,CAED,SAASg8Q,EAAIhna,EAAGO,EAAGC,EAAG0E,GACpB,OAAU,IAANlF,EAAiBO,EAAIC,GAAQD,EAAK2E,EAC5B,IAANlF,EAAiBO,EAAIC,EAAMD,EAAI2E,EAAM1E,EAAI0E,EACtC3E,EAAIC,EAAI0E,CAChB,CA5BD2rJ,EAASo2Q,EAAMltI,GAEfktI,EAAKpwa,UAAUklD,KAAO,WAOpB,OANApvD,KAAK6gT,GAAK,WACV7gT,KAAKi/I,GAAK,WACVj/I,KAAKw0T,GAAK,WACVx0T,KAAK1B,GAAK,UACV0B,KAAK7B,GAAK,WAEH6B,IACR,EAoBDs6a,EAAKpwa,UAAUw4G,QAAU,SAAUirJ,GASjC,IARA,IAnBctvG,EAmBV+pL,EAAIpoV,KAAK0kB,GAET5a,EAAc,EAAV9J,KAAK6gT,GACTjtS,EAAc,EAAV5T,KAAKi/I,GACTprI,EAAc,EAAV7T,KAAKw0T,GACTj8S,EAAc,EAAVvY,KAAK1B,GACT0I,EAAc,EAAVhH,KAAK7B,GAEJP,EAAI,EAAGA,EAAI,KAAMA,EAAGwqV,EAAExqV,GAAK+vQ,EAAE/pE,YAAgB,EAAJhmM,GAClD,KAAOA,EAAI,KAAMA,EAAGwqV,EAAExqV,IA5BRygK,EA4BmB+pL,EAAExqV,EAAI,GAAKwqV,EAAExqV,EAAI,GAAKwqV,EAAExqV,EAAI,IAAMwqV,EAAExqV,EAAI,MA3B1D,EAAMygK,IAAQ,GA6B7B,IAAK,IAAI3vI,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIrb,KAAOqb,EAAI,IACX7d,EAAK0pa,EAAMzwa,GAAKuwa,EAAGhna,EAAGO,EAAGC,EAAG0E,GAAKvR,EAAIohV,EAAE15T,GAAKs8I,EAAE33J,GAAM,EAExDrM,EAAIuR,EACJA,EAAI1E,EACJA,EAAIuma,EAAOxma,GACXA,EAAI9J,EACJA,EAAI+G,CACL,CAED7Q,KAAK6gT,GAAM/2S,EAAI9J,KAAK6gT,GAAM,EAC1B7gT,KAAKi/I,GAAMrrI,EAAI5T,KAAKi/I,GAAM,EAC1Bj/I,KAAKw0T,GAAM3gT,EAAI7T,KAAKw0T,GAAM,EAC1Bx0T,KAAK1B,GAAMia,EAAIvY,KAAK1B,GAAM,EAC1B0B,KAAK7B,GAAM6I,EAAIhH,KAAK7B,GAAM,CAC3B,EAEDm8a,EAAKpwa,UAAUqsQ,MAAQ,WACrB,IAAIsB,EAAIjrI,EAAOigI,YAAY,IAQ3B,OANAgL,EAAE30E,aAAuB,EAAVljM,KAAK6gT,GAAQ,GAC5BhpC,EAAE30E,aAAuB,EAAVljM,KAAKi/I,GAAQ,GAC5B44H,EAAE30E,aAAuB,EAAVljM,KAAKw0T,GAAQ,GAC5B38C,EAAE30E,aAAuB,EAAVljM,KAAK1B,GAAQ,IAC5Bu5Q,EAAE30E,aAAuB,EAAVljM,KAAK7B,GAAQ,IAErB05Q,CACR,EAED10G,EAAOx3B,QAAU2uS,yBC1FjB,IAAIp2Q,EAAWkV,EAAQ,OACnBohQ,EAASphQ,EAAQ,OACjBg0H,EAAOh0H,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAETgvK,EAAI,IAAIvqV,MAAM,IAElB,SAAS48a,IACPz6a,KAAKovD,OAELpvD,KAAK0kB,GAAK0jU,EAEVh7C,EAAK7uS,KAAKyB,KAAM,GAAI,GACrB,CAEDkkK,EAASu2Q,EAAQD,GAEjBC,EAAOvwa,UAAUklD,KAAO,WAUtB,OATApvD,KAAK6gT,GAAK,WACV7gT,KAAKi/I,GAAK,UACVj/I,KAAKw0T,GAAK,UACVx0T,KAAK1B,GAAK,WACV0B,KAAK7B,GAAK,WACV6B,KAAK06a,GAAK,WACV16a,KAAK26a,GAAK,WACV36a,KAAK46a,GAAK,WAEH56a,IACR,EAEDy6a,EAAOvwa,UAAUqsQ,MAAQ,WACvB,IAAIsB,EAAIjrI,EAAOigI,YAAY,IAU3B,OARAgL,EAAE30E,aAAaljM,KAAK6gT,GAAI,GACxBhpC,EAAE30E,aAAaljM,KAAKi/I,GAAI,GACxB44H,EAAE30E,aAAaljM,KAAKw0T,GAAI,GACxB38C,EAAE30E,aAAaljM,KAAK1B,GAAI,IACxBu5Q,EAAE30E,aAAaljM,KAAK7B,GAAI,IACxB05Q,EAAE30E,aAAaljM,KAAK06a,GAAI,IACxB7iK,EAAE30E,aAAaljM,KAAK26a,GAAI,IAEjB9iK,CACR,EAED10G,EAAOx3B,QAAU8uS,yBC5CjB,IAAIv2Q,EAAWkV,EAAQ,OACnBg0H,EAAOh0H,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAETpO,EAAI,CACN,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGlCo9K,EAAI,IAAIvqV,MAAM,IAElB,SAAS28a,IACPx6a,KAAKovD,OAELpvD,KAAK0kB,GAAK0jU,EAEVh7C,EAAK7uS,KAAKyB,KAAM,GAAI,GACrB,CAiBD,SAASo7L,EAAIp4L,EAAGC,EAAGI,GACjB,OAAOA,EAAKL,GAAKC,EAAII,EACtB,CAED,SAASw3a,EAAK73a,EAAGC,EAAGI,GAClB,OAAQL,EAAIC,EAAMI,GAAKL,EAAIC,EAC5B,CAED,SAAS63a,EAAQ93a,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,GACtE,CAED,SAAS+3a,EAAQ/3a,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,EACtE,CAED,SAASg4a,EAAQh4a,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,CAC5D,CAjCDkhK,EAASs2Q,EAAQptI,GAEjBotI,EAAOtwa,UAAUklD,KAAO,WAUtB,OATApvD,KAAK6gT,GAAK,WACV7gT,KAAKi/I,GAAK,WACVj/I,KAAKw0T,GAAK,WACVx0T,KAAK1B,GAAK,WACV0B,KAAK7B,GAAK,WACV6B,KAAK06a,GAAK,WACV16a,KAAK26a,GAAK,UACV36a,KAAK46a,GAAK,WAEH56a,IACR,EA0BDw6a,EAAOtwa,UAAUw4G,QAAU,SAAUirJ,GAYnC,IAXA,IALe3qQ,EAKXolV,EAAIpoV,KAAK0kB,GAET5a,EAAc,EAAV9J,KAAK6gT,GACTjtS,EAAc,EAAV5T,KAAKi/I,GACTprI,EAAc,EAAV7T,KAAKw0T,GACTj8S,EAAc,EAAVvY,KAAK1B,GACT0I,EAAc,EAAVhH,KAAK7B,GACTqa,EAAc,EAAVxY,KAAK06a,GACTjia,EAAc,EAAVzY,KAAK26a,GACTjia,EAAc,EAAV1Y,KAAK46a,GAEJh9a,EAAI,EAAGA,EAAI,KAAMA,EAAGwqV,EAAExqV,GAAK+vQ,EAAE/pE,YAAgB,EAAJhmM,GAClD,KAAOA,EAAI,KAAMA,EAAGwqV,EAAExqV,GAAqE,KAjB5EoF,EAiBoBolV,EAAExqV,EAAI,MAhB3B,GAAKoF,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,IAgBbolV,EAAExqV,EAAI,GAAKo9a,EAAO5yF,EAAExqV,EAAI,KAAOwqV,EAAExqV,EAAI,IAEpF,IAAK,IAAI8wB,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIymJ,EAAMz8J,EAAIqia,EAAO/za,GAAKo0L,EAAGp0L,EAAGwR,EAAGC,GAAKuyJ,EAAEt8I,GAAK05T,EAAE15T,GAAM,EACnD0mJ,EAAM0lQ,EAAOhxa,GAAK+wa,EAAI/wa,EAAG8J,EAAGC,GAAM,EAEtC6E,EAAID,EACJA,EAAID,EACJA,EAAIxR,EACJA,EAAKuR,EAAI48J,EAAM,EACf58J,EAAI1E,EACJA,EAAID,EACJA,EAAI9J,EACJA,EAAKqrK,EAAKC,EAAM,CACjB,CAEDp1K,KAAK6gT,GAAM/2S,EAAI9J,KAAK6gT,GAAM,EAC1B7gT,KAAKi/I,GAAMrrI,EAAI5T,KAAKi/I,GAAM,EAC1Bj/I,KAAKw0T,GAAM3gT,EAAI7T,KAAKw0T,GAAM,EAC1Bx0T,KAAK1B,GAAMia,EAAIvY,KAAK1B,GAAM,EAC1B0B,KAAK7B,GAAM6I,EAAIhH,KAAK7B,GAAM,EAC1B6B,KAAK06a,GAAMlia,EAAIxY,KAAK06a,GAAM,EAC1B16a,KAAK26a,GAAMlia,EAAIzY,KAAK26a,GAAM,EAC1B36a,KAAK46a,GAAMlia,EAAI1Y,KAAK46a,GAAM,CAC3B,EAEDJ,EAAOtwa,UAAUqsQ,MAAQ,WACvB,IAAIsB,EAAIjrI,EAAOigI,YAAY,IAW3B,OATAgL,EAAE30E,aAAaljM,KAAK6gT,GAAI,GACxBhpC,EAAE30E,aAAaljM,KAAKi/I,GAAI,GACxB44H,EAAE30E,aAAaljM,KAAKw0T,GAAI,GACxB38C,EAAE30E,aAAaljM,KAAK1B,GAAI,IACxBu5Q,EAAE30E,aAAaljM,KAAK7B,GAAI,IACxB05Q,EAAE30E,aAAaljM,KAAK06a,GAAI,IACxB7iK,EAAE30E,aAAaljM,KAAK26a,GAAI,IACxB9iK,EAAE30E,aAAaljM,KAAK46a,GAAI,IAEjB/iK,CACR,EAED10G,EAAOx3B,QAAU6uS,uBCtIjB,IAAIt2Q,EAAWkV,EAAQ,OACnB0vK,EAAS1vK,EAAQ,OACjBg0H,EAAOh0H,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAETgvK,EAAI,IAAIvqV,MAAM,KAElB,SAASo9a,IACPj7a,KAAKovD,OACLpvD,KAAK0kB,GAAK0jU,EAEVh7C,EAAK7uS,KAAKyB,KAAM,IAAK,IACtB,CAEDkkK,EAAS+2Q,EAAQnyF,GAEjBmyF,EAAO/wa,UAAUklD,KAAO,WAmBtB,OAlBApvD,KAAKk7a,IAAM,WACXl7a,KAAKm7a,IAAM,WACXn7a,KAAKo7a,IAAM,WACXp7a,KAAKq7a,IAAM,UACXr7a,KAAKs7a,IAAM,WACXt7a,KAAKu7a,IAAM,WACXv7a,KAAKw7a,IAAM,WACXx7a,KAAKy7a,IAAM,WAEXz7a,KAAK07a,IAAM,WACX17a,KAAK27a,IAAM,UACX37a,KAAK47a,IAAM,UACX57a,KAAK67a,IAAM,WACX77a,KAAK87a,IAAM,WACX97a,KAAK+7a,IAAM,WACX/7a,KAAK68E,IAAM,WACX78E,KAAKg8a,IAAM,WAEJh8a,IACR,EAEDi7a,EAAO/wa,UAAUqsQ,MAAQ,WACvB,IAAIsB,EAAIjrI,EAAOigI,YAAY,IAE3B,SAAS1pE,EAAczqL,EAAG9I,EAAGjQ,GAC3Bk4Q,EAAE30E,aAAaxqL,EAAG/Y,GAClBk4Q,EAAE30E,aAAatzL,EAAGjQ,EAAS,EAC5B,CASD,OAPAwjM,EAAanjM,KAAKk7a,IAAKl7a,KAAK07a,IAAK,GACjCv4O,EAAanjM,KAAKm7a,IAAKn7a,KAAK27a,IAAK,GACjCx4O,EAAanjM,KAAKo7a,IAAKp7a,KAAK47a,IAAK,IACjCz4O,EAAanjM,KAAKq7a,IAAKr7a,KAAK67a,IAAK,IACjC14O,EAAanjM,KAAKs7a,IAAKt7a,KAAK87a,IAAK,IACjC34O,EAAanjM,KAAKu7a,IAAKv7a,KAAK+7a,IAAK,IAE1BlkK,CACR,EAED10G,EAAOx3B,QAAUsvS,yBCxDjB,IAAI/2Q,EAAWkV,EAAQ,OACnBg0H,EAAOh0H,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAETpO,EAAI,CACN,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGlCo9K,EAAI,IAAIvqV,MAAM,KAElB,SAASo+a,IACPj8a,KAAKovD,OACLpvD,KAAK0kB,GAAK0jU,EAEVh7C,EAAK7uS,KAAKyB,KAAM,IAAK,IACtB,CA0BD,SAASynV,EAAIzkV,EAAGC,EAAGI,GACjB,OAAOA,EAAKL,GAAKC,EAAII,EACtB,CAED,SAASw3a,EAAK73a,EAAGC,EAAGI,GAClB,OAAQL,EAAIC,EAAMI,GAAKL,EAAIC,EAC5B,CAED,SAAS63a,EAAQ93a,EAAG8mV,GAClB,OAAQ9mV,IAAM,GAAK8mV,GAAM,IAAMA,IAAO,EAAI9mV,GAAK,KAAO8mV,IAAO,EAAI9mV,GAAK,GACvE,CAED,SAAS+3a,EAAQ/3a,EAAG8mV,GAClB,OAAQ9mV,IAAM,GAAK8mV,GAAM,KAAO9mV,IAAM,GAAK8mV,GAAM,KAAOA,IAAO,EAAI9mV,GAAK,GACzE,CAED,SAASk5a,EAAQl5a,EAAG8mV,GAClB,OAAQ9mV,IAAM,EAAI8mV,GAAM,KAAO9mV,IAAM,EAAI8mV,GAAM,IAAO9mV,IAAM,CAC7D,CAED,SAASm5a,EAASn5a,EAAG8mV,GACnB,OAAQ9mV,IAAM,EAAI8mV,GAAM,KAAO9mV,IAAM,EAAI8mV,GAAM,KAAO9mV,IAAM,EAAI8mV,GAAM,GACvE,CAED,SAASsyF,EAAQp5a,EAAG8mV,GAClB,OAAQ9mV,IAAM,GAAK8mV,GAAM,KAAOA,IAAO,GAAK9mV,GAAK,GAAMA,IAAM,CAC9D,CAED,SAASq5a,EAASr5a,EAAG8mV,GACnB,OAAQ9mV,IAAM,GAAK8mV,GAAM,KAAOA,IAAO,GAAK9mV,GAAK,IAAMA,IAAM,EAAI8mV,GAAM,GACxE,CAED,SAASwyF,EAAUxya,EAAG8J,GACpB,OAAQ9J,IAAM,EAAM8J,IAAM,EAAK,EAAI,CACpC,CA1DDswJ,EAAS+3Q,EAAQ7uI,GAEjB6uI,EAAO/xa,UAAUklD,KAAO,WAmBtB,OAlBApvD,KAAKk7a,IAAM,WACXl7a,KAAKm7a,IAAM,WACXn7a,KAAKo7a,IAAM,WACXp7a,KAAKq7a,IAAM,WACXr7a,KAAKs7a,IAAM,WACXt7a,KAAKu7a,IAAM,WACXv7a,KAAKw7a,IAAM,UACXx7a,KAAKy7a,IAAM,WAEXz7a,KAAK07a,IAAM,WACX17a,KAAK27a,IAAM,WACX37a,KAAK47a,IAAM,WACX57a,KAAK67a,IAAM,WACX77a,KAAK87a,IAAM,WACX97a,KAAK+7a,IAAM,UACX/7a,KAAK68E,IAAM,WACX78E,KAAKg8a,IAAM,UAEJh8a,IACR,EAsCDi8a,EAAO/xa,UAAUw4G,QAAU,SAAUirJ,GAqBnC,IApBA,IAAIy6E,EAAIpoV,KAAK0kB,GAET6mU,EAAgB,EAAXvrV,KAAKk7a,IACVzvF,EAAgB,EAAXzrV,KAAKm7a,IACV//O,EAAgB,EAAXp7L,KAAKo7a,IACV5sI,EAAgB,EAAXxuS,KAAKq7a,IACVzvF,EAAgB,EAAX5rV,KAAKs7a,IACVl+N,EAAgB,EAAXp9M,KAAKu7a,IACVzvF,EAAgB,EAAX9rV,KAAKw7a,IACVzvF,EAAgB,EAAX/rV,KAAKy7a,IAEVjwF,EAAgB,EAAXxrV,KAAK07a,IACVnoK,EAAgB,EAAXvzQ,KAAK27a,IACVjwF,EAAgB,EAAX1rV,KAAK47a,IACVjwF,EAAgB,EAAX3rV,KAAK67a,IACVv7a,EAAgB,EAAXN,KAAK87a,IACVjwF,EAAgB,EAAX7rV,KAAK+7a,IACV/jY,EAAgB,EAAXh4C,KAAK68E,IACVmvQ,EAAgB,EAAXhsV,KAAKg8a,IAELp+a,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC3BwqV,EAAExqV,GAAK+vQ,EAAE/pE,YAAgB,EAAJhmM,GACrBwqV,EAAExqV,EAAI,GAAK+vQ,EAAE/pE,YAAgB,EAAJhmM,EAAQ,GAEnC,KAAOA,EAAI,IAAKA,GAAK,EAAG,CACtB,IAAIisV,EAAKzB,EAAExqV,EAAI,IACXksV,EAAK1B,EAAExqV,EAAI,GAAS,GACpBo9a,EAASkB,EAAOryF,EAAIC,GACpByyF,EAAUJ,EAAQryF,EAAID,GAItB2yF,EAASJ,EAFbvyF,EAAKzB,EAAExqV,EAAI,GACXksV,EAAK1B,EAAExqV,EAAI,EAAQ,IAEf6+a,EAAUJ,EAAQvyF,EAAID,GAGtB6yF,EAAOt0F,EAAExqV,EAAI,IACb++a,EAAOv0F,EAAExqV,EAAI,GAAQ,GAErBg/a,EAAQx0F,EAAExqV,EAAI,IACdi/a,EAAQz0F,EAAExqV,EAAI,GAAS,GAEvBk/a,EAAOP,EAAUI,EAAQ,EACzBI,EAAO/B,EAAS0B,EAAOJ,EAASQ,EAAKP,GAAY,EAIrDQ,GAFAA,EAAOA,EAAMP,EAASF,EADtBQ,EAAOA,EAAML,EAAW,EACYA,GAAY,GAEnCG,EAAQN,EADrBQ,EAAOA,EAAMD,EAAS,EACaA,GAAU,EAE7Cz0F,EAAExqV,GAAKm/a,EACP30F,EAAExqV,EAAI,GAAKk/a,CACZ,CAED,IAAK,IAAIpuZ,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,CAC/BquZ,EAAM30F,EAAE15T,GACRouZ,EAAM10F,EAAE15T,EAAI,GAEZ,IAAIsuZ,EAAOnC,EAAItvF,EAAIE,EAAIrwJ,GACnB6hP,EAAOpC,EAAIrvF,EAAIj4E,EAAIm4E,GAEnBwxF,EAAUpC,EAAOvvF,EAAIC,GACrB2xF,EAAUrC,EAAOtvF,EAAID,GACrB6xF,EAAUrC,EAAOnvF,EAAItrV,GACrB+8a,EAAUtC,EAAOz6a,EAAIsrV,GAGrB0xF,EAAMtyQ,EAAEt8I,GACR6uZ,EAAMvyQ,EAAEt8I,EAAI,GAEZ8uZ,EAAM/1F,EAAGmE,EAAIxuI,EAAI0uI,GACjB2xF,EAAMh2F,EAAGnnV,EAAIurV,EAAI7zS,GAEjB0lY,EAAO1xF,EAAKqxF,EAAW,EACvBM,EAAO5xF,EAAKqxF,EAAUd,EAASoB,EAAK1xF,GAAO,EAM/C2xF,GAFAA,GAFAA,EAAOA,EAAMH,EAAMlB,EADnBoB,EAAOA,EAAMD,EAAO,EACaA,GAAQ,GAE5BH,EAAMhB,EADnBoB,EAAOA,EAAMH,EAAO,EACaA,GAAQ,GAE5BR,EAAMT,EADnBoB,EAAOA,EAAMZ,EAAO,EACaA,GAAQ,EAGzC,IAAIc,GAAOT,EAAUF,EAAQ,EACzBY,GAAOX,EAAUF,EAAOV,EAASsB,GAAKT,GAAY,EAEtDpxF,EAAKD,EACLE,EAAKh0S,EACL8zS,EAAK1uI,EACLplK,EAAK6zS,EACLzuI,EAAKwuI,EACLC,EAAKvrV,EAELsrV,EAAMp9C,EAAKmvI,EAAMrB,EADjBh8a,EAAMqrV,EAAK+xF,EAAO,EACY/xF,GAAO,EACrCn9C,EAAKpzG,EACLuwJ,EAAKD,EACLtwJ,EAAKqwJ,EACLC,EAAKn4E,EACLk4E,EAAKF,EACLh4E,EAAKi4E,EAELD,EAAMoyF,EAAME,GAAMvB,EADlB9wF,EAAMkyF,EAAME,GAAO,EACYF,GAAQ,CACxC,CAED19a,KAAK07a,IAAO17a,KAAK07a,IAAMlwF,EAAM,EAC7BxrV,KAAK27a,IAAO37a,KAAK27a,IAAMpoK,EAAM,EAC7BvzQ,KAAK47a,IAAO57a,KAAK47a,IAAMlwF,EAAM,EAC7B1rV,KAAK67a,IAAO77a,KAAK67a,IAAMlwF,EAAM,EAC7B3rV,KAAK87a,IAAO97a,KAAK87a,IAAMx7a,EAAM,EAC7BN,KAAK+7a,IAAO/7a,KAAK+7a,IAAMlwF,EAAM,EAC7B7rV,KAAK68E,IAAO78E,KAAK68E,IAAM7kC,EAAM,EAC7Bh4C,KAAKg8a,IAAOh8a,KAAKg8a,IAAMhwF,EAAM,EAE7BhsV,KAAKk7a,IAAOl7a,KAAKk7a,IAAM3vF,EAAK+wF,EAASt8a,KAAK07a,IAAKlwF,GAAO,EACtDxrV,KAAKm7a,IAAOn7a,KAAKm7a,IAAM1vF,EAAK6wF,EAASt8a,KAAK27a,IAAKpoK,GAAO,EACtDvzQ,KAAKo7a,IAAOp7a,KAAKo7a,IAAMhgP,EAAKkhP,EAASt8a,KAAK47a,IAAKlwF,GAAO,EACtD1rV,KAAKq7a,IAAOr7a,KAAKq7a,IAAM7sI,EAAK8tI,EAASt8a,KAAK67a,IAAKlwF,GAAO,EACtD3rV,KAAKs7a,IAAOt7a,KAAKs7a,IAAM1vF,EAAK0wF,EAASt8a,KAAK87a,IAAKx7a,GAAO,EACtDN,KAAKu7a,IAAOv7a,KAAKu7a,IAAMn+N,EAAKk/N,EAASt8a,KAAK+7a,IAAKlwF,GAAO,EACtD7rV,KAAKw7a,IAAOx7a,KAAKw7a,IAAM1vF,EAAKwwF,EAASt8a,KAAK68E,IAAK7kC,GAAO,EACtDh4C,KAAKy7a,IAAOz7a,KAAKy7a,IAAM1vF,EAAKuwF,EAASt8a,KAAKg8a,IAAKhwF,GAAO,CACvD,EAEDiwF,EAAO/xa,UAAUqsQ,MAAQ,WACvB,IAAIsB,EAAIjrI,EAAOigI,YAAY,IAE3B,SAAS1pE,EAAczqL,EAAG9I,EAAGjQ,GAC3Bk4Q,EAAE30E,aAAaxqL,EAAG/Y,GAClBk4Q,EAAE30E,aAAatzL,EAAGjQ,EAAS,EAC5B,CAWD,OATAwjM,EAAanjM,KAAKk7a,IAAKl7a,KAAK07a,IAAK,GACjCv4O,EAAanjM,KAAKm7a,IAAKn7a,KAAK27a,IAAK,GACjCx4O,EAAanjM,KAAKo7a,IAAKp7a,KAAK47a,IAAK,IACjCz4O,EAAanjM,KAAKq7a,IAAKr7a,KAAK67a,IAAK,IACjC14O,EAAanjM,KAAKs7a,IAAKt7a,KAAK87a,IAAK,IACjC34O,EAAanjM,KAAKu7a,IAAKv7a,KAAK+7a,IAAK,IACjC54O,EAAanjM,KAAKw7a,IAAKx7a,KAAK68E,IAAK,IACjCsmH,EAAanjM,KAAKy7a,IAAKz7a,KAAKg8a,IAAK,IAE1BnkK,CACR,EAED10G,EAAOx3B,QAAUswS,yBCjQjB,IAAIrvS,EAASwsC,EAAAA,OAAAA,OAET0kQ,EAAU,CACb,IAAO,CACNr7a,MAAO,CAAC,IAAK,IAAK,IAAK,KACvBs7a,SAAU,KAEX,IAAO,CACNt7a,MAAO,CAAC,IAAK,KACbs7a,SAAU,KAEX,MAAS,CACRt7a,MAAO,CAAC,QAAS,KACjBs7a,SAAU,KAEX,QAAW,CACVt7a,MAAO,CAAC,KACRs7a,SAAU,MAGZD,EAAO,WAAiBA,EAAO,QAE/B,IAAIE,EAAc,CACjB,IAAO,CACNv7a,MAAO,CAAC,IAAK,IAAK,IAAK,IAAK,MAE7B,IAAO,CACNA,MAAO,CAAC,IAAK,IAAK,IAAK,OAAQ,IAAK,MAErC,MAAS,CACRA,MAAO,CAAC,QAAS,IAAK,MAEvB,QAAW,CACVA,MAAO,CAAC,IAAK,OAGfu7a,EAAW,WAAiBA,EAAW,QAEvC,IAYI3zQ,EAAS,CACZ,SAAY,CACX7tJ,KAAM,IACNyha,SAAU,sBACVzia,EAAGoxH,EAAOvtH,KAAK,2EAGXsjD,QAAQ,KAAM,IAAK,OACvB74D,EAAG8iI,EAAOvtH,KAAK,2EAGXsjD,QAAQ,KAAM,IAAK,OACvB/uD,EAAGg5H,EAAOvtH,KAAK,yEAGXsjD,QAAQ,KAAM,IAAK,OACvBtvD,EAAGu5H,EAAOvtH,KAAK,gDAGXsjD,QAAQ,KAAM,IAAK,OACvBjyD,EAAGk8H,EAAOvtH,KAAK,2EAGXsjD,QAAQ,KAAM,IAAK,OACvB4rM,EAAG3hI,EAAOvtH,KAAK,iJAKXsjD,QAAQ,KAAM,IAAK,QAExB,SAAY,CACXnmD,KAAM,IACNyha,SAAU,eACVzia,EAAGoxH,EAAOvtH,KAAK,8GAIXsjD,QAAQ,KAAM,IAAK,OACvB74D,EAAG8iI,EAAOvtH,KAAK,8GAIXsjD,QAAQ,KAAM,IAAK,OACvB/uD,EAAGg5H,EAAOvtH,KAAK,4GAIXsjD,QAAQ,KAAM,IAAK,OACvBtvD,EAAGu5H,EAAOvtH,KAAK,gDAGXsjD,QAAQ,KAAM,IAAK,OACvBjyD,EAAGk8H,EAAOvtH,KAAK,8GAIXsjD,QAAQ,KAAM,IAAK,OACvB4rM,EAAG3hI,EAAOvtH,KAAK,uNAOXsjD,QAAQ,KAAM,IAAK,QAExB,SAAY,CACXnmD,KAAM,IACNyha,SAAU,eACVzia,EAAGoxH,EAAOvtH,KAAK,mJAKHsjD,QAAQ,KAAM,IAAK,OAC/B74D,EAAG8iI,EAAOvtH,KAAK,mJAKXsjD,QAAQ,KAAM,IAAK,OACvB/uD,EAAGg5H,EAAOvtH,KAAK,iJAKXsjD,QAAQ,KAAM,IAAK,OACvBtvD,EAAGu5H,EAAOvtH,KAAK,gDAECsjD,QAAQ,KAAM,IAAK,OACnCjyD,EAAGk8H,EAAOvtH,KAAK,mJAKXsjD,QAAQ,KAAM,IAAK,OACvB4rM,EAAG3hI,EAAOvtH,KAAK,uSASXsjD,QAAQ,KAAM,IAAK,SAIzBwgG,EAAOx3B,QAAU,CAChB7iI,KAAMg1a,EACNI,SAAUF,EACVG,SA7Hc,CACd,KAAO,EACP,MAAQ,EACR,QAAU,EACV,QAAU,EACV,QAAU,GAyHV9zQ,OAAQA,0BCpKTlH,EAAOx3B,QAAUyyS,EAEjB,IAAI1gR,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACfkwD,EAASlwD,EAAQ,OACjBklQ,EAAcllQ,EAAQ,OAEtBmlQ,GADYnlQ,EAAQ,OACbA,EAAQ,QAEft8F,GADOs8F,EAAQ,OACPA,EAAQ,QAChBg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OACrBolQ,EAAWplQ,EAAQ,OAEnBG,EAAU,CAAC,EACfA,EAAO,QAAcH,EAAQ,OAC7BG,EAAO,KAAWH,EAAQ,OAC1BG,EAAO,IAAUH,EAAQ,OAEzB,IAAIqlQ,EAAwBF,EAAKE,sBAC7BjxF,EAAwB+wF,EAAK/wF,sBAEjC,SAAS4wF,EAAYzgQ,GACpBjgB,EAAOl8J,OAAOm8K,EAAM,WACpBjgB,EAAOghR,cAAc/gQ,EAAKghQ,SAAU,oBACpC7hW,EAAM8hW,iBAAiBjhQ,EAAKghQ,SAAS,GAAIH,EAAU,CAAC,EAAG,GACnD,oBACJ1hW,EAAM8hW,iBAAiBjhQ,EAAKkhQ,WAAYzuF,EAAK,CAAC,EAAG,GAC7C,sBACJtzQ,EAAM8hW,iBAAiBjhQ,EAAKghL,OAAQ6/E,EAAU,CAAC,EAAG,GAAI,uBAC/Bn1a,IAAnBs0K,EAAKmhQ,WACRhiW,EAAM8hW,iBAAiBjhQ,EAAKmhQ,UAAW1uF,EAAK,CAAC,EAAG,GAC5C,qBAEL1yL,EAAOl8J,OAAOm8K,EAAKzlB,WAAY,sBAC/BwF,EAAOplH,OAAOqlI,EAAKohQ,OAAQ,kBAC3BrhR,EAAOsjB,KAAKrD,EAAKqhQ,UAAW,qBAC5BthR,EAAOsjB,KAAKrD,EAAKshQ,WAAY,qBAE7BvhR,EAAOqyL,sBAAsBpyK,EAAKuhQ,SAAU,oBAE5Cl/a,KAAKm/a,WAAa,CAAC,EAEnBn/a,KAAK2+a,SAAWhhQ,EAAKghQ,SACrB3+a,KAAK2+V,OAAShhL,EAAKghL,OACnB3+V,KAAK6+a,WAAalhQ,EAAKkhQ,WACvB7+a,KAAK8+a,UAAYnhQ,EAAKmhQ,UACtB9+a,KAAKk4J,WAAaylB,EAAKzlB,WACvBl4J,KAAK++a,OAASphQ,EAAKohQ,OACnB/+a,KAAKg/a,UAAYrhQ,EAAKqhQ,UACtBh/a,KAAKi/a,WAAathQ,EAAKshQ,WACvBj/a,KAAKk/a,SAAWvhQ,EAAKuhQ,QACrB,CAEDd,EAAY7kQ,QAAUA,EAEtB6kQ,EAAYl0a,UAAUizI,SAAW,SAAUp9H,EAAQjgB,GAOlD,YANeuJ,IAAX0W,IACHA,EAAS,QACV29I,EAAOxhJ,OAAO6D,EAAQ,UACtB29I,EAAOl8J,OAAO+3K,EAAQx5J,GAAS,mBAC/B29I,EAAOykM,eAAeriW,EAAS,WAEvBy5K,EAAQx5J,GAAQ2iL,MAAM1iM,KAAMF,EACpC,EAEDs+a,EAAYl0a,UAAUI,SAAW,SAAUyV,EAAQjgB,GAGlD,YAFeuJ,IAAX0W,IACHA,EAAS,OACF/f,KAAKm9I,SAASp9H,EAAQjgB,GAASwK,UACvC,EAED8za,EAAYl0a,UAAUkyT,YAAc,SAAUrlD,QAChC1tQ,IAAT0tQ,IACHA,EAAO,UACRr5G,EAAOxhJ,OAAO66P,EAAM,aACpB,IAAIp5F,EAAO,CACVt2K,KAAM,cACN8nE,KAAMnvE,KAAKmvE,KAAK4nM,GAChBX,UAAWW,GAEZ,OAAQ,IAAIunK,EAAY3gQ,EACxB,EAEDygQ,EAAYl0a,UAAUilE,KAAO,SAAU4nM,GAGtC,GAFAr5G,EAAOxhJ,OAAO66P,EAAM,aACpBA,EAAOA,EAAKxmQ,mBACgBlH,IAAxBg1a,EAAKF,SAASpnK,GACjB,MAAO,IAAIy2E,EAAsBz2E,GAElC,GAAI/2Q,KAAKm/a,WAAWpoK,GACnB,OAAQ/2Q,KAAKm/a,WAAWpoK,GAEzB,IAAI5nM,EAAOm6J,EAAOqB,WAAWosC,GACzBjyP,OAAO9kB,KAAKm9I,SAAS,SAASwuB,SAElC,OADA3rK,KAAKm/a,WAAWpoK,GAAQ5nM,EAChBA,CACR,EAEDivW,EAAYl0a,UAAUk1a,UAAY,SAAUC,GAG3C,YAFah2a,IAATg2a,IACHA,EAAO,IAAI76a,QACD66a,EAAKz4M,WAAa5mO,KAAKg/a,UAAUp4M,WAC1Cy4M,EAAKz4M,UAAY5mO,KAAKi/a,WAAWr4M,UACnC,EAEDw3M,EAAYl0a,UAAUo1a,WAAa,SAAUC,GAG5C,OAFAziW,EAAM8hW,iBAAiBW,EAAYnB,EAAa,CAAC,EAAG,GAAI,YAEnDp+a,KAAK2+V,OAAOrwU,OAAOixZ,EAAWZ,SAAS,QAExC3+a,KAAK2+V,OAAOugF,UAAYl/a,KAAK2+V,OAAOugF,SAAStgb,OAAS,IACd,IAAxCoB,KAAK2+V,OAAOugF,SAASp8a,QAAQ,QAIzB9C,KAAKw/a,cAAcD,EAAWV,YACtC,EAEDT,EAAYl0a,UAAU2sD,aAAe,SAAU4oX,GAS9C,OARA/hR,EAAOxhJ,OAAOuja,EAAU,YACdz/a,KAAK0/a,gBAAgB79a,QAAO,SAAU89a,GAC/C,MAAwB,SAApBA,EAAS5/Z,OACJ4/Z,EAASC,MAAQH,EACF,YAApBE,EAAS5/Z,QACJ4/Z,EAASrla,OAASmla,CAE3B,IAAE,EAEH,EAEDrB,EAAYl0a,UAAUw1a,cAAgB,WACrC,IAAItpE,EAAO,GACPypE,EAAO7/a,KAAKk4J,WAAW2nR,KACvBA,GAAQA,EAAK/mT,QAAU+mT,EAAK/mT,OAAOs9O,MACtCypE,EAAK/mT,OAAOs9O,KAAK/zW,SAAQ,SAAU83H,GAClCA,EAAIp6G,OAAS,OACbq2V,EAAK13W,KAAKy7H,EACV,IAEF,IAAI2lT,EAAU9/a,KAAKk4J,WAAW4nR,QAO9B,OANIA,GAAWA,EAAQ1pE,MACtB0pE,EAAQ1pE,KAAK/zW,SAAQ,SAAU83H,GAC9BA,EAAIp6G,OAAS,UACbq2V,EAAK13W,KAAKy7H,EACV,IAEMi8O,CACR,EAEDgoE,EAAYl0a,UAAUs1a,cAAgB,SAAUV,GAG/C,GAFAhiW,EAAM8hW,iBAAiBE,EAAW1uF,EAAK,CAAC,EAAG,GAAI,kBAExB/mV,IAAnBrJ,KAAK8+a,UACR,OAAQ9+a,KAAK8+a,UACT1iH,YAAY,UAAUrjN,QAAQ+lU,GAGnC,IAAIxkP,EAAMp5L,OAAOQ,KAAK1B,KAAKk4J,YAAY,GACnCjwD,EAAQsxE,EAAQ+gB,GAAKztB,OAAO7sK,KAAM8+a,GAGtC,OAFI72U,IACHjoG,KAAK8+a,UAAYA,GACV72U,CACR,EAEDm2U,EAAYl0a,UAAU61a,SAAW,SAAU9+a,GAC1C67E,EAAM8hW,iBAAiB39a,EAAKk2S,EAAY,CAAC,EAAG,GAAI,OAGhD,IAFA,IAAI6oI,EAAO9+a,OAAOQ,KAAK63K,GACnB0mQ,GAAS,EACJrib,EAAI,EAAGA,EAAIoib,EAAKphb,SAAUhB,EAAG,CACrC,GAAgB,QAAZoib,EAAKpib,IAEI,IADF27K,EAAQymQ,EAAKpib,IAAI00B,KAAKtyB,KAAMiB,KAErCg/a,GAAS,EAEX,CACD,IAAKA,EACJ,MAAO,IAAItua,MAAM,uEAGlB,EAEDysa,EAAY8B,iBAAmB,SAAUC,EAAmBl/a,EAAKnB,GAChE,IAAI6+a,EAEHA,EADG9gb,MAAMC,QAAQqib,GACNA,EAEA,CAACA,GAEbziR,EAAOghR,cAAcC,GACrBA,EAASt8a,SAAQ,SAAUu8V,GAC1B9hR,EAAM8hW,iBAAiBhgF,EAAS4/E,EAAU,CAAC,EAAG,GAAI,UAClD,IAED1hW,EAAM8hW,iBAAiB39a,EAAKk2S,EAAY,CAAC,EAAG,GAAI,eAEhDz5I,EAAOykM,eAAeriW,EAAS,gBACfuJ,IAAZvJ,IACHA,EAAU,CAAC,GACZ49J,EAAOykM,eAAeriW,EAAQk/a,UAAW,qBACzCthR,EAAOykM,eAAeriW,EAAQm/a,WAAY,sBAC1C,IAAID,EAAYl/a,EAAQk/a,UACpBC,EAAan/a,EAAQm/a,WAGzB,QAFkB51a,IAAd21a,IACHA,EAAY,IAAIx6a,WACE6E,IAAf41a,EAA0B,CAC7BvhR,EAAO0iR,eAAetgb,EAAQugb,SAAU,oBACxC,IAAIA,EAAWvgb,EAAQugb,cACNh3a,IAAbg3a,IACHA,EAAW,UACZpB,EAAa,IAAIz6a,MACNG,QAAQs6a,EAAWr4M,UAAqB,IAATy5M,EAC1C,CACD3iR,EAAO4iR,eAAexgb,EAAQi/a,OAAQ,kBACtC,IAAIA,EAASj/a,EAAQi/a,YACN11a,IAAX01a,IACHA,EAASnyS,EAAOvtH,KAAK,mBAAoB,QAE1C,IAAI6/Z,EAAWp/a,EAAQo/a,SAiBvB,QAhBiB71a,IAAb61a,IACHA,EAAW,KAE2B,IAAnCA,EAASp8a,QAAQ,cACpBo8a,EAASxgb,KAAK,cAGiB,IAA5Bwgb,EAASp8a,QAAQ,OACpBo8a,EAASxgb,KAAK,OACkB,IAA7Bwgb,EAASp8a,QAAQ,QACpBo8a,EAASxgb,KAAK,OAMXwgb,EAAStgb,QAAU,EAAG,CACzB,IAAI2hb,EAAe5B,EAAS98a,QAAO,SAAU+8V,GAC5C,MAAyB,SAAjBA,EAAQv3V,IAChB,IACGm5a,EAAe7B,EAAS98a,QAAO,SAAU+8V,GAC5C,MAAyB,SAAjBA,EAAQv3V,IAChB,IACGk5a,EAAa3hb,OAAS,IACe,IAApCsgb,EAASp8a,QAAQ,eACpBo8a,EAASxgb,KAAK,cAEZ8hb,EAAa5hb,OAAS,IACe,IAApCsgb,EAASp8a,QAAQ,eACpBo8a,EAASxgb,KAAK,eAEZ8hb,EAAa5hb,OAAS,GAAK2hb,EAAa3hb,OAAS,MACV,IAAtCsgb,EAASp8a,QAAQ,iBACpBo8a,EAASxgb,KAAK,gBACE,QAAbuC,EAAIoG,OACgC,IAApC63a,EAASp8a,QAAQ,eACpBo8a,EAASxgb,KAAK,cAEhB,CAED,IAAImma,EAAO,IAAIuZ,EAAY,CAC1BO,SAAUA,EACVhgF,OAAQggF,EAAS,GACjBE,WAAY59a,EAAIw/a,WAChB3B,UAAW79a,EAAIw/a,WACfvoR,WAAY,CAAC,EACb6mR,OAAQA,EACRC,UAAWA,EACXC,WAAYA,EACZC,SAAUA,IAIX,OAFAra,EAAKkb,SAAS9+a,GAEN4ja,CACR,EAEDuZ,EAAYvza,OACR,SAAUs1a,EAAmBl/a,EAAK09V,EAAQmgF,EAAWh/a,GACxD,IAAI6+a,EAEHA,EADG9gb,MAAMC,QAAQqib,GACNA,EAEA,CAACA,GAEbziR,EAAOghR,cAAcC,GACrBA,EAASt8a,SAAQ,SAAUu8V,GAC1B9hR,EAAM8hW,iBAAiBhgF,EAAS4/E,EAAU,CAAC,EAAG,GAAI,UAClD,IAED1hW,EAAM8hW,iBAAiB39a,EAAKmvV,EAAK,CAAC,EAAG,GAAI,OACrCj5C,EAAWm4C,aAAaruV,KAC3BA,EAAMA,EAAIw/a,YACX3jW,EAAM8hW,iBAAiBjgF,EAAQ6/E,EAAU,CAAC,EAAG,GAAI,UACjD1hW,EAAM8hW,iBAAiBE,EAAW3nI,EAAY,CAAC,EAAG,GAAI,cAEtDz5I,EAAOykM,eAAeriW,EAAS,gBACfuJ,IAAZvJ,IACHA,EAAU,CAAC,GACZ49J,EAAOykM,eAAeriW,EAAQk/a,UAAW,qBACzCthR,EAAOykM,eAAeriW,EAAQm/a,WAAY,sBAC1C,IAAID,EAAYl/a,EAAQk/a,UACpBC,EAAan/a,EAAQm/a,WAGzB,QAFkB51a,IAAd21a,IACHA,EAAY,IAAIx6a,WACE6E,IAAf41a,EAA0B,CAC7BvhR,EAAO0iR,eAAetgb,EAAQugb,SAAU,oBACxC,IAAIA,EAAWvgb,EAAQugb,cACNh3a,IAAbg3a,IACHA,EAAW,UACZpB,EAAa,IAAIz6a,MACNG,QAAQs6a,EAAWr4M,UAAqB,IAATy5M,EAC1C,CACD3iR,EAAO4iR,eAAexgb,EAAQi/a,OAAQ,kBACtC,IAAIA,EAASj/a,EAAQi/a,YACN11a,IAAX01a,IACHA,EAASnyS,EAAOvtH,KAAK,mBAAoB,QAE1C,IAAI6/Z,EAAWp/a,EAAQo/a,cACN71a,IAAb61a,IACHA,EAAW,KAE2B,IAAnCA,EAASp8a,QAAQ,cACpBo8a,EAASxgb,KAAK,cAEI,IAAfoB,EAAQitX,MACqB,IAA5BmyD,EAASp8a,QAAQ,OACpBo8a,EAASxgb,KAAK,OACkB,IAA7Bwgb,EAASp8a,QAAQ,QACpBo8a,EAASxgb,KAAK,QAGhB,IAAI6hb,EAAe5B,EAAS98a,QAAO,SAAU+8V,GAC5C,MAAyB,SAAjBA,EAAQv3V,IAChB,IACGm5a,EAAe7B,EAAS98a,QAAO,SAAU+8V,GAC5C,MAAyB,SAAjBA,EAAQv3V,IAChB,IACGk5a,EAAa3hb,OAAS,IACe,IAApCsgb,EAASp8a,QAAQ,eACpBo8a,EAASxgb,KAAK,cAEZ8hb,EAAa5hb,OAAS,IACe,IAApCsgb,EAASp8a,QAAQ,eACpBo8a,EAASxgb,KAAK,eAEZ8hb,EAAa5hb,OAAS,GAAK2hb,EAAa3hb,OAAS,MACV,IAAtCsgb,EAASp8a,QAAQ,iBACpBo8a,EAASxgb,KAAK,gBACE,QAAbuC,EAAIoG,OACgC,IAApC63a,EAASp8a,QAAQ,eACpBo8a,EAASxgb,KAAK,eAGhB,IAAImma,EAAO,IAAIuZ,EAAY,CAC1BO,SAAUA,EACVhgF,OAAQA,EACRkgF,WAAY59a,EACZ69a,UAAWA,EAAU2B,WACrBvoR,WAAY,CAAC,EACb6mR,OAAQA,EACRC,UAAWA,EACXC,WAAYA,EACZC,SAAUA,IAIX,OAFAra,EAAKkb,SAASjB,GAENja,CACR,EAEDuZ,EAAYn9Z,MAAQ,SAAUzC,EAAMuB,EAAQjgB,GACrB,kBAAV0e,GACXk/I,EAAOplH,OAAO95B,EAAM,aACNnV,IAAX0W,IACHA,EAAS,QACV29I,EAAOxhJ,OAAO6D,EAAQ,UACG,kBAAbjgB,IACXA,EAAU,CAAE2/W,SAAU3/W,IACvB49J,EAAOykM,eAAeriW,EAAS,gBACfuJ,IAAZvJ,IACHA,EAAU,CAAC,GACZ49J,EAAOoyL,eAAehwV,EAAQ2/W,SAAU,yBACfp2W,IAArBvJ,EAAQ2/W,WACX3/W,EAAQ2/W,SAAW,aAEpB/hN,EAAOl8J,OAAO+3K,EAAQx5J,GAAS,mBAE/B,IAEC,OADQw5J,EAAQx5J,GAAQovF,KAAK3wF,EAAM1e,EAInC,CAFC,MAAOkH,GACR,MAAO,IAAIy3a,EAAsB3+a,EAAQ2/W,SAAU1/V,EAAQ/Y,EAC3D,CACD,EAEDo3a,EAAYsC,cAAgB,SAAU1/a,EAAK2/a,GAC1C,OAAQ7jW,EAAM8jW,aAAa5/a,EAAKo9a,EAAauC,EAC7C,EAODvC,EAAYl0a,UAAU22a,iBAAmB,CAAC,EAAG,GAE7CzC,EAAY0C,kBAAoB,SAAU9/a,GACzC,MAAQ,CAAC,EAAG,EACZ,yBCvZDmiK,EAAOx3B,QAAU,CAChBkjK,cAAeA,EACfkyI,cAwUD,SAAuBlgR,GACtB,IAAIp+J,EAAQ,GAGZ,GAAIu+a,EAAkB,CAQrB,IAAIC,EAAU,CACb,SAAY,aACZ,SAAY,YACZ,SAAY,aACXpgR,GAEE2tI,EAAKllE,EAAOwlE,WAAWmyI,GAa3B,OAZAzyI,EAAG/B,eAEHhqS,EAAM/D,KAAK,CAAC4b,KAAM,QACdkE,KAAMouH,EAAOvtH,KAAKwhJ,KACtBp+J,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMgwR,EAAG9B,iBAChCjqS,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMgwR,EAAG3B,kBAE1B,IAAIsK,EAAW,CACpB9vS,KAAM,QACNw5J,MAAOA,EACPp+J,MAAOA,GAGR,CAEA,IAAIy+a,EAAW,IAAIrmI,EAAeh6I,GAG9BnwJ,EAAIwwa,EAAStqI,OAKbuqI,EAAWh7a,KAAK8K,MAAMP,EAAE6tJ,YAAc,IAAM,GAC5C1qJ,EAAI,IAAIuta,EAAK93M,EAAOikC,YAAY4zK,IAEhCrqI,EAAKpmS,EAAEqmS,SAASqqI,EAAKh8T,KACrB8mD,EAAOr4J,EAAE4qJ,IAAIq4I,GAAI/qR,IAAIq1Z,EAAKh8T,KAC1B+mD,EAAM+0Q,EAASlqI,OAAOp9Q,SAASsyI,GAenC,OAbAA,EAAOt/B,EAAOvtH,KAAK6sJ,EAAKiuE,eACxBhuE,EAAMv/B,EAAOvtH,KAAK6ha,EAASpxQ,WACvBopI,eAAe/sI,GAAM,OAEzB1pK,EAAM/D,KAAK,CAAC4b,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAKwhJ,KAC7Cp+J,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM2tJ,IAC7B1pK,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM0tJ,IAEvB,IAAIirI,EAAW,CACpB9vS,KAAM,QACNw5J,MAAOA,EACPp+J,MAAOA,GAIT,EAvYA4+a,gBAqTD,WACC,IAAIvvQ,EAAOwvQ,EAAKhvZ,KAAK27I,UACjB/B,EAAOt/B,EAAOvtH,KAAKyyJ,EAAKyvQ,WACxBp1Q,EAAMv/B,EAAOvtH,KAAKyyJ,EAAK7B,WAC3BvS,EAAOogE,YAAY5xD,EAAKttK,OAAQ,IAChC8+J,EAAOogE,YAAY3xD,EAAIvtK,OAAQ,IAE/B,IAAI6D,EAAQ,GAOZ,OANAA,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM2tJ,IAC7B1pK,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM0tJ,EAAKv8J,MAAM,EAAG,MACjC,IAAIwnS,EAAW,CACxB9vS,KAAM,UACN5E,MAAOA,GAGR,GAjUD,IAAIi7J,EAAS0b,EAAQ,OACjBkwD,EAASlwD,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACft8F,EAAQs8F,EAAQ,OAChBkoQ,EAAOloQ,EAAQ,MAEfg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OAErB4nQ,OAA0C33a,IAAtBigO,EAAOwlE,WAG3B7iI,GADOmN,EAAQ,OACVA,EAAQ,QACbgoQ,EAAOhoQ,EAAAA,OAAAA,WAEX,SAASy1H,EAAc5tS,GAMtB,GALA67E,EAAM8hW,iBAAiB39a,EAAKmvV,EAAK,CAAC,EAAG,GAAI,OACzCpwV,KAAKwhb,QAAUrqI,EAAWm4C,aAAaruV,EAAK,CAAC,EAAG,IAChDjB,KAAKyhb,MAAQxgb,EAAIoG,KACjBrH,KAAK6vK,OAAS5uK,EAAI4/J,MAClB7gK,KAAKo9N,KAAOn8N,EACK,QAAbA,EAAIoG,KAAgB,CACvB,IAAK25a,EACJ,MAAO,IAAIrva,MAAM,uFAIlB3R,KAAKq7a,IAAM/xM,EAAOslE,oBACd3tS,EAAI2lL,KAAKprK,EAAEgD,UAAMnV,EACjBpI,EAAI2lL,KAAKnuK,EAAE+F,UAAMnV,GACrBrJ,KAAK0hb,GAAKzgb,EAAI2lL,KAAKprK,EACnBxb,KAAK26a,GAAK15a,EAAI2lL,KAAKnuK,EACfzY,KAAKwhb,SACRxhb,KAAKq7a,IAAItuI,cAAc9rS,EAAI2lL,KAAK5jL,EAAEwb,MACnCxe,KAAKq7a,IAAIvuI,aAAa7rS,EAAI2lL,KAAK3jL,EAAEub,KAEjC,MAAM,GAAiB,UAAbvd,EAAIoG,KAAkB,CAChC,IAAK25a,EAOJ,OANAhhb,KAAK2hb,UAAY,IAAI9mI,EAAe76S,KAAK6vK,aAErC7vK,KAAKwhb,UACRxhb,KAAKgtS,MAAQ,IAAI40I,EACb5hb,KAAK2hb,UAAW1gb,EAAI2lL,KAAKruK,EAAEiG,QAKjC,IAAIqiJ,EAAQ,CACX,SAAY,aACZ,SAAY,YACZ,SAAY,aACX5/J,EAAI4/J,OAEN,GADA7gK,KAAKq7a,IAAM/xM,EAAOwlE,WAAWjuI,GACH,kBAAd7gK,KAAKq7a,KACuB,oBAA5Br7a,KAAKq7a,IAAItuI,cAGpB,OAFAi0I,GAAmB,OACnBnyI,EAActwS,KAAKyB,KAAMiB,GAGtBjB,KAAKwhb,SACRxhb,KAAKq7a,IAAItuI,cAAc9rS,EAAI2lL,KAAKruK,EAAEiG,MACnCxe,KAAKq7a,IAAIvuI,aAAa7rS,EAAI2lL,KAAKrX,EAAE/wJ,KAEjC,KAAM,IAAiB,eAAbvd,EAAIoG,KAOd,MAAO,IAAIsK,MAAM,wBAA0B1Q,EAAIoG,KAAO,SANlDrH,KAAKwhb,UACR1kW,EAAM8hW,iBAAiB39a,EAAKk2S,EAAY,CAAC,EAAG,GAAI,OAChDn3S,KAAKgtS,MAAQ/rS,EAAI2lL,KAAK7xG,EAAEv2D,KAKzB,CACD,CAkMD,SAASq8R,EAAevgS,GACvB,IAAI+4C,EAASgrX,EAAKh0Q,OAAO/vJ,GACzBojJ,EAAOl8J,OAAO6xD,GAEd,IAAI73C,EAAI,IAAI4la,EAAK/tX,EAAO73C,GACpB1R,EAAI,IAAIs3a,EAAK/tX,EAAOvpD,GACpB8J,EAAI,IAAIwta,EAAK/tX,EAAOz/C,GACpBlD,EAAI,IAAI0wa,EAAK/tX,EAAO3iD,GACpBgI,EAAI0oa,EAAKh8T,IACTy7C,EAAQ,IAAIoL,EAAGwrI,UAAUj8R,EAAG1R,EAAG8J,GAC/B26P,EAAI1tG,EAAMg2I,eAAexjP,EAAOk7M,EAAEjkQ,SAAS,QAE/CtK,KAAK6gK,MAAQA,EACb7gK,KAAKyY,EAAI81P,EACTvuQ,KAAK0Q,EAAIA,EACT1Q,KAAK0Y,EAAIA,CACT,CAMD,SAASmpa,EAASxuX,EAAQ/a,GACzBt4C,KAAK8hb,QAAUzuX,EACG,IAAd/a,EAAO,KACVA,EAASA,EAAO3oC,MAAM,IACvB3P,KAAKo1S,KAAO/hP,EAAOy8G,WAAW+mI,eAAev+P,EAAOhuC,SAAS,OAC7D,CAED,SAASs3a,EAAUvuX,EAAQ/a,GAC1Bt4C,KAAK8hb,QAAUzuX,EACfrzD,KAAKgtS,MAAQ,IAAIo0I,EAAKtkW,EAAMilW,YAAYzpY,GACxC,CAhODu2P,EAAc3kS,UAAUwiS,aAAe,WACtC,OAAI1sS,KAAKwhb,QACAxhb,KAAKo9N,KAAKqjN,WACXzgb,KAAKo9N,IACb,EAEDyxE,EAAc3kS,UAAU2iS,cAAgB,WACvC,OAAI7sS,KAAKwhb,QACAxhb,KAAKo9N,UAEb,CACD,EACDyxE,EAAc3kS,UAAU4sQ,OAAS+3B,EAAc3kS,UAAU2iS,cAEzDgC,EAAc3kS,UAAU83a,UAAY,SAAUphI,EAAIqhI,GAMjD,GALAvkR,EAAOl8J,OAAOo/S,EAAI,OACbqhI,GACJnlW,EAAM8hW,iBAAiBh+H,EAAIzJ,EAAY,CAAC,EAAG,GAAI,OAChDr6N,EAAM8hW,iBAAiBh+H,EAAIwvC,EAAK,CAAC,EAAG,GAAI,OAEpCxvC,EAAGv5S,OAASrH,KAAKyhb,MACpB,MAAO,IAAI9va,MAAM,KAAOivS,EAAGv5S,KAAO,0BAC9BrH,KAAKyhb,MAAQ,mBAGlB,GAAI7gI,EAAG//I,QAAU7gK,KAAK6vK,OACrB,MAAO,IAAIl+J,MAAM,kBAAoBivS,EAAG//I,MAAvB,gCACc7gK,KAAK6vK,OAChC,mBAGW,QAAZ+wI,EAAGv5S,OACNq2J,EAAOggE,UAAUkjF,EAAGh6H,KAAKprK,EAAGxb,KAAK0hb,GAC7B,gCACJhkR,EAAOggE,UAAUkjF,EAAGh6H,KAAKnuK,EAAGzY,KAAK26a,GAC7B,oCAEL,EAED9rI,EAAc3kS,UAAUg4a,OAAS,SAAUthI,GAG1C,GAFA5gT,KAAKgib,UAAUphI,GAEC,QAAZA,EAAGv5S,KACNrH,KAAKq7a,IAAItuI,cAAc6T,EAAGh6H,KAAK5jL,EAAEwb,MACjCxe,KAAKq7a,IAAIvuI,aAAa8T,EAAGh6H,KAAK3jL,EAAEub,WAE1B,GAAgB,UAAZoiS,EAAGv5S,KACT25a,GACHhhb,KAAKq7a,IAAItuI,cAAc6T,EAAGh6H,KAAKruK,EAAEiG,MACjCxe,KAAKq7a,IAAIvuI,aAAa8T,EAAGh6H,KAAKrX,EAAE/wJ,OAEhCxe,KAAKgtS,MAAQ,IAAI40I,EACb5hb,KAAK2hb,UAAW/gI,EAAGh6H,KAAKruK,EAAEiG,WAGzB,GAAgB,eAAZoiS,EAAGv5S,KAAuB,CACpC,IAAI0tE,EAAI6rO,EAAGh6H,KAAK7xG,EACX6rO,EAAGh6H,KAAK7xG,IACZA,EAAI6rO,EAAGh6H,KAAKvtK,GACbrZ,KAAKgtS,MAAQj4N,EAAEv2D,KACO,IAAlBxe,KAAKgtS,MAAM,KACdhtS,KAAKgtS,MAAQhtS,KAAKgtS,MAAMr9R,MAAM,IAC/B3P,KAAKgtS,MAAQhtS,KAAKgtS,MAAMr9R,MAAM,EAAG,GACjC,CACD3P,KAAKo9N,KAAOwjF,EACZ5gT,KAAKwhb,SAAU,CACf,EACD3yI,EAAc3kS,UAAU6iS,cAAgB8B,EAAc3kS,UAAUg4a,OAEhErzI,EAAc3kS,UAAUyiS,cAAgB,SAAUw1I,GAEjD,GADAnib,KAAKgib,UAAUG,GAAS,IACnBnib,KAAKwhb,QACT,MAAO,IAAI7va,MAAM,+DAGlB,IAAIw6J,EACJ,GAAmB,QAAfnsK,KAAKyhb,MACR,OAAQzhb,KAAKq7a,IAAI1uI,cACbw1I,EAAQv7P,KAAK3jL,EAAEub,MAEb,GAAmB,UAAfxe,KAAKyhb,MACf,OAAIT,EACKhhb,KAAKq7a,IAAI1uI,cACbw1I,EAAQv7P,KAAKrX,EAAE/wJ,OAEnB2tJ,EAAM,IAAI01Q,EACN7hb,KAAK2hb,UAAWQ,EAAQv7P,KAAKrX,EAAE/wJ,MAC3Bxe,KAAKgtS,MAAMoK,mBAAmBjrI,IAGjC,GAAmB,eAAfnsK,KAAKyhb,MAAwB,CAEvC,IADAt1Q,EAAMg2Q,EAAQv7P,KAAKksC,EAAEt0M,KACH,IAAX2tJ,EAAI,IAAeA,EAAIvtK,OAAS,IACtCutK,EAAMA,EAAIx8J,MAAM,GACjB,IAAIu8J,EAAOlsK,KAAKgtS,MAChBtvI,EAAOogE,YAAY3xD,EAAIvtK,OAAQ,IAC/B8+J,EAAOogE,YAAY5xD,EAAKttK,OAAQ,IAEhC,IAAI8qO,EAAS43M,EAAKp1Z,IAAIqkO,OAAO,IAAI/+O,WAAW26J,GACxC,IAAI36J,WAAW06J,IAEnB,OAAQt/B,EAAOvtH,KAAKqqN,EACpB,CAED,MAAO,IAAI/3N,MAAM,sBAAwB3R,KAAKyhb,MAC9C,EAED5yI,EAAc3kS,UAAUk4a,YAAc,WACrC,IACIl2Q,EAAMC,EADN1pK,EAAQ,GAEZ,GAAmB,QAAfzC,KAAKyhb,MAaR,OAZAzhb,KAAKq7a,IAAI5uI,eAEThqS,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMxe,KAAK0hb,GAAGlja,OACrC/b,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMxe,KAAKo9N,KAAKx2C,KAAKjkL,EAAE6b,OAC9C/b,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMxe,KAAK26a,GAAGn8Z,OACrC/b,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMxe,KAAKq7a,IAAI3uI,iBACtCjqS,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMxe,KAAKq7a,IAAIxuI,kBACtC7sS,KAAKo9N,KAAO,IAAI+5E,EAAW,CAC1B9vS,KAAM,MACN5E,MAAOA,IAERzC,KAAKwhb,SAAU,EACPxhb,KAAKo9N,KAEP,GAAmB,UAAfp9N,KAAKyhb,MAAmB,CAClC,GAAIT,EAaH,OAZAhhb,KAAKq7a,IAAI5uI,eAEThqS,EAAM/D,KAAK,CAAC4b,KAAM,QACdkE,KAAMouH,EAAOvtH,KAAKrf,KAAK6vK,UAC3BptK,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMxe,KAAKq7a,IAAI3uI,iBACtCjqS,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMxe,KAAKq7a,IAAIxuI,kBACtC7sS,KAAKo9N,KAAO,IAAI+5E,EAAW,CAC1B9vS,KAAM,QACNw5J,MAAO7gK,KAAK6vK,OACZptK,MAAOA,IAERzC,KAAKwhb,SAAU,EACPxhb,KAAKo9N,KAGb,IAAI1sN,EAAI1Q,KAAK2hb,UAAU/qI,OACnBv9R,EAAI,IAAI+na,EAAK93M,EAAOikC,YAAY78P,EAAE6tJ,cAClCu4I,EAAKpmS,EAAEqmS,SAASqqI,EAAKh8T,KAqBzB,OApBA8mD,EAAO7yJ,EAAEolJ,IAAIq4I,GAAI/qR,IAAIq1Z,EAAKh8T,KAC1B+mD,EAAMnsK,KAAK2hb,UAAU3qI,OAAOp9Q,SAASsyI,GAErCA,EAAOt/B,EAAOvtH,KAAK6sJ,EAAKiuE,eACxBhuE,EAAMv/B,EAAOvtH,KAAKrf,KAAK2hb,UAAU7xQ,WAC7BopI,eAAe/sI,GAAM,OAEzBnsK,KAAKgtS,MAAQ,IAAI40I,EAAU5hb,KAAK2hb,UAAWz1Q,GAE3CzpK,EAAM/D,KAAK,CAAC4b,KAAM,QACdkE,KAAMouH,EAAOvtH,KAAKrf,KAAK6vK,UAC3BptK,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM2tJ,IAC7B1pK,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM0tJ,IAE7BlsK,KAAKo9N,KAAO,IAAI+5E,EAAW,CAC1B9vS,KAAM,QACNw5J,MAAO7gK,KAAK6vK,OACZptK,MAAOA,IAERzC,KAAKwhb,SAAU,EACPxhb,KAAKo9N,IAGd,CAAM,GAAmB,eAAfp9N,KAAKyhb,MAAwB,CACvC,IAAI3vQ,EAAOwvQ,EAAKp1Z,IAAI+hJ,UAcpB,OAbA/B,EAAOt/B,EAAOvtH,KAAKyyJ,EAAKyvQ,WACxBp1Q,EAAMv/B,EAAOvtH,KAAKyyJ,EAAK7B,WACvB/D,EAAOt/B,EAAOmQ,OAAO,CAACmvB,EAAMC,IAC5BzO,EAAOogE,YAAY5xD,EAAKttK,OAAQ,IAChC8+J,EAAOogE,YAAY3xD,EAAIvtK,OAAQ,IAE/B6D,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM2tJ,IAC7B1pK,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM0tJ,IAC7BlsK,KAAKo9N,KAAO,IAAI+5E,EAAW,CAC1B9vS,KAAM,aACN5E,MAAOA,IAERzC,KAAKwhb,SAAU,EACPxhb,KAAKo9N,IACb,CAED,MAAO,IAAIzrN,MAAM,sBAAwB3R,KAAKyhb,MAC9C,EACD5yI,EAAc3kS,UAAUuiS,aAAeoC,EAAc3kS,UAAUk4a,YAqB/DvnI,EAAe3wS,UAAU4lK,SAAW,WAAc,OAAQ9vK,KAAK6gK,KAAS,EACxEg6I,EAAe3wS,UAAU8sS,KAAO,WAAc,OAAQh3S,KAAKyY,CAAK,EAChEoiS,EAAe3wS,UAAU0sS,KAAO,WAAc,OAAQ52S,KAAK0Q,CAAK,EAChEmqS,EAAe3wS,UAAUixS,KAAO,WAAc,OAAQn7S,KAAK0Y,CAAK,EAahEkpa,EAAU13a,UAAUktS,mBAAqB,SAAUiX,GAClD3wJ,EAAO6jC,GAAG8sH,aAAkBwzH,GAC5B,IAAI5sQ,EAAIo5I,EAAOjZ,KAAKx7Q,SAAS55B,KAAKgtS,OAClC,OAAQpgK,EAAOvtH,KAAK41J,EAAEn/J,OAAOuhS,eAAel9D,cAC5C,yBCtTDh3E,EAAOx3B,QAAU,CAChB02S,SAAUA,EACV7zR,OAAQA,GAGT,IAAI8yR,EAAOloQ,EAAQ,MACfnqE,EAASmqE,EAAQ,OACjBM,EAAON,EAAQ,OACf1b,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTtM,EAAYsM,EAAQ,OAExB,SAASipQ,EAASphb,EAAKqhb,GACtB,GAA+B,WAA3BA,EAAS/xa,cACZ,MAAO,IAAIoB,MAAM,mDAGlB3R,KAAKiB,IAAMA,EACXjB,KAAKimE,OAAS,GAEdgpC,EAAOonK,SAAS93Q,KAAKyB,KAAM,CAAC,EAC5B,CAoCD,SAASwuJ,EAAOvtJ,EAAKqhb,GACpB,GAA+B,WAA3BA,EAAS/xa,cACZ,MAAO,IAAIoB,MAAM,mDAGlB3R,KAAKiB,IAAMA,EACXjB,KAAKimE,OAAS,GAEdgpC,EAAOonK,SAAS93Q,KAAKyB,KAAM,CAAC,EAC5B,CA5CD05K,EAAKxV,SAASm+Q,EAAUpzU,EAAOonK,UAE/BgsK,EAASn4a,UAAUk9L,OAAS,SAAUC,EAAOtpC,EAAK1yH,GACjDrrC,KAAKimE,OAAOvnE,KAAK2oM,GACjBh8J,GACA,EAEDg3Y,EAASn4a,UAAU4a,OAAS,SAAUuiL,GACd,kBAAXA,IACXA,EAAQz6D,EAAOvtH,KAAKgoL,EAAO,WAC5BrnM,KAAKimE,OAAOvnE,KAAK2oM,EACjB,EAEDg7O,EAASn4a,UAAU2iK,OAAS,SAAUx0B,EAAWiiD,GAChD,IAAItwC,EACJ,GAAI8iB,EAAUy1Q,YAAYlqS,EAAW,CAAC,EAAG,IAAK,CAC7C,GAAuB,YAAnBA,EAAUhxI,KACb,OAAQ,EACT2iJ,EAAM3R,EAAU8E,SAAS,MAEzB,MAAM,GAA2B,kBAAf9E,EAClB2R,EAAMpd,EAAOvtH,KAAKg5H,EAAW,eAEvB,GAAIy0B,EAAUy1Q,YAAYlqS,EAAW,CAAC,EAAG,IAC/C,MAAO,IAAI1mI,MAAM,8EAKlB,OADA+rJ,EAAOplH,OAAO0xG,GACNs3R,EAAKhvZ,KAAKkwZ,SAAS31Q,OACvB,IAAIr7J,WAAWo7H,EAAOmQ,OAAO/8I,KAAKimE,SAClC,IAAIz0D,WAAWw4I,GACf,IAAIx4I,WAAWxR,KAAKiB,IAAI2lL,KAAKksC,EAAEt0M,MACnC,EAYDk7J,EAAKxV,SAAS1V,EAAQv/C,EAAOonK,UAE7B7nH,EAAOtkJ,UAAUk9L,OAAS,SAAUC,EAAOtpC,EAAK1yH,GAC/CrrC,KAAKimE,OAAOvnE,KAAK2oM,GACjBh8J,GACA,EAEDmjH,EAAOtkJ,UAAU4a,OAAS,SAAUuiL,GACZ,kBAAXA,IACXA,EAAQz6D,EAAOvtH,KAAKgoL,EAAO,WAC5BrnM,KAAKimE,OAAOvnE,KAAK2oM,EACjB,EAED74C,EAAOtkJ,UAAUooB,KAAO,WACvB,IAAI03H,EAAMs3R,EAAKhvZ,KAAKkwZ,SAChB,IAAIhxa,WAAWo7H,EAAOmQ,OAAO/8I,KAAKimE,SAClC,IAAIz0D,WAAWo7H,EAAOmQ,OAAO,CAChC/8I,KAAKiB,IAAI2lL,KAAK7xG,EAAEv2D,KAAMxe,KAAKiB,IAAI2lL,KAAKksC,EAAEt0M,SACnCika,EAAS71S,EAAOvtH,KAAK2qI,GACrBqmK,EAASvjJ,EAAU7rJ,MAAMwha,EAAQ,UAAW,OAEhD,OADApyH,EAAO4J,cAAgB,SACf5J,CACR,yBCzFYj3I,EAAQ,OAArB,IACIM,EAAON,EAAQ,OAEnB,SAASspQ,EAAuB5M,EAAI/1Z,GAC/BpO,MAAM2yM,mBACT3yM,MAAM2yM,kBAAkBtkN,KAAM0ib,GAC/B1ib,KAAKsa,KAAO,yBACZta,KAAKo8T,YAAc05G,EACnB91a,KAAK+f,OAASA,EACd/f,KAAKq3F,QAAU,4DACJhuF,IAAPysa,IACH91a,KAAKq3F,SAAW,kBAAoBy+U,QACtBzsa,IAAX0W,IACH/f,KAAKq3F,SAAW,aAAet3E,EAChC,CAGD,SAASytU,EAAsBngD,GAC1B17R,MAAM2yM,mBACT3yM,MAAM2yM,kBAAkBtkN,KAAMwtV,GAC/BxtV,KAAKsa,KAAO,wBACZta,KAAKo2Q,UAAYi3B,EACjBrtS,KAAKq3F,QAAU,cAAgBg2M,EAAM,oBACrC,CAGD,SAASs1I,EAAcroa,EAAMyF,EAAQ6ia,GAChCjxa,MAAM2yM,mBACT3yM,MAAM2yM,kBAAkBtkN,KAAM2ib,GAC/B3ib,KAAKsa,KAAO,gBACZta,KAAK+f,OAASA,EACd/f,KAAK6ib,QAAUvoa,EACfta,KAAK4ib,SAAWA,EAChB5ib,KAAKq3F,QAAU,mBAAqB/8E,EAAO,eAAiByF,EACxD,gBAAkB6ia,EAASvrV,OAC/B,CAGD,SAASyrV,EAAoBz7a,EAAM0Y,EAAQ6ia,GACtCjxa,MAAM2yM,mBACT3yM,MAAM2yM,kBAAkBtkN,KAAM8ib,GAC/B9ib,KAAKsa,KAAO,sBACZta,KAAKqH,KAAOA,EACZrH,KAAK+f,OAASA,EACd/f,KAAK4ib,SAAWA,EAChB5ib,KAAKq3F,QAAU,uCAAyChwF,EACpD,iBAAmB0Y,EAAS,YAAc6ia,EAASvrV,OACvD,CAGD,SAASonV,EAAsBnka,EAAMyF,EAAQ6ia,GACxCjxa,MAAM2yM,mBACT3yM,MAAM2yM,kBAAkBtkN,KAAMy+a,GAC/Bz+a,KAAKsa,KAAO,wBACZta,KAAK+f,OAASA,EACd/f,KAAK+ib,SAAWzoa,EAChBta,KAAK4ib,SAAWA,EAChB5ib,KAAKq3F,QAAU,mBAAqB/8E,EAAO,eAAiByF,EACxD,wBAA0B6ia,EAASvrV,OACvC,CAGD,SAAS2rV,EAAkB1oa,EAAMyF,GAC5BpO,MAAM2yM,mBACT3yM,MAAM2yM,kBAAkBtkN,KAAMgjb,GAC/Bhjb,KAAKsa,KAAO,oBACZta,KAAK+f,OAASA,EACd/f,KAAK6ib,QAAUvoa,EACfta,KAAKq3F,QAAU,OAASt3E,EAAS,eAAiBzF,EAAnC,iFAGf,CAxDDo/J,EAAKxV,SAASw+Q,EAAwB/wa,OAStC+nK,EAAKxV,SAASspL,EAAuB77U,OAYrC+nK,EAAKxV,SAASy+Q,EAAehxa,OAY7B+nK,EAAKxV,SAAS4+Q,EAAqBnxa,OAYnC+nK,EAAKxV,SAASu6Q,EAAuB9sa,OAYrC+nK,EAAKxV,SAAS8+Q,EAAmBrxa,OAEjCwxJ,EAAOx3B,QAAU,CAChB+2S,uBAAwBA,EACxBl1F,sBAAuBA,EACvBm1F,cAAeA,EACfG,oBAAqBA,EACrBE,kBAAmBA,EACnBvE,sBAAuBA,0BChFxBt7Q,EAAOx3B,QAAU2yS,EAEjB,IAAI5gR,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACfkwD,EAASlwD,EAAQ,OACjBmlQ,EAAOnlQ,EAAQ,OACfg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OACrBglQ,EAAchlQ,EAAQ,OACtBt8F,EAAQs8F,EAAQ,OAEhBspQ,EAAyBnE,EAAKmE,uBAC9Bl1F,EAAwB+wF,EAAK/wF,sBAEjC,SAAS8wF,EAAY3gQ,GAOpB,GANAjgB,EAAOl8J,OAAOm8K,EAAM,WACpBjgB,EAAOxhJ,OAAOyhK,EAAKt2K,KAAM,gBACzBq2J,EAAOplH,OAAOqlI,EAAKxuG,KAAM,gBACzBuuF,EAAOxhJ,OAAOyhK,EAAKy4F,UAAW,qBAE9Bp2Q,KAAKo2Q,UAAYz4F,EAAKy4F,UAAU7lQ,eACM,IAAlC8ta,EAAKF,SAASn+a,KAAKo2Q,WACtB,MAAO,IAAIo3E,EAAsBxtV,KAAKo2Q,WAEvCp2Q,KAAKmvE,KAAOwuG,EAAKxuG,KACjBnvE,KAAKqH,KAAOs2K,EAAKt2K,KACjBrH,KAAKw3Q,SAAW75F,EAAK65F,QACrB,CAED8mK,EAAYp0a,UAAUI,SAAW,SAAUyV,GAS1C,YARe1W,IAAX0W,IAEFA,EADsB,QAAnB/f,KAAKo2Q,WAAyC,SAAlBp2Q,KAAKw3Q,SAC3B,MAEA,UAEX95G,EAAOxhJ,OAAO6D,GAENA,GACR,IAAK,MACJ,MAAsB,SAAlB/f,KAAKw3Q,SACAx3Q,KAAKmvE,KAAK7kE,SAAS,OACVtK,KAAKmvE,KAAK7kE,SAAS,OAkJ5Bq4D,QAAQ,eAAgB,OAjJlC,IAAK,SACJ,MAAsB,SAAlB3iE,KAAKw3Q,SACAx3Q,KAAKmvE,KAAK7kE,SAAS,WAuJL+iS,EAtJCrtS,KAAKo2Q,UAsJD19P,EArJxB1Y,KAAKmvE,KAAK7kE,SAAS,UAsJhB+iS,EAAI3rO,cAAgB,IAN7B,SAAqBruD,GAEpB,OAAQA,EAAEsvD,QAAQ,MAAO,GACzB,CAGkCsgX,CAAYvqa,IArJ9C,QACC,MAAO,IAAIgqa,OAAuBr5a,EAAW0W,GAmJ/C,IAAyBstR,EAAK30R,CAjJ7B,EAED4la,EAAYp0a,UAAU6uG,QAAU,SAAUiK,GACzC06C,EAAOl8J,OAAOwhH,EAAO,sBACH,QAAdhjH,KAAKqH,MAAoC,QAAlBrH,KAAKw3Q,UAC/B16L,EAAM8hW,iBAAiB57T,EAAOotO,EAAK,CAAC,EAAG,GAAI,iBACvCj5C,EAAWm4C,aAAatsO,IAC3BlmC,EAAM8hW,iBAAiB57T,EAAOm0L,EAAY,CAAC,EAAG,GAC1C,iCAEmB,QAAdn3S,KAAKqH,KACfy1E,EAAM8hW,iBAAiB57T,EAAOotO,EAAK,CAAC,EAAG,GAAI,OAE3CtzQ,EAAM8hW,iBAAiB57T,EAAOo7T,EAAa,CAAC,EAAG,GAC3C,eAGL,IAAI8E,EAAYlgU,EAAM7zC,KAAKnvE,KAAKo2Q,UAAWp2Q,KAAKw3Q,UAC5C2rK,EAAa75M,EAAOqB,WAAW3qO,KAAKo2Q,WACpCtxP,OAAOo+Z,GAAWv3Q,OAAO,UAM7B,YAJmBtiK,IAAfrJ,KAAKojb,QACRpjb,KAAKojb,MAAQ95M,EAAOqB,WAAW3qO,KAAKo2Q,WAChCtxP,OAAO9kB,KAAKmvE,MAAMw8F,OAAO,WAEtB3rK,KAAKojb,QAAUD,CACvB,EAGD,IAAIE,EAAW,qBAEXC,EAAQ,iBAEZhF,EAAYr9Z,MAAQ,SAAU60Z,EAAIh2a,GAGjC,IAAIutS,EAAKl+N,EAAMo0W,EAFf7lR,EAAOxhJ,OAAO45Z,EAAI,eAGdj4a,MAAMC,QAAQgC,KACjByjb,EAASzjb,EACTA,EAAU,CAAC,GAEZ49J,EAAOykM,eAAeriW,EAAS,gBACfuJ,IAAZvJ,IACHA,EAAU,CAAC,QACWuJ,IAAnBvJ,EAAQyjb,SACXA,EAASzjb,EAAQyjb,aACSl6a,IAAvBvJ,EAAQo2Q,aACXqtK,EAASzjb,EAAQo2Q,YAClBx4G,EAAOqyL,sBAAsBwzF,EAAQ,cAErC,IAAI/rK,EAAW,WACUnuQ,IAArBvJ,EAAQ03Q,WACXA,EAAW13Q,EAAQ03Q,UACpB95G,EAAOxhJ,OAAOs7P,EAAU,oBAExB,IAAI/0Q,EAAQqza,EAAGn0W,MAAM,KACrB,GAAoB,GAAhBl/D,EAAM7D,OAAa,CAEtB,GADAyuS,EAAM5qS,EAAM,GAAG8N,eACV8ya,EAAS5la,KAAKhb,EAAM,IACxB,MAAO,IAAIigb,EAAuB5M,GACnC,IACC3mW,EAAOy9D,EAAOvtH,KAAK5c,EAAM,GAAI,SAG7B,CAFC,MAAOuE,GACR,MAAO,IAAI07a,EAAuB5M,EAClC,CACD,MAAM,GAAIrza,EAAM7D,OAAS,EAAG,CAY5B,GAXAyuS,EAAM,MACyB,QAA3B5qS,EAAM,GAAG8N,gBACZ9N,EAAQA,EAAMkN,MAAM,IAQrBlN,GAPAA,EAAQA,EAAMmD,KAAI,SAAU4V,GAC3B,KAAOA,EAAE5c,OAAS,GACjB4c,EAAI,IAAMA,EACX,GAAIA,EAAE5c,OAAS,EACd,MAAO,IAAI8jb,EAAuB5M,GACnC,OAAQt6Z,CACR,KACaqmD,KAAK,KACdyhX,EAAM7la,KAAKhb,IAAUA,EAAM7D,OAAS,IAAM,EAC9C,MAAO,IAAI8jb,EAAuB5M,GACnC,IACC3mW,EAAOy9D,EAAOvtH,KAAK5c,EAAO,MAG1B,CAFC,MAAOuE,GACR,MAAO,IAAI07a,EAAuB5M,EAClC,CACD,KAAM,CACN,GAAIwN,EAAM7la,KAAKq4Z,GACd3mW,EAAOy9D,EAAOvtH,KAAKy2Z,EAAI,WACjB,KAAIuN,EAAS5la,KAAKq4Z,GAGxB,MAAO,IAAI4M,EAAuB5M,GAFlC3mW,EAAOy9D,EAAOvtH,KAAKy2Z,EAAI,SAGvB,CAED,OAAQ3mW,EAAKvwE,QACb,KAAK,GACJyuS,EAAM,SACN,MACD,KAAK,GACJA,EAAM,MACN,MACD,KAAK,GACJA,EAAM,OACN,MACD,KAAK,GACJA,EAAM,SACN,MACD,QACC,MAAO,IAAIq1I,EAAuB5M,QAIVzsa,IAArBvJ,EAAQ03Q,WACXA,EAAW,OACZ,CAED,QAAYnuQ,IAARgkS,EACH,MAAO,IAAIq1I,EAAuB5M,GAEnC,QAA2Bzsa,IAAvBg1a,EAAKF,SAAS9wI,GACjB,MAAO,IAAImgD,EAAsBngD,GAElC,QAAehkS,IAAXk6a,IAE0B,KAD7BA,EAASA,EAAO39a,KAAI,SAAUkE,GAAK,OAAOA,EAAEyG,aAAgB,KACjDzN,QAAQuqS,GAClB,MAAO,IAAImgD,EAAsBngD,GAGnC,OAAQ,IAAIixI,EAAY,CACvBloK,UAAWi3B,EACXl+N,KAAMA,EACN9nE,KAAMvH,EAAQuH,MAAQ,MACtBmwQ,SAAUA,GAEX,EAgBD8mK,EAAYkF,cAAgB,SAAUxib,EAAK2/a,GAC1C,OAAQ7jW,EAAM8jW,aAAa5/a,EAAKs9a,EAAaqC,EAC7C,EAQDrC,EAAYp0a,UAAU22a,iBAAmB,CAAC,EAAG,GAE7CvC,EAAYwC,kBAAoB,SAAU9/a,GAGzC,OAFA08J,EAAOtiC,KAAKp6H,EAAIsJ,UAChBozJ,EAAOtiC,KAAKp6H,EAAI+3G,SACR,CAAC,EAAG,EACZ,yBCzNDoqD,EAAOx3B,QAAU,CAChBx8B,KAkBD,SAAcg+D,EAAKrtK,GAClB,GAAqB,kBAATqtK,EAAmB,CAC9B,GAAIA,EAAI5rG,OAAO7+D,MAAM,kBACpB,OAAQwjN,EAAI/2G,KAAKg+D,EAAKrtK,GACvB,GAAIqtK,EAAIzqK,MAAM,iBACb,OAAQ+gb,EAAIt0U,KAAKg+D,EAAKrtK,GACvB,GAAIqtK,EAAIzqK,MAAM,cACb,OAAQ+gb,EAAIt0U,KAAKg+D,EAAKrtK,GACvB,GAAIqtK,EAAIzqK,MAAM,4BACb,OAAQghb,EAAMv0U,KAAKg+D,EAAKrtK,GACzB,GAAI6jb,EAAiBx2Q,GACpB,OAAQy2Q,EAAOz0U,KAAKg+D,EAAKrtK,GAC1BqtK,EAAMvgC,EAAOvtH,KAAK8tJ,EAAK,SACvB,KAAM,CAEN,GADAzP,EAAOplH,OAAO60H,GAyChB,SAAuBA,GACtB,IAAIxtK,EAAS,EACb,KAAOA,EAASwtK,EAAIvuK,SACC,KAAhBuuK,EAAIxtK,IAAkC,KAAhBwtK,EAAIxtK,OAC5BA,EACH,GAAoB,KAAhBwtK,EAAIxtK,GACP,OAAQ,EACT,KAAOA,EAASwtK,EAAIvuK,QACC,KAAhBuuK,EAAIxtK,MACNA,EACH,KAAOA,EAASwtK,EAAIvuK,QACC,KAAhBuuK,EAAIxtK,MACNA,EACH,QAAIA,EAAS,EAAIwtK,EAAIvuK,QACmC,UAApDuuK,EAAIx9J,MAAMhQ,EAAQA,EAAS,GAAG2K,SAAS,SAG3C,CAzDKu5a,CAAc12Q,GACjB,OAAQ+4C,EAAI/2G,KAAKg+D,EAAKrtK,GACvB,GAwBF,SAAuBqtK,GACtB,IAAIxtK,EAAS,EACb,KAAOA,EAASwtK,EAAIvuK,SACC,KAAhBuuK,EAAIxtK,IAAkC,KAAhBwtK,EAAIxtK,IAAkC,IAAhBwtK,EAAIxtK,OAClDA,EACH,OAAIA,EAAS,GAAKwtK,EAAIvuK,QACkC,SAApDuuK,EAAIx9J,MAAMhQ,EAAQA,EAAS,GAAG2K,SAAS,UAEvC3K,EAAS,GAAKwtK,EAAIvuK,QACkC,WAApDuuK,EAAIx9J,MAAMhQ,EAAQA,EAAS,GAAG2K,SAAS,QAG3C,CApCKw5a,CAAc32Q,GACjB,OAAQs2Q,EAAIt0U,KAAKg+D,EAAKrtK,GACvB,GAUF,SAAyBqtK,GACxB,IAAIxtK,EAAS,EACb,KAAOA,EAASwtK,EAAIvuK,SACC,KAAhBuuK,EAAIxtK,IAAkC,KAAhBwtK,EAAIxtK,IAAkC,IAAhBwtK,EAAIxtK,OAClDA,EACH,OAAIA,EAAS,IAAMwtK,EAAIvuK,QAEnB,2BADAuuK,EAAIx9J,MAAMhQ,EAAQA,EAAS,IAAI2K,SAAS,SAASiG,aAIrD,CApBKwza,CAAgB52Q,GACnB,OAAQu2Q,EAAMv0U,KAAKg+D,EAAKrtK,GACzB,GAAI6jb,EAAiBx2Q,GACpB,OAAQy2Q,EAAOz0U,KAAKg+D,EAAKrtK,EAC1B,CACD,GAAIqtK,EAAIw2B,aAAa,GAAKx2B,EAAIvuK,OAC7B,OAAQolb,EAAQ70U,KAAKg+D,EAAKrtK,GAC3B,MAAO,IAAI6R,MAAM,sCACjB,EA5CA+wL,MAqHD,SAAezhM,EAAKnB,GACnB,MAAO,IAAI6R,MAAM,2CACjB,GApHD,IAAI+rJ,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OAKT8sC,GAJQ9sC,EAAQ,OACVA,EAAQ,OACDA,EAAQ,OAEfA,EAAQ,QACdqqQ,EAAMrqQ,EAAQ,OACd4qQ,EAAU5qQ,EAAQ,OAClBwqQ,EAASxqQ,EAAQ,OACjBsqQ,EAAQtqQ,EAAQ,OAEhB6qQ,EAA+B,yBA4EnC,SAASN,EAAiBx2Q,GAEzB,GAAIA,EAAIvuK,QAAUqlb,EAA6Brlb,OAC9C,OAAQ,EAET,GADkBuuK,EAAIx9J,MAAM,EAAGs0a,EAA6Brlb,QAC5C0L,SAAS,WAAa25a,EACrC,OAAQ,EAKY,kBAAT92Q,IACXA,EAAMA,EAAI7iK,SAAS,UAKpB,IAHA,IAAIutD,EAAQs1G,EAAIxrG,MAAM,MAClBzsB,EAAO,EAEJ2iB,EAAM3iB,GAAMxyC,MAAM,QACxBwyC,IACD,QAAI2iB,EAAM3iB,GAAM5qC,SAAS,SAAS5H,MAAM,iBAEpCm1D,EAAM3iB,GAAM5qC,SAAS,SAAS5H,MAAM,gBAGxC,yBCrHDygK,EAAOx3B,QAAU,CAChBx8B,KA8BD,SAAcg+D,EAAKrtK,GACG,kBAATqtK,IACXzP,EAAOplH,OAAO60H,EAAK,OACnBA,EAAMA,EAAI7iK,SAAS,UAEpB,IAAIutD,EAAQs1G,EAAIxrG,MAAM,MACtB,GAAI9J,EAAM,GAAGn1D,MAAM,4BAA6B,CAC/C,IAAIwhb,EAAWrsX,EAAM,GAAG8J,MAAM,KAC1BwiX,EAAU7na,SAAS4na,EAAS,GAAI,IAChCE,EAAWF,EAAS,GACxB,IAAKG,EAAmBF,GACvB,MAAO,IAAIxya,MAAM,0BAA4Byya,GAC9C,OAiHF,SAA8B/2I,EAAKr4R,GAClC,GAAIqva,EAAmBh3I,GAAK3qS,MAAM,SACjC,OA1CF,SAAiCsS,GAChC,IAAIsva,EAAY,CAAC,EACjBtva,EAAS3S,SAAQ,SAAUyD,GACI,aAA1BA,EAAQ67D,MAAM,KAAK,GACtB2iX,EAAS,EAAQC,EAAaz+a,GACI,oBAA1BA,EAAQ67D,MAAM,KAAK,GAC3B2iX,EAAS,EAAQC,EAAaz+a,GACI,qBAA1BA,EAAQ67D,MAAM,KAAK,GAC3B2iX,EAAS,EAAQC,EAAaz+a,GACI,YAA1BA,EAAQ67D,MAAM,KAAK,GAC3B2iX,EAAS,EAAQC,EAAaz+a,GACI,YAA1BA,EAAQ67D,MAAM,KAAK,GAC3B2iX,EAAS,EAAQC,EAAaz+a,GACI,eAA1BA,EAAQ67D,MAAM,KAAK,GAC3B2iX,EAAS,MAAYC,EAAaz+a,GACA,eAA1BA,EAAQ67D,MAAM,KAAK,GAC3B2iX,EAAS,MAAYC,EAAaz+a,GACA,iBAA1BA,EAAQ67D,MAAM,KAAK,KAC3B2iX,EAAS,KAAWC,EAAaz+a,GAClC,IAED,IAAI7E,EAAM,CACToG,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,IAC9C,CAAEhqa,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,IAC9C,CAAEhqa,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,IAC9C,CAAEhqa,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,IAC9C,CAAEhqa,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,IAC9C,CAAEhqa,KAAM,QACJkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,QACrC,CAAEhqa,KAAM,QACJkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,QACrC,CAAEhqa,KAAM,OACJkE,KAAMs+D,EAAMilW,YAAYuC,EAAS,SAGvC,OAAQ,IAAIntI,EAAWl2S,EACvB,CAISujb,CAAwBxva,GAEjC,GAAgC,sBAA5Bqva,EAAmBh3I,IACS,sBAA5Bg3I,EAAmBh3I,GAA8B,CACpD,IAAI90R,EAAIq0H,EAAOvtH,KAAKrK,EAAS,GAAG2sD,MAAM,KAAK,GAAI,UAC3Ck/F,EAAQ,WACRrkJ,EAAO,IACqB,sBAA5B6na,EAAmBh3I,KACtBxsI,EAAQ,WACRrkJ,EAAO,KAGR,IACI+yJ,EADYzyF,EAAM2nW,uBAAuB5jR,EAAOtoJ,GAClCquK,KAAV,EAAoBpoK,KACxBkma,EAAW,CACdr9a,KAAM,QACNw5J,MAAOA,EACPrkJ,KAAMA,EACN/Z,MAAO,CACN,CAAC6X,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAKwhJ,IAClC,CAACvmJ,KAAM,IAAKkE,KAAMjG,GAClB,CAAC+B,KAAM,IAAKkE,KAAM+wJ,KAGpB,OAAQ,IAAI4nI,EAAWutI,EACvB,CACD,MAAO,IAAI/ya,MAAM,0BAA4B0ya,EAAmBh3I,GAChE,CA9ISs3I,CAAqBR,EAAStsX,EAAMloD,MAAM,GAClD,CAGD,IAAIulC,EAAO,EAEX,KAAO2iB,EAAM3iB,GAAMxyC,MAAM,QACxBwyC,IAED,IAAK2iB,EAAM3iB,GAAMxyC,MAAM,eACnBm1D,EAAM3iB,GAAMxyC,MAAM,mBAA8C,IAAzBm1D,EAAM3iB,EAAK,GAAGt2C,OACxD,OAKF,SAAqBgmb,GACpB,IAAIC,EAAQD,EAAUjjX,MAAM,KAGxBy0M,EAAY95P,SAASuoa,EAAM,GAAI,IACnC,IAAKR,EAAmBjuK,GACvB,MAAO,IAAIzkQ,MAAM,0BAA4BykQ,GAC9C,IAAI0uK,EAAYD,EAAMl1a,MAAM,EAAGk1a,EAAMjmb,QAAQijE,OACzCkjX,EAAYn4S,EAAOvtH,KAAKyla,EAAW,UACvC,GAAIT,EAAmBjuK,GAAW1zQ,MAAM,SAAU,CAEjD,IAAIsib,EAAoBD,EAAU1gP,UAAU,GAC5C,GAAyB,GAArB2gP,GAA+C,GAArBA,EAC7B,MAAO,IAAIrza,MAAM,wDAGlB,IAAI8jQ,EAAiBsvK,EAAUp1a,MAAM,EAAGq1a,EAAkB,GAC1DvvK,EAAiB34L,EAAMilW,YAAYtsK,GACnC,IAAIN,EAAU4vK,EAAUp1a,MAAM,EAAEq1a,GAChC7vK,EAAUr4L,EAAMilW,YAAY5sK,GAE5B,IAAI8vK,EAAS,CACZ59a,KAAM,MACN5E,MAAO,IAIR,OAFAwib,EAAOxib,MAAM/D,KAAK,CAAE4b,KAAM,IAAKkE,KAAMi3P,IACrCwvK,EAAOxib,MAAM/D,KAAK,CAAE4b,KAAM,IAAKkE,KAAM22P,IAC7B,IAAIi7E,EAAI60F,EAChB,CACD,GAAsC,sBAAlCZ,EAAmBjuK,IACe,sBAAlCiuK,EAAmBjuK,GAAoC,CAC1D,IAAIv1G,EAAQ,WACRrkJ,EAAO,IACP6na,EAAmBjuK,GAAW1zQ,MAAM,wBACvCm+J,EAAQ,WACRrkJ,EAAO,KAGR,IAAIkoa,EAAW,CACdr9a,KAAM,QACNw5J,MAAOA,EACPrkJ,KAAMA,EACN/Z,MAAO,CACN,CAAC6X,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAKwhJ,IAClC,CAACvmJ,KAAM,IAAKkE,KAAMs+D,EAAMooW,YAAYH,MAGtC,OAAQ,IAAI30F,EAAIs0F,EAChB,CACD,MAAO,IAAI/ya,MAAM,0BACb0ya,EAAmBjuK,GACvB,CAxDS+uK,CAAYttX,EAAM3iB,IAE3B,MAAO,IAAIvjC,MAAM,0BACjB,EAvDA+wL,MAsQD,SAAezhM,EAAKnB,GACnB,GAAIq3S,EAAWm4C,aAAaruV,GAAM,CACjC,GAAiB,QAAbA,EAAIoG,KACP,OA3DH,SAAkBpG,EAAKnB,GAEjBmB,EAAI2lL,KAAKw+P,OAAUnkb,EAAI2lL,KAAKy+P,OAChCvoW,EAAMwoW,cAAcrkb,GAGrB,IAAI4pL,EAAM,GACVA,GAAO,6BACPA,GAAO,cApBR,SAA2BlN,GAC1B,GAAKA,GAASA,EAAK2kQ,UAA8B,SAAlB3kQ,EAAK2kQ,SAE/B,IAAsB,WAAlB3kQ,EAAK2kQ,SACb,MAAQ,gBACJ,GAAsB,WAAlB3kQ,EAAK2kQ,SACb,MAAQ,iBAER,MAAO,IAAI3wa,MAAM,gCACbgsK,EAAK2kQ,SADT,CANA,MAAQ,aAQT,CAUuBiD,CAAkBzlb,GAAW,KACpD,IAAI4Q,EAAIosE,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,EAAcpoK,MAC1CqsK,GAAO,YAAcn6K,EAAEpG,SAAS,UAAY,KAC5C,IAAItD,EAAI81E,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,EAAcpoK,MAC1CqsK,GAAO,mBAAqB7jL,EAAEsD,SAAS,UAAY,KACnD,IAAIiO,EAAIukE,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,EAAcpoK,MAC1CqsK,GAAO,oBAAsBtyK,EAAEjO,SAAS,UAAY,KACpD,IAAIkR,EAAIshE,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,EAAcpoK,MAC1CqsK,GAAO,WAAarvK,EAAElR,SAAS,UAAY,KAC3C,IAAI3H,EAAIm6E,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,EAAcpoK,MAC1CqsK,GAAO,WAAaloL,EAAE2H,SAAS,UAAY,KAC3C,IAAI86a,EAAQtoW,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,MAAkBpoK,MAClDqsK,GAAO,cAAgBu6P,EAAM96a,SAAS,UAAY,KAClD,IAAI+6a,EAAQvoW,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,MAAkBpoK,MAClDqsK,GAAO,cAAgBw6P,EAAM/6a,SAAS,UAAY,KAClD,IAAIm7a,EAAO3oW,EAAM0oW,cAAcvkb,EAAI2lL,KAAJ,KAAiBpoK,MAChDqsK,GAAO,gBAAkB46P,EAAKn7a,SAAS,UAAY,KAEnD,IAAIsuL,EAAY,IAAIp0L,KAIpB,OAHAqmL,GAAO,YAAc66P,EAAgB9sP,GAAa,KAClD/N,GAAO,YAAc66P,EAAgB9sP,GAAa,KAClD/N,GAAO,aAAe66P,EAAgB9sP,GAAa,KAC3ChsD,EAAOvtH,KAAKwrK,EAAK,QACzB,CA4BU86P,CAAS1kb,EAAKnB,GAChB,GAAiB,UAAbmB,EAAIoG,KACd,OA5BH,SAAoBpG,EAAKnB,GACxB,IAAI+qL,EAAM,GAGV,GAFAA,GAAO,6BAEW,aAAd5pL,EAAI4/J,MACPgqB,GAAO,wCACD,IAAkB,aAAd5pL,EAAI4/J,MAGd,MAAO,IAAIlvJ,MAAM,qBAFjBk5K,GAAO,mCAGP,CACD,IAAI+6P,EAAY3kb,EAAI2lL,KAAJ,EAAcpoK,KAAKlU,SAAS,UAC5CugL,GAAO,eAAiB+6P,EAAY,KAGpC,IAAIhtP,EAAY,IAAIp0L,KAKpB,OAJAqmL,GAAO,YAAc66P,EAAgB9sP,GAAa,KAClD/N,GAAO,YAAc66P,EAAgB9sP,GAAa,KAClD/N,GAAO,aAAe66P,EAAgB9sP,GAAa,KAE3ChsD,EAAOvtH,KAAKwrK,EAAK,QACzB,CAOUg7P,CAAW5kb,GAEnB,MAAO,IAAI0Q,MAAM,0BAA4B1Q,EAAIoG,KAElD,CAAM,MAAI+oV,EAAIC,MAAMpvV,GAMb,IAAI0Q,MAAM,sDAGV,IAAIA,MAAM,iCAElB,GAvRD,IAAI+rJ,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OACrBt8F,EAAQs8F,EAAQ,OAIhB0sQ,GAHY1sQ,EAAQ,OACdA,EAAQ,OAEG,CACpB,WAAa,EACb,aAAe,EACf,aAAe,GACf,oBAAsB,GACtB,oBAAsB,KAQnBirQ,EAAqB,CAAC,EAsF1B,SAASE,EAAav9a,GACrB,OAAQ4lI,EAAOvtH,KAAKrY,EAAE26D,MAAM,KAAK,GAAI,SACrC,CAyED,SAAS+jX,EAAgB1kQ,GACxB,IAEI+kQ,EAFO/kQ,EAAKglQ,cAAgB,IACnBhlQ,EAAK+9L,WAAa,GACG/9L,EAAK6lC,aAGvC,OAFAk/N,GAAgB,GAAK/kQ,EAAK8lC,cAAgB9lC,EAAK+lC,gBAC/Cg/N,GAAgB/kQ,EAAKgmC,eAErB,CAvKD9lN,OAAOQ,KAAKokb,GAAgBzjb,SAAQ,SAAU0yE,GAC7CsvW,EAAmByB,EAAe/wW,IAAMA,EAAErT,aAC1C,2BC7BDyhG,EAAOx3B,QAAU,CAChBx8B,KAwCD,SAAcg+D,EAAKrtK,GACd8sI,EAAOk2D,SAAS31B,KACnBA,EAAMA,EAAI7iK,SAAS,UACpB,IAAI7H,EAAQ0qK,EAAI5rG,OAAOI,MAAM,aAC7B,GAAIl/D,EAAM7D,OAAS,GAAK6D,EAAM7D,OAAS,EACtC,MAAO,IAAI+S,MAAM,oCAElB,IAAIolQ,EAAOt0Q,EAAM,GACb+b,EAAO/b,EAAM,GAGjB,OAAQwjb,EADRzna,EAAOouH,EAAOvtH,KAAKb,EAAM,UACAu4P,EACzB,EAnDAlqG,OAuBD,SAAgBg4P,EAAM5ja,GAKrB,OAAQ,CACR,EA5BAqxB,KAuLD,SAAcuyY,EAAM5ja,QACaoI,IAA5Bw7Z,EAAK3sQ,WAAW4nR,UACnBjb,EAAK3sQ,WAAW4nR,QAAU,CAAC,GAC5B,IACC,IAAInwU,EAAOwtC,EAAS0nR,GAAM,EAI1B,CAHC,MAAO79Z,GAER,cADQ69Z,EAAK3sQ,WAAW4nR,SAChB,CACR,CACD,IAAI91R,EAAM66Q,EAAK3sQ,WAAW4nR,QACtBwC,OAAWj5a,EACE,QAAbpI,EAAIoG,MAA+B,QAAbpG,EAAIoG,OAC7Bi7a,EAAW,QACZ,IAAIlnS,EAASn6I,EAAI01Q,WAAW2rK,GAG5B,OAFAlnS,EAAOsnD,MAAM/yF,GACbq6C,EAAI3R,UAAY+C,EAAO9oH,QACf,CACR,EAvMA4zZ,UAyMD,SAAmBrhB,EAAMzpR,EAAQ38I,QACA4K,IAA5Bw7Z,EAAK3sQ,WAAW4nR,UACnBjb,EAAK3sQ,WAAW4nR,QAAU,CAAC,GAC5B,IACC,IAAInwU,EAAOwtC,EAAS0nR,GAAM,EAK1B,CAJC,MAAO79Z,GAGR,cAFQ69Z,EAAK3sQ,WAAW4nR,aACxBrhb,EAAKuI,EAEL,CACD,IAAIgjJ,EAAM66Q,EAAK3sQ,WAAW4nR,QAE1B1kS,EAAOzrC,GAAM,SAAU9wG,EAAKw5I,GAC3B,GAAIx5I,EACHJ,EAAKI,OADN,CAIA,IAKCw5I,EAAU8E,SAAS,MAInB,CAHC,MAAOn2I,GAER,YADAvI,EAAKuI,EAEL,CACDgjJ,EAAI3R,UAAYA,EAChB55I,GAZC,CAaD,GACD,EAtOAikM,MAwOD,SAAemiO,EAAM/ka,QACJuJ,IAAZvJ,IACHA,EAAU,CAAC,GAEZ,IAAI6vG,EAAOwtC,EAAS0nR,GAChBh6O,EAAMs7P,EAAYthB,EAAKga,YAAc,IAAMlvU,EAAKrlG,SAAS,UACzDxK,EAAQowV,UACXrlK,EAAMA,EAAM,IAAM/qL,EAAQowV,SAC3B,OAAQrlK,CACR,EA9OAo7P,WAAYA,EACZ9oS,SAAUA,GAGX,IAAIugB,EAAS0b,EAAQ,OACjBgtQ,EAAYhtQ,EAAQ,OACpBkwD,EAASlwD,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACfg3K,EAAMh3K,EAAQ,OAEdolQ,GADaplQ,EAAQ,OACVA,EAAQ,QACnB4qQ,EAAU5qQ,EAAQ,OAClBtM,EAAYsM,EAAQ,OACpBt8F,EAAQs8F,EAAQ,OAChBglQ,EAAchlQ,EAAQ,OAU1B,IAAI2rE,EAAQ,CACX,KAAQ,EACR,KAAQ,GAET7jP,OAAOQ,KAAKqjP,GAAO1iP,SAAQ,SAAU0yE,GAAKgwK,EAAMA,EAAMhwK,IAAMA,CAAI,IAEhE,IAAIsxW,EAAa,6CAgBjB,SAASJ,EAAWzna,EAAMu4P,EAAM1yD,GAC/B,IAAIiiO,EAAS,IAAIF,EAAU,CAAE9tY,OAAQ95B,IACjC+na,EAAYD,EAAOnvN,aACvB,QAAa9tN,IAAT0tQ,GAAsBwvK,IAAcxvK,EACvC,MAAO,IAAIplQ,MAAM,2CACLtI,IAAT0tQ,IACHA,EAAOwvK,GAER,IAAI1hB,EAAO,CACXA,WAAkB,CAAC,GACnBA,EAAK3sQ,WAAW4nR,QAAU,CAAC,EAE3Bjb,EAAK3sQ,WAAW4nR,QAAQrlS,MAAQ6rS,EAAOE,aAEvC,IAAIvlb,EAAM,CAAC,EACPwB,EAASxB,EAAIwB,MAAQ,GACzBxB,EAAIoG,KAgQL,SAAgBo/a,GACf,GAAiB,iCAAbA,EACH,MAAQ,MACT,GAAiB,iCAAbA,EACH,MAAQ,MACT,GAAIA,EAAS/jb,MAAM2jb,GAClB,MAAQ,QACT,GAAiB,qCAAbI,EACH,MAAQ,UACT,MAAO,IAAI90a,MAAM,yBAA2B80a,EAC5C,CA1QWC,CAAO3vK,GAGlB,IADA,IAAI4vK,EAAYtI,EAAKv1a,KAAK7H,EAAIoG,MAAM5E,MAAM7D,OACnC6D,EAAM7D,OAAS+nb,GACrBlkb,EAAM/D,KAAK4nb,EAAOM,YACnBlpR,EAAO6jC,GAAG9+L,EAAM7D,QAAU,EAAG,mCAE7B,IAAIk/a,EAAUO,EAAKv1a,KAAK7H,EAAIoG,MAC5B,GAAiB,UAAbpG,EAAIoG,KAAkB,CACzB,IAAIurG,EAAMyzU,EAAWjqa,KAAK26P,GAC1Br5G,EAAO6jC,GAAW,OAAR3uF,GACV8qD,EAAOogE,YAAYlrH,EAAI,GAAInwG,EAAM,GAAG+b,KAAKlU,WACzC,CAED,IAAK,IAAI1M,EAAI,EAAGA,EAAIkgb,EAAQr7a,MAAM7D,SAAUhB,EAE3C,GADA6E,EAAM7E,GAAG0c,KAAOwja,EAAQr7a,MAAM7E,GACR,UAAlB6E,EAAM7E,GAAG0c,OACa,IAAtBwja,EAAQlsa,UAAqB,CAChC,IAAI4J,EAAI/Y,EAAM7E,GACd4d,EAAEgD,KAAOs+D,EAAMilW,YAAYvma,EAAEgD,KAC7B,CAGFqmZ,EAAKga,WAAa,IAAIzuF,EAAInvV,GAE1B4ja,EAAKka,OAASuH,EAAOO,YAErB,IAAIx/a,EAAO09O,EAAMuhM,EAAO1vN,WACxBl5D,EAAOxhJ,OAAO7U,EAAM,mBAEpBw9Z,EAAK3sQ,WAAW4nR,QAAQnxF,MAAQ23F,EAAOnvN,aAKvC,IAHA,IAAI2vN,EAAa,GACbC,EAAOT,EAAOE,aACdQ,EAAU,IAAIZ,EAAU,CAAE9tY,OAAQyuY,KAC9BC,EAAQnoU,SACfioU,EAAWpob,KAAKsob,EAAQ7vN,cACC,IAAtB2vN,EAAWlob,SACdkob,EAAa,CAAC,MAEfjiB,EAAK8Z,SAAWmI,EAAWlhb,KAAI,SAAUyxa,GACxC,GAAa,SAAThwa,EACH,OAAQm3a,EAASyI,QAAQ5P,GACrB,GAAa,SAAThwa,EACR,OAAQm3a,EAAS0I,QAAQ7P,GAC1B,MAAO,IAAI1la,MAAM,yBAA2BtK,EAC5C,IAEDw9Z,EAAKma,UAAYmI,EAAYb,EAAOO,aACpChiB,EAAKoa,WAAakI,EAAYb,EAAOO,aAKrC,IAHA,IAEI1sT,EAFAi8O,EAAO,GACPgxE,EAAS,IAAIhB,EAAU,CAAE9tY,OAAQguY,EAAOE,gBAEpCY,EAAOvoU,UACdsb,EAAM,CAAEktT,UAAU,IACd/sa,KAAO8sa,EAAOjwN,aAClBh9F,EAAI37G,KAAO4oa,EAAOZ,aAClBpwE,EAAK13W,KAAKy7H,GAGX,IADAitT,EAAS,IAAIhB,EAAU,CAAE9tY,OAAQguY,EAAOE,gBAChCY,EAAOvoU,UACdsb,EAAM,CAAEktT,UAAU,IACd/sa,KAAO8sa,EAAOjwN,aAClBh9F,EAAI37G,KAAO4oa,EAAOZ,aAClBpwE,EAAK13W,KAAKy7H,GAEX0qS,EAAK3sQ,WAAW4nR,QAAQ1pE,KAAOA,EAG/BkwE,EAAOE,aAEP,IAAIc,EAAgBhB,EAAOE,aAC3B3hB,EAAKia,UAAYkF,EAAQ70U,KAAKm4U,GAO9BziB,EAAKlmE,OAAS6/E,EAAS0I,QAAQ,MAE/B,IAAIzE,EAAS6D,EAAOE,aASpB,OARA3hB,EAAK3sQ,WAAW4nR,QAAQznS,UACpBy0B,EAAU7rJ,MAAMwha,EAAQ5d,EAAKia,UAAUz3a,KAAM,YAEjCgC,IAAZg7M,IACHA,EAAQk2I,UAAY+rF,EAAO/rF,YAC3Bl2I,EAAQ7mD,SAAW8oR,EAAO9+Y,SAGnB,IAAI42Y,EAAYvZ,EACxB,CAED,SAASsiB,EAAYh6Q,GACpB,IAAIvvK,EAA0B,WAAtBuvK,EAAIw2B,aAAa,GACzB/lM,GAAKuvK,EAAIw2B,aAAa,GACtB,IAAIprL,EAAI,IAAI/T,KAGZ,OAFA+T,EAAE5T,QAAY,IAAJ/G,GACV2a,EAAEgva,YAAcp6Q,EACR50J,CACR,CAED,SAASiva,EAAYxmQ,GACpB,QAAyB33K,IAArB23K,EAAKumQ,YACR,OAAQvmQ,EAAKumQ,YACd,IAAI3pb,EAAIuI,KAAK0L,MAAMmvK,EAAK4lD,UAAY,KAChC6gN,EAAQthb,KAAKQ,MAAM/I,EAAI,YACvB8pb,EAAQvhb,KAAKQ,MAAM/I,EAAI,YACvBuvK,EAAMvgC,EAAOivD,MAAM,GAGvB,OAFA1uB,EAAIy1B,cAAc6kP,EAAO,GACzBt6Q,EAAIy1B,cAAc8kP,EAAO,GACjBv6Q,CACR,CAiED,SAAShwB,EAAS0nR,EAAM8iB,GACvBjqR,EAAOl8J,OAAOqja,EAAK3sQ,WAAW4nR,QAAS,gCACvC,IAAI91R,EAAM66Q,EAAK3sQ,WAAW4nR,aAERz2a,IAAd2gJ,EAAIvP,QACPuP,EAAIvP,MAAQ6uF,EAAOikC,YAAY,KAChC,IAAIpgG,EAAM,IAAIi5Q,EAAU,CAAC,GACzBj5Q,EAAI2sD,YAAYqsN,EAAYthB,EAAKga,aACjC1xQ,EAAI29B,YAAY9gD,EAAIvP,OAEpB,IAAIx5I,EAAM4ja,EAAKga,WACDR,EAAKv1a,KAAK7H,EAAIoG,MACpB5E,MAAMJ,SAAQ,SAAUukL,GAC/BzZ,EAAIy6Q,UAAU3mb,EAAI2lL,KAAKA,GACvB,IAEDzZ,EAAI06Q,WAAWhjB,EAAKka,QAEpB,IAAI13a,EAAOw9Z,EAAK8Z,SAAS,GAAGt3a,KAC5Bq2J,EAAOqgE,eAAe12N,EAAM,WAC5Bw9Z,EAAK8Z,SAASt8a,SAAQ,SAAUxB,GAC/B68J,EAAOogE,YAAYj9N,EAAGwG,KAAMA,EAC5B,IACDA,EAAO09O,EAAM19O,GACb8lK,EAAIusD,SAASryN,QAEKgC,IAAd2gJ,EAAI2kM,QACP3kM,EAAI2kM,MAAQk2E,EAAK8Z,SAAS,GAAGt3a,KAAO,KAC/Bw9Z,EAAK8Z,SAAS,GAAGmJ,KAAOjjB,EAAK8Z,SAAS,GAAGh9P,WAE/CxU,EAAI2sD,YAAY9vE,EAAI2kM,OAEpB,IAAInkU,EAAM,IAAI47Z,EAAU,CAAC,GACzBvhB,EAAK8Z,SAASt8a,SAAQ,SAAUxB,GAC3BwG,IAAS09O,EAAM3+C,KAClB57K,EAAIsvM,YAAYj5N,EAAG8gL,UACXt6K,IAAS09O,EAAMz/C,MACvB96K,EAAIsvM,YAAYj5N,EAAGinb,IACpB,IACD36Q,EAAI29B,YAAYtgL,EAAI2yH,YAEpBgwB,EAAI06Q,WAAWL,EAAY3iB,EAAKma,YAChC7xQ,EAAI06Q,WAAWL,EAAY3iB,EAAKoa,aAEhC,IAAI7oE,EAAOpsN,EAAIosN,UACF/sW,IAAT+sW,IACHA,EAAO,IAER,IAAIgxE,EAAS,IAAIhB,EAAU,CAAC,GA2B5B,OA1BAhwE,EAAK/zW,SAAQ,SAAU83H,IACD,IAAjBA,EAAIktT,WAERD,EAAOttN,YAAY3/F,EAAI7/G,MACvB8sa,EAAOt8O,YAAY3wE,EAAI37G,MACvB,IACD2uJ,EAAI29B,YAAYs8O,EAAOjqS,YAEvBiqS,EAAS,IAAIhB,EAAU,CAAC,GACxBhwE,EAAK/zW,SAAQ,SAAU83H,IACD,IAAjBA,EAAIktT,WAERD,EAAOttN,YAAY3/F,EAAI7/G,MACvB8sa,EAAOt8O,YAAY3wE,EAAI37G,MACvB,IACD2uJ,EAAI29B,YAAYs8O,EAAOjqS,YAGvBgwB,EAAI29B,YAAYl+D,EAAOivD,MAAM,IAE7BrxK,EAAMw5Z,EAAQthP,MAAMmiO,EAAKia,WACzB3xQ,EAAI29B,YAAYtgL,GAEXm9Z,GACJx6Q,EAAI29B,YAAY9gD,EAAI3R,UAAU8E,SAAS,QAEhCgwB,EAAIhwB,UACZ,CAcD,SAASgpS,EAAYllb,GACpB,GAAiB,QAAbA,EAAIoG,KACP,MAAQ,+BACT,GAAiB,QAAbpG,EAAIoG,KACP,MAAQ,+BACT,GAAiB,UAAbpG,EAAIoG,KACP,MAAQ,cAAgBpG,EAAI4/J,MAAQ,wBACrC,GAAiB,YAAb5/J,EAAIoG,KACP,MAAQ,mCACT,MAAO,IAAIsK,MAAM,wBAA0B1Q,EAAIoG,KAC/C,yBC7VD87J,EAAOx3B,QAAU,CAChBx8B,KA+CD,SAAcg+D,EAAKrtK,EAASiob,GAC3B,IAAI5lT,EAAQgrC,EACS,kBAATA,IACXzP,EAAOplH,OAAO60H,EAAK,OACnBA,EAAMA,EAAI7iK,SAAS,UAGpB,IAEIqG,EAQAqlQ,EAVAn+M,EAAQs1G,EAAI5rG,OAAOI,MAAM,YAGzB4xU,GAAM,EACV,MAAQ5iY,GAAK4iY,EAAK17U,EAAMj5D,QACvB+R,EAAIknD,IAAQ07U,GAAI7wY,MACZ,sEAELg7J,EAAO6jC,GAAG5wL,EAAG,sBAGb,IAAI0hY,EAAKx6U,EAAMj5D,OACf,MAAQo3Q,GAAMq8H,EAAK,GAClBr8H,EAAKn+M,IAAQw6U,GAAI3vY,MACb,oEAELg7J,EAAO6jC,GAAGy0E,EAAI,sBAGdt4G,EAAOE,MAAMjtJ,EAAE,GAAIqlQ,EAAG,IACtB,IAEIq3B,EAFAhmS,EAAOsJ,EAAE,GAAGJ,cAGZI,EAAE,KAEL+sJ,EAAOE,MAAMjtJ,EAAE,GAAIqlQ,EAAG,GAAI,kCAC1Bq3B,EAAM18R,EAAE,GAAG4wD,QAGZ1J,EAAQA,EAAMloD,MAAM4jY,EAAIlB,EAAK,GAE7B,IAcIxxE,EAAQ5/T,EAAKi2K,EAdb/oE,EAAU,CAAC,EACf,KACCt2C,EAAQA,EAAMloD,MAAM,GACpBgB,EAAIknD,EAAM,GAAGn1D,MACT,4BAGJyrG,EAAQx9F,EAAE,GAAGJ,eAAiBI,EAAE,GAQjC,GAJAknD,EAAQA,EAAMloD,MAAM,GAAI,GAAGkyD,KAAK,IAChCsrG,EAAMvgC,EAAOvtH,KAAKw4C,EAAO,UAGrBs2C,EAAQ,aAAc,CACzB,IAAI1rG,EAAQ0rG,EAAQ,aAAaxsC,MAAM,KACvC,GAAiB,MAAbl/D,EAAM,IAA2B,cAAbA,EAAM,GAAoB,CAKjD,GAJoC,kBAAxB3C,EAAQ28W,aACnB38W,EAAQ28W,WAAa7vO,EAAOvtH,KACxBvf,EAAQ28W,WAAY,WAEpB7vO,EAAOk2D,SAAShjM,EAAQ28W,YAC5B,MAAO,IAAIp7S,EAAO2hX,kBACdljb,EAAQ2/W,SAAU,OAEtBh9W,EAAQ0rG,EAAQ,YAAYxsC,MAAM,KAClC+7F,EAAO6jC,GAAoB,IAAjB9+L,EAAM7D,QAChBiiU,EAASp+T,EAAM,GAAG8N,cAClB2mK,EAAKtqC,EAAOvtH,KAAK5c,EAAM,GAAI,OAC3BxB,EAAM67E,EAAMkrW,gBAAgBnnH,EAAQ3pJ,EAChCp3K,EAAQ28W,WAAY,GAAGx7W,GAE5B,CACD,CAED,GAAIosS,GAA6B,cAAtBA,EAAI98R,cAA+B,CAC7C,IACI03a,EADAC,EAAO,IAAIjpO,EAAKub,UAAUrtD,GAE9B+6Q,EAAKvxN,eAELuxN,EAAKvxN,eACLsxN,EAAUC,EAAKvob,OAASuob,EAAKtpb,OAE7B,IAAIo6F,EAASkvV,EAAK5wN,UAClB,GA9Gc,0BA8GVt+H,EACH,MAAO,IAAIrnF,MAAM,4CACAqnF,GAGlBkvV,EAAKvxN,eAELuxN,EAAKvxN,eACL,IAAIwxN,EAASD,EAAKvob,OAASuob,EAAKtpb,OAC5Bwpb,EAASF,EAAK5wN,UAClB,GAvHe,0BAuHX8wN,EACH,MAAO,IAAIz2a,MAAM,0BAA4By2a,GAC9CF,EAAKvxN,eACL,IAAIp8E,EAAO2tS,EAAK/wN,WAAWlY,EAAKsb,IAAIlD,aAAa,GAC7C2iG,EAAakuH,EAAKtxN,UAClB05H,EAAU,OACd,GAAI43F,EAAKvob,OAASwob,EAAQ,CACzBD,EAAKvxN,eACL,IAAI0xN,EAAaH,EAAK5wN,UAEtB,QAAgBjuN,KADhBinV,EAAUg4F,EAAYD,IAErB,MAAO,IAAI12a,MAAM,4BACb02a,EAEL,CACDH,EAAK1gZ,QAAU2gZ,EAEfD,EAAKvxN,eACL,IAAI4xN,EAAYL,EAAK5wN,UAErB,QAAejuN,KADfw3T,EAAS2nH,EAAcD,IAEtB,MAAO,IAAI52a,MAAM,6BACb42a,GAWL,GATArxQ,EAAKgxQ,EAAK/wN,WAAWlY,EAAKsb,IAAIlD,aAAa,GAE3C6wN,EAAK1gZ,QAAUygZ,EACf96Q,EAAM+6Q,EAAK/wN,WAAWlY,EAAKsb,IAAIlD,aAAa,GAER,kBAAxBv3N,EAAQ28W,aACnB38W,EAAQ28W,WAAa7vO,EAAOvtH,KACxBvf,EAAQ28W,WAAY,WAEpB7vO,EAAOk2D,SAAShjM,EAAQ28W,YAC5B,MAAO,IAAIp7S,EAAO2hX,kBACdljb,EAAQ2/W,SAAU,OAGvB,IAAIgpE,EAAQ3rW,EAAM4rW,kBAAkB7nH,GAEpCA,EAAS4nH,EAAME,YACf1nb,EAAM67E,EAAMwxN,OAAOgiD,EAAS/1M,EAAMy/K,EAAYyuH,EAAM75K,QAChD9uQ,EAAQ28W,YACZpvE,OAAMhkS,CACN,CAED,GAAIw3T,GAAU5/T,GAAOi2K,EAAI,CACxB,IACImwB,EADAuhP,EAAet/M,EAAOwoC,iBAAiB+uD,EAAQ5/T,EAAKi2K,GAC7CjxG,EAAS,GAUpB,IATA2iX,EAAa1xR,KAAK,SAAS,SAAUlwJ,GACpC,IAA6C,IAAzCA,EAAEsD,WAAWxH,QAAQ,eACxB,MAAO,IAAI6O,MAAM,wDAGlB,MAAO3K,CACP,IACD4hb,EAAalmP,MAAMv1B,GACnBy7Q,EAAavzY,MAC4B,QAAjCgyJ,EAAQuhP,EAAaz5U,SAC5BlpC,EAAOvnE,KAAK2oM,GACbl6B,EAAMvgC,EAAOmQ,OAAO92E,EACpB,CAGD,GAAIonO,GAA6B,YAAtBA,EAAI98R,cACd,OAAQs4a,EAAQC,eAAezhb,EAAM8lK,EAAKrtK,GAC3C,GAAIutS,GAA6B,SAAtBA,EAAI98R,cACd,OAAQyza,EAAQ+E,SAAS1hb,EAAM8lK,EAAKrtK,GAErC,IAAI8kN,EAAM,IAAI3F,EAAKub,UAAUrtD,GAU7B,OATAy3C,EAAIokO,cAAgB7mT,EAMpByiF,EAAI+R,eAGA02E,GACC06I,GACHrqR,EAAOogE,YAAYiqN,EAAW,SACvBtgE,EAAMwhE,UAAU57I,EAAKhmS,EAAMu9M,KAE/BmjO,GACHrqR,EAAOogE,YAAYiqN,EAAW,SACvBmB,EAAMC,UAAU97I,EAAKhmS,EAAMu9M,GAEpC,EAnOAliB,MAqOD,SAAezhM,EAAKnB,EAASuH,GAC5Bq2J,EAAOl8J,OAAOP,GAEd,IAMI8yH,EANAs5K,EAAM,CACN,MAAS,KACT,IAAO,MACP,IAAO,MACP,QAAW,SACbpsS,EAAIoG,MAGFu9M,EAAM,IAAI3F,EAAKwb,UAEnB,GAAI08E,EAAWm4C,aAAaruV,GACvBoG,GAAiB,UAATA,GACX0sH,EAAS,cACTm1T,EAAME,WAAWxkO,EAAK3jN,KAElBoG,GACHq2J,EAAOogE,YAAYz2N,EAAM,SAC1B0sH,EAASs5K,EAAM,eACfo6E,EAAM4hE,WAAWzkO,EAAK3jN,QAGjB,KAAImvV,EAAIC,MAAMpvV,GAYpB,MAAO,IAAI0Q,MAAM,kCAXbtK,GAAiB,UAATA,GACX0sH,EAASs5K,EAAM,cACfo6E,EAAM4hE,WAAWzkO,EAAK3jN,KAElBoG,GACHq2J,EAAOogE,YAAYz2N,EAAM,SAC1B0sH,EAAS,aACTm1T,EAAME,WAAWxkO,EAAK3jN,GAKvB,CAED,IAAI+X,EAAM4rM,EAAItsK,OAAOhuC,SAAS,UAC1Bge,EAAMtP,EAAIpa,OAAUoa,EAAIpa,OAAS,GACjC,GAAK,GAAmB,EAAdm1H,EAAOn1H,OAAW,GAC5BuuK,EAAMvgC,EAAOivD,MAAMvzK,GACnBkiF,EAAI,EACRA,GAAK2iE,EAAIu1B,MAAM,cAAgB3uE,EAAS,UAAWvpB,GACnD,IAAK,IAAI5sG,EAAI,EAAGA,EAAIob,EAAIpa,QAAU,CACjC,IAAImoL,EAAQnpL,EAAI,GACZmpL,EAAQ/tK,EAAIpa,SACfmoL,EAAQ/tK,EAAIpa,QACb4rG,GAAK2iE,EAAIu1B,MAAM1pL,EAAIrJ,MAAM/R,EAAGmpL,GAAQv8E,GACpC2iE,EAAI3iE,KAAO,GACX5sG,EAAImpL,CACJ,CAGD,OAFAv8E,GAAK2iE,EAAIu1B,MAAM,YAAc3uE,EAAS,UAAWvpB,GAEzC2iE,EAAIx9J,MAAM,EAAG66F,EACrB,GA1RD,IAAIkzD,EAAS0b,EAAQ,OACjB6lC,EAAO7lC,EAAQ,OACfkwD,EAASlwD,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OAETt8F,GADOs8F,EAAQ,OACPA,EAAQ,QAChBg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OAErBquM,EAAQruM,EAAQ,OAChB8vQ,EAAQ9vQ,EAAQ,OAChByvQ,EAAUzvQ,EAAQ,OAClB4qQ,EAAU5qQ,EAAQ,OAElB/3G,EAAS+3G,EAAQ,OAKjBovQ,EAAgB,CACnB,qBAAsB,WACtB,yBAA0B,aAC1B,0BAA2B,cAExBc,EAAgB,CAAC,EACrBpob,OAAOQ,KAAK8mb,GAAenmb,SAAQ,SAAU0yE,GAC5Cu0W,EAAcd,EAAczzW,IAAMA,CAClC,IAED,IAAIuzW,EAAc,CACjB,qBAAsB,OACtB,qBAAsB,SACtB,sBAAuB,UAEpBiB,EAAc,CAAC,EACnBrob,OAAOQ,KAAK4mb,GAAajmb,SAAQ,SAAU0yE,GAC1Cw0W,EAAYjB,EAAYvzW,IAAMA,CAC9B,2BC1CDouF,EAAOx3B,QAAU,CAChBx8B,KAmBD,SAAcg+D,EAAKrtK,GAClB,OAAQomN,EAAI/2G,KAAKg+D,EAAKrtK,EAAS,QAC/B,EApBAmpb,UAiCD,SAAmB57I,EAAKhmS,EAAMu9M,GAC7B,OAAQyoF,GACR,IAAK,MACJ,GAAa,WAAThmS,EACH,OA2BH,SAA4Bu9M,GAE3B,IAAIl0M,EAAI84a,EAAU5kO,EAAK,WACnB59M,EAAIwib,EAAU5kO,EAAK,YAWvB,OAAQ,IAAIwrI,EARF,CACT/oV,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMxX,GACnB,CAAEsT,KAAM,IAAKkE,KAAM9N,KAKrB,CA1CU+4a,CAAmB7kO,GACvB,GAAa,YAATv9M,EACR,OA0CH,SAA6Bu9M,GAC5B,IAAIhmM,EAAU4qa,EAAU5kO,EAAK,WAC7BlnD,EAAOogE,YAAYl/M,EAAQ,GAAI,GAG/B,IAAIlO,EAAI84a,EAAU5kO,EAAK,WACnB59M,EAAIwib,EAAU5kO,EAAK,mBACnBrsM,EAAIixa,EAAU5kO,EAAK,oBACnBppM,EAAIgua,EAAU5kO,EAAK,UACnBjiN,EAAI6mb,EAAU5kO,EAAK,UACnBwgO,EAAQoE,EAAU5kO,EAAK,aACvBygO,EAAQmE,EAAU5kO,EAAK,aACvB6gO,EAAO+D,EAAU5kO,EAAK,QAiB1B,OAAQ,IAAIuyF,EAdF,CACT9vS,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAM9N,GACnB,CAAE4J,KAAM,IAAKkE,KAAMxX,GACnB,CAAEsT,KAAM,IAAKkE,KAAMjG,GACnB,CAAE+B,KAAM,OAAQkE,KAAMina,GACtB,CAAEnra,KAAM,IAAKkE,KAAMhD,GACnB,CAAElB,KAAM,IAAKkE,KAAM7b,GACnB,CAAE2X,KAAM,QAASkE,KAAM4ma,GACvB,CAAE9qa,KAAM,QAASkE,KAAM6ma,KAKzB,CAxEUqE,CAAoB9kO,GAC7B,MAAO,IAAIjzM,MAAM,qBAAuBtK,GACzC,IAAK,MACJ,GAAa,WAATA,EACH,OAwHH,SAA4Bu9M,GAC3B,IAAI3hN,EAAIumb,EAAU5kO,EAAK,KACnBppM,EAAIgua,EAAU5kO,EAAK,KACnBjiN,EAAI6mb,EAAU5kO,EAAK,KACnBnsM,EAAI+wa,EAAU5kO,EAAK,KAYvB,OAAQ,IAAIwrI,EAVF,CACT/oV,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMvb,GACnB,CAAEqX,KAAM,IAAKkE,KAAMhD,GACnB,CAAElB,KAAM,IAAKkE,KAAM7b,GACnB,CAAE2X,KAAM,IAAKkE,KAAM/F,KAKrB,CAzIUkxa,CAAmB/kO,GACvB,GAAa,YAATv9M,EACR,OAoEH,SAA6Bu9M,GAC5B,IAAIhmM,EAAU4qa,EAAU5kO,EAAK,WAC7BlnD,EAAOogE,YAAYl/M,EAAQylL,UAAU,GAAI,GAEzC,IAAI7oL,EAAIgua,EAAU5kO,EAAK,KACnBjiN,EAAI6mb,EAAU5kO,EAAK,KACnBnsM,EAAI+wa,EAAU5kO,EAAK,KACnB3hN,EAAIumb,EAAU5kO,EAAK,KACnB5hN,EAAIwmb,EAAU5kO,EAAK,KAcvB,OAAQ,IAAIuyF,EAXF,CACT9vS,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMhD,GACnB,CAAElB,KAAM,IAAKkE,KAAM7b,GACnB,CAAE2X,KAAM,IAAKkE,KAAM/F,GACnB,CAAE6B,KAAM,IAAKkE,KAAMvb,GACnB,CAAEqX,KAAM,IAAKkE,KAAMxb,KAKrB,CA3FU4mb,CAAoBhlO,GAC7B,MAAO,IAAIjzM,MAAM,qBAAuBtK,GACzC,IAAK,KACL,IAAK,QACJ,GAAa,YAATA,EACH,OAsKH,SAA+Bu9M,GAC9B,IAAIhmM,EAAU4qa,EAAU5kO,EAAK,WAC7BlnD,EAAOogE,YAAYl/M,EAAQylL,UAAU,GAAI,GAGzC,IAAI9rL,EAAIqsM,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,GAE7CzS,EAAI+R,aAAa,KACjB,IAAI91D,EAAQgpR,EAAejlO,GAC3BlnD,EAAOxhJ,OAAO2kJ,EAAO,0BAErB+jD,EAAI+R,aAAa,KACjB,IAAIpnD,EAAIq1C,EAAIuS,WAAWlY,EAAKsb,IAAI5C,WAAW,GAC3CpoD,EAAIzyF,EAAMooW,YAAY31Q,GAEtB,IAAItuK,EAAM,CACToG,KAAM,QACN5E,MAAO,CACN,CAAE6X,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAKwhJ,IACnC,CAAEvmJ,KAAM,IAAKkE,KAAM+wJ,GACnB,CAAEj1J,KAAM,IAAKkE,KAAMjG,KAIrB,OAAQ,IAAI4+R,EAAWl2S,EACvB,CA/LU6ob,CAAsBllO,GAC1B,GAAa,WAATv9M,EACR,OAkIH,SAA8Bu9M,GAC7BA,EAAI+R,eAEJ,IAAIipN,EAAMh7N,EAAI0S,UACd55D,EAAOogE,YAAY8hN,EAAK,oBAAqB,uBAM7C,IAJA,IAEI/+Q,EAFAkpR,EAAWnlO,EAAI0S,UAGfjtD,EAASnpK,OAAOQ,KAAK28a,EAAKh0Q,QACrB37I,EAAI,EAAGA,EAAI27I,EAAOzrK,SAAU8vB,EAAG,CACvC,IAAI7a,EAAIw2J,EAAO37I,GAEf,GADS2vZ,EAAKh0Q,OAAOx2J,GACdoqa,WAAa8L,EAAU,CAC7BlpR,EAAQhtJ,EACR,KACA,CACD,CACD6pJ,EAAOxhJ,OAAO2kJ,EAAO,6BAErB,IAAI0O,EAAIq1C,EAAIuS,WAAWlY,EAAKsb,IAAI5C,WAAW,GAC3CpoD,EAAIzyF,EAAMooW,YAAY31Q,GAEtB,IAAItuK,EAAM,CACToG,KAAM,QACN5E,MAAO,CACN,CAAE6X,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAKwhJ,IACnC,CAAEvmJ,KAAM,IAAKkE,KAAM+wJ,KAIrB,OAAQ,IAAI6gL,EAAInvV,EAChB,CAlKU+ob,CAAqBplO,GAC9B,MAAO,IAAIjzM,MAAM,qBAAuBtK,GACzC,IAAK,QACL,IAAK,QACJ,GAAa,YAATA,EACH,OAiFH,SAA+Bu9M,GAC9B,IAAIhmM,EAAU4qa,EAAU5kO,EAAK,WAC7BlnD,EAAOogE,YAAYl/M,EAAQylL,UAAU,GAAI,GAGzC,IAAItvH,EAAI6vI,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,GAE7CzS,EAAI+R,aAAa,KACjB,IAAIipN,EAAMh7N,EAAI0S,UACd55D,EAAOogE,YAAY8hN,EAAK,cAAe,gCAEvCh7N,EAAI+R,aAAa,KACjB,IAAI7D,EAAIh2I,EAAMmtW,cAAcrlO,GAExB3jN,EAAM,CACToG,KAAM,UACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMotW,gBAAgBp3N,EAAG,KAC5C,CAAEx4M,KAAM,IAAKkE,KAAMu2D,KAIrB,OAAQ,IAAIoiO,EAAWl2S,EACvB,CAxGUkpb,CAAsBvlO,GAC/B,MAAO,IAAIjzM,MAAMtK,EAAO,kCACzB,QACC,MAAO,IAAIsK,MAAM,qBAAuB07R,GAEzC,EA7DA3qG,MAqBD,SAAezhM,EAAKnB,GACnB,OAAQomN,EAAIxjB,MAAMzhM,EAAKnB,EAAS,QAChC,EAtBAupb,WAiPD,SAAoBzkO,EAAK3jN,GAGxB,OAFA2jN,EAAIwV,gBAEIn5N,EAAIoG,MACZ,IAAK,MACA8vS,EAAWm4C,aAAaruV,GAmC9B,SAA8B2jN,EAAK3jN,GAClC,IAAI0/a,EAAM/zS,EAAOvtH,KAAK,CAAC,IACvBulM,EAAI9Z,YAAY61O,EAAK1hO,EAAKsb,IAAIzD,SAE9BlS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKl2K,EAAE8N,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK5/K,EAAEwX,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKruK,EAAEiG,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKprK,EAAEgD,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKjkL,EAAE6b,KAAMygM,EAAKsb,IAAIzD,SACrC71N,EAAI2lL,KAAKw+P,OAAUnkb,EAAI2lL,KAAKy+P,OAChCvoW,EAAMwoW,cAAcrkb,GACrB2jN,EAAI9Z,YAAY7pM,EAAI2lL,KAAKw+P,MAAM5ma,KAAMygM,EAAKsb,IAAIzD,SAC9ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKy+P,MAAM7ma,KAAMygM,EAAKsb,IAAIzD,SAC9ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK6+P,KAAKjna,KAAMygM,EAAKsb,IAAIzD,QAC7C,CAhDEszN,CAAqBxlO,EAAK3jN,GA6B7B,SAA6B2jN,EAAK3jN,GACjC2jN,EAAI9Z,YAAY7pM,EAAI2lL,KAAKl2K,EAAE8N,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK5/K,EAAEwX,KAAMygM,EAAKsb,IAAIzD,QAC1C,CA9BEuzN,CAAoBzlO,EAAK3jN,GAC1B,MACD,IAAK,MACAk2S,EAAWm4C,aAAaruV,GA6C9B,SAA8B2jN,EAAK3jN,GAClC,IAAI0/a,EAAM/zS,EAAOvtH,KAAK,CAAC,IACvBulM,EAAI9Z,YAAY61O,EAAK1hO,EAAKsb,IAAIzD,SAE9BlS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKprK,EAAEgD,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKjkL,EAAE6b,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKnuK,EAAE+F,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK3jL,EAAEub,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK5jL,EAAEwb,KAAMygM,EAAKsb,IAAIzD,QAC1C,CArDEwzN,CAAqB1lO,EAAK3jN,GAuD7B,SAA6B2jN,EAAK3jN,GACjC2jN,EAAI9Z,YAAY7pM,EAAI2lL,KAAK3jL,EAAEub,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKprK,EAAEgD,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKjkL,EAAE6b,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKnuK,EAAE+F,KAAMygM,EAAKsb,IAAIzD,QAC1C,CA1DEyzN,CAAoB3lO,EAAK3jN,GAC1B,MACD,IAAK,QACAk2S,EAAWm4C,aAAaruV,GAwE9B,SAAgC2jN,EAAK3jN,GACpC,IAAI0/a,EAAM/zS,EAAOvtH,KAAK,CAAC,IACvBulM,EAAI9Z,YAAY61O,EAAK1hO,EAAKsb,IAAIzD,SAE9BlS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKruK,EAAEiG,KAAMygM,EAAKsb,IAAIlD,aAE1CzS,EAAIwV,cAAc,KAClB,IAAIv5D,EAAQ5/J,EAAI2lL,KAAK/lB,MAAMriJ,KAAKlU,WAC5By/a,EAAW1L,EAAKh0Q,OAAOxJ,GAAOo9Q,SAClCvgR,EAAOxhJ,OAAO6ta,EAAU,6BACxBnlO,EAAIqV,SAAS8vN,GACbnlO,EAAIyV,cAEJzV,EAAIwV,cAAc,KAClB,IAAI7qD,EAAIzyF,EAAMooW,YAAYjkb,EAAI2lL,KAAKrX,EAAE/wJ,MAAM,GAC3ComM,EAAI9Z,YAAYv7B,EAAG0vC,EAAKsb,IAAI5C,WAC5B/S,EAAIyV,aACJ,CAxFEmwN,CAAuB5lO,EAAK3jN,GAwD/B,SAA+B2jN,EAAK3jN,GACnC2jN,EAAIwV,gBAEJxV,EAAIqV,SAAS,qBACb,IAAIp5D,EAAQ5/J,EAAI2lL,KAAK/lB,MAAMriJ,KAAKlU,WAC5By/a,EAAW1L,EAAKh0Q,OAAOxJ,GAAOo9Q,SAClCvgR,EAAOxhJ,OAAO6ta,EAAU,6BACxBnlO,EAAIqV,SAAS8vN,GAEbnlO,EAAIyV,cAEJ,IAAI9qD,EAAIzyF,EAAMooW,YAAYjkb,EAAI2lL,KAAKrX,EAAE/wJ,MAAM,GAC3ComM,EAAI9Z,YAAYv7B,EAAG0vC,EAAKsb,IAAI5C,UAC5B,CAnEE8yN,CAAsB7lO,EAAK3jN,GAC5B,MACD,IAAK,UACAk2S,EAAWm4C,aAAaruV,GAqF9B,SAAgC2jN,EAAK3jN,GACpC,IAAI0/a,EAAM/zS,EAAOvtH,KAAK,CAAC,IACvBulM,EAAI9Z,YAAY61O,EAAK1hO,EAAKsb,IAAIzD,SAE9BlS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK7xG,EAAEv2D,KAAMygM,EAAKsb,IAAIlD,aAE1CzS,EAAIwV,cAAc,KAClBxV,EAAIqV,SAAS,eACbrV,EAAIyV,cAEJzV,EAAIwV,cAAc,KAClBt9I,EAAM4tW,eAAe9lO,EAAK3jN,EAAI2lL,KAAKksC,EAAEt0M,MACrComM,EAAIyV,aACJ,CAjGEswN,CAAuB/lO,EAAK3jN,GAmG/B,SAA+B2jN,EAAK3jN,GACnC,MAAO,IAAI0Q,MAAM,iDACjB,CAnGEi5a,GACD,MACD,QACC,MAAO,IAAIj5a,MAAM,qBAAuB1Q,EAAIoG,MAG7Cu9M,EAAIyV,aACJ,GA/QD,IAAI38D,EAAS0b,EAAQ,OACjB6lC,EAAO7lC,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACft8F,EAAQs8F,EAAQ,OAEhBg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OACrB8sC,EAAM9sC,EAAQ,OAGdywQ,EADQzwQ,EAAQ,OACOywQ,eAW3B,SAASL,EAAU5kO,EAAKimO,GAGvB,OAFAntR,EAAOogE,YAAYlZ,EAAI4R,OAAQvX,EAAKsb,IAAIzD,QACpC+zN,EAAK,sBACD/tW,EAAMilW,YAAYn9N,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,GAC3D,yBCjCD3zD,EAAOx3B,QAAU,CAChBx8B,KAmBD,SAAcg+D,EAAKrtK,GAClB,OAAQomN,EAAI/2G,KAAKg+D,EAAKrtK,EAAS,QAC/B,EApBAqpb,UAiCD,SAAmB97I,EAAKhmS,EAAMu9M,GAEzBA,EAAI4R,SAAWvX,EAAKsb,IAAIzD,UAC3Bp5D,EAAOogE,YAAYz2N,EAAM,UACrB,6CACJu9M,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,IAGlClS,EAAI+R,eACJ,IAAIn4N,EAAOomN,EAAIjlN,OAASilN,EAAIhmN,OAExBghb,EAAMh7N,EAAI0S,UACd,OAAQsoN,GACR,IAAK,uBAEJ,OADAh7N,EAAIp9K,QAAUhpC,EACD,WAAT6I,EA+BN,SAA4Bu9M,GAE3BA,EAAI+R,aAAa1X,EAAKsb,IAAI5C,WAC1B/S,EAAI2R,WACJ3R,EAAI+R,eAGJ,IAAIjmN,EAAI84a,EAAU5kO,EAAK,WACnB59M,EAAIwib,EAAU5kO,EAAK,YAGnB3jN,EAAM,CACToG,KAAM,MACNjF,OAAQwiN,EAAIokO,cACZvmb,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMxX,GACnB,CAAEsT,KAAM,IAAKkE,KAAM9N,KAIrB,OAAQ,IAAI0/U,EAAInvV,EAChB,CAnDU6pb,CAAmBlmO,GAqD9B,SAA6BA,GAC5BA,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1BzS,EAAI+R,eAEJ,IAAIgqN,EAAM6I,EAAU5kO,EAAK,WACzBlnD,EAAOE,MAAM+iR,EAAI,GAAI,EAAK,mCAG1B,IAAIjwa,EAAI84a,EAAU5kO,EAAK,WACnB59M,EAAIwib,EAAU5kO,EAAK,mBACnBrsM,EAAIixa,EAAU5kO,EAAK,oBACnBppM,EAAIgua,EAAU5kO,EAAK,UACnBjiN,EAAI6mb,EAAU5kO,EAAK,UACnBwgO,EAAQoE,EAAU5kO,EAAK,aACvBygO,EAAQmE,EAAU5kO,EAAK,aACvB6gO,EAAO+D,EAAU5kO,EAAK,QAiB1B,OAAQ,IAAIuyF,EAdF,CACT9vS,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAM9N,GACnB,CAAE4J,KAAM,IAAKkE,KAAMxX,GACnB,CAAEsT,KAAM,IAAKkE,KAAMjG,GACnB,CAAE+B,KAAM,OAAQkE,KAAMina,GACtB,CAAEnra,KAAM,IAAKkE,KAAMhD,GACnB,CAAElB,KAAM,IAAKkE,KAAM7b,GACnB,CAAE2X,KAAM,QAASkE,KAAM4ma,GACvB,CAAE9qa,KAAM,QAASkE,KAAM6ma,KAKzB,CApFU0F,CAAoBnmO,GAC9B,IAAK,oBACJ,MAAa,WAATv9M,EAoFN,SAA4Bu9M,GAC3BA,EAAI+R,eAEJ,IAAIn7M,EAAIgua,EAAU5kO,EAAK,KACnBjiN,EAAI6mb,EAAU5kO,EAAK,KACnBnsM,EAAI+wa,EAAU5kO,EAAK,KAGvBA,EAAI+R,aAAa1X,EAAKsb,IAAI5C,WAC1B/S,EAAI2R,WAEJ,IAAItzN,EAAIumb,EAAU5kO,EAAK,KAavB,OAAQ,IAAIwrI,EAVF,CACT/oV,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMhD,GACnB,CAAElB,KAAM,IAAKkE,KAAM7b,GACnB,CAAE2X,KAAM,IAAKkE,KAAM/F,GACnB,CAAE6B,KAAM,IAAKkE,KAAMvb,KAKrB,CA5GU+nb,CAAmBpmO,GA8G9B,SAA6BA,GAC5BA,EAAI+R,eAEJ,IAAIn7M,EAAIgua,EAAU5kO,EAAK,KACnBjiN,EAAI6mb,EAAU5kO,EAAK,KACnBnsM,EAAI+wa,EAAU5kO,EAAK,KAEvBA,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1B,IAAIr0N,EAAIwmb,EAAU5kO,EAAK,KAGnB3hN,EAAI65E,EAAMmuW,mBAAmBxya,EAAG+C,EAAGxY,GAavC,OAAQ,IAAIm0S,EAXF,CACT9vS,KAAM,MACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMhD,GACnB,CAAElB,KAAM,IAAKkE,KAAM7b,GACnB,CAAE2X,KAAM,IAAKkE,KAAM/F,GACnB,CAAE6B,KAAM,IAAKkE,KAAMvb,GACnB,CAAEqX,KAAM,IAAKkE,KAAMxb,KAKrB,CArIUkob,CAAoBtmO,GAC9B,IAAK,oBACJ,MAAa,WAATv9M,EA8QN,SAA8Bu9M,GAC7B,IAAIumO,EAAYtB,EAAejlO,GAC/BlnD,EAAOxhJ,OAAOiva,EAAW,0BAEzB,IAAI57Q,EAAIq1C,EAAIuS,WAAWlY,EAAKsb,IAAI5C,WAAW,GAC3CpoD,EAAIzyF,EAAMooW,YAAY31Q,GAEtB,IAAItuK,EAAM,CACToG,KAAM,QACN5E,MAAO,CACN,CAAE6X,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAK8ra,IACnC,CAAE7wa,KAAM,IAAKkE,KAAM+wJ,KAIrB,OAAQ,IAAI6gL,EAAInvV,EAChB,CA7RUmqb,CAAqBxmO,GAqOhC,SAA+BA,GAC9B,IAAIumO,EAAYtB,EAAejlO,GAC/BlnD,EAAOxhJ,OAAOiva,EAAW,0BAEzBvmO,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1BzS,EAAI+R,eAEJ,IAAI/3M,EAAU4qa,EAAU5kO,EAAK,WAC7BlnD,EAAOE,MAAMh/I,EAAQ,GAAI,EAAG,gCAE5B,IACI2wJ,EADAh3J,EAAIqsM,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,GAG3B,KAAdzS,EAAI4R,SACP5R,EAAI+R,aAAa,KACjB/R,EAAIp9K,SAAWo9K,EAAIhmN,QAEF,KAAdgmN,EAAI4R,SACP5R,EAAI+R,aAAa,KACjBpnD,EAAIq1C,EAAIuS,WAAWlY,EAAKsb,IAAI5C,WAAW,GACvCpoD,EAAIzyF,EAAMooW,YAAY31Q,IAGvB,QAAUlmK,IAANkmK,EAAiB,CAEpBA,EADUzyF,EAAM2nW,uBAAuB0G,EAAW5ya,GAC1CquK,KAAKrX,EAAE/wJ,IACf,CAED,IAAIvd,EAAM,CACToG,KAAM,QACN5E,MAAO,CACN,CAAE6X,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAK8ra,IACnC,CAAE7wa,KAAM,IAAKkE,KAAM+wJ,GACnB,CAAEj1J,KAAM,IAAKkE,KAAMjG,KAIrB,OAAQ,IAAI4+R,EAAWl2S,EACvB,CAzQUoqb,CAAsBzmO,GAChC,IAAK,cACJ,MAAa,WAATv9M,EA2RN,SAA8Bu9M,GACV,IAAfA,EAAI4R,QACP5R,EAAI2R,WAEL,IAAIzD,EAAIh2I,EAAMmtW,cAAcrlO,GAExB3jN,EAAM,CACToG,KAAM,UACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMotW,gBAAgBp3N,EAAG,OAI9C,OAAQ,IAAIs9H,EAAInvV,EAChB,CAxSUqqb,CAAqB1mO,GAuThC,SAA+BA,GACX,IAAfA,EAAI4R,QACP5R,EAAI2R,WAEL3R,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1B,IAGIvE,EAHA/9I,EAAI6vI,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,GAC7CtiJ,EAAI+H,EAAMotW,gBAAgBn1W,EAAG,IAGzB6vI,EAAI4R,SAAWvX,EAAKsb,IAAI5C,WAC3B7E,EAAIh2I,EAAMmtW,cAAcrlO,GACxBkO,EAAIh2I,EAAMotW,gBAAgBp3N,EAAG,KAE7BA,EAAIh2I,EAAMyuW,uBAAuBx2W,GAGlC,IAAI9zE,EAAM,CACToG,KAAM,UACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMotW,gBAAgBp3N,EAAG,KAC5C,CAAEx4M,KAAM,IAAKkE,KAAMs+D,EAAMotW,gBAAgBn1W,EAAG,OAI9C,OAAQ,IAAIoiO,EAAWl2S,EACvB,CA9UUuqb,CAAsB5mO,GAEhC,IAAK,cACJ,MAAa,WAATv9M,EAqSN,SAA+Bu9M,GAC9B,IAAIkO,EAAIh2I,EAAMmtW,cAAcrlO,GAExB3jN,EAAM,CACToG,KAAM,aACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMotW,gBAAgBp3N,EAAG,OAI9C,OAAQ,IAAIs9H,EAAInvV,EAChB,CA/SUwqb,CAAsB7mO,GA4UjC,SAAgCA,GACZ,IAAfA,EAAI4R,QACP5R,EAAI2R,WAEL3R,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1B,IAAItiJ,EAAI6vI,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,GAC7CtiJ,EAAI+H,EAAMotW,gBAAgBn1W,EAAG,IAE7B,IAAI+9I,EAAIh2I,EAAM4uW,sBAAsB32W,GAEhC9zE,EAAM,CACToG,KAAM,aACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMotW,gBAAgBp3N,EAAG,KAC5C,CAAEx4M,KAAM,IAAKkE,KAAMs+D,EAAMotW,gBAAgBn1W,EAAG,OAI9C,OAAQ,IAAIoiO,EAAWl2S,EACvB,CA7VU0qb,CAAuB/mO,GAEjC,QACC,MAAO,IAAIjzM,MAAM,wBAA0Biua,GAE5C,EA5EAl9O,MAqBD,SAAezhM,EAAKnB,GACnB,OAAQomN,EAAIxjB,MAAMzhM,EAAKnB,EAAS,QAChC,EAtBAspb,WAAYA,EACZwC,cAoaD,SAAuB3qb,GACtB,IAAI2jN,EAAM,IAAI3F,EAAKwb,UAEnB,OADA2uN,EAAWxkO,EAAK3jN,GACR2jN,EAAItsK,MACZ,EAtaAuxY,eAAgBA,EAChBgC,gBAAiBA,GAGlB,IAAInuR,EAAS0b,EAAQ,OACjB6lC,EAAO7lC,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACft8F,EAAQs8F,EAAQ,OAChBg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OACrB8sC,EAAM9sC,EAAQ,OAWlB,SAASowQ,EAAU5kO,EAAKimO,GAGvB,OAFAntR,EAAOogE,YAAYlZ,EAAI4R,OAAQvX,EAAKsb,IAAIzD,QACpC+zN,EAAK,sBACD/tW,EAAMilW,YAAYn9N,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,GAC3D,CAgKD,SAAS+yN,EAAejlO,GACvB,IAAIumO,EAAWW,EACXp9Z,EAAG7a,EAAG4nX,EAEV,GAAI72K,EAAI4R,SAAWvX,EAAKsb,IAAIhD,IAAK,CAChC,IAAIqoN,EAAMh7N,EAAI0S,UAGd,IADAw0N,EAAa5qb,OAAOQ,KAAK28a,EAAKh0Q,QACzB37I,EAAI,EAAGA,EAAIo9Z,EAAWltb,SAAU8vB,EAGpC,GAFA7a,EAAIi4a,EAAWp9Z,IACf+sW,EAAK4iD,EAAKh0Q,OAAOx2J,IACVoqa,WAAa2B,EAAK,CACxBuL,EAAYt3a,EACZ,KACA,CAGF,KAAM,CAEN+wM,EAAI+R,eACJ,IAAI/3M,EAAUgmM,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,GAC/Cp5D,EAAOogE,YAAYl/M,EAAQ,GAAI,EAAG,2BAElC,IAAIiiJ,EAAQ,CAAC,EAGb+jD,EAAI+R,eACJ,IAAIo1N,EAAennO,EAAI0S,UACvB55D,EAAOogE,YAAYiuN,EAAc,oBAC7B,uCACJ,IAAIvwa,EAAIqlJ,EAAMrlJ,EAAIshE,EAAMilW,YACpBn9N,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,IAKrCj2D,EAAMrkJ,KAAkB,EAAXhB,EAAE5c,OAAak+E,EAAMkvW,WAAWxwa,GAG7CopM,EAAI+R,eACJ91D,EAAM/2J,EAAIgzE,EAAMilW,YACZn9N,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,IACzCx2D,EAAMjtJ,EAAIkpE,EAAMilW,YACZn9N,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,IACrCzS,EAAI4R,SAAWvX,EAAKsb,IAAI5C,YAC3B92D,EAAMxtJ,EAAIuxM,EAAIuS,WAAWlY,EAAKsb,IAAI5C,WAAW,IAG9C92D,EAAM0tG,EAAI3pD,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,GAC/C35D,EAAOogE,YAAYj9D,EAAM0tG,EAAE,GAAI,EAC3B,8BAEJ1tG,EAAMnwJ,EAAIosE,EAAMilW,YACZn9N,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,IACrCj2D,EAAMnoJ,EAAIokE,EAAMilW,YACZn9N,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,IACrCp5D,EAAOogE,YAAYj9D,EAAMnoJ,EAAE,GAAI,EAAK,kCAGpCoza,EAAa5qb,OAAOQ,KAAK28a,EAAKh0Q,QAC9B,IAAI4hN,EAAK/qX,OAAOQ,KAAKm/J,GACrB,IAAKnyI,EAAI,EAAGA,EAAIo9Z,EAAWltb,SAAU8vB,EAAG,CACvC7a,EAAIi4a,EAAWp9Z,GACf+sW,EAAK4iD,EAAKh0Q,OAAOx2J,GAEjB,IADA,IAAI+pJ,GAAQ,EACHhgK,EAAI,EAAGA,EAAIquX,EAAGrtX,SAAUhB,EAAG,CACnC,IAAIm3E,EAAIk3S,EAAGruX,GACX,QAAcyL,IAAVoyX,EAAG1mT,GAEP,GAAuB,kBAAX0mT,EAAG1mT,SACM1rE,IAAjBoyX,EAAG1mT,GAAGzmD,QACT,IAAKmtW,EAAG1mT,GAAGzmD,OAAOuyI,EAAM9rF,IAAK,CAC5B6oF,GAAQ,EACR,KACA,OACK,GAAIhxB,EAAOk2D,SAAS24L,EAAG1mT,KAC7B,GAAI0mT,EAAG1mT,GAAGzqE,SAAS,YACXu2J,EAAM9rF,GAAGzqE,SAAS,UAAW,CACpCszJ,GAAQ,EACR,KACA,OAED,GAAI69N,EAAG1mT,KAAO8rF,EAAM9rF,GAAI,CACvB6oF,GAAQ,EACR,KACA,CAEF,CACD,GAAIA,EAAO,CACVutR,EAAYt3a,EACZ,KACA,CACD,CACD,CACD,OAAQs3a,CACR,CA+ID,SAAS/B,EAAWxkO,EAAK3jN,GAGxB,GAFA2jN,EAAIwV,gBAEA+8E,EAAWm4C,aAAaruV,GAAM,CACjC,IAAIgrb,EAAWr/S,EAAOvtH,KAAK,CAAC,IAC5BulM,EAAI9Z,YAAYmhP,EAAUhtO,EAAKsb,IAAIzD,QACnC,CAGD,OADAlS,EAAIwV,gBACIn5N,EAAIoG,MACZ,IAAK,MACJu9M,EAAIqV,SAAS,wBACTk9E,EAAWm4C,aAAaruV,GAiC9B,SAA8BA,EAAK2jN,GAClCA,EAAI+U,YACJ/U,EAAIyV,cAEJzV,EAAIwV,cAAcnb,EAAKsb,IAAIlD,aAC3BzS,EAAIwV,gBAEJ,IAAIx7M,EAAUguH,EAAOvtH,KAAK,CAAC,IAC3BulM,EAAI9Z,YAAYlsL,EAASqgM,EAAKsb,IAAIzD,SAElClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKl2K,EAAE8N,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK5/K,EAAEwX,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKruK,EAAEiG,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKprK,EAAEgD,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKjkL,EAAE6b,KAAMygM,EAAKsb,IAAIzD,SACrC71N,EAAI2lL,KAAKw+P,OAAUnkb,EAAI2lL,KAAKy+P,OAChCvoW,EAAMwoW,cAAcrkb,GACrB2jN,EAAI9Z,YAAY7pM,EAAI2lL,KAAKw+P,MAAM5ma,KAAMygM,EAAKsb,IAAIzD,SAC9ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKy+P,MAAM7ma,KAAMygM,EAAKsb,IAAIzD,SAC9ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK6+P,KAAKjna,KAAMygM,EAAKsb,IAAIzD,SAE7ClS,EAAIyV,cACJzV,EAAIyV,aACJ,CAvDE6xN,CAAqBjrb,EAAK2jN,GAyD7B,SAA6B3jN,EAAK2jN,GACjCA,EAAI+U,YACJ/U,EAAIyV,cAEJzV,EAAIwV,cAAcnb,EAAKsb,IAAI5C,WAC3B/S,EAAI4U,UAAU,GAEd5U,EAAIwV,gBACJxV,EAAI9Z,YAAY7pM,EAAI2lL,KAAKl2K,EAAE8N,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK5/K,EAAEwX,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAIyV,cAEJzV,EAAIyV,aACJ,CApEE8xN,CAAoBlrb,EAAK2jN,GAC1B,MACD,IAAK,MACJA,EAAIqV,SAAS,qBACTk9E,EAAWm4C,aAAaruV,GAkE9B,SAA8BA,EAAK2jN,GAClCA,EAAIwV,gBACJxV,EAAI9Z,YAAY7pM,EAAI2lL,KAAKprK,EAAEgD,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKjkL,EAAE6b,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKnuK,EAAE+F,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAIyV,cAEJzV,EAAIyV,cAEJzV,EAAIwV,cAAcnb,EAAKsb,IAAIlD,aAC3BzS,EAAI9Z,YAAY7pM,EAAI2lL,KAAK5jL,EAAEwb,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAIyV,aACJ,CA7EE+xN,CAAqBnrb,EAAK2jN,GA+E7B,SAA6B3jN,EAAK2jN,GACjCA,EAAIwV,gBACJxV,EAAI9Z,YAAY7pM,EAAI2lL,KAAKprK,EAAEgD,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKjkL,EAAE6b,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKnuK,EAAE+F,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAIyV,cACJzV,EAAIyV,cAEJzV,EAAIwV,cAAcnb,EAAKsb,IAAI5C,WAC3B/S,EAAI4U,UAAU,GACd5U,EAAI9Z,YAAY7pM,EAAI2lL,KAAK3jL,EAAEub,KAAMygM,EAAKsb,IAAIzD,SAC1ClS,EAAIyV,aACJ,CAzFEgyN,CAAoBprb,EAAK2jN,GAC1B,MACD,IAAK,QACJA,EAAIqV,SAAS,qBACTk9E,EAAWm4C,aAAaruV,GAyI9B,SAAgCA,EAAK2jN,GACpCinO,EAAgB5qb,EAAK2jN,GACrBA,EAAIyV,cAEJzV,EAAIwV,cAAcnb,EAAKsb,IAAIlD,aAC3BzS,EAAIwV,gBAEJ,IAAIx7M,EAAUguH,EAAOvtH,KAAK,CAAC,IAC3BulM,EAAI9Z,YAAYlsL,EAASqgM,EAAKsb,IAAIzD,SAElClS,EAAI9Z,YAAY7pM,EAAI2lL,KAAKruK,EAAEiG,KAAMygM,EAAKsb,IAAIlD,aAE1CzS,EAAIwV,cAAc,KAClB,IAAI7qD,EAAIzyF,EAAMooW,YAAYjkb,EAAI2lL,KAAKrX,EAAE/wJ,MAAM,GAC3ComM,EAAI9Z,YAAYv7B,EAAG0vC,EAAKsb,IAAI5C,WAC5B/S,EAAIyV,cAEJzV,EAAIyV,cACJzV,EAAIyV,aACJ,CA3JEiyN,CAAuBrrb,EAAK2jN,GAgI/B,SAA+B3jN,EAAK2jN,GACnCinO,EAAgB5qb,EAAK2jN,GACrBA,EAAIyV,cAEJ,IAAI9qD,EAAIzyF,EAAMooW,YAAYjkb,EAAI2lL,KAAKrX,EAAE/wJ,MAAM,GAC3ComM,EAAI9Z,YAAYv7B,EAAG0vC,EAAKsb,IAAI5C,UAC5B,CApIE40N,CAAsBtrb,EAAK2jN,GAC5B,MACD,IAAK,UAEJ,GADAA,EAAIqV,SAAS,eACTk9E,EAAWm4C,aAAaruV,GAC3B,MAAO,IAAI0Q,MAAM,2DAsJpB,SAA+B1Q,EAAK2jN,GACnCA,EAAIyV,cAEJv9I,EAAM4tW,eAAe9lO,EAAK3jN,EAAI2lL,KAAKksC,EAAEt0M,KACrC,CAxJCgua,CAAsBvrb,EAAK2jN,GAC3B,MACD,QACC,MAAO,IAAIjzM,MAAM,yBAA2B1Q,EAAIoG,MAGjDu9M,EAAIyV,aACJ,CAsED,SAASwxN,EAAgB5qb,EAAK2jN,GAC7B,IAAI/jD,EAAQw9Q,EAAKh0Q,OAAOppK,EAAI4/J,OAC5B,GAAIA,EAAMo9Q,SAETr5N,EAAIqV,SAASp5D,EAAMo9Q,cAEb,CAENr5N,EAAIwV,gBAEJ,IAAIx7M,EAAUguH,EAAOvtH,KAAK,CAAC,IAC3BulM,EAAI9Z,YAAYlsL,EAASqgM,EAAKsb,IAAIzD,SAGlClS,EAAIwV,gBACJxV,EAAIqV,SAAS,qBACbrV,EAAI9Z,YAAYjqC,EAAMrlJ,EAAGyjM,EAAKsb,IAAIzD,SAClClS,EAAIyV,cAGJzV,EAAIwV,gBACJ,IAAItwN,EAAI+2J,EAAMrlJ,EACD,IAAT1R,EAAE,KACLA,EAAIA,EAAE6F,MAAM,IACbi1M,EAAI9Z,YAAYhhM,EAAGm1M,EAAKsb,IAAIlD,aAC5BzS,EAAI9Z,YAAYjqC,EAAMjtJ,EAAGqrM,EAAKsb,IAAIlD,aAClCzS,EAAI9Z,YAAYjqC,EAAMxtJ,EAAG4rM,EAAKsb,IAAI5C,WAClC/S,EAAIyV,cAEJzV,EAAI9Z,YAAYjqC,EAAM0tG,EAAGtvD,EAAKsb,IAAIlD,aAClCzS,EAAI9Z,YAAYjqC,EAAMnwJ,EAAGuuM,EAAKsb,IAAIzD,SAClC,IAAIp+M,EAAImoJ,EAAMnoJ,EACTA,IACJA,EAAIk0H,EAAOvtH,KAAK,CAAC,KAElBulM,EAAI9Z,YAAYpyL,EAAGumM,EAAKsb,IAAIzD,SAG5BlS,EAAIyV,aACJ,CACD,yBCxkBDl3D,EAAOx3B,QAAU,CAChBx8B,KAeD,SAAcg+D,EAAKrtK,GAClB,IAEI2C,EAEAgqb,EAJA50X,EAAQs1G,EAAI7iK,SAAS,SAASq3D,MAAM,WACpCqiL,GAAQ,EAERuvJ,EAAK,EAET,KAAOA,EAAK17U,EAAMj5D,QAEjB,IADA6D,EAAQiqb,EAAY70X,EAAM07U,SAEzBk5C,EAAgB,CACf,wBAAyB,EACzB,wBAAyB,GACxBhqb,EAAM,GAAG8N,gBACQ,CAClByzO,GAAQ,EACR,KACA,CAGH,IAAKA,EACJ,MAAO,IAAIryO,MAAM,oCAElB,IAAI07R,EAAM5qS,EAAM,GAEhBA,EAAQiqb,EAAY70X,EAAM07U,MAC1B71O,EAAOE,MAAMn7J,EAAM,GAAG8N,cAAe,cACrC,IAAIo8a,EAAalqb,EAAM,GAEvBA,EAAQiqb,EAAY70X,EAAM07U,MAC1B71O,EAAOE,MAAMn7J,EAAM,GAAG8N,cAAe,WACrC,IAAI2/U,EAAUztV,EAAM,GAEpBA,EAAQiqb,EAAY70X,EAAM07U,MAC1B71O,EAAOE,MAAMn7J,EAAM,GAAG8N,cAAe,gBACrC,IAAIq8a,EAActwa,SAAS7Z,EAAM,GAAI,IACrC,IAAKmoC,SAASgiZ,IAAgBA,EAAc,GACxCA,EAAc/0X,EAAMj5D,OACvB,MAAO,IAAI+S,MAAM,8BAGlB,IAAIk7a,EAAYjgT,EAAOvtH,KACnBw4C,EAAMloD,MAAM4jY,EAAIA,EAAKq5C,GAAa/qX,KAAK,IAAK,UAC5CirX,EAAU9I,EAAQ+I,aAAa1/I,GAC/BpsS,EAAM+ib,EAAQ70U,KAAK09U,GACvB,GAAI5rb,EAAIoG,OAASylb,EAChB,MAAO,IAAIn7a,MAAM,gCAIlB,GAAIkmD,EADJ07U,GAAMq5C,GACS,CACdnqb,EAAQiqb,EAAY70X,EAAM07U,MAC1B71O,EAAOE,MAAMn7J,EAAM,GAAG8N,cAAe,iBACrC,IAAIy8a,EAAe1wa,SAAS7Z,EAAM,GAAI,IACtC,IAAKmoC,SAASoiZ,IAAiBA,EAAe,GAC1CA,EAAen1X,EAAMj5D,OACxB,MAAO,IAAI+S,MAAM,+BAGlB,IAAIs7a,EAAargT,EAAOvtH,KACvBw4C,EAAMloD,MAAM4jY,EAAIA,EAAKy5C,GAAcnrX,KAAK,IAAK,UAE9C,GAAmB,SAAf8qX,GAA2C,IAAlBF,EAC5B,MAAM,IAAI96a,MAAM,8DAIjB,GAAmB,eAAfg7a,EAA6B,CAChC,IAAK7sb,EAAQ28W,WACZ,MAAO,IAAIp7S,EAAO2hX,kBACjBljb,EAAQ2/W,SAAU,OAGpB,IAAIvoM,EAAKtqC,EAAOivD,MAAM,GAAI,GACtB2/C,EAAWlS,EAAOwoC,iBACrB,cAiDJ,SAAiC2qG,GAChC,IAAIywE,EAAQ5jN,EAAOqB,WAAW,QAAQ7lN,OAAO8nH,EAAOmQ,OAAO,CAC1DnQ,EAAOvtH,KAAK,CAAC,EAAG,EAAG,EAAG,IACtButH,EAAOvtH,KAAKo9V,MACT9wM,SACAy3Q,EAAQ95M,EAAOqB,WAAW,QAAQ7lN,OAAO8nH,EAAOmQ,OAAO,CAC1DnQ,EAAOvtH,KAAK,CAAC,EAAG,EAAG,EAAG,IACtButH,EAAOvtH,KAAKo9V,MACT9wM,SACJ,OAAQ/+B,EAAOmQ,OAAO,CAACmwS,EAAO9J,IAAQzza,MAAM,EAAG,GAC/C,CA1DGw9a,CAAwBrtb,EAAQ28W,YAChCvlM,GACDskE,EAASo3B,gBAAe,GACxBq6K,EAAargT,EAAOmQ,OAAO,CAC1By+F,EAAS12N,OAAOmoa,GAAazxM,EAASw1B,SACvC,CAGD,IADA/vQ,EAAM,IAAIk2S,EAAWl2S,IACboG,OAASylb,EAChB,MAAO,IAAIn7a,MAAM,gCAGlB,IACIy7a,EADA9G,EAAS,IAAIF,EAAU,CAAC9tY,OAAQ20Y,IAEpC,GAAY,YAAR5/I,EACH+/I,EAAkB,CAAE,CACnB9ya,KAAM,IACNkE,KAAM8na,EAAOE,oBAER,GAAY,YAARn5I,EACV+/I,EAAkB,CACjB,CAAE9ya,KAAM,IAAKkE,KAAM8na,EAAOE,cAC1B,CAAElsa,KAAM,IAAKkE,KAAM8na,EAAOE,cAC1B,CAAElsa,KAAM,IAAKkE,KAAM8na,EAAOE,cAC1B,CAAElsa,KAAM,OAAQkE,KAAM8na,EAAOE,oBAExB,GAAIn5I,EAAI3qS,MAAM,qBACpB0qb,EAAkB,CAAE,CACnB9ya,KAAM,IAAKkE,KAAM8na,EAAOE,mBAEnB,IAAY,gBAARn5I,EAKV,MAAM,IAAI17R,MAAM,6BAA+B07R,GAJ/C+/I,EAAkB,CAAE,CACnB9ya,KAAM,IAAKkE,KAAM8na,EAAOE,cAIzB,CAEDvlb,EAAM,IAAIk2S,EAAW,CACpB9vS,KAAMpG,EAAIoG,KACV5E,MAAOxB,EAAIwB,MAAMs6I,OAAOqwS,IAEzB,CAGD,OADAnsb,EAAIivV,QAAUA,EACNjvV,CACR,EAvIAyhM,MAiKD,SAAezhM,EAAKnB,GAEnB,GADA49J,EAAOl8J,OAAOP,IACTmvV,EAAIC,MAAMpvV,GACd,MAAO,IAAI0Q,MAAM,wBAElB,IAAI07R,EAAM22I,EAAQqJ,aAAapsb,GAC3BksK,EAAM62Q,EAAQthP,MAAMzhM,GACpBivV,EAAUjvV,EAAIivV,SAAW,GAGzBr4R,EAUL,SAAcy1X,EAAKhla,GAClB,IAAIuvC,EAAQ,GACRzwD,EAAM,EACV,KAAOA,EAAMkmb,EAAI1ub,QAChBi5D,EAAMn5D,KAAK4ub,EAAI39a,MAAMvI,EAAKA,EAAM,KAChCA,GAAO,GAER,OAAQywD,CACR,CAlBYr2C,CADF2rJ,EAAI7iK,SAAS,WAQvB,OALAutD,EAAMxP,QAAQ,iBAAmBwP,EAAMj5D,QACvCi5D,EAAMxP,QAAQ,YAAc6nS,GAC5Br4R,EAAMxP,QAAQ,oBACdwP,EAAMxP,QAAQ,0BAA4BglP,GAElCzgK,EAAOvtH,KAAKw4C,EAAMgK,KAAK,MAAQ,KACvC,GAhLD,IAAI67F,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACT4qQ,EAAU5qQ,EAAQ,OAClBg3K,EAAMh3K,EAAQ,OACdgtQ,EAAYhtQ,EAAQ,OACpBkwD,EAASlwD,EAAQ,OACjB+9H,EAAa/9H,EAAQ,OAErB/3G,EAAS+3G,EAAQ,OA0IrB,SAASszQ,EAAYx3Y,GACpB,IAAI4tT,EAAM5tT,EAAKpyC,QAAQ,KACvB,IAAa,IAATggW,EACH,OAAQ,KACT,IAAI/uO,EAAS7+E,EAAKvlC,MAAM,EAAGmzV,GAE3B,MADEA,EACmB,MAAd5tT,EAAK4tT,MACTA,EAEH,MAAQ,CAAC/uO,EADE7+E,EAAKvlC,MAAMmzV,GAEtB,yBCjKD3/L,EAAOx3B,QAAU,CAChBx8B,KAAMA,EAAKtlG,UAAKR,GAAW,OAAOA,GAClC0/a,SAAU55U,EAAKtlG,UAAKR,GAAW,GAC/Bq5L,MAmID,SAAezhM,EAAKnB,GACnB49J,EAAOl8J,OAAOP,GAEd,IACIrD,EADAyvS,EAAMggJ,EAAapsb,GAGnB68a,EAAUO,EAAKv1a,KAAK7H,EAAIoG,MACxB8vS,EAAWm4C,aAAaruV,KAC3B68a,EAAUO,EAAKH,SAASj9a,EAAIoG,OAC7B,IAAI5E,EAAQq7a,EAAQr7a,MAEhB0qK,EAAM,IAAIi5Q,EAAU,CAAC,GAIzB,IAFAj5Q,EAAI2sD,YAAYuzE,GAEXzvS,EAAI,EAAGA,EAAI6E,EAAM7D,SAAUhB,EAAG,CAClC,IAAI4gB,EAAOvd,EAAI2lL,KAAKnkL,EAAM7E,IAAI4gB,MACJ,IAAtBs/Z,EAAQlsa,YAEV4M,EADgB,YAAbvd,EAAIoG,KACAy1E,EAAMotW,gBAAgB1ra,EAAM,IAE5Bs+D,EAAMilW,YAAYvja,IAEV,YAAbvd,EAAIoG,MAAmC,MAAb5E,EAAM7E,KACnC4gB,EAAOouH,EAAOmQ,OAAO,CAACv+H,EAAMvd,EAAI2lL,KAAKksC,EAAEt0M,QACxC2uJ,EAAI29B,YAAYtsL,EAChB,CAED,OAAQ2uJ,EAAIhwB,UACZ,EA9JAowS,YAAap+U,EAAKtlG,UAAKR,GAAW,GAGlCmkb,aAAcr+U,EACdk+U,aAAcA,EACdN,aAAcA,GAGf,IAAIrvR,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACft8F,EAAQs8F,EAAQ,OAChBg3K,EAAMh3K,EAAQ,OACd+9H,EAAa/9H,EAAQ,OACrBgtQ,EAAYhtQ,EAAQ,OAExB,SAAS2zQ,EAAa1/I,GAErB,GADA3vI,EAAOxhJ,OAAOmxR,GACF,YAARA,EACH,MAAQ,MACJ,GAAY,YAARA,EACR,MAAQ,MACJ,GAAY,gBAARA,EACR,MAAQ,UACJ,GAAY,mBAARA,EACR,MAAQ,aACJ,GAAIA,EAAI3qS,MAAM,gBAClB,MAAQ,QAER,MAAO,IAAIiP,MAAM,qBAAuB07R,EACzC,CAED,SAASggJ,EAAapsb,GAErB,GADAy8J,EAAOl8J,OAAOP,GACG,QAAbA,EAAIoG,KACP,MAAQ,UACJ,GAAiB,QAAbpG,EAAIoG,KACZ,MAAQ,UACJ,GAAiB,YAAbpG,EAAIoG,KACZ,MAAQ,cACJ,GAAiB,eAAbpG,EAAIoG,KACZ,MAAQ,iBACJ,GAAiB,UAAbpG,EAAIoG,KACZ,MAAQ,cAAgBpG,EAAI2lL,KAAK/lB,MAAMriJ,KAAKlU,WAE5C,MAAO,IAAIqH,MAAM,oBAAsB1Q,EAAIoG,KAC5C,CAED,SAAS8nG,EAAKk1G,EAASh9M,EAAM8lK,EAAKrtK,GACZ,kBAATqtK,IACXA,EAAMvgC,EAAOvtH,KAAK8tJ,IACnBzP,EAAOplH,OAAO60H,EAAK,OAEnB,IAAIlsK,EAAM,CAAC,EAEPwB,EAAQxB,EAAIwB,MAAQ,GACpB6jb,EAAS,IAAIF,EAAU,CAAC9tY,OAAQ60H,IAEhCkgI,EAAMi5I,EAAOnvN,aACjBz5D,EAAO6jC,IAAI+kP,EAAOznU,QAAS,mCAE3B59G,EAAIoG,KAAO0lb,EAAa1/I,GAExB,IAAIs5I,EAAYtI,EAAKv1a,KAAK7H,EAAIoG,MAAM5E,MAAM7D,OAI1C,IAHIyI,GAAiB,YAATA,IACXs/a,EAAYtI,EAAKH,SAASj9a,EAAIoG,MAAM5E,MAAM7D,SAEnC0nb,EAAOznU,SAAWp8G,EAAM7D,OAAS+nb,GACxClkb,EAAM/D,KAAK4nb,EAAOM,YACnB,MAAQviO,IAAYiiO,EAAOznU,SAC1Bp8G,EAAM/D,KAAK4nb,EAAOM,YAEnBlpR,EAAO6jC,GAAG9+L,EAAM7D,QAAU,EACtB,mCACJ8+J,EAAO6jC,GAAG8iB,GAAWiiO,EAAOznU,QACxB,gCAEJ,IAAIo6G,EAAcm3H,EACd0tF,EAAUO,EAAKv1a,KAAK7H,EAAIoG,MAO5B,GANa,YAATA,GAAsBy2a,EAAQr7a,MAAM7D,SAAW6D,EAAM7D,SACxDk/a,EAAUO,EAAKH,SAASj9a,EAAIoG,MAC5B4xN,EAAck+E,GAEfz5I,EAAOogE,YAAYggN,EAAQr7a,MAAM7D,OAAQ6D,EAAM7D,QAE9B,UAAbqC,EAAIoG,KAAkB,CACzB,IAAIurG,EAAM,oBAAoBx2F,KAAKixR,GACnC3vI,EAAO6jC,GAAW,OAAR3uF,GACV8qD,EAAOogE,YAAYlrH,EAAI,GAAInwG,EAAM,GAAG+b,KAAKlU,WACzC,CAGD,IADA,IAAIk8B,GAAa,EACR5oC,EAAI,EAAGA,EAAIkgb,EAAQr7a,MAAM7D,SAAUhB,EAAG,CAC9C,IAWKy+X,EAXD7gX,EAAI/Y,EAAM7E,GAUd,GATA4d,EAAElB,KAAOwja,EAAQr7a,MAAM7E,GAMN,YAAbqD,EAAIoG,MAAiC,MAAXmU,EAAElB,OAC/BkB,EAAEgD,KAAOhD,EAAEgD,KAAK7O,MAAM,EAAG,KAEX,UAAX6L,EAAElB,OAA0C,IAAtBwja,EAAQlsa,WAGhCyqX,EADgB,YAAbp7X,EAAIoG,KACFy1E,EAAMotW,gBAAgB1ua,EAAEgD,KAAM,IAE9Bs+D,EAAMilW,YAAYvma,EAAEgD,OAEnBlU,SAAS,YACZkR,EAAEgD,KAAKlU,SAAS,YACnBkR,EAAEgD,KAAO69W,EACT71V,GAAa,EAGf,CAUD,OARIA,IACHvlC,EAAIwsb,cAAgBnH,EAAOnpS,YAExBknE,GAAgC,kBAAbA,IACtBA,EAAQk2I,UAAY+rF,EAAO/rF,YAC3Bl2I,EAAQ7mD,SAAW8oR,EAAO9+Y,SAGnB,IAAIyxL,EAAYh4N,EACxB,yBCpIDkiK,EAAOx3B,QAAU,CAChBx8B,KAqBD,SAAcg+D,EAAKrtK,GAClB,OAAQomN,EAAI/2G,KAAKg+D,EAAKrtK,EACtB,EAtBAgpb,eA0BD,SAAwBzhb,EAAM8lK,EAAKrtK,GAGlC,IAAIk0H,GAFJm5C,EAAM,IAAIi5Q,EAAU,CAAC9tY,OAAQ60H,KAEbugR,cAChBhwR,EAAOogE,YAAY9pG,EAAO25T,EAAO,oBAEjC,IAAI9sH,EAAS1zJ,EAAIgqD,aACb6nG,EAAM7xJ,EAAIgqD,aACVy2N,EAAUzgR,EAAIq5Q,aAGlB,GAAc,IADFr5Q,EAAIypD,UAEf,MAAO,IAAIjlN,MAAM,wEAIlB,IAAI08S,EAASlhJ,EAAIq5Q,aAEjB,GAAa,WAATn/a,EAEH,OADAq2J,EAAO6jC,GAAGp0B,EAAItuD,QAAS,+BACfmlU,EAAQ70U,KAAKk/M,GAGtB,IAAIw/H,EAAc1gR,EAAIq5Q,aACtB9oR,EAAO6jC,GAAGp0B,EAAItuD,QAAS,+BAEvB,IAAIivU,EAAa,IAAI1H,EAAU,CAAE9tY,OAAQs1Y,IACzC,OAAQ5uH,GACR,IAAK,OACJ,GAAe,SAAX6B,EACH,MAAO,IAAIlvT,MAAM,+EAGlB,MACD,IAAK,SACJ,IAAI4oI,EAAOuzS,EAAWtH,aAClBtwQ,EAAS43Q,EAAWl3N,UACpBm3N,EAAOjxW,EAAM4rW,kBAAkB7nH,GASnC,QARex3T,IAAX2kb,IACHA,EAAS50Q,EAAQ,QAGkB,kBAAxBt5K,EAAQ28W,aACnB38W,EAAQ28W,WAAa7vO,EAAOvtH,KAAKvf,EAAQ28W,WACrC,WAEA7vO,EAAOk2D,SAAShjM,EAAQ28W,YAC5B,MAAO,IAAIp7S,EAAO2hX,kBACdljb,EAAQ2/W,SAAU,WAGvB,IAAIt5K,EAAO,IAAI30L,WAAW1R,EAAQ28W,YAC9BwxE,EAAQ,IAAIz8a,WAAW+oI,GAEvBswC,EAAM,IAAIr5K,WAAWu8a,EAAKn/K,QAAUm/K,EAAKhzX,WAG7C,GAAY,IAFFizX,EAAO3xM,MAAMl2C,EAAMA,EAAKvnM,OAAQqvb,EAAOA,EAAMrvb,OACnDisL,EAAKA,EAAIjsL,OAAQs3K,GAEpB,MAAO,IAAIvkK,MAAM,8DAIlB,IAAIu8a,GADJrjQ,EAAMj+C,EAAOvtH,KAAKwrK,IACHl7K,MAAM,EAAGo+a,EAAKn/K,SACzB13F,EAAK2T,EAAIl7K,MAAMo+a,EAAKn/K,QAASm/K,EAAKn/K,QAAUm/K,EAAKhzX,WACjD6tX,EAAet/M,EAAOwoC,iBAAiBi8K,EAAKpF,YAC5CuF,EAAMh3Q,GACV0xQ,EAAah2K,gBAAe,GAC5B,IAAIvrE,EAAOphI,EAAS,GAUpB,IATA2iX,EAAa1xR,KAAK,SAAS,SAAUlwJ,GACpC,IAA6C,IAAzCA,EAAEsD,WAAWxH,QAAQ,eACxB,MAAO,IAAI6O,MAAM,wDAGlB,MAAO3K,CACP,IACD4hb,EAAalmP,MAAMmrP,GACnBjF,EAAavzY,MAC4B,QAAjCgyJ,EAAQuhP,EAAaz5U,SAC5BlpC,EAAOvnE,KAAK2oM,GACbwmP,EAAcjhT,EAAOmQ,OAAO92E,GAC5B,MACD,QACC,MAAO,IAAIt0D,MACP,wCAA0CqtT,EAAM,KAKrD,IAAImvH,GAFJhhR,EAAM,IAAIi5Q,EAAU,CAAC9tY,OAAQu1Y,KAETj3N,UAChBw3N,EAAYjhR,EAAIypD,UACpB,GAAIu3N,IAAcC,EACjB,MAAO,IAAIz8a,MAAM,wDAIlB,IAAIq3M,EAAM,CAAC,EACP/nN,EAAM+ib,EAAQwJ,aAAaxkO,EAAK,UAAW77C,EAAIotL,aAEnDptL,EAAIkzC,KAAK2I,EAAIxrD,UAEb,IAAI0yL,EAAU/iL,EAAIgqD,aAGlB,OAFAl2N,EAAIivV,QAAUA,EAENjvV,CACR,EAjIAyhM,MAmID,SAAezhM,EAAKnB,GACnB,IAAIuuT,EAEHA,EADGlX,EAAWm4C,aAAaruV,GAClBA,EAAIw/a,WAEJx/a,EAEV,IAIIw7W,EAgBA4xE,EApBAxtH,EAAS,OACT7B,EAAM,OACNsvH,EAAU1hT,EAAOivD,MAAM,GACvBkyP,EAAO,CAAEhzX,UAAW,QAER1xD,IAAZvJ,IAEyB,kBAD5B28W,EAAa38W,EAAQ28W,cAEpBA,EAAa7vO,EAAOvtH,KAAKo9V,EAAY,eACnBpzW,IAAfozW,IACH/+M,EAAOplH,OAAOmkU,EAAY,sBAC1B/+M,EAAOoyL,eAAehwV,EAAQ+gU,OAAQ,uBAEvBx3T,KADfw3T,EAAS/gU,EAAQ+gU,UAEhBA,EAAS,cACVktH,EAAOjxW,EAAM4rW,kBAAkB7nH,GAC/B7B,EAAM,WAKR,GAAI7nB,EAAWm4C,aAAaruV,GAAM,CACjCotb,EAAU,IAAIjI,EAAU,CAAC,GACzB,IAAIpyQ,EAAWs1D,EAAOikC,YAAY,GAAG5pE,aAAa,GAClD0qP,EAAQ30N,SAAS1lD,GACjBq6Q,EAAQ30N,SAAS1lD,GACjBq6Q,EAAQ3rP,MAAMzhM,EAAIk8I,SAAS,YAC3BkxS,EAAQv0N,YAAY74N,EAAIivV,SAAW,IAGnC,IADA,IAAIx/U,EAAI,EACD29a,EAAQ7mZ,QAAUumZ,EAAKhzX,YAAc,GAC3CszX,EAAQE,UAAU79a,KACnB29a,EAAUA,EAAQlxS,UAClB,CAED,OAAQ6hL,GACR,IAAK,OACJ,MACD,IAAK,SACJ,IAAIzkL,EAAO+uF,EAAOikC,YAAY,IAE1BihL,EAAS,IAAIpI,EAAU,CAAC,GAC5BoI,EAAO1jP,YAAYvwD,GACnBi0S,EAAO90N,SAHM,IAIb40N,EAAUE,EAAOrxS,gBAEF9zI,IAAX2kb,IACHA,EAAS50Q,EAAQ,QAElB,IAAI+sB,EAAO,IAAI30L,WAAWirW,GACtBwxE,EAAQ,IAAIz8a,WAAW+oI,GAEvBswC,EAAM,IAAIr5K,WAAWu8a,EAAKn/K,QAAUm/K,EAAKhzX,WAG7C,GAAY,IAFFizX,EAAO3xM,MAAMl2C,EAAMA,EAAKvnM,OAAQqvb,EAAOA,EAAMrvb,OACnDisL,EAAKA,EAAIjsL,OAdA,IAgBZ,MAAO,IAAI+S,MAAM,8DAIlB,IAAIu8a,GADJrjQ,EAAMj+C,EAAOvtH,KAAKwrK,IACHl7K,MAAM,EAAGo+a,EAAKn/K,SACzB13F,EAAK2T,EAAIl7K,MAAMo+a,EAAKn/K,QAASm/K,EAAKn/K,QAAUm/K,EAAKhzX,WAEjD6tX,EAAet/M,EAAOooC,eAAeq8K,EAAKpF,YAC1CuF,EAAMh3Q,GACV0xQ,EAAah2K,gBAAe,GAC5B,IAAIvrE,EAAOphI,EAAS,GAMpB,IALA2iX,EAAa1xR,KAAK,SAAS,SAAUlwJ,GACpC,MAAOA,CACP,IACD4hb,EAAalmP,MAAM2rP,GACnBzF,EAAavzY,MAC4B,QAAjCgyJ,EAAQuhP,EAAaz5U,SAC5BlpC,EAAOvnE,KAAK2oM,GACbgnP,EAAUzhT,EAAOmQ,OAAO92E,GACxB,MACD,QACC,MAAO,IAAIt0D,MAAM,mBAAqBqtT,GAGvC,IAeIjrM,EAfAo5C,EAAM,IAAIi5Q,EAAU,CAAC,GAEzBj5Q,EAAIshR,aAAad,GACjBxgR,EAAI2sD,YAAY+mG,GAChB1zJ,EAAI2sD,YAAYklG,GAChB7xJ,EAAI29B,YAAYwjP,GAEhBnhR,EAAIusD,SAAS,GACbvsD,EAAI29B,YAAYujH,EAAOlxK,SAAS,YAE5BkxS,GACHlhR,EAAI29B,YAAYujP,GAEjBlhR,EAAMA,EAAIhwB,WAITppB,EADGojL,EAAWm4C,aAAaruV,GAClB,sBAEA,qBAEV,IAAI+X,EAAMm0J,EAAI7iK,SAAS,UACnBge,EAAMtP,EAAIpa,OAAUoa,EAAIpa,OAAS,GACjC,GAAK,GAAmB,EAAdm1H,EAAOn1H,OAAW,GAChCuuK,EAAMvgC,EAAOivD,MAAMvzK,GACnB,IAAIkiF,EAAI,EACRA,GAAK2iE,EAAIu1B,MAAM,cAAgB3uE,EAAS,UAAWvpB,GACnD,IAAK,IAAI5sG,EAAI,EAAGA,EAAIob,EAAIpa,QAAU,CACjC,IAAImoL,EAAQnpL,EAAI,GACZmpL,EAAQ/tK,EAAIpa,SACfmoL,EAAQ/tK,EAAIpa,QACb4rG,GAAK2iE,EAAIu1B,MAAM1pL,EAAIrJ,MAAM/R,EAAGmpL,GAAQv8E,GACpC2iE,EAAI3iE,KAAO,GACX5sG,EAAImpL,CACJ,CAGD,OAFAv8E,GAAK2iE,EAAIu1B,MAAM,YAAc3uE,EAAS,UAAWvpB,GAEzC2iE,EAAIx9J,MAAM,EAAG66F,EACrB,GA7PD,IAcIwjV,EAdAtwR,EAAS0b,EAAQ,OAEjBxsC,GADOwsC,EAAQ,OACNA,EAAAA,OAAAA,QAETt8F,GADOs8F,EAAQ,OACPA,EAAQ,QAChBkwD,EAASlwD,EAAQ,OAGjB+9H,GADM/9H,EAAQ,OACDA,EAAQ,QACrB8sC,EAAM9sC,EAAQ,OACd4qQ,EAAU5qQ,EAAQ,OAClBgtQ,EAAYhtQ,EAAQ,OACpB/3G,EAAS+3G,EAAQ,OAQrB,IAAIu0Q,EAAQ,wCC1BZxqR,EAAOx3B,QAAU,CAChBx8B,KAkBD,SAAcg+D,EAAKrtK,GACG,kBAATqtK,IACXzP,EAAOplH,OAAO60H,EAAK,OACnBA,EAAMA,EAAI7iK,SAAS,UAGpB,IAAIkpJ,EAAU2Z,EAAI5rG,OAAOoB,QAAQ,UAAW,IACxChyD,EAAI6iJ,EAAQ9wJ,MAAMgsb,GACjB/9a,IACJA,EAAI6iJ,EAAQ9wJ,MAAMisb,IACnBjxR,EAAO6jC,GAAG5wL,EAAG,wBAEb,IAWI1P,EAXAoG,EAAO28a,EAAQ+I,aAAap8a,EAAE,IAC9Bi+a,EAAOhiT,EAAOvtH,KAAK1O,EAAE,GAAI,UAWzBq4M,EAAM,CAAC,EACX,GAAIr4M,EAAE,GACL,IACC1P,EAAM+ib,EAAQ70U,KAAKy/U,EAOnB,CALC,MAAO5nb,GACR2J,EAAI6iJ,EAAQ9wJ,MAAMisb,GAClBjxR,EAAO6jC,GAAG5wL,EAAG,wBACbi+a,EAAOhiT,EAAOvtH,KAAK1O,EAAE,GAAI,UACzB1P,EAAM+ib,EAAQwJ,aAAaxkO,EAAK,SAAU4lO,EAC1C,MAED3tb,EAAM+ib,EAAQwJ,aAAaxkO,EAAK,SAAU4lO,GAK3C,GAFAlxR,EAAOogE,YAAYz2N,EAAMpG,EAAIoG,MAEzBsJ,EAAE,IAAMA,EAAE,GAAG/R,OAAS,EACzBqC,EAAIivV,QAAUv/U,EAAE,QAEV,GAAIq4M,EAAIxrD,SAAU,CASxB,IAAIh/I,EAAO7N,EAAE,IAAMA,EAAE,GAAKA,EAAE,GAAK,IAC7Bk+a,EAA2C,EAA9B1ob,KAAK8K,KAAK+3M,EAAIxrD,SAAW,GAS1C,IARAh/I,EAAOA,EAAK7O,MAAM,EAAGk/a,EAAa,GAC9BlsX,QAAQ,oBAAqB,IAC7BnkD,EAAK7O,MAAMk/a,EAAa,GAEd7lO,EAAIxrD,SAAW,EACf,GACiC,MAA3Ch/I,EAAK7O,MAAMk/a,EAAa,EAAGA,IAC9BA,IACiD,MAA3Crwa,EAAK7O,MAAMk/a,EAAYA,EAAa,IAC1CA,IAGD,IAAIC,EAAUtwa,EAAK7O,MAAMk/a,IACzBC,EAAUA,EAAQnsX,QAAQ,UAAW,KACjCA,QAAQ,OAAQ,KACRjgE,MAAM,kBACjBzB,EAAIivV,QAAU4+F,EACf,CAED,OAAQ7tb,CACR,EA5FAyhM,MA8FD,SAAezhM,EAAKnB,GAEnB,GADA49J,EAAOl8J,OAAOP,IACTmvV,EAAIC,MAAMpvV,GACd,MAAO,IAAI0Q,MAAM,wBAElB,IAAIlP,EAAQ,GACR4qS,EAAM22I,EAAQqJ,aAAapsb,GAC/BwB,EAAM/D,KAAK2uS,GAEX,IAAIlgI,EAAM62Q,EAAQthP,MAAMzhM,GACxBwB,EAAM/D,KAAKyuK,EAAI7iK,SAAS,WAEpBrJ,EAAIivV,SACPztV,EAAM/D,KAAKuC,EAAIivV,SAEhB,OAAQtjN,EAAOvtH,KAAK5c,EAAMo/D,KAAK,KAC/B,GA3GD,IAAI67F,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACT4qQ,EAAU5qQ,EAAQ,OAElBg3K,GADQh3K,EAAQ,OACVA,EAAQ,QAMds1Q,GALat1Q,EAAQ,OAEXA,EAAQ,OAGN,0EAEZu1Q,EAAa,+GCjBjB,IAAI9O,EAAOzmQ,EAAQ,OAEnBjW,EAAOx3B,QAAU,CAChBx8B,KAkBD,SAAcg+D,EAAKrtK,GACG,kBAATqtK,IACXzP,EAAOplH,OAAO60H,EAAK,OACnBA,EAAMA,EAAI7iK,SAAS,UAGpB,IAEIqG,EAQAqlQ,EAVAn+M,EAAQs1G,EAAI5rG,OAAOI,MAAM,YAGzB4xU,GAAM,EACV,MAAQ5iY,GAAK4iY,EAAK17U,EAAMj5D,QACvB+R,EAAIknD,IAAQ07U,GAAI7wY,MACZ,qCAELg7J,EAAO6jC,GAAG5wL,EAAG,sBAGb,IAAI0hY,EAAKx6U,EAAMj5D,OACf,MAAQo3Q,GAAMq8H,EAAK,GAClBr8H,EAAKn+M,IAAQw6U,GAAI3vY,MACb,mCAELg7J,EAAO6jC,GAAGy0E,EAAI,sBAEdn+M,EAAQA,EAAMloD,MAAM4jY,EAAIlB,EAAK,GAE7B,IAAIlkS,EAAU,CAAC,EACf,KACCt2C,EAAQA,EAAMloD,MAAM,GACpBgB,EAAIknD,EAAM,GAAGn1D,MACT,4BAGJyrG,EAAQx9F,EAAE,GAAGJ,eAAiBI,EAAE,GAOjC,OAHAknD,EAAQA,EAAMloD,MAAM,GAAI,GAAGkyD,KAAK,IAChCsrG,EAAMvgC,EAAOvtH,KAAKw4C,EAAO,UAEjBgoX,EAAK1wU,KAAKg+D,EAAKrtK,EACvB,EA1DA+sK,OAAQgzQ,EAAKhzQ,OACbv6I,KAAMutZ,EAAKvtZ,KACXowK,MA0DD,SAAemiO,EAAM/ka,GACpB,IAAIivb,EAAOlP,EAAKn9O,MAAMmiO,EAAM/ka,GAExBi0H,EAAS,cACT/6G,EAAM+1a,EAAKzkb,SAAS,UACpBge,EAAMtP,EAAIpa,OAAUoa,EAAIpa,OAAS,GACjC,GAAK,GAAmB,EAAdm1H,EAAOn1H,OAAW,GAC5BuuK,EAAMvgC,EAAOivD,MAAMvzK,GACnBkiF,EAAI,EACRA,GAAK2iE,EAAIu1B,MAAM,cAAgB3uE,EAAS,UAAWvpB,GACnD,IAAK,IAAI5sG,EAAI,EAAGA,EAAIob,EAAIpa,QAAU,CACjC,IAAImoL,EAAQnpL,EAAI,GACZmpL,EAAQ/tK,EAAIpa,SACfmoL,EAAQ/tK,EAAIpa,QACb4rG,GAAK2iE,EAAIu1B,MAAM1pL,EAAIrJ,MAAM/R,EAAGmpL,GAAQv8E,GACpC2iE,EAAI3iE,KAAO,GACX5sG,EAAImpL,CACJ,CAGD,OAFAv8E,GAAK2iE,EAAIu1B,MAAM,YAAc3uE,EAAS,UAAWvpB,GAEzC2iE,EAAIx9J,MAAM,EAAG66F,EACrB,GA5ED,IAAIkzD,EAAS0b,EAAQ,OAEjBxsC,GADOwsC,EAAQ,OACNA,EAAAA,OAAAA,QACFA,EAAQ,OACPA,EAAQ,OACVA,EAAQ,OACDA,EAAQ,OACfA,EAAQ,OACHA,EAAQ,OACPA,EAAQ,OACNA,EAAQ,8BCnB1BjW,EAAOx3B,QAAU,CAChBx8B,KAuFD,SAAcg+D,EAAKrtK,GACG,kBAATqtK,IACXA,EAAMvgC,EAAOvtH,KAAK8tJ,EAAK,WAExBzP,EAAOplH,OAAO60H,EAAK,OAEnB,IAAIy3C,EAAM,IAAI3F,EAAKub,UAAUrtD,GAG7B,GADAy3C,EAAI+R,eACAxwN,KAAKG,IAAIs+M,EAAIhmN,OAASgmN,EAAIoqO,QAAU,EACvC,MAAO,IAAIr9a,MAAM,mDAIlB,IAAIs9a,EAAWrqO,EAAIjlN,OACnBilN,EAAI+R,eACJ,IAAIu4N,EAAYtqO,EAAIjlN,OAASilN,EAAIhmN,OAC7Buwb,EAASD,EAEb,GAAItqO,EAAI4R,SAAW44N,EAAM,GAAI,CAC5BxqO,EAAI+R,aAAay4N,EAAM,IACvB,IAAIxwa,EAAUgmM,EAAIgS,UAClBl5D,EAAO6jC,GAAG3iL,GAAW,EACjB,yCACJ,CAED,IAAIimZ,EAAO,CACXA,WAAkB,CAAC,GACf76Q,EAAO66Q,EAAK3sQ,WAAW2nR,KAAO,CAAC,EACnC71R,EAAIlxB,OAAS,CAAC,EAEd+rS,EAAKka,OA7FN,SAAmBn6N,EAAKimO,GAGvB,OAFAntR,EAAOogE,YAAYlZ,EAAI4R,OAAQvX,EAAKsb,IAAIzD,QACpC+zN,EAAK,sBACD/tW,EAAMilW,YAAYn9N,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,GAC3D,CAyFc0yN,CAAU5kO,EAAK,UAE7BA,EAAI+R,eACJ,IAAI85B,EAAQ7rC,EAAIjlN,OAASilN,EAAIhmN,OACzBywb,EAAazqO,EAAI0S,UAErB,QAAgBjuN,IADFimb,EAAUD,GAEvB,MAAO,IAAI19a,MAAM,+BAAiC09a,GAEnDzqO,EAAIp9K,QAAUipN,EACdo0K,EAAKlmE,OAAS6/E,EAAS+Q,UAAU3qO,GAEjCA,EAAI+R,eACJkuM,EAAKma,UAAYwQ,EAAS5qO,GAC1BigN,EAAKoa,WAAauQ,EAAS5qO,GAE3BigN,EAAK8Z,SAAW,CAACH,EAAS+Q,UAAU3qO,IAEpCA,EAAI+R,eACJ85B,EAAQ7rC,EAAIjlN,OAASilN,EAAIhmN,OACzBima,EAAKga,WAAaqK,EAAMC,eAAU9/a,EAAW,SAAUu7M,GACvDA,EAAIp9K,QAAUipN,EAGV7rC,EAAI4R,SAAW44N,EAAM,KACxBxqO,EAAI+R,aAAay4N,EAAM,IACvBplS,EAAIlxB,OAAO22T,eACPtiR,EAAIx9J,MAAMi1M,EAAIjlN,OAAQilN,EAAIjlN,OAASilN,EAAIhmN,QAC3CgmN,EAAIp9K,SAAWo9K,EAAIhmN,QAIhBgmN,EAAI4R,SAAW44N,EAAM,KACxBxqO,EAAI+R,aAAay4N,EAAM,IACvBplS,EAAIlxB,OAAO42T,gBACPviR,EAAIx9J,MAAMi1M,EAAIjlN,OAAQilN,EAAIjlN,OAASilN,EAAIhmN,QAC3CgmN,EAAIp9K,SAAWo9K,EAAIhmN,QAIpB,GAAIgmN,EAAI4R,SAAW44N,EAAM,GAAI,CAC5BxqO,EAAI+R,aAAay4N,EAAM,IACvB,IAAIO,EAAS/qO,EAAIjlN,OAASilN,EAAIhmN,OAG9B,IAFAgmN,EAAI+R,eAEG/R,EAAIjlN,OAASgwb,GACnBC,EAAc/qB,EAAM13P,EAAKy3C,GAE1BlnD,EAAOogE,YAAYlZ,EAAIjlN,OAAQgwb,EAC/B,CAEDjyR,EAAOogE,YAAYlZ,EAAIjlN,OAAQuvb,GAE/BtqO,EAAI+R,eACJ85B,EAAQ7rC,EAAIjlN,OAASilN,EAAIhmN,OACzB,IAAIixb,EAAYjrO,EAAI0S,UAChBw4N,EAASR,EAAUO,GACvB,QAAexmb,IAAXymb,EACH,MAAO,IAAIn+a,MAAM,+BAAiCk+a,GACnDjrO,EAAIp9K,QAAUipN,EAEd,IAAIs/L,EAAUnrO,EAAIuS,WAAWlY,EAAKsb,IAAI5C,WAAW,GAC9B,IAAfo4N,EAAQ,KACXA,EAAUA,EAAQpgb,MAAM,IACzB,IAAIqgb,EAAWF,EAAOnuX,MAAM,KAO5B,OALAqoF,EAAI3R,UAAYy0B,EAAU7rJ,MAAM8ua,EAASC,EAAS,GAAI,QACtDhmS,EAAI3R,UAAU4hL,cAAgB+1H,EAAS,GACvChmS,EAAI+sH,KAAO+4K,EACX9lS,EAAIvtH,MAAQ0wI,EAAIx9J,MAAMs/a,EAAUE,GAExB,IAAI/Q,EAAYvZ,EACxB,EA7LAh4P,OA8BD,SAAgBg4P,EAAM5ja,GACrB,IAAI+oJ,EAAM66Q,EAAK3sQ,WAAW2nR,KAC1BniR,EAAOl8J,OAAOwoJ,EAAK,kBAEnB,IAAIgmS,EAAWhmS,EAAI+sH,KAAKp1M,MAAM,KAC9B,GAAIquX,EAAS,KAAO/ub,EAAIoG,KACvB,OAAQ,EAET,IAAIsoG,EAAOq6C,EAAIvtH,MACf,QAAapzB,IAATsmG,EAAoB,CACvB,IAAIi1G,EAAM,IAAI3F,EAAKwb,UACnBw1N,EAAaprB,EAAMjgN,GACnBj1G,EAAOi1G,EAAItsK,MACX,CAED,IAAIutT,EAAW5kW,EAAI21Q,aAAao5K,EAAS,IAEzC,OADAnqF,EAASnjK,MAAM/yF,GACPk2P,EAASh5L,OAAO7iB,EAAI3R,UAC5B,EA/CA/lH,KAqcD,SAAcuyY,EAAM5ja,QACUoI,IAAzBw7Z,EAAK3sQ,WAAW2nR,OACnBhb,EAAK3sQ,WAAW2nR,KAAO,CAAC,GACzB,IAAI71R,EAAM66Q,EAAK3sQ,WAAW2nR,KAG1B,GADA71R,EAAI+sH,KAAO91Q,EAAIoG,KAAO,IAAMpG,EAAIivb,4BACJ7mb,IAAxBimb,EAAUtlS,EAAI+sH,MACjB,OAAQ,EAET,IAAInyD,EAAM,IAAI3F,EAAKwb,UACnBw1N,EAAaprB,EAAMjgN,GACnB,IAAIj1G,EAAOi1G,EAAItsK,OACf0xG,EAAIvtH,MAAQkzE,EAEZ,IAAIyrC,EAASn6I,EAAI01Q,aAIjB,OAHAv7H,EAAOsnD,MAAM/yF,GACbk1T,EAAK3sQ,WAAW2nR,KAAKxnS,UAAY+C,EAAO9oH,QAEhC,CACR,EAvdA4zZ,UAydD,SAAmBrhB,EAAMzpR,EAAQ38I,QACH4K,IAAzBw7Z,EAAK3sQ,WAAW2nR,OACnBhb,EAAK3sQ,WAAW2nR,KAAO,CAAC,GACzB,IAAI71R,EAAM66Q,EAAK3sQ,WAAW2nR,KAEtBj7N,EAAM,IAAI3F,EAAKwb,UACnBw1N,EAAaprB,EAAMjgN,GACnB,IAAIj1G,EAAOi1G,EAAItsK,OACf0xG,EAAIvtH,MAAQkzE,EAEZyrC,EAAOzrC,GAAM,SAAU9wG,EAAKw5I,GACvBx5I,EACHJ,EAAKI,IAGNmrJ,EAAI+sH,KAAO1+H,EAAUhxI,KAAO,IAAMgxI,EAAU4hL,mBAChB5wT,IAAxBimb,EAAUtlS,EAAI+sH,OAKlB/sH,EAAI3R,UAAYA,EAChB55I,KALCA,EAAK,IAAIkT,MAAM,8BACXq4I,EAAI+sH,KAAO,MAKhB,GACD,EAhfAr0E,MAkfD,SAAemiO,EAAM/ka,GACpB,IAAIkqJ,EAAM66Q,EAAK3sQ,WAAW2nR,KAC1BniR,EAAOl8J,OAAOwoJ,EAAK,kBAEnB,IAAI46D,EAAM,IAAI3F,EAAKwb,UACnB7V,EAAIwV,gBACApwE,EAAIvtH,OACPmoL,EAAI6U,QAAQzvE,EAAIvtH,MAAM79B,QACtBorJ,EAAIvtH,MAAM3gB,KAAK8oM,EAAIwR,KAAMxR,EAAIp9K,SAC7Bo9K,EAAIp9K,SAAWwiH,EAAIvtH,MAAM79B,QAEzBqxb,EAAaprB,EAAMjgN,GAGpBA,EAAIwV,gBACJxV,EAAIqV,SAASq1N,EAAUtlS,EAAI+sH,OACvB/sH,EAAI+sH,KAAKr0Q,MAAM,UAClBkiN,EAAI+U,YACL/U,EAAIyV,cAEJ,IAAI01N,EAAU/lS,EAAI3R,UAAU8E,SAAS,QACjC3+H,EAAOouH,EAAOivD,MAAMk0P,EAAQnxb,OAAS,GAMzC,OALA4f,EAAK,GAAK,EACVuxa,EAAQj0a,KAAK0C,EAAM,GACnBomM,EAAI9Z,YAAYtsL,EAAMygM,EAAKsb,IAAI5C,WAC/B/S,EAAIyV,cAEIzV,EAAItsK,MACZ,GA3gBD,IAAIolH,EAAS0b,EAAQ,OACjB6lC,EAAO7lC,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAETt8F,GADOs8F,EAAQ,OACPA,EAAQ,QAIhBolQ,GAHMplQ,EAAQ,OACDA,EAAQ,OACfA,EAAQ,OACHA,EAAQ,QACnBtM,EAAYsM,EAAQ,OACpBglQ,EAAchlQ,EAAQ,OACtB8vQ,EAAQ9vQ,EAAQ,OAiCpB,SAASg2Q,EAAMxxb,GACd,OAAQqhN,EAAKsb,IAAIrB,QAAUja,EAAKsb,IAAItB,YAAcr7N,CAClD,CAED,SAASs7N,EAAQt7N,GAChB,OAAQqhN,EAAKsb,IAAIrB,QAAUt7N,CAC3B,CAED,IAAI0xb,EAAY,CACf,UAAW,uBACX,WAAY,uBACZ,aAAc,wBACd,aAAc,wBACd,aAAc,wBACd,WAAY,oBACZ,aAAc,yBACd,aAAc,oBACd,eAAgB,sBAChB,eAAgB,sBAChB,eAAgB,sBAChB,iBAAkB,eAEnBpub,OAAOQ,KAAK4tb,GAAWjtb,SAAQ,SAAU0yE,GACxCu6W,EAAUA,EAAUv6W,IAAMA,CAC1B,IACDu6W,EAAU,gBAAkB,UAC5BA,EAAU,iBAAmB,WAE7B,IAAIa,EAEQ,YAFRA,EAGiB,YAHjBA,EAIS,YAJTA,EAKY,YA4GhB,SAASX,EAAS5qO,GACjB,GAAIA,EAAI4R,SAAWvX,EAAKsb,IAAI9B,QAC3B,OAiMF,SAAuB5nN,GACtB,IAAIF,EAAIE,EAAEnO,MAAM0tb,GAChB1yR,EAAO6jC,GAAG5wL,EAAG,6BACb,IAAI4H,EAAI,IAAI/T,KAER6rb,EAAW93a,EAAEouM,iBACb2pO,EAAuC,IAA7Bnqb,KAAKQ,MAAM0pb,EAAW,KAEhCpvQ,EAAO3kK,SAAS3L,EAAE,GAAI,IAEzBswK,GADGovQ,EAAW,IAAM,IAAMpvQ,GAAQ,GACzBqvQ,EAAU,EAEXA,EACT/3a,EAAEg4a,eAAetvQ,EAAM3kK,SAAS3L,EAAE,GAAI,IAAM,EAAG2L,SAAS3L,EAAE,GAAI,KAC9D4H,EAAEi4a,YAAYl0a,SAAS3L,EAAE,GAAI,IAAK2L,SAAS3L,EAAE,GAAI,KAC7CA,EAAE,IAAMA,EAAE,GAAG/R,OAAS,GACzB2Z,EAAEk4a,cAAcn0a,SAAS3L,EAAE,GAAI,KAChC,OAAQ4H,CACR,CAnNSm4a,CAAc9rO,EAAIuS,WAAWlY,EAAKsb,IAAI9B,UACxC,GAAI7T,EAAI4R,SAAWvX,EAAKsb,IAAI7B,gBAClC,OAqNF,SAAqB7nN,GACpB,IAAIF,EAAIE,EAAEnO,MAAMiub,GAChBjzR,EAAO6jC,GAAG5wL,GACV,IAAI4H,EAAI,IAAI/T,KAEZ+T,EAAEg4a,eAAej0a,SAAS3L,EAAE,GAAI,IAAK2L,SAAS3L,EAAE,GAAI,IAAM,EACtD2L,SAAS3L,EAAE,GAAI,KACnB4H,EAAEi4a,YAAYl0a,SAAS3L,EAAE,GAAI,IAAK2L,SAAS3L,EAAE,GAAI,KAC7CA,EAAE,IAAMA,EAAE,GAAG/R,OAAS,GACzB2Z,EAAEk4a,cAAcn0a,SAAS3L,EAAE,GAAI,KAChC,OAAQ4H,CACR,CAhOSq4a,CAAYhsO,EAAIuS,WAAWlY,EAAKsb,IAAI7B,kBAE5C,MAAO,IAAI/mN,MAAM,0BAElB,CAED,SAASk/a,EAAUjsO,EAAK5jC,GACnBA,EAAK2lC,kBAAoB,MAAQ3lC,EAAK2lC,iBAAmB,KAC5D/B,EAAIkV,YA+ON,SAAqBvhN,GACpB,IAAIlF,EAAI,GAQR,OAPAA,GAAK+/I,EAAQ76I,EAAEouM,iBAAkB,GACjCtzM,GAAK+/I,EAAQ76I,EAAEquM,cAAgB,GAC/BvzM,GAAK+/I,EAAQ76I,EAAEsuM,cACfxzM,GAAK+/I,EAAQ76I,EAAEuuM,eACfzzM,GAAK+/I,EAAQ76I,EAAEwuM,iBACf1zM,GAAK+/I,EAAQ76I,EAAEyuM,iBACf3zM,GAAK,GAEL,CAzPiBy9a,CAAY9vQ,GAAOi+B,EAAKsb,IAAI7B,iBAE5C9T,EAAIkV,YAiON,SAAuBvhN,GACtB,IAAIlF,EAAI,GAQR,OAPAA,GAAK+/I,EAAQ76I,EAAEouM,iBAAmB,KAClCtzM,GAAK+/I,EAAQ76I,EAAEquM,cAAgB,GAC/BvzM,GAAK+/I,EAAQ76I,EAAEsuM,cACfxzM,GAAK+/I,EAAQ76I,EAAEuuM,eACfzzM,GAAK+/I,EAAQ76I,EAAEwuM,iBACf1zM,GAAK+/I,EAAQ76I,EAAEyuM,iBACf3zM,GAAK,GAEL,CA3OiB09a,CAAc/vQ,GAAOi+B,EAAKsb,IAAI9B,QAE/C,CAGD,IAAIu4N,EAAU,CACbC,UAAW7B,EAAM,GACjB8B,WAAYh4N,EAAQ,GACpBi4N,QAASj4N,EAAQ,GACjBk4N,YAAahC,EAAM,GACnBiC,cAAejC,EAAM,GACrBkC,aAAclC,EAAM,GACpB1uQ,IAAKw4C,EAAQ,GACbq4N,UAAWr4N,EAAQ,GACnB3B,IAAK2B,EAAQ,IAIVs4N,EAAa,CAChB,WAAc,oBACd,WAAc,oBACd,YAAe,oBAGf,aAAgB,0BAChB,WAAc,2BAEXC,EAAiB,CAAC,EACtBvwb,OAAOQ,KAAK8vb,GAAYnvb,SAAQ,SAAU0yE,GACzC08W,EAAeD,EAAWz8W,IAAMA,CAChC,IAED,IAAI28W,EAAa,CAChB,YAAa,WAAY,gBACzB,aAAc,eAAgB,KAAM,OAGrC,SAAS9B,EAAc/qB,EAAM13P,EAAKy3C,GACjCA,EAAI+R,eACJ,IAEI91N,EAKAwmb,EAPA52L,EAAQ7rC,EAAIjlN,OAASilN,EAAIhmN,OACzB+yb,EAAQ/sO,EAAI0S,UAEZttE,EAAM66Q,EAAK3sQ,WAAW2nR,KAQ1B,OAPK71R,EAAIlxB,OAAOs9O,OACfpsN,EAAIlxB,OAAOs9O,KAAO,IAGfxxJ,EAAI4R,SAAWvX,EAAKsb,IAAIvD,UAC3BqwN,EAAWziO,EAAImS,eAER46N,GACR,KAAMxB,EACLvrO,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1BzS,EAAI+R,eACJ,IAAIi7N,EAAQhtO,EAAIjlN,OAASilN,EAAIhmN,OACzBmuX,GAAK,EACLnoK,EAAI4R,SAAWvX,EAAKsb,IAAIvD,UAC3B+1J,EAAKnoK,EAAImS,oBACY1tN,IAAlBw7Z,EAAKqa,WACRra,EAAKqa,SAAW,KACN,IAAPnyD,GACH83C,EAAKqa,SAASxgb,KAAK,MACpB,IAAIw1B,EAAK,CAAE0rZ,IAAK+R,EAAOtK,SAAUA,GAC7BziO,EAAIjlN,OAASiyb,GAAShtO,EAAI4R,SAAWvX,EAAKsb,IAAIzD,UACjD5iM,EAAG+vL,QAAUW,EAAIgS,WAClB5sE,EAAIlxB,OAAOs9O,KAAK13W,KAAKw1B,GACrB,MACD,KAAMi8Z,EACLvrO,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1BzS,EAAI+R,oBACkBttN,IAAlBw7Z,EAAKqa,WACRra,EAAKqa,SAAW,IAEjB,IADA,IAAI2S,EAAQjtO,EAAIjlN,OAASilN,EAAIhmN,OACtBgmN,EAAIjlN,OAASkyb,GAAO,CAC1B,IAAIjS,EAAMh7N,EAAI0S,UACdutM,EAAKqa,SAASxgb,KAAK+yb,EAAe7R,IAAQA,EAC1C,EAc4C,IAAzC/a,EAAKqa,SAASp8a,QAAQ,gBACmB,IAAzC+ha,EAAKqa,SAASp8a,QAAQ,cACzB+ha,EAAK8Z,SAASt8a,SAAQ,SAAUyvb,GACd,SAAbA,EAAIzqb,OACPyqb,EAAIzqb,KAAO,OACXyqb,EAAInwQ,SAAWmwQ,EAAIhK,KACfgK,EAAIpwQ,OACJowQ,EAAIz1a,WAAW,GAAG1d,MAEvB,KACkD,IAAzCkma,EAAKqa,SAASp8a,QAAQ,gBACY,IAAzC+ha,EAAKqa,SAASp8a,QAAQ,eACzB+ha,EAAK8Z,SAASt8a,SAAQ,SAAUyvb,GACd,SAAbA,EAAIzqb,OACPyqb,EAAIzqb,KAAO,OACXyqb,EAAIhK,IAAMgK,EAAInwQ,UACVmwQ,EAAIpwQ,OACJowQ,EAAIz1a,WAAW,GAAG1d,MAEvB,IAEFqrJ,EAAIlxB,OAAOs9O,KAAK13W,KAAK,CAAEkhb,IAAK+R,EAAOtK,SAAUA,IAC7C,MACD,KAAM8I,EACLvrO,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1B,IAAIn+H,EAAO0rH,EAAIuS,WAAWlY,EAAKsb,IAAI5C,WAAW,GAC1Co6N,EAiYN,SAAsB74V,EAAM4gG,GAG3B,IAFA,IAAIk4P,EAAS,GAAK94V,EAAKt6F,OAAS,GAAKs6F,EAAK,GACtC64V,EAAU,CAAC,EACNn0b,EAAI,EAAGA,EAAIo0b,IAAUp0b,EAAG,CAChC,IAEI45B,EAAO,GADD,EAAK55B,EAAI,EAEfq0b,EAAmC,KAAxB/4V,EAHH,EAAI/yF,KAAKQ,MAAM/I,EAAI,IAGF45B,GACzBld,EAAOw/K,EAASl8L,GAChBq0b,GAA4B,kBAAV33a,IACrBy3a,EAAQz3a,IAAQ,EAEjB,CACD,OAAQpZ,OAAOQ,KAAKqwb,EACpB,CA/YeG,CAAah5V,EAAMw4V,GACjCK,EAAQ1vb,SAAQ,SAAU43L,QACH5wL,IAAlBw7Z,EAAKqa,WACRra,EAAKqa,SAAW,KACmB,IAAhCra,EAAKqa,SAASp8a,QAAQm3L,IACzB4qO,EAAKqa,SAASxgb,KAAKu7L,EACpB,IACDjwC,EAAIlxB,OAAOs9O,KAAK13W,KAAK,CAAEkhb,IAAK+R,EAAOtK,SAAUA,EACzCnuV,KAAMA,IACV,MACD,KAAMi3V,EACLvrO,EAAI+R,aAAa1X,EAAKsb,IAAIlD,aAC1BzS,EAAI+R,eAEJ,IADA,IAAIw7N,EAAQvtO,EAAIjlN,OAASilN,EAAIhmN,OACtBgmN,EAAIjlN,OAASwyb,GACnB,OAAQvtO,EAAI4R,QACZ,KAAKw6N,EAAQC,UACb,KAAKD,EAAQM,aACZ1sO,EAAI+R,eACJ/R,EAAIp9K,SAAWo9K,EAAIhmN,OACnB,MACD,KAAKoyb,EAAQz5N,IACZ3S,EAAI0S,QAAQ05N,EAAQz5N,KACpB,MACD,KAAKy5N,EAAQE,WAEZ,IAAIxvQ,EAAQkjC,EAAIuS,WAAW65N,EAAQE,YACnCrwb,EAAK29a,EAAS4T,SAAS1wQ,GAClBmjP,EAAK8Z,SAAS,GAAGrwZ,OAAOztB,IAC5Bgka,EAAK8Z,SAASjgb,KAAKmC,GACpB,MACD,KAAKmwb,EAAQK,cACZzsO,EAAI+R,aAAaq6N,EAAQK,eACzBxwb,EAAK29a,EAAS+Q,UAAU3qO,GACnBigN,EAAK8Z,SAAS,GAAGrwZ,OAAOztB,IAC5Bgka,EAAK8Z,SAASjgb,KAAKmC,GACpB,MACD,KAAKmwb,EAAQG,QACZ,IAAI/qP,EAAOwe,EAAIuS,WACX65N,EAAQG,SACZtwb,EAAK29a,EAAS0I,QAAQ9gP,GACjBy+N,EAAK8Z,SAAS,GAAGrwZ,OAAOztB,IAC5Bgka,EAAK8Z,SAASjgb,KAAKmC,GACpB,MACD,QACC+jN,EAAIuS,WAAWvS,EAAI4R,QAIrBxsE,EAAIlxB,OAAOs9O,KAAK13W,KAAK,CAAEkhb,IAAK+R,EAAOtK,SAAUA,IAC7C,MACD,QACCr9R,EAAIlxB,OAAOs9O,KAAK13W,KAAK,CACpBkhb,IAAK+R,EACLtK,SAAUA,EACV7oa,KAAMomM,EAAIuS,WAAWlY,EAAKsb,IAAIlD,aAAa,KAK7CzS,EAAIp9K,QAAUipN,CACd,CAED,IAAI2/L,EACA,mEAqBJ,IAAIO,EACA,mEAcJ,SAASv9R,EAAQ1iJ,EAAGC,QACTtH,IAANsH,IACHA,EAAI,GAEL,IADA,IAAI0C,EAAI,GAAK3C,EACN2C,EAAEzU,OAAS+R,GACjB0C,EAAI,IAAMA,EACX,OAAQA,CACR,CAuGD,SAAS48a,EAAaprB,EAAMjgN,GAC3B,IAAI56D,EAAM66Q,EAAK3sQ,WAAW2nR,KAC1BniR,EAAOl8J,OAAOwoJ,EAAK,kBAEnB46D,EAAIwV,gBAEJxV,EAAIwV,cAAcg1N,EAAM,IACxBxqO,EAAI8U,SAAS,GACb9U,EAAIyV,cAEJzV,EAAI9Z,YAAYhuH,EAAMilW,YAAYld,EAAKka,QAAS9/N,EAAKsb,IAAIzD,SAEzDlS,EAAIwV,gBACJxV,EAAIqV,SAASq1N,EAAUtlS,EAAI+sH,OACvB/sH,EAAI+sH,KAAKr0Q,MAAM,UAClBkiN,EAAI+U,YACL/U,EAAIyV,cAEJwqM,EAAKlmE,OAAO0zF,OAAOztO,GAEnBA,EAAIwV,gBACJy2N,EAAUjsO,EAAKigN,EAAKma,WACpB6R,EAAUjsO,EAAKigN,EAAKoa,YACpBr6N,EAAIyV,cAEJ,IAAIukI,EAAUimE,EAAK8Z,SAAS,GACxB2T,EAAWztB,EAAK8Z,SAAShva,MAAM,GAanC,GAZAivV,EAAQyzF,OAAOztO,GAEfskO,EAAME,WAAWxkO,EAAKigN,EAAKga,YAEvB70R,EAAIlxB,QAAUkxB,EAAIlxB,OAAO22T,gBAC5B7qO,EAAI9Z,YAAY9gD,EAAIlxB,OAAO22T,eAAgBL,EAAM,IAG9CplS,EAAIlxB,QAAUkxB,EAAIlxB,OAAO42T,iBAC5B9qO,EAAI9Z,YAAY9gD,EAAIlxB,OAAO42T,gBAAiBN,EAAM,IAG/CkD,EAAS1zb,OAAS,GAAsB,SAAjBggW,EAAQv3V,WACZgC,IAAlBw7Z,EAAKqa,UAA0Bra,EAAKqa,SAAStgb,OAAS,GACtDorJ,EAAIlxB,QAAUkxB,EAAIlxB,OAAOs9O,KAAO,CACpCxxJ,EAAIwV,cAAcg1N,EAAM,IACxBxqO,EAAIwV,gBAEJ,IAAIg8I,EAAO,QACW/sW,IAAlBw7Z,EAAKqa,UAA0Bra,EAAKqa,SAAStgb,OAAS,IACzDw3W,EAAK13W,KAAK,CACTkhb,IAAKuQ,EACL9I,UAAU,IAEXjxE,EAAK13W,KAAK,CACTkhb,IAAKuQ,EACL9I,UAAU,IAEXjxE,EAAK13W,KAAK,CACTkhb,IAAKuQ,EACL9I,UAAU,KAGZjxE,EAAK13W,KAAK,CAAEkhb,IAAKuQ,IACbnmS,EAAIlxB,QAAUkxB,EAAIlxB,OAAOs9O,OAC5BA,EAAOpsN,EAAIlxB,OAAOs9O,MAEnB,IAAK,IAAIx4W,EAAI,EAAGA,EAAIw4W,EAAKx3W,SAAUhB,EAAG,CAOrC,GANAgnN,EAAIwV,gBACJxV,EAAIqV,SAASm8I,EAAKx4W,GAAGgib,UAEIv2a,IAArB+sW,EAAKx4W,GAAGypb,UACXziO,EAAIiV,aAAau8I,EAAKx4W,GAAGypb,UAEtBjxE,EAAKx4W,GAAGgib,MAAQuQ,EAAc,CACjCvrO,EAAIwV,cAAcnb,EAAKsb,IAAIlD,aAC3BzS,EAAIwV,gBACiB,SAAjBwkI,EAAQv3V,MACXu9M,EAAIkV,YAAY8kI,EAAQj9K,SACpBu3C,EAAQ,IAEb,IAAK,IAAIxqM,EAAI,EAAGA,EAAI4ja,EAAS1zb,SAAU8vB,EACb,SAArB4ja,EAAS5ja,GAAGrnB,KACfu9M,EAAIkV,YACAw4N,EAAS5ja,GAAGizJ,SACZqvQ,EAAQG,SAET,UADOmB,EAAS5ja,GAAGrnB,KAEtBu9M,EAAIkV,YACAw4N,EAAS5ja,GAAGgzJ,MACZsvQ,EAAQE,aAMZtsO,EAAIwV,cACA42N,EAAQK,eACZiB,EAAS5ja,GAAG2ja,OAAOztO,GACnBA,EAAIyV,eAGNzV,EAAIyV,cACJzV,EAAIyV,aACJ,MAAM,GAAI+7I,EAAKx4W,GAAGgib,MAAQuQ,EAAuB,CACjDvrO,EAAIwV,cAAcnb,EAAKsb,IAAIlD,aAC3BzS,EAAIwV,gBACJ,IAAI2yJ,GAAuC,IAAjC83C,EAAKqa,SAASp8a,QAAQ,MAC5BmhN,EAAUmyJ,EAAKx4W,GAAGqmN,QACtBW,EAAIiV,aAAakzJ,QACD1jX,IAAZ46M,GACHW,EAAI8U,SAASzV,GACdW,EAAIyV,cACJzV,EAAIyV,aACJ,MAAM,GAAI+7I,EAAKx4W,GAAGgib,MAAQuQ,EAC1BvrO,EAAIwV,cAAcnb,EAAKsb,IAAIlD,aAC3BzS,EAAIwV,gBACJyqM,EAAKqa,SAAS78a,SAAQ,SAAUkwb,GAC/B,GAAgB,OAAZA,IAEiC,IAAjCb,EAAW5ub,QAAQyvb,GAAvB,CAEA,IAAI3S,EAAM2S,OACkBlpb,IAAxBmob,EAAWe,KACd3S,EAAM4R,EAAWe,IAClB3tO,EAAIqV,SAAS2lN,EAJN,CAKP,IACDh7N,EAAIyV,cACJzV,EAAIyV,mBACE,GAAI+7I,EAAKx4W,GAAGgib,MAAQuQ,EAAe,CAazC,GAZAvrO,EAAIwV,cAAcnb,EAAKsb,IAAIlD,kBAYNhuN,IAAjB+sW,EAAKx4W,GAAGs7F,KACX0rH,EAAI9Z,YAAYsrK,EAAKx4W,GAAGs7F,KACpB+lH,EAAKsb,IAAI5C,eACP,CACN,IAAIz+H,EAAOs5V,EAAc3tB,EAAKqa,SAC1BwS,GACJ9sO,EAAI9Z,YAAY5xG,EACZ+lH,EAAKsb,IAAI5C,UACb,CACD/S,EAAIyV,aACJ,MACAzV,EAAI9Z,YAAYsrK,EAAKx4W,GAAG4gB,KACpBygM,EAAKsb,IAAIlD,aAGdzS,EAAIyV,aACJ,CAEDzV,EAAIyV,cACJzV,EAAIyV,aACJ,CAEDzV,EAAIyV,aACJ,CAmCD,SAASm4N,EAAcT,EAASj4P,GAC/B,IAAIk4P,EAASl4P,EAASl7L,OAClB6zb,EAAOtsb,KAAK8K,KAAK+gb,EAAS,GAC1BzsO,EAAgB,EAAPktO,EAAWT,EACpB94V,EAAO0zC,EAAOivD,MAAM,EAAI42P,GAC5Bv5V,EAAK,GAAKqsH,EACV,IAAK,IAAI3nN,EAAI,EAAGA,EAAIo0b,IAAUp0b,EAAG,CAChC,IAAI80b,EAAQ,EAAIvsb,KAAKQ,MAAM/I,EAAI,GAE3B45B,EAAO,GADD,EAAK55B,EAAI,EAEf0c,EAAOw/K,EAASl8L,GACpB,QAAayL,IAATiR,GAEqC,IAA3By3a,EAAQjvb,QAAQwX,KAE7B4+E,EAAKw5V,IAAUl7Z,EAEhB,CACD,OAAQ0hE,CACR,yBC7uBDiqE,EAAOx3B,QAAU6yS,EAEjB,IAAI9gR,EAAS0b,EAAQ,OAOjBt8F,GANOs8F,EAAQ,OACNA,EAAQ,OACHA,EAAQ,OACVA,EAAQ,OACbA,EAAQ,OACRA,EAAQ,OACPA,EAAQ,QAChB6lC,EAAO7lC,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAGTu5Q,EAAc,yEAEdC,EAAO,CACXA,GAAU,UACVA,EAAS,WACTA,GAAU,WACVA,EAAS,UACTA,EAAS,UACTA,EAAS,UACTA,GAAU,UACVA,WAAkB,WAClBA,aAAoB,UACpBA,OAAc,UACdA,qBAA4B,WAC5BA,KAAY,WACZA,gBAAuB,WACvBA,YAAmB,WACnBA,GAAU,6BACVA,IAAW,4BACXA,KAAY,4BACZA,MAAa,WACbA,GAAU,WACVA,SAAgB,WAChBA,UAAiB,WACjBA,aAAoB,wBAEhBC,EAAS,CAAC,EAKd,SAASrU,EAAS7gQ,GACjB,IAAIx0K,EAAOnJ,KAkBX,GAjBA09J,EAAOl8J,OAAOm8K,EAAM,WACpBjgB,EAAOghR,cAAc/gQ,EAAKthK,WAAY,sBACtCrc,KAAKqc,WAAashK,EAAKthK,WACvBrc,KAAK8yb,gBAAkB,CAAC,EACxB9yb,KAAKqc,WAAWha,SAAQ,SAAUwR,GAC7BA,EAAEyG,OAASzG,EAAE+ra,MAChB/ra,EAAE+ra,IAAMgT,EAAK/+a,EAAEyG,OACZzG,EAAE+ra,MAAQ/ra,EAAEyG,OACfzG,EAAEyG,KAAOu4a,EAAOh/a,EAAE+ra,WACkBv2a,IAAjCF,EAAK2pb,gBAAgBj/a,EAAEyG,QAC1BnR,EAAK2pb,gBAAgBj/a,EAAEyG,MAAQ,IAChCnR,EAAK2pb,gBAAgBj/a,EAAEyG,MAAM5b,KAAKmV,EAClC,IACG7T,KAAK8yb,gBAAgBC,IAAM/yb,KAAK8yb,gBAAgBC,GAAGn0b,OAAS,IAC/DoB,KAAK+yb,GAAK/yb,KAAK8yb,gBAAgBC,GAAG,GAAGp0b,OAEtC++J,EAAOoyL,eAAenyK,EAAKt2K,KAAM,qBACfgC,IAAds0K,EAAKt2K,KACuB,IAA3BrH,KAAKqc,WAAWzd,QAChBoB,KAAK8yb,gBAAgBC,IACc,IAAnC/yb,KAAK8yb,gBAAgBC,GAAGn0b,QACxBoB,KAAK8yb,gBAAgBC,GAAG,GAAGp0b,MAAM+D,MAAMiwb,IAC1C3yb,KAAKqH,KAAO,OACZrH,KAAK2hL,SAAW3hL,KAAK8yb,gBAAgBC,GAAG,GAAGp0b,OAEjCqB,KAAK8yb,gBAAgBn7D,IAC5B33X,KAAKqc,WAAWzd,SAAWoB,KAAK8yb,gBAAgBn7D,GAAG/4X,QACtDoB,KAAKqH,KAAO,OACZrH,KAAK2hL,SAAW3hL,KAAK8yb,gBAAgBn7D,GAAG/xX,KACpC,SAAUiO,GACb,OAAQA,EAAElV,KACV,IAAEkjE,KAAK,MAEE7hE,KAAK8yb,gBAAgBhL,KAC5B9nb,KAAKqc,WAAWzd,SAChBoB,KAAK8yb,gBAAgBhL,IAAIlpb,QAC5BoB,KAAKqH,KAAO,OACZrH,KAAK8nb,IAAM9nb,KAAK8yb,gBAAgBhL,IAAI,GAAGnpb,OAE7BqB,KAAK8yb,gBAAgBC,IACO,IAAnC/yb,KAAK8yb,gBAAgBC,GAAGn0b,QACxBoB,KAAK8yb,gBAAgBC,GAAG,GAAGp0b,MAAM+D,MAAMiwb,IAC1C3yb,KAAKqH,KAAO,OACZrH,KAAK2hL,SAAW3hL,KAAK8yb,gBAAgBC,GAAG,GAAGp0b,OAEjCqB,KAAK8yb,gBAAgBhL,KACQ,IAApC9nb,KAAK8yb,gBAAgBhL,IAAIlpb,QAC5BoB,KAAKqH,KAAO,OACZrH,KAAK8nb,IAAM9nb,KAAK8yb,gBAAgBhL,IAAI,GAAGnpb,OAE7BqB,KAAK8yb,gBAAgBE,MACS,IAArChzb,KAAK8yb,gBAAgBE,KAAKp0b,QAC7BoB,KAAKqH,KAAO,QACZrH,KAAK0hL,MAAQ1hL,KAAK8yb,gBAAgBE,KAAK,GAAGr0b,OAEhCqB,KAAK8yb,gBAAgBC,IACO,IAAnC/yb,KAAK8yb,gBAAgBC,GAAGn0b,QAC3BoB,KAAKqH,KAAO,OACZrH,KAAK8nb,IAAM9nb,KAAK8yb,gBAAgBC,GAAG,GAAGp0b,OAGtCqB,KAAKqH,KAAO,eAIb,GADArH,KAAKqH,KAAOs2K,EAAKt2K,KACC,SAAdrH,KAAKqH,KACRrH,KAAK2hL,SAAWhE,EAAKgE,cACjB,GAAkB,SAAd3hL,KAAKqH,KACbrH,KAAK8nb,IAAMnqQ,EAAKmqQ,QACZ,IAAkB,UAAd9nb,KAAKqH,KAGb,MAAO,IAAIsK,MAAM,gBAAkB3R,KAAKqH,MAFxCrH,KAAK0hL,MAAQ/D,EAAK+D,KAElB,CAEF,CAhFDxgL,OAAOQ,KAAKkxb,GAAMvwb,SAAQ,SAAU0yE,GACnC89W,EAAOD,EAAK79W,IAAMA,CAClB,IAgFDypW,EAASt0a,UAAUI,SAAW,WAC7B,OAAQtK,KAAKqc,WAAWzW,KAAI,SAAUiO,GACrC,IAAInD,EAAImD,EAAEyG,KAAKonD,cAEfhxD,EAAIA,EAAEiyD,QAAQ,KAAM,OACpB,IAAI7tD,EAAIjB,EAAElV,MAGV,OAAQ+R,EAAI,KADZoE,EAAIA,EAAE6tD,QAAQ,KAAM,OAEpB,IAAEd,KAAK,KACR,EAED28W,EAASt0a,UAAUM,IAAM,SAAU8P,EAAM8nP,GACxC1kG,EAAOxhJ,OAAO5B,EAAM,QACpB,IAAI3c,EAAMqC,KAAK8yb,gBAAgBx4a,GAC/B,QAAYjR,IAAR1L,GAAoC,IAAfA,EAAIiB,OAA7B,CAEA,IAAKwjQ,GAAWzkQ,EAAIiB,OAAS,EAC5B,MAAO,IAAI+S,MAAM,iCAAmC2I,GACrD,OAAK8nP,EAEGzkQ,EAAIiI,KAAI,SAAUiO,GACzB,OAAQA,EAAElV,KACV,IAHQhB,EAAI,GAAGgB,KAJf,CAQD,EAED6/a,EAASt0a,UAAUoxB,QAAU,SAAUwnU,GACtC,OAAQ9iW,KAAKqc,WAAWzW,KAAI,SAAUiO,GACrC,MAAQ,CACPyG,KAAMzG,EAAEyG,KACR3b,MAAOkV,EAAElV,MAEV,GACD,EASD,IAAIs0b,EAAgB,4BAEhBC,EAAU,eAqCd,SAASC,EAAUrpb,EAAG8J,GACrB,GAAU,OAAN9J,GAAoB,OAAN8J,EACjB,OAAQ,EACT,IAAIw/a,EAAStpb,EAAE63D,MAAM,KACjB0xX,EAASz/a,EAAE+tD,MAAM,KACrB,GAAIyxX,EAAOx0b,SAAWy0b,EAAOz0b,OAC5B,OAAQ,EACT,IAAK,IAAIhB,EAAI,EAAGA,EAAIw1b,EAAOx0b,SAAUhB,EACpC,GAAkB,MAAdw1b,EAAOx1b,IAA4B,MAAdy1b,EAAOz1b,IAE5Bw1b,EAAOx1b,KAAOy1b,EAAOz1b,GACxB,OAAQ,EAEV,OAAQ,CACR,CAjDD4gb,EAASt0a,UAAUmob,OAAS,SAAUztO,EAAK3tD,GAC1C2tD,EAAIwV,cAAcnjE,GAClBj3J,KAAKqc,WAAWha,SAAQ,SAAUwR,GAYjC,GAXA+wM,EAAIwV,cAAcnb,EAAKsb,IAAItB,YAAcha,EAAKsb,IAAItwJ,KAClD26I,EAAIwV,gBACJxV,EAAIqV,SAASpmN,EAAE+ra,KASX/ra,EAAEy/a,WAAar0O,EAAKsb,IAAItC,YACxBpkN,EAAElV,MAAM+D,MAAMwwb,GAAU,CAC3B,IAAIp+a,EAAI83H,EAAOvtH,KAAKxL,EAAElV,MAAO,QAC7BimN,EAAI9Z,YAAYh2L,EAAGmqM,EAAKsb,IAAItC,WAE5B,MAAM,GAAIpkN,EAAEy/a,WAAar0O,EAAKsb,IAAI/B,WAC/B3kN,EAAElV,MAAM+D,MAAMuwb,GACjBruO,EAAIkV,YAAYjmN,EAAElV,MAAOsgN,EAAKsb,IAAI/B,eAE5B,CACN,IAAInxN,EAAO43M,EAAKsb,IAAIlC,qBACDhvN,IAAfwK,EAAEy/a,WACLjsb,EAAOwM,EAAEy/a,UACV1uO,EAAIkV,YAAYjmN,EAAElV,MAAO0I,EACzB,CACDu9M,EAAIyV,cACJzV,EAAIyV,aACJ,IACDzV,EAAIyV,aACJ,EAkBDmkN,EAASt0a,UAAUokB,OAAS,SAAU00F,GACrC,IAAKw7T,EAAS+U,WAAWvwU,EAAO,CAAC,EAAG,IACnC,OAAQ,EACT,GAAIA,EAAM3mG,WAAWzd,SAAWoB,KAAKqc,WAAWzd,OAC/C,OAAQ,EACT,IAAK,IAAIhB,EAAI,EAAGA,EAAIoC,KAAKqc,WAAWzd,SAAUhB,EAAG,CAChD,GAAIoC,KAAKqc,WAAWze,GAAGgib,MAAQ58T,EAAM3mG,WAAWze,GAAGgib,IAClD,OAAQ,EACT,IAAKuT,EAAUnzb,KAAKqc,WAAWze,GAAGe,MAC9BqkH,EAAM3mG,WAAWze,GAAGe,OACvB,OAAQ,CAET,CACD,OAAQ,CACR,EAED6/a,EAAS0I,QAAU,SAAUvlQ,GAE5B,OADAjkB,EAAOxhJ,OAAOylK,EAAU,YAChB,IAAI68P,EAAS,CACpBn3a,KAAM,OACNs6K,SAAUA,EACVtlK,WAAY,CAAE,CAAE/B,KAAM,KAAM3b,MAAOgjL,KAEpC,EAED68P,EAASyI,QAAU,SAAUa,GAE5B,OADApqR,EAAOxhJ,OAAO4ra,EAAK,OACX,IAAItJ,EAAS,CACpBn3a,KAAM,OACNygb,IAAKA,EACLzra,WAAY,CAAE,CAAE/B,KAAM,MAAO3b,MAAOmpb,KAErC,EAEDtJ,EAAS4T,SAAW,SAAU1wQ,GAE7B,OADAhkB,EAAOxhJ,OAAOwlK,EAAO,SACb,IAAI88P,EAAS,CACpBn3a,KAAM,QACNq6K,MAAOA,EACPrlK,WAAY,CAAE,CAAE/B,KAAM,OAAQ3b,MAAO+iL,KAEtC,EAED88P,EAASgV,QAAU,SAAUC,GAC5B/1R,EAAOxhJ,OAAOu3a,EAAI,MAIlB,IAHA,IAAIhxb,EAAQ,CAAC,IACTqgW,EAAM,EACNntD,EAAM89I,EACH99I,EAAI/2S,OAAS,GAAG,CACtB,IAAI+R,EAEJ,GAA6B,QAAxBA,EAAI,KAAKyL,KAAKu5R,IAClBlzS,IAAQqgW,GAAO,GACfntD,EAAMA,EAAIhmS,MAAMgB,EAAE,GAAG/R,aAEf,GAA+B,QAA1B+R,EAAI,OAAOyL,KAAKu5R,IAC3BlzS,EAAMqgW,IAAQ,IACdntD,EAAMA,EAAIhmS,MAAMgB,EAAE,GAAG/R,aAEf,GAA+B,QAA1B+R,EAAI,OAAOyL,KAAKu5R,IAC3BlzS,EAAMqgW,IAAQnyV,EAAE,GAChBglS,EAAMA,EAAIhmS,MAAMgB,EAAE,GAAG/R,YAEf,IAAmC,QAA9B+R,EAAI,WAAWyL,KAAKu5R,IAI/B,MAAO,IAAIhkS,MAAM,sBAHjBlP,EAAMqgW,IAAQnyV,EAAE,GAChBglS,EAAMA,EAAIhmS,MAAMgB,EAAE,GAAG/R,OAGrB,CACD,CAcD,OAAQ,IAAI4/a,EAAS,CAAEnia,WAbZ5Z,EAAMmD,KAAI,SAAUiO,GAG9B,IADA,IAAI6/a,GADJ7/a,EAAIA,EAAE0tD,QACQz+D,QAAQ,KACf4wb,EAAQ,GAA6B,OAAxB7/a,EAAE4I,OAAOi3a,EAAQ,IACpCA,EAAQ7/a,EAAE/Q,QAAQ,IAAK4wb,EAAQ,GAChC,IAAe,IAAXA,EACH,MAAO,IAAI/hb,MAAM,sBAKlB,MAAQ,CAAE2I,KAFCzG,EAAElE,MAAM,EAAG+jb,GAAOnjb,cAAcoyD,QAAQ,OAAQ,KAErChkE,MADVkV,EAAElE,MAAM+jb,EAAQ,GAE5B,KAED,EAEDlV,EAASzka,UAAY,SAAUsC,GAU9B,OATAqhJ,EAAOghR,cAAcria,EAAY,cACjCA,EAAWha,SAAQ,SAAUggK,GAG5B,GAFA3E,EAAOl8J,OAAO6gK,EAAK,aACnB3E,EAAOxhJ,OAAOmmJ,EAAI/nJ,KAAM,mBACnBsyH,EAAOk2D,SAASzgC,EAAI1jK,QACI,kBAAf0jK,EAAI1jK,MACjB,MAAO,IAAIgT,MAAM,0BAElB,IACO,IAAI6sa,EAAS,CAAEnia,WAAYA,GACnC,EAEDmia,EAAS+Q,UAAY,SAAU3qO,EAAK1gN,GACnC,IAAImY,EAAa,GACjBuoM,EAAI+R,aAAazyN,GAEjB,IADA,IAAImxC,EAAMuvK,EAAIjlN,OAASilN,EAAIhmN,OACpBgmN,EAAIjlN,OAAS01C,GAAK,CACxBuvK,EAAI+R,aAAa1X,EAAKsb,IAAItB,YAAcha,EAAKsb,IAAItwJ,KACjD,IAAIwmL,EAAQ7rC,EAAIjlN,OAASilN,EAAIhmN,OAC7BgmN,EAAI+R,eACJ,IAEIh4N,EAFAihb,EAAMh7N,EAAI0S,UACVjwN,EAAOu9M,EAAI4R,OAEf,OAAQnvN,GACR,KAAK43M,EAAKsb,IAAIlC,gBACd,KAAKpZ,EAAKsb,IAAI/B,UACd,KAAKvZ,EAAKsb,IAAIlD,YACd,KAAKpY,EAAKsb,IAAIjC,UACb35N,EAAQimN,EAAIuS,WAAW9vN,GACvB,MACD,KAAK43M,EAAKsb,IAAItC,WAEbt5N,GADAA,EAAQimN,EAAIuS,WAAW9vN,GAAM,IACfiD,SAAS,QACvB,MACD,KAAK20M,EAAKsb,IAAIxB,gBACd,KAAK9Z,EAAKsb,IAAIvB,UAEbr6N,GADAA,EAAQimN,EAAIuS,WAAW9vN,GAAM,IACfiD,SAAS,WACvB,MACD,QACC,MAAO,IAAIqH,MAAM,qBAAuBtK,GAEzCgV,EAAW3d,KAAK,CAAEkhb,IAAKA,EAAK0T,SAAUjsb,EAAM1I,MAAOA,IACnDimN,EAAIp9K,QAAUipN,CACd,CAED,OADA7rC,EAAIp9K,QAAU6N,EACN,IAAImpY,EAAS,CACpBnia,WAAYA,GAEb,EAEDmia,EAAS+U,WAAa,SAAUvyb,EAAK2/a,GACpC,OAAQ7jW,EAAM8jW,aAAa5/a,EAAKw9a,EAAUmC,EAC1C,EAMDnC,EAASt0a,UAAU22a,iBAAmB,CAAC,EAAG,GAE1CrC,EAASsC,kBAAoB,SAAU9/a,GACtC,MAAQ,CAAC,EAAG,EACZ,yBClXD,IAAIovV,EAAMh3K,EAAQ,OACdklQ,EAAcllQ,EAAQ,OACtBtM,EAAYsM,EAAQ,OACpB+9H,EAAa/9H,EAAQ,OACrBglQ,EAAchlQ,EAAQ,OACtBolQ,EAAWplQ,EAAQ,OACnBmlQ,EAAOnlQ,EAAQ,OAEnBjW,EAAOx3B,QAAU,CAEhBykN,IAAKA,EACLH,SAAUG,EAAInvU,MACdq9Z,YAAaA,EACbqV,iBAAkBrV,EAAYr9Z,MAC9B6rJ,UAAWA,EACXw1I,eAAgBx1I,EAAU7rJ,MAC1Bk2R,WAAYA,EACZk4C,gBAAiBl4C,EAAWl2R,MAC5B2ya,mBAAoBz8I,EAAWrrI,SAC/BsyQ,YAAaA,EACbyV,iBAAkBzV,EAAYn9Z,MAC9B6ya,4BAA6B1V,EAAY8B,iBACzC6T,kBAAmB3V,EAAYvza,OAC/B2za,SAAUA,EACVwV,eAAgBxV,EAASgV,QACzBS,gBAAiBzV,EAAS0I,QAC1BgN,gBAAiB1V,EAASyI,QAC1BkN,iBAAkB3V,EAAS4T,SAC3BgC,kBAAmB5V,EAASzka,UAG5B2oa,uBAAwBnE,EAAKmE,uBAC7Bl1F,sBAAuB+wF,EAAK/wF,sBAC5Bm1F,cAAepE,EAAKoE,cACpBG,oBAAqBvE,EAAKuE,oBAC1BE,kBAAmBzE,EAAKyE,kBACxBvE,sBAAuBF,EAAKE,oECpC7Bt7Q,EAAOx3B,QAAUykN,EAEjB,IASIikG,EATA32R,EAAS0b,EAAQ,OACjBilQ,EAAOjlQ,EAAQ,OACfkwD,EAASlwD,EAAQ,OACjBklQ,EAAcllQ,EAAQ,OACtBtM,EAAYsM,EAAQ,OACpBy1H,EAAgBz1H,EAAAA,OAAAA,cAChBmlQ,EAAOnlQ,EAAQ,OACft8F,EAAQs8F,EAAQ,OAChB+9H,EAAa/9H,EAAQ,OAGzB,IACCi7Q,EAAWj7Q,EAAQ,MAGnB,CAFC,MAAOpyK,GAER,CAED,IAAIwmV,EAAwB+wF,EAAK/wF,sBAC7Bm1F,EAAgBpE,EAAKoE,cAErBppQ,EAAU,CAAC,EAaf,SAAS62K,EAAIzyK,GACZjgB,EAAOl8J,OAAOm8K,EAAM,WACpBjgB,EAAOghR,cAAc/gQ,EAAKl7K,MAAO,iBACjCi7J,EAAOxhJ,OAAOyhK,EAAKt2K,KAAM,gBACzBq2J,EAAOoyL,eAAenyK,EAAKuyK,QAAS,mBAEpC,IAAI4tF,EAAUO,EAAKv1a,KAAK60K,EAAKt2K,MAC7B,GAAyB,kBAAby2a,EACX,MAAO,IAAItwF,EAAsB7vK,EAAKt2K,MAGvC,IADA,IAgBI4jB,EAhBAqpa,EAAa,CAAC,EACT12b,EAAI,EAAGA,EAAI+/K,EAAKl7K,MAAM7D,SAAUhB,EAAG,CAC3C,IAAIgpL,EAAOjJ,EAAKl7K,MAAM7E,GACtB02b,EAAW1tQ,EAAKtsK,MAAQssK,CACxB,CAcD,GAZA5mL,KAAKqH,KAAOs2K,EAAKt2K,KACjBrH,KAAKyC,MAAQk7K,EAAKl7K,MAClBzC,KAAK4mL,KAAO0tQ,EACZt0b,KAAKkwV,aAAU7mV,EACfrJ,KAAKoC,OAASu7K,EAAKv7K,OAGnBpC,KAAKytb,cAAgB9vQ,EAAK8vQ,cAC1Bztb,KAAKm/a,WAAa,CAAC,EAGnBn/a,KAAK6gK,WAAQx3J,EACK,UAAdrJ,KAAKqH,KAAkB,CAC1B,IAAIw5J,EAAQ7gK,KAAK4mL,KAAK/lB,MAAMriJ,KAAKlU,WACjCtK,KAAK6gK,MAAQA,EACb51I,EAAKozZ,EAAKh0Q,OAAOxJ,GAAOrkJ,IACxB,MAAM,GAAkB,YAAdxc,KAAKqH,MAAoC,eAAdrH,KAAKqH,KAC1C4jB,EAAK,IACLjrB,KAAK6gK,MAAQ,iBACP,CACN,IAAI0zR,EAASv0b,KAAK4mL,KAAKk3P,EAAQC,UAE/B9yZ,EAAU,GADVA,EAAKspa,EAAO/1a,KAAK5f,QACHk+E,EAAMkvW,WAAWuI,EAAO/1a,KACtC,CACDxe,KAAKwc,KAAOyO,CACZ,CArDDsuJ,EAAO,KAAWH,EAAQ,OAC1BG,EAAO,IAAUH,EAAQ,OACzBG,EAAO,MAAYH,EAAQ,OAC3BG,EAAO,MAAYH,EAAQ,OAC3BG,EAAO,QAAcH,EAAQ,OAC7BG,EAAO,IAAUH,EAAQ,OACzBG,EAAQ,eAAiBH,EAAQ,OACjCG,EAAO,QAAcA,EAAQ,eAC7BA,EAAO,OAAaH,EAAQ,OAC5BG,EAAO,MAAYH,EAAQ,OAC3BG,EAAO,IAAUA,EAAO,MA6CxB62K,EAAI72K,QAAUA,EAEd62K,EAAIlmV,UAAUizI,SAAW,SAAUp9H,EAAQjgB,GAO1C,YANeuJ,IAAX0W,IACHA,EAAS,OACV29I,EAAOxhJ,OAAO6D,EAAQ,UACtB29I,EAAOl8J,OAAO+3K,EAAQx5J,GAAS,mBAC/B29I,EAAOykM,eAAeriW,EAAS,WAEhB,YAAXigB,QACwB1W,IAAvBrJ,KAAKytb,gBACRztb,KAAKytb,cAAgBl0Q,EAAO,QAAYmpB,MAAM1iM,OACvCA,KAAKytb,eAGNl0Q,EAAQx5J,GAAQ2iL,MAAM1iM,KAAMF,EACpC,EAEDswV,EAAIlmV,UAAUI,SAAW,SAAUyV,EAAQjgB,GAC1C,OAAQE,KAAKm9I,SAASp9H,EAAQjgB,GAASwK,UACvC,EAED8lV,EAAIlmV,UAAUilE,KAAO,SAAU4nM,EAAM1vQ,GAMpC,GALAq2J,EAAOxhJ,OAAO66P,EAAM,aACpBr5G,EAAOoyL,eAAezoV,EAAM,aACfgC,IAAThC,IACHA,EAAO,OACR0vQ,EAAOA,EAAKxmQ,mBACgBlH,IAAxBg1a,EAAKF,SAASpnK,GACjB,MAAO,IAAIy2E,EAAsBz2E,GAElC,IAII5pG,EAJAlpG,EAAW8yM,EAAO,KAAO1vQ,EAC7B,GAAIrH,KAAKm/a,WAAWl7W,GACnB,OAAQjkE,KAAKm/a,WAAWl7W,GAGzB,GAAa,QAAT58D,EACH8lK,EAAMntK,KAAKm9I,SAAS,eACd,IAAa,SAAT91I,EAGV,MAAO,IAAIsK,MAAM,aAAetK,EAAO,kBAFvC8lK,EAAMoM,EAAQ2vQ,MAAM0C,cAAc5rb,KAGlC,CACD,IAAImvE,EAAOm6J,EAAOqB,WAAWosC,GAAMjyP,OAAOqoJ,GAAKxB,SAE/C,OADA3rK,KAAKm/a,WAAWl7W,GAAYkL,EACpBA,CACR,EAEDihR,EAAIlmV,UAAUkyT,YAAc,SAAUrlD,EAAM1vQ,QAC9BgC,IAAT0tQ,IACHA,EAAO,eACK1tQ,IAAThC,IACHA,EAAO,OACRq2J,EAAOxhJ,OAAO66P,EAAM,aACpBr5G,EAAOxhJ,OAAO7U,EAAM,QACpB,IAAIs2K,EAAO,CACVt2K,KAAM,MACN8nE,KAAMnvE,KAAKmvE,KAAK4nM,EAAM1vQ,GACtB+uQ,UAAWW,EACXS,SAAUnwQ,GAEX,OAAQ,IAAIi3a,EAAY3gQ,EACxB,EAEDyyK,EAAIlmV,UAAUgmb,qBAAuB,WACpC,IAAI5N,EAAW,OAef,MAdkB,QAAdtib,KAAKqH,OACRi7a,EAAW,UACM,QAAdtib,KAAKqH,MAAkBrH,KAAKwc,KAAO,OACtC8la,EAAW,UACM,YAAdtib,KAAKqH,OACRi7a,EAAW,UACM,UAAdtib,KAAKqH,OAEPi7a,EADGtib,KAAKwc,MAAQ,IACL,SACHxc,KAAKwc,MAAQ,IACV,SAEA,UAEL8la,CACR,EAEDlyF,EAAIlmV,UAAU0sQ,aAAe,SAAU0rK,GAMtC,QALiBj5a,IAAbi5a,IACHA,EAAWtib,KAAKkwb,wBACjBxyR,EAAOxhJ,OAAOoma,EAAU,kBAGN,YAAdtib,KAAKqH,WAAmCgC,IAAbgrb,EAC9B,OAAQ,IAAIA,EAAShS,SAASrib,KAAMsib,GACrC,GAAkB,eAAdtib,KAAKqH,KACR,MAAO,IAAIsK,MAAM,gEAGlB,IAAImD,EAAG+1a,EAAIhsb,EACX,IACCgsb,EAAKvI,EAAS5gX,cACd5sD,EAAIw0N,EAAOstC,aAAai0K,EAGxB,CAFC,MAAO7jb,GACRnI,EAAMmI,CACN,OACSqC,IAANyL,GAAoBjW,aAAe8S,OACnC9S,EAAIw4F,QAAQ30F,MAAM,6BACrBmob,EAAK,OACLA,GAAMvI,EAAS5gX,cACf5sD,EAAIw0N,EAAOstC,aAAai0K,IAEzBntR,EAAO6jC,GAAGzsL,EAAG,6BACb,IAAI0/a,EAAY1/a,EAAE+3J,OAAOhjK,KAAKiL,GAC1B7T,EAAMjB,KAAKm9I,SAAS,SACpB0jB,EAAQ7gK,KAAK6gK,MACb13J,EAAOnJ,KA8BX,OA7BA8U,EAAE+3J,OAAS,SAAUx0B,EAAWiiD,GAC/B,GAAIxtB,EAAUy1Q,YAAYlqS,EAAW,CAAC,EAAG,IACxC,OAAIA,EAAUhxI,OAAS8B,EAAK9B,SAExBgxI,EAAU4hL,eACV5hL,EAAU4hL,gBAAkBqoH,OAE5BjqS,EAAUwoB,OAAuB,UAAd13J,EAAK9B,MACxBgxI,EAAUwoB,QAAUA,IAEhB2zR,EAAUvzb,EAAKo3I,EAAU8E,SAAS,WAEpC,GAA2B,kBAAf9E,GACfzL,EAAOk2D,SAASzqD,GACnB,OAAQm8S,EAAUvzb,EAAKo3I,EAAWiiD,GAM5B,MAAIxtB,EAAUy1Q,YAAYlqS,EAAW,CAAC,EAAG,IACxC,IAAI1mI,MAAM,8EAIV,IAAI5S,UAAU,0DAGtB,EACO+V,CACR,EAEDs7U,EAAIlmV,UAAU0kS,oBAAsB,WACnC,GAAkB,QAAd5uS,KAAKqH,KACR,MAAO,IAAIsK,MAAM,0CAElB,OAAQ,IAAIk9R,EAAc7uS,KAC1B,EACDowV,EAAIlmV,UAAUuqb,SAAWrkG,EAAIlmV,UAAU0kS,oBAEvCwhD,EAAInvU,MAAQ,SAAUzC,EAAMuB,EAAQjgB,GACb,kBAAV0e,GACXk/I,EAAOplH,OAAO95B,EAAM,aACNnV,IAAX0W,IACHA,EAAS,QACV29I,EAAOxhJ,OAAO6D,EAAQ,UACG,kBAAbjgB,IACXA,EAAU,CAAE2/W,SAAU3/W,IACvB49J,EAAOykM,eAAeriW,EAAS,gBACfuJ,IAAZvJ,IACHA,EAAU,CAAC,GACZ49J,EAAOoyL,eAAehwV,EAAQ2/W,SAAU,yBACfp2W,IAArBvJ,EAAQ2/W,WACX3/W,EAAQ2/W,SAAW,aAEpB/hN,EAAOl8J,OAAO+3K,EAAQx5J,GAAS,mBAE/B,IACC,IAAIg1D,EAAIwkG,EAAQx5J,GAAQovF,KAAK3wF,EAAM1e,GAKnC,OAJIi1E,aAAaoiO,IAChBpiO,EAAIA,EAAE0rW,YACF1rW,EAAEm7Q,UACNn7Q,EAAEm7Q,QAAUpwV,EAAQ2/W,UACb1qS,CAKR,CAJC,MAAO/tE,GACR,GAAe,sBAAXA,EAAEsT,KACL,MAAOtT,EACR,MAAO,IAAI27a,EAAc7ib,EAAQ2/W,SAAU1/V,EAAQ/Y,EACnD,CACD,EAEDopV,EAAIC,MAAQ,SAAUrvV,EAAK2/a,GAC1B,OAAQ7jW,EAAM8jW,aAAa5/a,EAAKovV,EAAKuwF,EACrC,EAaDvwF,EAAIlmV,UAAU22a,iBAAmB,CAAC,EAAG,GAErCzwF,EAAI0wF,kBAAoB,SAAU9/a,GAGjC,OAFA08J,EAAOtiC,KAAKp6H,EAAIm8I,UAChBugB,EAAOtiC,KAAKp6H,EAAIo7T,aACZp7T,EAAIyzb,SACC,CAAC,EAAG,GACTzzb,EAAIkvb,qBACC,CAAC,EAAG,GACTlvb,EAAIu4K,QAAJ,KACK,CAAC,EAAG,GACTv4K,EAAIu4K,QAAJ,MACK,CAAC,EAAG,GACL,CAAC,EAAG,EACZ,yBCnSDpW,EAAOx3B,QAAUwrK,EAEjB,IAAIz5I,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACTilQ,EAAOjlQ,EAAQ,OACfkwD,EAASlwD,EAAQ,OAEjBtM,GADcsM,EAAQ,OACVA,EAAQ,QACpBmlQ,EAAOnlQ,EAAQ,OACfM,EAAON,EAAQ,OACft8F,EAAQs8F,EAAQ,OAChBs7Q,EAAMt7Q,EAAQ,OACd2nQ,EAAgB2T,EAAI3T,cACpBM,EAAkBqT,EAAIrT,gBACtBgT,EAAWj7Q,EAAQ,OACnBkoQ,EAAOloQ,EAAQ,MAEfg3K,EAAMh3K,EAAQ,OAGdupQ,GADwBpE,EAAK/wF,sBACb+wF,EAAKoE,eAGrBppQ,GAFoBglQ,EAAKyE,kBAEf,CAAC,GAYf,SAAS7rI,EAAWx5H,GACnBjgB,EAAOl8J,OAAOm8K,EAAM,WACpByyK,EAAI7xV,KAAKyB,KAAM29K,GAEf39K,KAAK20b,eAAYtrb,CACjB,CAhBDkwK,EAAO,KAAWH,EAAQ,OAC1BG,EAAO,IAAUH,EAAQ,OACzBG,EAAO,MAAYH,EAAQ,OAC3BG,EAAO,MAAYH,EAAQ,OAC3BG,EAAO,QAAcH,EAAQ,OAC7BG,EAAQ,eAAiBH,EAAQ,OACjCG,EAAO,QAAcA,EAAQ,eAC7BA,EAAO,IAAUA,EAAQ,eACzBA,EAAO,OAAaH,EAAQ,OAC5BG,EAAO,MAAYH,EAAQ,OAQ3BM,EAAKxV,SAASizI,EAAYi5C,GAE1Bj5C,EAAW59H,QAAUA,EAErB49H,EAAWjtS,UAAUizI,SAAW,SAAUp9H,EAAQjgB,GAOjD,YANeuJ,IAAX0W,IACHA,EAAS,SACV29I,EAAOxhJ,OAAO6D,EAAQ,UACtB29I,EAAOl8J,OAAO+3K,EAAQx5J,GAAS,mBAC/B29I,EAAOykM,eAAeriW,EAAS,WAEvBy5K,EAAQx5J,GAAQ2iL,MAAM1iM,KAAMF,EACpC,EAEDq3S,EAAWjtS,UAAUilE,KAAO,SAAU4nM,EAAM1vQ,GAC3C,OAAQrH,KAAKygb,WAAWtxW,KAAK4nM,EAAM1vQ,EACnC,EAED8vS,EAAWjtS,UAAUkyT,YAAc,SAAUrlD,EAAM1vQ,GAClD,OAAQrH,KAAKygb,WAAWrkH,YAAYrlD,EAAM1vQ,EAC1C,EAED8vS,EAAWjtS,UAAUu2a,SAAW,WAC/B,GAAIzgb,KAAK20b,UACR,OAAQ30b,KAAK20b,UAId,IAFA,IAAI7W,EAAUO,EAAKv1a,KAAK9I,KAAKqH,MACzButb,EAAW,GACNh3b,EAAI,EAAGA,EAAIkgb,EAAQr7a,MAAM7D,SAAUhB,EAAG,CAC9C,IAAI4d,EAAIsia,EAAQr7a,MAAM7E,GACtBg3b,EAASl2b,KAAKsB,KAAK4mL,KAAKprK,GACxB,CASD,OAPAxb,KAAK20b,UAAY,IAAIvkG,EAAI,CACxB/oV,KAAMrH,KAAKqH,KACXjF,OAAQpC,KACRyC,MAAOmyb,IAEJ50b,KAAKkwV,UACRlwV,KAAK20b,UAAUzkG,QAAUlwV,KAAKkwV,SACvBlwV,KAAK20b,SACb,EAEDx9I,EAAWjtS,UAAU0iK,OAAS,SAAUioR,GAEvC,IAAI3oR,EAAMC,EAAK2F,EAEf,GAHApU,EAAOxhJ,OAAO24a,EAAS,QAGL,YAAd70b,KAAKqH,MAAkC,eAAZwtb,EAQ9B,OANgB,KADhB3oR,EAAOlsK,KAAK4mL,KAAK7xG,EAAEv2D,MACV,KACR0tJ,EAAOA,EAAKv8J,MAAM,IAEnBmiK,EAAOwvQ,EAAKp1Z,IAAI+hJ,QAAQ6mR,cAAc,IAAItjb,WAAW06J,IACrDC,EAAMv/B,EAAOvtH,KAAKyyJ,EAAK7B,WAEf,IAAIknI,EAAW,CACtB9vS,KAAM,aACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAY51Q,IACrC,CAAE7xJ,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAY71Q,OAGjC,GAAkB,eAAdlsK,KAAKqH,MAAqC,YAAZwtb,EAQxC,OANgB,KADhB3oR,EAAOlsK,KAAK4mL,KAAK7xG,EAAEv2D,MACV,KACR0tJ,EAAOA,EAAKv8J,MAAM,IAEnBmiK,EAAOwvQ,EAAKhvZ,KAAK27I,QAAQ8mR,SAAS,IAAIvjb,WAAW06J,IACjDC,EAAMv/B,EAAOvtH,KAAKyyJ,EAAK7B,WAEf,IAAIknI,EAAW,CACtB9vS,KAAM,UACN5E,MAAO,CACN,CAAE6X,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAY51Q,IACrC,CAAE7xJ,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAY71Q,OAIxC,MAAO,IAAIv6J,MAAM,qCAAuC3R,KAAKqH,KACzD,OAASwtb,EACb,EAED19I,EAAWjtS,UAAU0sQ,aAAe,SAAU0rK,GAC7C,OAAQtib,KAAKygb,WAAW7pK,aAAa0rK,EACrC,EAEDnrI,EAAWjtS,UAAUysQ,WAAa,SAAU2rK,GAM3C,QALiBj5a,IAAbi5a,IACHA,EAAWtib,KAAKkwb,wBACjBxyR,EAAOxhJ,OAAOoma,EAAU,kBAGN,YAAdtib,KAAKqH,WAAmCgC,IAAbgrb,EAC9B,OAAQ,IAAIA,EAAS7lS,OAAOxuJ,KAAMsib,GACnC,GAAkB,eAAdtib,KAAKqH,KACR,MAAO,IAAIsK,MAAM,gEAGlB,IAAImD,EAAG+1a,EAAIhsb,EACX,IACCgsb,EAAKvI,EAAS5gX,cACd5sD,EAAIw0N,EAAOqtC,WAAWk0K,EAGtB,CAFC,MAAO7jb,GACRnI,EAAMmI,CACN,OACSqC,IAANyL,GAAoBjW,aAAe8S,OACnC9S,EAAIw4F,QAAQ30F,MAAM,6BACrBmob,EAAK,OACLA,GAAMvI,EAAS5gX,cACf5sD,EAAIw0N,EAAOqtC,WAAWk0K,IAEvBntR,EAAO6jC,GAAGzsL,EAAG,6BACb,IAAIkgb,EAAUlgb,EAAEwd,KAAKzoB,KAAKiL,GACtB7T,EAAMjB,KAAKm9I,SAAS,SACpB91I,EAAOrH,KAAKqH,KACZw5J,EAAQ7gK,KAAK6gK,MAUjB,OATA/rJ,EAAEwd,KAAO,WACR,IAAI03H,EAAMgrS,EAAQ/zb,GAMlB,MALqB,kBAAT+oJ,IACXA,EAAMpd,EAAOvtH,KAAK2qI,EAAK,YACxBA,EAAM8iB,EAAU7rJ,MAAM+oI,EAAK3iJ,EAAM,SAC7B4yT,cAAgBqoH,EACpBt4R,EAAI6W,MAAQA,EACJ7W,CACR,EACOl1I,CACR,EAEDqiS,EAAWl2R,MAAQ,SAAUzC,EAAMuB,EAAQjgB,GACpB,kBAAV0e,GACXk/I,EAAOplH,OAAO95B,EAAM,aACNnV,IAAX0W,IACHA,EAAS,QACV29I,EAAOxhJ,OAAO6D,EAAQ,UACG,kBAAbjgB,IACXA,EAAU,CAAE2/W,SAAU3/W,IACvB49J,EAAOykM,eAAeriW,EAAS,gBACfuJ,IAAZvJ,IACHA,EAAU,CAAC,GACZ49J,EAAOoyL,eAAehwV,EAAQ2/W,SAAU,yBACfp2W,IAArBvJ,EAAQ2/W,WACX3/W,EAAQ2/W,SAAW,aAEpB/hN,EAAOl8J,OAAO+3K,EAAQx5J,GAAS,mBAE/B,IACC,IAAIg1D,EAAIwkG,EAAQx5J,GAAQovF,KAAK3wF,EAAM1e,GAInC,OAHA49J,EAAO6jC,GAAGxsH,aAAaoiO,EAAY,4BAC9BpiO,EAAEm7Q,UACNn7Q,EAAEm7Q,QAAUpwV,EAAQ2/W,UACb1qS,CAKR,CAJC,MAAO/tE,GACR,GAAe,sBAAXA,EAAEsT,KACL,MAAOtT,EACR,MAAO,IAAI27a,EAAc7ib,EAAQ2/W,SAAU1/V,EAAQ/Y,EACnD,CACD,EAEDmwS,EAAWm4C,aAAe,SAAUtuV,EAAK2/a,GACxC,OAAQ7jW,EAAM8jW,aAAa5/a,EAAKm2S,EAAYwpI,EAC5C,EAEDxpI,EAAWrrI,SAAW,SAAUzkK,EAAMvH,GAKrC,YAJgBuJ,IAAZvJ,IACHA,EAAU,CAAC,GACZ49J,EAAOl8J,OAAO1B,EAAS,WAEfuH,GACR,IAAK,QAIJ,YAHsBgC,IAAlBvJ,EAAQ+gK,QACX/gK,EAAQ+gK,MAAQ,YACjBnD,EAAOxhJ,OAAOpc,EAAQ+gK,MAAO,iBACrBkgR,EAAcjhb,EAAQ+gK,OAC/B,IAAK,UACJ,OAAQwgR,IACT,QACC,MAAO,IAAI1va,MAAM,+CACFtK,EAAO,KAEvB,EAYD8vS,EAAWjtS,UAAU22a,iBAAmB,CAAC,EAAG,GAE5C1pI,EAAW2pI,kBAAoB,SAAU9/a,GAGxC,OAFA08J,EAAOtiC,KAAKp6H,EAAIy/a,UAChB/iR,EAAOtiC,KAAKp6H,EAAI21Q,YACZ31Q,EAAI4rK,OACC,CAAC,EAAG,GACT5rK,EAAIkvb,qBACC,CAAC,EAAG,GACTlvb,EAAIu4K,QAAJ,KACK,CAAC,EAAG,GACL,CAAC,EAAG,EACZ,yBCpPDpW,EAAOx3B,QAAUmhC,EAEjB,IAAIpP,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OAGTmlQ,GAFOnlQ,EAAQ,OACNA,EAAQ,OACVA,EAAQ,QACft8F,EAAQs8F,EAAQ,OAChB6lC,EAAO7lC,EAAQ,OACfgtQ,EAAYhtQ,EAAQ,OAEpBo0K,EAAwB+wF,EAAK/wF,sBAC7Bs1F,EAAsBvE,EAAKuE,oBAE/B,SAASh2Q,EAAU6Q,GAClBjgB,EAAOl8J,OAAOm8K,EAAM,WACpBjgB,EAAOghR,cAAc/gQ,EAAKl7K,MAAO,iBACjCi7J,EAAOxhJ,OAAOyhK,EAAKt2K,KAAM,gBAGzB,IADA,IAAIitb,EAAa,CAAC,EACT12b,EAAI,EAAGA,EAAI+/K,EAAKl7K,MAAM7D,SAAUhB,EAAG,CAC3C,IAAIgpL,EAAOjJ,EAAKl7K,MAAM7E,GACtB02b,EAAW1tQ,EAAKtsK,MAAQssK,CACxB,CAED5mL,KAAKqH,KAAOs2K,EAAKt2K,KACjBrH,KAAKi6T,cAAgBt8I,EAAK2kQ,SAC1Btib,KAAK6gK,MAAQ8c,EAAK9c,MAClB7gK,KAAKyC,MAAQk7K,EAAKl7K,MAClBzC,KAAK4mL,KAAO0tQ,CACZ,CAqJD,SAASW,EAAYz2a,EAAMnX,EAAM0Y,EAAQ49J,GACxC,GAAe,QAAX59J,EAAkB,CACrB,IACC,IAAIotJ,EAAM,IAAIi5Q,EAAU,CAAC9tY,OAAQ95B,IAC7BmkO,EAAOx1E,EAAIgqD,YAGf,CAFC,MAAOnwN,GAER,CACD,QAAYqC,IAAR8jK,EAAmB,CACtB,IAAI1+B,EAAM,wDACcpnI,EAAO,SAAWs7O,EAAO,IACjD,OAAQA,GACR,IAAK,UACJjlF,EAAOogE,YAAYz2N,EAAM,MAAOonI,GAChCkvC,EAAK2kQ,SAAW,OAChB,MACD,IAAK,eACJ5kR,EAAOogE,YAAYz2N,EAAM,MAAOonI,GAChCkvC,EAAK2kQ,SAAW,SAChB,MACD,IAAK,eACJ5kR,EAAOogE,YAAYz2N,EAAM,MAAOonI,GAChCkvC,EAAK2kQ,SAAW,SAChB,MACD,IAAK,cACJ5kR,EAAOogE,YAAYz2N,EAAM,UAAWonI,GACpCkvC,EAAK2kQ,SAAW,SAChB,MACD,QACC,MAAO,IAAI3wa,MAAM,+BACFgxO,GAEhB,IAAI34F,EAAMmjB,EAAIy5Q,WAId,OAHAlpR,EAAO6jC,GAAGp0B,EAAItuD,QAAS,wBACvBmrC,EAAI1vI,KAAO,MACXqjK,EAAKl7K,MAAM/D,KAAKsrJ,GACR,IAAI8iB,EAAU6Q,EACtB,CACD,CAED,OADAA,EAAKl7K,MAAM/D,KAAK,CAAC4b,KAAM,MAAOkE,KAAMA,IAC5B,IAAIsuJ,EAAU6Q,EACtB,CA5LD7Q,EAAU5iK,UAAUizI,SAAW,SAAUp9H,GAKxC,IAAIotJ,OAJW9jK,IAAX0W,IACHA,EAAS,QACV29I,EAAOxhJ,OAAO6D,EAAQ,UAGtB,IAAIm1a,EAAQ,OAASl1b,KAAKqH,KAE1B,OAAQrH,KAAKqH,MACb,IAAK,MACJ,OAAQrH,KAAKi6T,eACb,IAAK,SACJi7H,EAAQ,eACR,MACD,IAAK,SACJA,EAAQ,eACR,MACD,IAAK,OACL,UAAK7rb,EACJ,MACD,QACC,MAAO,IAAIsI,MAAM,wDAEE3R,KAAKi6T,eAEzB,MAAe,QAAXl6S,IACHotJ,EAAM,IAAIi5Q,EAAU,CAAC,IACjBtsN,YAAYo7N,GAChB/nR,EAAIy6Q,UAAU5nb,KAAK4mL,KAAK58B,KAChBmjB,EAAIhwB,YAEJn9I,KAAK4mL,KAAK58B,IAAIxrI,KAIxB,IAAK,UACJ,MAAe,QAAXuB,IACHotJ,EAAM,IAAIi5Q,EAAU,CAAC,IACjBtsN,YAAYo7N,GAChB/nR,EAAIy6Q,UAAU5nb,KAAK4mL,KAAK58B,KAChBmjB,EAAIhwB,YAEJn9I,KAAK4mL,KAAK58B,IAAIxrI,KAIxB,IAAK,MACL,IAAK,QACJ,IAAInF,EAAGhG,EACP,GAAe,SAAX0M,EAAmB,CACtB,IAAI6kM,EAAM,IAAI3F,EAAKwb,UAOnB,OANA7V,EAAIwV,gBACJ/gN,EAAIyjE,EAAMilW,YAAY/hb,KAAK4mL,KAAKvtK,EAAEmF,MAClCnL,EAAIypE,EAAMilW,YAAY/hb,KAAK4mL,KAAKvzK,EAAEmL,MAClComM,EAAI9Z,YAAYzxL,EAAG4lM,EAAKsb,IAAIzD,SAC5BlS,EAAI9Z,YAAYz3L,EAAG4rM,EAAKsb,IAAIzD,SAC5BlS,EAAIyV,cACIzV,EAAItsK,MACZ,CAAM,GAAe,QAAXv4B,GAAkC,QAAd/f,KAAKqH,KAAgB,CASnD,IARA8lK,EAAM,IAAIi5Q,EAAU,CAAC,IACjBtsN,YAAY,YAChBzgN,EAAIrZ,KAAK4mL,KAAKvtK,EAAEmF,MACV5f,OAAS,IAAe,IAATya,EAAE,KACtBA,EAAIA,EAAE1J,MAAM,KACb0D,EAAIrT,KAAK4mL,KAAKvzK,EAAEmL,MACV5f,OAAS,IAAe,IAATyU,EAAE,KACtBA,EAAIA,EAAE1D,MAAM,IACR3P,KAAKi6T,eACiB,SAAvBj6T,KAAKi6T,eACL5gT,EAAEza,OAASyU,EAAEzU,SAAW,GAC3B,MAAO,IAAI+S,MAAM,uDAIlB,OADAw7J,EAAI29B,YAAYl+D,EAAOmQ,OAAO,CAAC1jI,EAAGhG,KAC1B85J,EAAIhwB,UACZ,CAAM,GAAe,QAAXp9H,GAAkC,UAAd/f,KAAKqH,KAAkB,CACrD,IAOIw5J,EAPAmmL,EAAQ,IAAIo/F,EAAU,CAAC,GAC3B/sa,EAAIrZ,KAAK4mL,KAAKvtK,EAAEmF,KAChBwoU,EAAMl8I,YAAYzxL,GAClB2tU,EAAM4gG,UAAU5nb,KAAK4mL,KAAKvzK,GAE1B85J,EAAM,IAAIi5Q,EAAU,CAAC,GAGR,IAAT/sa,EAAE,KACLA,EAAIA,EAAE1J,MAAM,IACb,IAAIsb,EAAgB,EAAX5R,EAAEza,OASX,OARW,MAAPqsB,EACH41I,EAAQ,WACO,MAAP51I,EACR41I,EAAQ,WACO,MAAP51I,IACR41I,EAAQ,YACTsM,EAAI2sD,YAAY,cAAgBj5D,GAChCsM,EAAI29B,YAAYk8I,EAAM7pM,YACdgwB,EAAIhwB,UACZ,CACD,MAAO,IAAIxrI,MAAM,4BAClB,QACC,MAAO,IAAIA,MAAM,0BAElB,EAEDm7J,EAAU5iK,UAAUI,SAAW,SAAUyV,GAExC,OADA29I,EAAOoyL,eAAe/vU,EAAQ,UACtB/f,KAAKm9I,SAASp9H,GAAQzV,SAAS,SACvC,EAEDwiK,EAAU7rJ,MAAQ,SAAUzC,EAAMnX,EAAM0Y,GACjB,kBAAVvB,IACXA,EAAOouH,EAAOvtH,KAAKb,EAAM,WAC1Bk/I,EAAOplH,OAAO95B,EAAM,QACpBk/I,EAAOxhJ,OAAO6D,EAAQ,UACtB29I,EAAOxhJ,OAAO7U,EAAM,QAEpB,IAAIs2K,EAAO,CAAC,EACZA,EAAKt2K,KAAOA,EAAKkJ,cACjBotK,EAAKl7K,MAAQ,GAEb,IAEC,OADAi7J,EAAO6jC,GAAG/iL,EAAK5f,OAAS,EAAG,+BACnB++K,EAAKt2K,MACb,IAAK,MAEL,IAAK,UACJ,OAAQ4tb,EAAYz2a,EAAMnX,EAAM0Y,EAAQ49J,GAEzC,IAAK,MACL,IAAK,QACJ,MAAe,SAAX59J,EA6DP,SAAsBvB,EAAMnX,EAAM0Y,EAAQ49J,GACzC,IAAIinC,EAAM,IAAI3F,EAAKub,UAAUh8M,GAC7BomM,EAAI+R,eACJ,IAAIt9M,EAAIurM,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,GACrCzjN,EAAIuxM,EAAIuS,WAAWlY,EAAKsb,IAAIzD,SAAS,GAKzC,OAHAn5C,EAAKl7K,MAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAY1oa,KACpDskK,EAAKl7K,MAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMs+D,EAAMilW,YAAY1ua,KAE5C,IAAIy5J,EAAU6Q,EACtB,CAtEWw3Q,CAAa32a,EAAMnX,EAAM0Y,EAAQ49J,GACnB,QAAdA,EAAKt2K,KAuEjB,SAAkBmX,EAAMnX,EAAM0Y,EAAQ49J,GACrC,GAAmB,IAAfn/J,EAAK5f,OAAc,CACtB,IAAIuuK,EAAM,IAAIi5Q,EAAU,CAAC9tY,OAAQ95B,IAC7BjG,EAAI40J,EAAIq5Q,aACgB,YAAxBjua,EAAEjO,SAAS,WACdiO,EAAI40J,EAAIq5Q,cACT9oR,EAAO6jC,GAAGp0B,EAAItuD,QAAS,wBACvB6+C,EAAOogE,YAAYvlN,EAAE3Z,OAAQ,GAAI,wBACjC4f,EAAOjG,CACP,CAGD,OAFAolK,EAAKl7K,MAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMA,EAAK7O,MAAM,EAAG,MAChDguK,EAAKl7K,MAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAMA,EAAK7O,MAAM,GAAI,MACzC,IAAIm9J,EAAU6Q,EACtB,CAnFWy3Q,CAAS52a,EAAMnX,EAAM0Y,EAAQ49J,GAqFzC,SAAoBn/J,EAAMnX,EAAM0Y,EAAQ49J,GACvC,IAEItkK,EAAGhG,EAFH85J,EAAM,IAAIi5Q,EAAU,CAAC9tY,OAAQ95B,IAG7BwoU,EAAQ75K,EAAIq5Q,aACZ0O,EAAQluG,EAAM18U,SAAS,SAC3B,GAA0B,WAAtB4qb,EAAMvlb,MAAM,EAAG,GAAiB,CACnC,IAAIlN,EAAQyyb,EAAMvzX,MAAM,KAIxB,OAHA+7F,EAAOogE,YAAYr7N,EAAM,GAAI,SAC7Bi7J,EAAOogE,YAAYr7N,EAAM,GAAI,QAC7Bk7K,EAAK9c,MAAQp+J,EAAM,GACXk7K,EAAK9c,OACb,IAAK,WACJ8c,EAAK2kQ,SAAW,SAChB,MACD,IAAK,WACJ3kQ,EAAK2kQ,SAAW,SAChB,MACD,IAAK,WACJ3kQ,EAAK2kQ,SAAW,SAChB,MACD,QACC,MAAO,IAAI3wa,MAAM,4BACbgsK,EAAK9c,OAEVmmL,EAAQ75K,EAAIq5Q,aACZ9oR,EAAO6jC,GAAGp0B,EAAItuD,QAAS,iCAEvBxlG,GADA8zJ,EAAM,IAAIi5Q,EAAU,CAAC9tY,OAAQ0uS,KACrB4/F,UACR,MACAvta,EAAI,CAACmF,KAAMwoU,GAWZ,OARA3zU,EAAI85J,EAAIy5Q,WACRlpR,EAAO6jC,GAAGp0B,EAAItuD,QAAS,wBAEvBxlG,EAAEiB,KAAO,IACTjH,EAAEiH,KAAO,IAETqjK,EAAKl7K,MAAM/D,KAAK2a,GAChBskK,EAAKl7K,MAAM/D,KAAK2U,GACR,IAAIy5J,EAAU6Q,EACtB,CA7HW03Q,CAAW72a,EAAMnX,EAAM0Y,EAAQ49J,GAEzC,QACC,MAAO,IAAI6vK,EAAsBnmV,GAOlC,CAJC,MAAOL,GACR,GAAIA,aAAawmV,EAChB,MAAOxmV,EACR,MAAO,IAAI87a,EAAoBz7a,EAAM0Y,EAAQ/Y,EAC7C,CACD,EAoHD8lK,EAAUy1Q,YAAc,SAAUvhb,EAAK2/a,GACtC,OAAQ7jW,EAAM8jW,aAAa5/a,EAAK8rK,EAAW6zQ,EAC3C,EASD7zQ,EAAU5iK,UAAU22a,iBAAmB,CAAC,EAAG,GAE3C/zQ,EAAUg0Q,kBAAoB,SAAU9/a,GAEvC,OADA08J,EAAOtiC,KAAKp6H,EAAIm8I,UACZn8I,EAAI+sK,eAAe,iBACd,CAAC,EAAG,GACL,CAAC,EAAG,EACZ,yBCvTD5K,EAAOx3B,QAAUy6S,EAEjB,IAAI1oR,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OAEb,SAASgtQ,EAAUzoQ,GAClBjgB,EAAOl8J,OAAOm8K,EAAM,gBACAt0K,IAAhBs0K,EAAKrlI,QACRolH,EAAOplH,OAAOqlI,EAAKrlI,OAAQ,kBAE5Bt4C,KAAKq2N,MAAQ14C,EAAKrlI,OAASqlI,EAAKrlI,OAAO15C,OAAS,KAChDoB,KAAKsyS,QAAU30H,EAAKrlI,QAAUs0F,EAAOivD,MAAM77L,KAAKq2N,OAChDr2N,KAAKwnC,QAAU,CACf,CAED4+Y,EAAUl8a,UAAUizI,SAAW,WAC9B,OAAQn9I,KAAKsyS,QAAQ3iS,MAAM,EAAG3P,KAAKwnC,QACnC,EAED4+Y,EAAUl8a,UAAU20G,MAAQ,WAC3B,OAAQ7+G,KAAKwnC,SAAWxnC,KAAKsyS,QAAQ1zS,MACrC,EAEDwnb,EAAUl8a,UAAUqwV,UAAY,WAC/B,OAAQv6V,KAAKsyS,QAAQ3iS,MAAM3P,KAAKwnC,QAChC,EAED4+Y,EAAUl8a,UAAUm2M,KAAO,SAAU3vM,GACpC1Q,KAAKwnC,SAAW92B,CAChB,EAED01a,EAAUl8a,UAAU2pS,OAAS,WAC5B7zS,KAAKq2N,OAAS,EACd,IAAIlpD,EAAMvgC,EAAOivD,MAAM77L,KAAKq2N,OAC5Br2N,KAAKsyS,QAAQx2R,KAAKqxJ,EAAK,GACvBntK,KAAKsyS,QAAUnlI,CACf,EAEDi5Q,EAAUl8a,UAAU08a,SAAW,WAC9B,MAAQ,CAACpoa,KAAMxe,KAAKwmb,aACpB,EAEDJ,EAAUl8a,UAAUs8a,WAAa,WAChC,IAAIl+Z,EAAMtoB,KAAKsyS,QAAQ3uG,aAAa3jM,KAAKwnC,SACzCxnC,KAAKwnC,SAAW,EAChBk2H,EAAO6jC,GAAGvhM,KAAKwnC,QAAUlf,GAAOtoB,KAAKsyS,QAAQ1zS,OACzC,8BAAgCoB,KAAKwnC,QAAQl9B,SAAS,IACtD,sBACJ,IAAI6iK,EAAMntK,KAAKsyS,QAAQ3iS,MAAM3P,KAAKwnC,QAASxnC,KAAKwnC,QAAUlf,GAE1D,OADAtoB,KAAKwnC,SAAWlf,EACR6kJ,CACR,EAEDi5Q,EAAUl8a,UAAUitN,WAAa,WAChC,OAAQn3N,KAAKwmb,aAAal8a,UAC1B,EAED87a,EAAUl8a,UAAUwjb,YAAc,WAEjC,IADA,IAAI/tb,EAASK,KAAKwnC,QACX7nC,EAASK,KAAKsyS,QAAQ1zS,QACA,IAAzBoB,KAAKsyS,QAAQ3yS,IAChBA,IACD+9J,EAAO6jC,GAAG5hM,EAASK,KAAKsyS,QAAQ1zS,OAAQ,+BACxC,IAAIgzK,EAAM5xK,KAAKsyS,QAAQ3iS,MAAM3P,KAAKwnC,QAAS7nC,GAAQ2K,WAEnD,OADAtK,KAAKwnC,QAAU7nC,EAAS,EAChBiyK,CACR,EAEDw0Q,EAAUl8a,UAAU0sN,QAAU,WAC7B,IAAI9hN,EAAI9U,KAAKsyS,QAAQ3uG,aAAa3jM,KAAKwnC,SAEvC,OADAxnC,KAAKwnC,SAAW,EACR1yB,CACR,EAEDsxa,EAAUl8a,UAAU28a,UAAY,WAC/BnpR,EAAO6jC,GAAGvhM,KAAKwnC,QAAU,EAAIxnC,KAAKsyS,QAAQ1zS,OACtC,wCACJ,IAAIkW,EAAI9U,KAAKsyS,QAAQ3iS,MAAM3P,KAAKwnC,QAASxnC,KAAKwnC,QAAU,GAExD,OADAxnC,KAAKwnC,SAAW,EACR1yB,CACR,EAEDsxa,EAAUl8a,UAAUorb,SAAW,WAE9B,OADQt1b,KAAKsyS,QAAQtyS,KAAKwnC,UAE1B,EAED4+Y,EAAUl8a,UAAU4gM,YAAc,SAAU39B,GAC3C,KAAOntK,KAAKwnC,QAAU,EAAI2lI,EAAIvuK,OAASoB,KAAKq2N,OAC3Cr2N,KAAK6zS,SACN7zS,KAAKsyS,QAAQ1vG,cAAcz1B,EAAIvuK,OAAQoB,KAAKwnC,SAC5CxnC,KAAKwnC,SAAW,EAChB2lI,EAAIrxJ,KAAK9b,KAAKsyS,QAAStyS,KAAKwnC,SAC5BxnC,KAAKwnC,SAAW2lI,EAAIvuK,MACpB,EAEDwnb,EAAUl8a,UAAU4vN,YAAc,SAAUloD,GAC3C5xK,KAAK8qM,YAAYl+D,EAAOvtH,KAAKuyJ,EAAK,QAClC,EAEDw0Q,EAAUl8a,UAAUukb,aAAe,SAAU78Q,GAC5C,KAAO5xK,KAAKwnC,QAAU,EAAIoqI,EAAIhzK,OAASoB,KAAKq2N,OAC3Cr2N,KAAK6zS,SACN7zS,KAAKsyS,QAAQ5vG,MAAM9wB,EAAK5xK,KAAKwnC,SAC7BxnC,KAAKwnC,SAAWoqI,EAAIhzK,OACpBoB,KAAKsyS,QAAQtyS,KAAKwnC,WAAa,CAC/B,EAED4+Y,EAAUl8a,UAAUwvN,SAAW,SAAU5kN,GACxC,KAAO9U,KAAKwnC,QAAU,EAAIxnC,KAAKq2N,OAC9Br2N,KAAK6zS,SACN7zS,KAAKsyS,QAAQ1vG,cAAc9tL,EAAG9U,KAAKwnC,SACnCxnC,KAAKwnC,SAAW,CAChB,EAED4+Y,EAAUl8a,UAAU29a,WAAa,SAAU/ya,GAE1C,GADA4oJ,EAAOplH,OAAOxjC,EAAG,SACbA,EAAElW,OAAS,EAAG,CAEjB,IADA,IAAI22b,EAAOzgb,EAAEnF,MAAM,EAAGmF,EAAElW,OAAS,GACxBhB,EAAI,EAAGA,EAAI23b,EAAK32b,SAAUhB,EAClC8/J,EAAOogE,YAAYy3N,EAAK33b,GAAI,EACxB,oCAELkX,EAAIA,EAAEnF,MAAMmF,EAAElW,OAAS,EAAGkW,EAAElW,OAC5B,CACD,KAAOoB,KAAKwnC,QAAU,EAAIxnC,KAAKq2N,OAC9Br2N,KAAK6zS,SACN/+R,EAAEgH,KAAK9b,KAAKsyS,QAAStyS,KAAKwnC,SAC1BxnC,KAAKwnC,SAAW,CAChB,EAED4+Y,EAAUl8a,UAAUqkb,UAAY,SAAUz5a,GACzC,KAAO9U,KAAKwnC,QAAU,EAAIxnC,KAAKq2N,OAC9Br2N,KAAK6zS,SACN7zS,KAAKsyS,QAAQtyS,KAAKwnC,WAAa1yB,CAC/B,EAEDsxa,EAAUl8a,UAAU09a,UAAY,SAAUpsa,GACzCxb,KAAK8qM,YAAYtvL,EAAEgD,KACnB,EAED4na,EAAUl8a,UAAUw4L,MAAQ,SAAUv1B,GACrC,KAAOntK,KAAKwnC,QAAU2lI,EAAIvuK,OAASoB,KAAKq2N,OACvCr2N,KAAK6zS,SACN1mI,EAAIrxJ,KAAK9b,KAAKsyS,QAAStyS,KAAKwnC,SAC5BxnC,KAAKwnC,SAAW2lI,EAAIvuK,MACpB,yBClJDukK,EAAOx3B,QAAU,CAChB6pT,YA8KD,SAAqBroR,EAAKyyK,GACzBliL,EAAOplH,OAAO60H,GACdzP,EAAOxhJ,OAAO0jU,GAKd,IAHA,IAAIn9U,EAAQ,GACRgzb,EAAW,EACX18U,EAAU,EACLn7G,EAAI,EAAGA,EAAIuvK,EAAIvuK,SAAUhB,EAQjC,GAPIuvK,EAAIvvK,KAAOgiV,EAAI/vL,WAAW92C,KAC3BA,EAEFA,EADQo0D,EAAIvvK,KAAOgiV,EAAI/vL,WAAW,GACxB,EAEA,EAEP92C,GAAW6mO,EAAIhhV,OAAQ,CAC1B,IAAI82b,EAAU93b,EAAI,EAClB6E,EAAM/D,KAAKyuK,EAAIx9J,MAAM8lb,EAAUC,EAAU38U,IACzC08U,EAAWC,EACX38U,EAAU,CACV,CAEE08U,GAAYtoR,EAAIvuK,QACnB6D,EAAM/D,KAAKyuK,EAAIx9J,MAAM8lb,EAAUtoR,EAAIvuK,SAEpC,OAAQ6D,CACR,EAvMA6ib,cAyTD,SAAuBrkb,GACtBy8J,EAAOl8J,OAAOP,GACd29a,EAAiB39a,EAAKk2S,EAAY,CAAC,EAAG,IAEtC,IACIhqI,EADA50J,EAAI,IAAI6oa,EAAKngb,EAAI2lL,KAAKruK,EAAEiG,MAG5B,IAAKvd,EAAI2lL,KAAKw+P,MAAO,CACpB,IAAI5pa,EAAI,IAAI4la,EAAKngb,EAAI2lL,KAAKprK,EAAEgD,MACxB4ma,EAAQ7sa,EAAEkmJ,IAAIjjJ,EAAEu7R,SAAS,IAE7B5pI,EAAMwoR,EAAcvQ,GACpBnkb,EAAI2lL,KAAKw+P,MAAQ,CAAC9qa,KAAM,QAASkE,KAAM2uJ,GACvClsK,EAAIwB,MAAM/D,KAAKuC,EAAI2lL,KAAKw+P,MACxB,CACD,IAAKnkb,EAAI2lL,KAAKy+P,MAAO,CACpB,IAAI1ib,EAAI,IAAIy+a,EAAKngb,EAAI2lL,KAAKjkL,EAAE6b,MACxB6ma,EAAQ9sa,EAAEkmJ,IAAI97J,EAAEo0S,SAAS,IAE7B5pI,EAAMwoR,EAActQ,GACpBpkb,EAAI2lL,KAAKy+P,MAAQ,CAAC/qa,KAAM,QAASkE,KAAM2uJ,GACvClsK,EAAIwB,MAAM/D,KAAKuC,EAAI2lL,KAAKy+P,MACxB,CACD,EA/UA4F,mBA8RD,SAA4Bxya,EAAG+C,EAAGxY,GASjC,OARA06J,EAAOplH,OAAO7/B,GACdilJ,EAAOplH,OAAO98B,GACdkiJ,EAAOplH,OAAOt1C,GACdyV,EAAI,IAAI2oa,EAAK3oa,GACb+C,EAAI,IAAI4la,EAAK5la,GACbxY,EAAI,IAAIo+a,EAAKp+a,GAEF2yb,EADHl9a,EAAEshS,OAAO/2S,EAAGwY,GAGpB,EAvSA+va,uBAySD,SAAgCx2W,GAC/B2oF,EAAOplH,OAAOy8B,GAEd,IAAI85F,EAAKyyQ,EAAKhvZ,KAAK27I,QAAQ8mR,SAAS,IAAIvjb,WAAWujE,IACnD,OAAQ63D,EAAOvtH,KAAKwvJ,EAAGoB,UACvB,EA7SAy7Q,sBA+SD,SAA+B32W,GAC9B2oF,EAAOplH,OAAOy8B,GAEd,IAAI85F,EAAKyyQ,EAAKp1Z,IAAI+hJ,QAAQ8mR,SAAS,IAAIvjb,WAAWujE,IAClD,OAAQ63D,EAAOvtH,KAAKwvJ,EAAGoB,UACvB,EAnTA8xQ,YAAaA,EACbyD,cA6PD,SAAuBr4Q,GACtBzP,EAAOplH,OAAO60H,GACd,KAAOA,EAAIvuK,OAAS,GAAgB,IAAXuuK,EAAI,IAC5BA,EAAMA,EAAIx9J,MAAM,GACjB,OAAQw9J,CACR,EAjQA+3Q,YAmMD,SAAqB/3Q,EAAKyoR,GAEzB,GADAl4R,EAAOplH,OAAO60H,GACC,IAAXA,EAAI,IAA0B,IAAXA,EAAI,GAC1B,OAAIyoR,EACKzoR,EACDA,EAAIx9J,MAAM,GACZ,GAAe,IAAXw9J,EAAI,IACd,IAAKyoR,EACJ,OAAQzoR,MACH,CACN,KAAkB,IAAXA,EAAI,IACVA,EAAMA,EAAIx9J,MAAM,GACjB,GAAe,IAAXw9J,EAAI,IAA0B,IAAXA,EAAI,GAC1B,MAAO,IAAIx7J,MAAM,sDAElB,GAAe,IAAXw7J,EAAI,GACP,MAAO,IAAIx7J,MAAM,oCAClB,IAAKikb,EACJ,OAAQzoR,CACT,CACD,IAAIv5J,EAAIg5H,EAAOivD,MAAM1uB,EAAIvuK,OAAS,GAGlC,OAFAgV,EAAE,GAAK,EACPu5J,EAAIrxJ,KAAKlI,EAAG,GACJA,CACR,EA1NAo4a,WAuJD,SAAoB7+Q,GACnB,IAAI3iE,EAAI,EAAGqrV,EAAO,EAClB,KAAOrrV,EAAI2iE,EAAIvuK,QAAQ,CACtB,IAAI44B,EAAQ,GAAKq+Z,EACjB,IAAK1oR,EAAI3iE,GAAKhzE,KAAUA,EACvB,QACDq+Z,EACW,IACVrrV,IACAqrV,EAAO,EAER,CACD,OAAU,EAAFrrV,GAAO,EAAIqrV,GAAQ,CAC3B,EAnKAjX,iBAAkBA,EAClBgC,aAwBD,SAAsB5/a,EAAK80b,EAAOC,GACjC,GAAY,OAAR/0b,GAAiC,kBAATA,EAC3B,OAAQ,OACOqI,IAAZ0sb,IACHA,EAAUD,EAAM5rb,UAAU22a,kBAC3B,GAAI7/a,aAAe80b,GACfA,EAAM5rb,UAAU22a,iBAAiB,IAAMkV,EAAQ,GAClD,OAAQ,EACT,IAAIr9L,EAAQx3P,OAAOyJ,eAAe3J,GAC9BoiB,EAAQ,EACZ,KAAOs1O,EAAM9tP,YAAY0P,OAASw7a,EAAMx7a,MAEvC,KADAo+O,EAAQx3P,OAAOyJ,eAAe+tP,OACdt1O,EAdI,EAenB,OAAQ,EAEV,GAAIs1O,EAAM9tP,YAAY0P,OAASw7a,EAAMx7a,KACpC,OAAQ,EACT,IAAIqma,EAAMjoL,EAAMmoL,sBACJx3a,IAARs3a,IACHA,EAAMmV,EAAMhV,kBAAkB9/a,IAC/B,QAAI2/a,EAAI,IAAMoV,EAAQ,IAAMpV,EAAI,GAAKoV,EAAQ,GAG7C,EA9CA/N,gBAkFD,SAAyBnnH,EAAQtmL,EAAMkiO,EAAYjxV,GAClDkyI,EAAOplH,OAAOiiG,EAAM,QACpBmjB,EAAOplH,OAAOmkU,EAAY,cAC1B/+M,EAAOb,OAAOrxI,EAAO,mBAErB,IAKIwnM,EAAGgjO,EAAQC,EALXC,EAAOC,EAAWt1H,GACtBnjK,EAAOl8J,OAAO00b,EAAM,oBAEpB37S,EAAOA,EAAK5qI,MAAM,EAVE,GAapB,IAAI0sB,EAAWuwG,EAAOivD,MAAM,GAC5B,KAAOx/J,EAASz9B,OAASs3b,EAAKj1b,IAAMi1b,EAAKh/Q,IAAI,CAC5C++Q,EAAO,GACHD,GACHC,EAAKv3b,KAAKs3b,GACXC,EAAKv3b,KAAK+9W,GACVw5E,EAAKv3b,KAAK67I,GACVy4E,EAAIpmF,EAAOmQ,OAAOk5S,GAClB,IAAK,IAAIvna,EAAI,EAAGA,EAAIlD,IAASkD,EAC5BskM,EAAIsW,EAAOqB,WAAW,OAAO7lN,OAAOkuM,GAAGrnD,SACxCtvI,EAAWuwG,EAAOmQ,OAAO,CAAC1gH,EAAU22L,IACpCgjO,EAAShjO,CACT,CAED,MAAQ,CACJ/xN,IAAKo7B,EAAS1sB,MAAM,EAAGumb,EAAKj1b,KAC5Bi2K,GAAI76I,EAAS1sB,MAAMumb,EAAKj1b,IAAKi1b,EAAKj1b,IAAMi1b,EAAKh/Q,IAEjD,EA9GAwxQ,kBA6VD,SAA2B7nH,GAC1B,IAAIx8J,EAAM,CAAC,EACX,OAAQw8J,GACR,IAAK,WACJx8J,EAAIuqG,QAAU,GACdvqG,EAAItpG,UAAY,EAChBspG,EAAIskR,YAAc,eAClB,MACD,IAAK,eACJtkR,EAAIuqG,QAAU,GACdvqG,EAAItpG,UAAY,EAChBspG,EAAIskR,YAAc,SAClB,MACD,IAAK,aACL,IAAK,aACL,IAAK,yBACJtkR,EAAIuqG,QAAU,GACdvqG,EAAItpG,UAAY,GAChBspG,EAAIskR,YAAc,WAAa9nH,EAAOlxT,MAAM,EAAG,IAC/C,MACD,IAAK,aACL,IAAK,aACL,IAAK,yBACJ00J,EAAIuqG,QAAU,GACdvqG,EAAItpG,UAAY,GAChBspG,EAAIskR,YAAc,WAAa9nH,EAAOlxT,MAAM,EAAG,IAC/C,MACD,IAAK,aACL,IAAK,aACL,IAAK,yBACJ00J,EAAIuqG,QAAU,GACdvqG,EAAItpG,UAAY,GAChBspG,EAAIskR,YAAc,WAAa9nH,EAAOlxT,MAAM,EAAG,IAC/C,MACD,QACC,MAAO,IAAIgC,MACP,+BAAiCkvT,EAAS,KAE/C,OAAQx8J,CACR,EAnYAogR,uBAsUD,SAAgC0G,EAAWj/Q,GAC1CxO,EAAOxhJ,OAAOiva,EAAW,aACzBztR,EAAOplH,OAAO4zH,GACd,IAAI74G,EAASgrX,EAAKh0Q,OAAO8gR,GACrB3va,EAAI,IAAI4la,EAAK/tX,EAAO73C,GACpB1R,EAAI,IAAIs3a,EAAK/tX,EAAOvpD,GACpB8J,EAAI,IAAIwta,EAAK/tX,EAAOz/C,GACpBitJ,EAAQ,IAAIoL,EAAGwrI,UAAUj8R,EAAG1R,EAAG8J,GAC/B26P,EAAI1tG,EAAMg2I,eAAexjP,EAAOk7M,EAAEjkQ,SAAS,QAE3CiO,EAAI,IAAI6oa,EAAKW,EAAY71Q,IACzBC,EAAMoiG,EAAE30O,SAASrhB,GACrB4zJ,EAAMv/B,EAAOvtH,KAAKwhJ,EAAMq4I,eAAe/sI,GAAM,OAE7C,IAAI1pK,EAAQ,GAKZ,OAJAA,EAAM/D,KAAK,CAAC4b,KAAM,QAASkE,KAAMouH,EAAOvtH,KAAK8ra,KAC7C1ob,EAAM/D,KAAK,CAAC4b,KAAM,IAAKkE,KAAM2tJ,IAEnB,IAAIikL,EAAI,CAAC/oV,KAAM,QAASw5J,MAAOA,EAAOp+J,MAAOA,GAEvD,EAzVAynb,gBA4PD,SAAyB/8Q,EAAK7kJ,GAC7Bo1I,EAAOplH,OAAO60H,GACdzP,EAAOb,OAAOv0I,GACd,KAAO6kJ,EAAIvuK,OAAS0pB,GACnBo1I,EAAOE,MAAMuP,EAAI,GAAI,GACrBA,EAAMA,EAAIx9J,MAAM,GAEjB,KAAOw9J,EAAIvuK,OAAS0pB,GAAK,CACxB,IAAI1U,EAAIg5H,EAAOivD,MAAM1uB,EAAIvuK,OAAS,GAClCgV,EAAE,GAAK,EACPu5J,EAAIrxJ,KAAKlI,EAAG,GACZu5J,EAAMv5J,CACN,CACD,OAAQu5J,CACR,EAzQAu9Q,eA8ND,SAAwB9lO,EAAKz3C,EAAKlW,QACrB5tJ,IAAR4tJ,IACHA,EAAMgoD,EAAKsb,IAAI5C,WAChB,IAAI/jN,EAAIg5H,EAAOivD,MAAM1uB,EAAIvuK,OAAS,GAClCgV,EAAE,GAAK,EACPu5J,EAAIrxJ,KAAKlI,EAAG,GACZgxM,EAAI9Z,YAAYl3L,EAAGqjJ,EACnB,EApOAgzR,cAoND,SAAuBrlO,EAAK3tD,QACf5tJ,IAAR4tJ,IACHA,EAAMgoD,EAAKsb,IAAI5C,WAChB,IAAIxqD,EAAMy3C,EAAIuS,WAAWlgE,GAAK,GAG9B,OAFAyG,EAAOogE,YAAY3wD,EAAI,GAAI,EAAM,qDACPA,EAAI,GAAG7iK,SAAS,IAAM,KACxC6iK,EAAIx9J,MAAM,EAClB,EA1NA2+R,OA4GD,SAAgBgiD,EAAS/1M,EAAMy/K,EAAYx9S,EAAMigW,GAChD,IAAI25E,EAAOxpT,EAAOivD,MAAMthD,EAAK37I,OAAS,GACtC27I,EAAKz+H,KAAKs6a,GAEV,IAAI5tb,EAAM,EAAGu2Q,EAAK,GACdnhR,EAAI,EACR,KAAO4K,EAAMgU,GAAM,CAClB,IAAI3L,EAAIo6P,EAAErtQ,KACV4K,GAAOqI,EAAEjS,OACTmgR,EAAGrgR,KAAKmS,EACR,CACD,OAAQ+7H,EAAOmQ,OAAOgiI,GAAIpvQ,MAAM,EAAG6M,GAEnC,SAASyuP,EAAE/pG,GACVk1R,EAAKxzP,cAAc1hC,EAAGk1R,EAAKx3b,OAAS,GAEpC,IAAI8rO,EAAOpB,EAAOG,WAAW6mH,EAASmsB,GACtC/xI,EAAK5lN,OAAOsxa,GAKZ,IAHA,IAAIpgD,EAAKtrK,EAAK/+D,SACVowN,EAAKia,EACLniY,EAAI,EACDA,IAAMmmT,GAAY,EACxBtvF,EAAOpB,EAAOG,WAAW6mH,EAASmsB,IAC7B33V,OAAOi3W,GACZA,EAAKrxJ,EAAK/+D,SACV,IAAK,IAAI3oK,EAAI,EAAGA,EAAIgzY,EAAGp3Y,SAAUoE,EAChCgzY,EAAGhzY,IAAM+4X,EAAG/4X,EACb,CACD,OAAQgzY,CACR,CACD,GAxID,IAAIt4O,EAAS0b,EAAQ,OACjBxsC,EAASwsC,EAAAA,OAAAA,OACT+9H,EAAa/9H,EAAQ,OACrBg3K,EAAMh3K,EAAQ,OACdkwD,EAASlwD,EAAQ,OACjBilQ,EAAOjlQ,EAAQ,OACf6lC,EAAO7lC,EAAQ,OAEfnN,EAAKmN,EAAQ,OACbgoQ,EAAOhoQ,EAAAA,OAAAA,WACPkoQ,EAAOloQ,EAAQ,MA6BnB,SAASwlQ,EAAiB59a,EAAK80b,EAAOC,EAASz7a,GAO9C,QANajR,IAATiR,IACHA,EAAO,UACRojJ,EAAO6jC,GAAGvgM,EAAKsZ,EAAO,qBACtBojJ,EAAOl8J,OAAOR,EAAKsZ,EAAO,2BACVjR,IAAZ0sb,IACHA,EAAUD,EAAM5rb,UAAU22a,oBACvB7/a,aAAe80b,GACfA,EAAM5rb,UAAU22a,iBAAiB,IAAMkV,EAAQ,IADnD,CAKA,IAFA,IAAIr9L,EAAQx3P,OAAOyJ,eAAe3J,GAC9BoiB,EAAQ,EACLs1O,EAAM9tP,YAAY0P,OAASw7a,EAAMx7a,MACvCo+O,EAAQx3P,OAAOyJ,eAAe+tP,GAC9Bh7F,EAAO6jC,GAAGm3D,KAAWt1O,GAzCD,EA0ChB9I,EAAO,cAAgBw7a,EAAMx7a,KAAO,aAEzCojJ,EAAOogE,YAAY46B,EAAM9tP,YAAY0P,KAAMw7a,EAAMx7a,KAC7CA,EAAO,cAAgBw7a,EAAMx7a,KAAO,aACxC,IAAIqma,EAAMjoL,EAAMmoL,sBACJx3a,IAARs3a,IACHA,EAAMmV,EAAMhV,kBAAkB9/a,IAC/B08J,EAAO6jC,GAAGo/O,EAAI,IAAMoV,EAAQ,IAAMpV,EAAI,IAAMoV,EAAQ,GAChDz7a,EAAO,4BAA8Bw7a,EAAMx7a,KAA3CA,kBACay7a,EAAQ,GAAK,IAAMA,EAAQ,GAfrC,CAgBP,CAED,IAAII,EAAa,CAChB,eAAgB,CAAEl1b,IAAK,GAAIi2K,GAAI,GAC/B,cAAe,CAAEj2K,IAAK,GAAIi2K,GAAI,IAC9B,cAAe,CAAEj2K,IAAK,GAAIi2K,GAAI,KA6J/B,SAAS6qQ,EAAY50Q,GAEpB,IADAzP,EAAOplH,OAAO60H,GACPA,EAAIvuK,OAAS,GAAgB,IAAXuuK,EAAI,IAAmC,KAAV,IAATA,EAAI,KAChDA,EAAMA,EAAIx9J,MAAM,GACjB,GAAwB,OAAV,IAATw9J,EAAI,IAAqB,CAC7B,IAAIv5J,EAAIg5H,EAAOivD,MAAM1uB,EAAIvuK,OAAS,GAClCgV,EAAE,GAAK,EACPu5J,EAAIrxJ,KAAKlI,EAAG,GACZu5J,EAAMv5J,CACN,CACD,OAAQu5J,CACR,CAyBD,SAASwoR,EAAc/4R,GACtB,IAAIuQ,EAAMvgC,EAAOvtH,KAAKu9I,EAAOu9E,eAE7B,OADAhtE,EAAM40Q,EAAY50Q,EAElB,kCC/RD,IAAIkpR,EAAW,UAEf,SAASh0b,EAAQrB,EAAKqmB,GAClB,IAAM,IAAIpmB,KAAOD,EACRE,OAAOgJ,UAAU6jK,eAAexvK,KAAKyC,EAAKC,IAG/ComB,EAASpmB,EAEhB,CAED,SAAS8iB,EAAO7hB,EAAQE,GAIpB,OAHAC,EAAQD,GAAQ,SAAUnB,GACtBiB,EAAOjB,GAAOmB,EAAOnB,EACxB,IACMiB,CACV,CAED,SAASo0b,EAAWC,GAChBl0b,EAAQk0b,GAAc,SAAU11E,GACvBw1E,EAAS54a,KAAKojW,WACR01E,EAAa11E,EAE3B,GACJ,CAED19M,EAAOx3B,QAAU,SAAU4qT,EAAclva,EAAUmva,EAA0BrzR,GAEzE,IAAIszR,EAAgB1ya,EAAO,CAAC,EAAGwya,GAG/B,GAFAD,EAAWC,GAEPC,EAA0B,CAE1B,IAAIE,IAAyBvzR,EAAOl2I,UAAWk2I,EAAOl2I,SAAStd,QAE/D6mb,IAGA,IAAIG,EAAgB,GACpBt0b,EAAQk0b,GAAc,SAAUt1b,GAC5B01b,EAAcj4b,KAAKuC,EACtB,IAGDq1b,EAAWC,GAEPpzR,EAAOl2I,WACPk2I,EAAOl2I,SAAWypa,GAItB,IAAM,IAAI94b,EAAI,EAAGA,EAAI+4b,EAAc/3b,OAAQhB,GAAG,EACtC64b,EAAcE,EAAc/4b,MAC5B24b,EAAaI,EAAc/4b,IAAM64b,EAAcE,EAAc/4b,IAIxE,CAED,IAAIg5b,EAAcvva,IAEdwva,IAAeL,GAA2Bzya,EAAO,CAAC,EAAGwya,GAIzD,GAFAD,EAAWC,GAEPC,EAEA,IAAM,IAAIzhX,EAAI,EAAGA,EAAI4hX,EAAc/3b,OAAQm2E,GAAG,EACtC8hX,EAAaF,EAAc5hX,MAC3BwhX,EAAaI,EAAc5hX,IAAM8hX,EAAaF,EAAc5hX,KAOxE,OAFAhxD,EAAOwya,EAAcE,GAEdG,CAEV,yBC3DDzzR,EAAOx3B,QAAU+uF,EAEjB,IAAIk1L,EAAKx2O,EAAAA,OAAAA,aAoBT,SAASshD,IACPk1L,EAAGrxZ,KAAKyB,KACT,CArBco5K,EAAQ,MAEvBlV,CAASw2D,EAAQk1L,GACjBl1L,EAAO+9C,SAAWr/F,EAAQ,OAC1BshD,EAAO27C,SAAWj9F,EAAQ,OAC1BshD,EAAO1zB,OAAS5tB,EAAQ,OACxBshD,EAAOg1C,UAAYt2F,EAAQ,OAC3BshD,EAAOxzB,YAAc9tB,EAAQ,MAC7BshD,EAAOwiD,SAAW9jG,EAAQ,OAC1BshD,EAAOgrD,SAAWtsG,EAAQ,OAG1BshD,EAAOA,OAASA,EAWhBA,EAAOxwN,UAAUovO,KAAO,SAAS9hI,EAAM13G,GACrC,IAAIsC,EAASpC,KAEb,SAASg+Q,EAAO32E,GACV7vF,EAAKl2G,WACH,IAAUk2G,EAAKkrF,MAAM2E,IAAUjlM,EAAOg8Q,OACxCh8Q,EAAOg8Q,OAGZ,CAID,SAASL,IACH37Q,EAAOy8M,UAAYz8M,EAAOu6Q,QAC5Bv6Q,EAAOu6Q,QAEV,CANDv6Q,EAAOmmI,GAAG,OAAQy1I,GAQlBxmK,EAAK+wB,GAAG,QAASw1I,GAIZvmK,EAAKs/U,UAAch3b,IAA2B,IAAhBA,EAAQu1C,MACzCjzC,EAAOmmI,GAAG,MAAOowI,GACjBv2Q,EAAOmmI,GAAG,QAASs1I,IAGrB,IAAIk5K,GAAW,EACf,SAASp+K,IACHo+K,IACJA,GAAW,EAEXv/U,EAAKniE,MACN,CAGD,SAASwoO,IACHk5K,IACJA,GAAW,EAEiB,oBAAjBv/U,EAAKj3G,SAAwBi3G,EAAKj3G,UAC9C,CAGD,SAAS2yH,EAAQuoJ,GAEf,GADA38D,IACwC,IAApC8wM,EAAGz4P,cAAcn3J,KAAM,SACzB,MAAMy7Q,CAET,CAMD,SAAS38D,IACP18M,EAAO8zJ,eAAe,OAAQ8nH,GAC9BxmK,EAAK0+C,eAAe,QAAS6nH,GAE7B37Q,EAAO8zJ,eAAe,MAAOyiH,GAC7Bv2Q,EAAO8zJ,eAAe,QAAS2nH,GAE/Bz7Q,EAAO8zJ,eAAe,QAAShjC,GAC/B1b,EAAK0+C,eAAe,QAAShjC,GAE7B9wH,EAAO8zJ,eAAe,MAAO4oD,GAC7B18M,EAAO8zJ,eAAe,QAAS4oD,GAE/BtnG,EAAK0+C,eAAe,QAAS4oD,EAC9B,CAUD,OA5BA18M,EAAOmmI,GAAG,QAASrV,GACnB1b,EAAK+wB,GAAG,QAASrV,GAmBjB9wH,EAAOmmI,GAAG,MAAOu2E,GACjB18M,EAAOmmI,GAAG,QAASu2E,GAEnBtnG,EAAK+wB,GAAG,QAASu2E,GAEjBtnG,EAAK88B,KAAK,OAAQlyI,GAGXo1G,CACR,kCC5HD,IAAIukH,EAAQ,CAAC,EAEb,SAAS4H,EAAgB35J,EAAMqtB,EAASmsE,GACjCA,IACHA,EAAO7xJ,OAWT,IAAIiyN,EAEJ,SAAUC,GAnBZ,IAAwBP,EAAUC,EAsB9B,SAASK,EAAUE,EAAMC,EAAMC,GAC7B,OAAOH,EAAMtlO,KAAKyB,KAdtB,SAAoB8jO,EAAMC,EAAMC,GAC9B,MAAuB,kBAAZ3sI,EACFA,EAEAA,EAAQysI,EAAMC,EAAMC,EAE9B,CAQ2BC,CAAWH,EAAMC,EAAMC,KAAUhkO,IAC1D,CAED,OA1B8BujO,EAoBJM,GApBNP,EAoBLM,GApBsC15N,UAAYhJ,OAAO2J,OAAO04N,EAAWr5N,WAAYo5N,EAASp5N,UAAUU,YAAc04N,EAAUA,EAAStxN,UAAYuxN,EA0B/JK,CACR,CARD,CAQEpgE,GAEFogE,EAAU15N,UAAUoQ,KAAOkpJ,EAAKlpJ,KAChCspN,EAAU15N,UAAU8/D,KAAOA,EAC3B+xJ,EAAM/xJ,GAAQ45J,CACf,CAGD,SAASvyC,EAAM3kC,EAAUw3E,GACvB,GAAIrmO,MAAMC,QAAQ4uJ,GAAW,CAC3B,IAAIpkI,EAAMokI,EAAS9tJ,OAKnB,OAJA8tJ,EAAWA,EAAS9mJ,KAAI,SAAUhI,GAChC,OAAO6vC,OAAO7vC,EACf,IAEG0qB,EAAM,EACD,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS/8I,MAAM,EAAG2Y,EAAM,GAAGu5C,KAAK,MAAO,SAAW6qF,EAASpkI,EAAM,GAC3F,IAARA,EACF,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAAI,QAAQ3P,OAAO2P,EAAS,IAEzE,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAEnD,CACC,MAAO,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAOtvG,OAAOi/G,GAEjD,CA6BDi3E,EAAgB,yBAAyB,SAAUrpN,EAAM3b,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B2b,EAAO,GACrE,GAAEvb,WACH4kO,EAAgB,wBAAwB,SAAUrpN,EAAMoyI,EAAUquE,GAEhE,IAAIoJ,EA/BmB7lG,EAAQl3H,EAwC3BqnI,EAEJ,GATwB,kBAAbie,IAjCYpuB,EAiCkC,OAAVouB,EAhCpCioB,QAAQvtK,GAAOA,EAAM,EAAI,GAAKA,EAAKk3H,EAAO1/H,UAAY0/H,IAiC/D6lG,EAAa,cACbz3E,EAAWA,EAAS/pF,QAAQ,QAAS,KAErCwhK,EAAa,UAhCjB,SAAkBvyD,EAAKtzC,EAAQoiG,GAK7B,YAJiBr3N,IAAbq3N,GAA0BA,EAAW9uD,EAAIhzK,UAC3C8hO,EAAW9uD,EAAIhzK,QAGVgzK,EAAI14D,UAAUwnH,EAAWpiG,EAAO1/H,OAAQ8hO,KAAcpiG,CAC9D,CA+BKmiG,CAASnmN,EAAM,aAEjBm0H,EAAM,OAAOsO,OAAOziI,EAAM,KAAKyiI,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,aACzE,CACL,IAAIrlJ,EAhCR,SAAkBuqK,EAAKtzC,EAAQn2F,GAK7B,MAJqB,kBAAVA,IACTA,EAAQ,KAGNA,EAAQm2F,EAAO1/H,OAASgzK,EAAIhzK,UAGS,IAAhCgzK,EAAI9uK,QAAQw7H,EAAQn2F,EAE9B,CAsBc60G,CAAS1iI,EAAM,KAAO,WAAa,WAC9Cm0H,EAAM,QAASsO,OAAOziI,EAAM,MAAOyiI,OAAO11I,EAAM,KAAK01I,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,QACrG,CAGD,OADAje,GAAO,mBAAmBsO,cAAcg+E,EAEzC,GAAEh8N,WACH4kO,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAUrpN,GACtD,MAAO,OAASA,EAAO,4BACxB,IACDqpN,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAUrpN,GAChD,MAAO,eAAiBA,EAAO,+BAChC,IACDqpN,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC5kO,WACjF4kO,EAAgB,wBAAwB,SAAU96N,GAChD,MAAO,qBAAuBA,CAC/B,GAAE9J,WACH4kO,EAAgB,qCAAsC,oCACtDxgE,EAAOx3B,QAAQ,EAAQowF,oDCnGnBy8C,EAAat3Q,OAAOQ,MAAQ,SAAUV,GACxC,IAAIU,EAAO,GAEX,IAAK,IAAIT,KAAOD,EACdU,EAAKhD,KAAKuC,GAGZ,OAAOS,CACR,EAIDyhK,EAAOx3B,QAAUq7D,EAEjB,IAAIyxE,EAAWr/F,EAAQ,OAEnBi9F,EAAWj9F,EAAQ,OAEvBA,EAAQ,MAARA,CAAoB4tB,EAAQyxE,GAM1B,IAFA,IAAI/2Q,EAAO82Q,EAAWnC,EAASnsQ,WAEtB4K,EAAI,EAAGA,EAAIpT,EAAK9C,OAAQkW,IAAK,CACpC,IAAIkkF,EAASt3F,EAAKoT,GACbkyL,EAAO98L,UAAU8uF,KAASguG,EAAO98L,UAAU8uF,GAAUq9K,EAASnsQ,UAAU8uF,GAC9E,CAGH,SAASguG,EAAOlnM,GACd,KAAME,gBAAgBgnM,GAAS,OAAO,IAAIA,EAAOlnM,GACjD24Q,EAASl6Q,KAAKyB,KAAMF,GACpBu2Q,EAAS93Q,KAAKyB,KAAMF,GACpBE,KAAK04Q,eAAgB,EAEjB54Q,KACuB,IAArBA,EAAQ++M,WAAoB7+M,KAAK6+M,UAAW,IACvB,IAArB/+M,EAAQwB,WAAoBtB,KAAKsB,UAAW,IAElB,IAA1BxB,EAAQ44Q,gBACV14Q,KAAK04Q,eAAgB,EACrB14Q,KAAKk3J,KAAK,MAAOyhH,IAGtB,CA8BD,SAASA,IAEH34Q,KAAK44Q,eAAeC,OAGxBppI,EAAQyuE,SAAS46D,EAAS94Q,KAC3B,CAED,SAAS84Q,EAAQ3vQ,GACfA,EAAKksC,KACN,CAtCDn0C,OAAOC,eAAe6lM,EAAO98L,UAAW,wBAAyB,CAI/D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IAEH3pM,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAEH73Q,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAeHsC,OAAOC,eAAe6lM,EAAO98L,UAAW,YAAa,CAInD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAIvC54Q,KAAKg5Q,eAAeC,WAAaj5Q,KAAK44Q,eAAeK,UAC7D,EACDxuQ,IAAK,SAAa9L,QAGY0K,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAM9C54Q,KAAKg5Q,eAAeC,UAAYt6Q,EAChCqB,KAAK44Q,eAAeK,UAAYt6Q,EACjC,uCChHHwkK,EAAOx3B,QAAUu7D,EAEjB,IAAIwoE,EAAYt2F,EAAQ,OAIxB,SAAS8tB,EAAYpnM,GACnB,KAAME,gBAAgBknM,GAAc,OAAO,IAAIA,EAAYpnM,GAC3D4vQ,EAAUnxQ,KAAKyB,KAAMF,EACtB,CALDs5K,EAAQ,MAARA,CAAoB8tB,EAAawoE,GAOjCxoE,EAAYh9L,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC5DA,EAAG,KAAMg8J,EACV,0CCbGL,YAHJ7jC,EAAOx3B,QAAU8sI,EAMjBA,EAASU,cAAgBA,EAGhB//F,EAAAA,OAAAA,aAAT,IAEIggG,EAAkB,SAAyBC,EAAShyQ,GACtD,OAAOgyQ,EAAQhqQ,UAAUhI,GAAMzI,MAChC,EAMG87N,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAYvD,IAEI22D,EAFAoxM,EAAYngG,EAAQ,OAKtBjxG,EADEoxM,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,WAAmB,EAK7B,IAcIC,EACAC,EACAr6P,EAhBAs6P,EAAavgG,EAAQ,OAErBwgG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC69C,EAA4Bh+C,EAAeg+C,0BAC3CC,EAA6Bj+C,EAAei+C,2BAC5CC,EAAqCl+C,EAAek+C,mCAOxD5gG,EAAQ,MAARA,CAAoBq/F,EAAU/9C,GAE9B,IAAIu/C,EAAiBL,EAAYK,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASf,EAAcr5Q,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQs6Q,oBAG7Dp6Q,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAI9En6Q,KAAKs4C,OAAS,IAAIqhO,EAClB35Q,KAAKpB,OAAS,EACdoB,KAAKq6Q,MAAQ,KACbr6Q,KAAKs6Q,WAAa,EAClBt6Q,KAAKu6Q,QAAU,KACfv6Q,KAAK64Q,OAAQ,EACb74Q,KAAKw6Q,YAAa,EAClBx6Q,KAAKy6Q,SAAU,EAKfz6Q,KAAK06Q,MAAO,EAGZ16Q,KAAK26Q,cAAe,EACpB36Q,KAAK46Q,iBAAkB,EACvB56Q,KAAK66Q,mBAAoB,EACzB76Q,KAAK86Q,iBAAkB,EACvB96Q,KAAK87G,QAAS,EAEd97G,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAKi5Q,WAAY,EAIjBj5Q,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAElDj7Q,KAAKk7Q,WAAa,EAElBl7Q,KAAKm7Q,aAAc,EACnBn7Q,KAAKgwG,QAAU,KACfhwG,KAAKigB,SAAW,KAEZngB,EAAQmgB,WACLw5P,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpCp5K,KAAKgwG,QAAU,IAAIypK,EAAc35Q,EAAQmgB,UACzCjgB,KAAKigB,SAAWngB,EAAQmgB,SAE3B,CAED,SAASw4P,EAAS34Q,GAEhB,GADAknM,EAASA,GAAU5tB,EAAQ,SACrBp5K,gBAAgBy4Q,GAAW,OAAO,IAAIA,EAAS34Q,GAGrD,IAAIq6Q,EAAWn6Q,gBAAgBgnM,EAC/BhnM,KAAKg5Q,eAAiB,IAAIG,EAAcr5Q,EAASE,KAAMm6Q,GAEvDn6Q,KAAK6+M,UAAW,EAEZ/+M,IAC0B,oBAAjBA,EAAQqvG,OAAqBnvG,KAAKo7Q,MAAQt7Q,EAAQqvG,MAC9B,oBAApBrvG,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,UAGrEm6N,EAAOn8N,KAAKyB,KACb,CAgED,SAASs7Q,EAAiBrsK,EAAQo4F,EAAOpnL,EAAUs7P,EAAYC,GAC7DrzM,EAAM,mBAAoBk/H,GAC1B,IAMMo0E,EANF/0N,EAAQuoD,EAAO+pK,eAEnB,GAAc,OAAV3xE,EACF3gJ,EAAM+zN,SAAU,EAyOpB,SAAoBxrK,EAAQvoD,GAE1B,GADAyhB,EAAM,cACFzhB,EAAMmyN,MAAO,OAEjB,GAAInyN,EAAMspD,QAAS,CACjB,IAAIq3F,EAAQ3gJ,EAAMspD,QAAQ36D,MAEtBgyJ,GAASA,EAAMzoM,SACjB8nD,EAAMpO,OAAO55C,KAAK2oM,GAClB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OAEhD,CAED8nD,EAAMmyN,OAAQ,EAEVnyN,EAAMg0N,KAIRgB,EAAazsK,IAGbvoD,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTl0N,EAAMk0N,iBAAkB,EACxBe,EAAc1sK,IAGnB,CArQG2sK,CAAW3sK,EAAQvoD,QAKnB,GAFK80N,IAAgBC,EAmDzB,SAAsB/0N,EAAO2gJ,GAC3B,IAAIo0E,EAhQiBz6Q,EAkQFqmM,EAjQZz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAiQA,kBAAVjyE,QAAgCh+L,IAAVg+L,GAAwB3gJ,EAAMqkJ,aACtF0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAe50B,IAnQ/E,IAAuBrmM,EAsQrB,OAAOy6Q,CACR,CA3D6BI,CAAan1N,EAAO2gJ,IAE1Co0E,EACFxB,EAAehrK,EAAQwsK,QAClB,GAAI/0N,EAAMqkJ,YAAc1D,GAASA,EAAMzoM,OAAS,EAKrD,GAJqB,kBAAVyoM,GAAuB3gJ,EAAMqkJ,YAAc7pM,OAAOyJ,eAAe08L,KAAWz6D,EAAO1iI,YAC5Fm9L,EAtNR,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CAoNey0E,CAAoBz0E,IAG1Bk0E,EACE70N,EAAM8zN,WAAYP,EAAehrK,EAAQ,IAAI+qK,GAA2C+B,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,QACtH,GAAI3gJ,EAAMmyN,MACfoB,EAAehrK,EAAQ,IAAI6qK,OACtB,IAAIpzN,EAAMuyN,UACf,OAAO,EAEPvyN,EAAM+zN,SAAU,EAEZ/zN,EAAMspD,UAAY/vF,GACpBonL,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,GACxB3gJ,EAAMqkJ,YAA+B,IAAjB1D,EAAMzoM,OAAcm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,GAAY20E,EAAc/sK,EAAQvoD,IAE7Gq1N,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,EAElC,MACSk0E,IACV70N,EAAM+zN,SAAU,EAChBuB,EAAc/sK,EAAQvoD,IAO1B,OAAQA,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAkC,IAAjBnkJ,EAAM9nD,OACrE,CAED,SAASm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,EAAOk0E,GAClC70N,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAiB8nD,EAAMg0N,MAChDh0N,EAAMw0N,WAAa,EACnBjsK,EAAOqlC,KAAK,OAAQ+yD,KAGpB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACzC28Q,EAAY70N,EAAMpO,OAAO+P,QAAQg/I,GAAY3gJ,EAAMpO,OAAO55C,KAAK2oM,GAC/D3gJ,EAAMi0N,cAAce,EAAazsK,IAGvC+sK,EAAc/sK,EAAQvoD,EACvB,CAxHDxlD,OAAOC,eAAes3Q,EAASvuQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,gBAIFh5Q,KAAKg5Q,eAAeC,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAKg5Q,iBAMVh5Q,KAAKg5Q,eAAeC,UAAYt6Q,EACjC,IAEH85Q,EAASvuQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzCk4Q,EAASvuQ,UAAU+xQ,WAAarC,EAAYsC,UAE5CzD,EAASvuQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,EAMD45Q,EAASvuQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GACzC,IACIu7P,EADA90N,EAAQ1mD,KAAKg5Q,eAkBjB,OAfKtyN,EAAMqkJ,WAYTywE,GAAiB,EAXI,kBAAVn0E,KACTpnL,EAAWA,GAAYymC,EAAMu0N,mBAEZv0N,EAAMzmC,WACrBonL,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,GAC3BA,EAAW,IAGbu7P,GAAiB,GAMdF,EAAiBt7Q,KAAMqnM,EAAOpnL,GAAU,EAAOu7P,EACvD,EAGD/C,EAASvuQ,UAAUm+C,QAAU,SAAUg/I,GACrC,OAAOi0E,EAAiBt7Q,KAAMqnM,EAAO,MAAM,GAAM,EAClD,EAwEDoxE,EAASvuQ,UAAUiyQ,SAAW,WAC5B,OAAuC,IAAhCn8Q,KAAKg5Q,eAAeuB,OAC5B,EAGD9B,EAASvuQ,UAAUkyQ,YAAc,SAAUr+G,GACpC07G,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpC,IAAIppE,EAAU,IAAIypK,EAAc17G,GAChC/9J,KAAKg5Q,eAAehpK,QAAUA,EAE9BhwG,KAAKg5Q,eAAe/4P,SAAWjgB,KAAKg5Q,eAAehpK,QAAQ/vF,SAK3D,IAHA,IAAIzE,EAAIxb,KAAKg5Q,eAAe1gO,OAAOqqM,KAC/B31H,EAAU,GAED,OAANxxG,GACLwxG,GAAWhd,EAAQ0yF,MAAMlnL,EAAEgD,MAC3BhD,EAAIA,EAAEhd,KAOR,OAJAwB,KAAKg5Q,eAAe1gO,OAAO5D,QAEX,KAAZs4E,GAAgBhtH,KAAKg5Q,eAAe1gO,OAAO55C,KAAKsuH,GACpDhtH,KAAKg5Q,eAAep6Q,OAASouH,EAAQpuH,OAC9BoB,IACR,EAGD,IAAIq8Q,EAAU,WAuBd,SAASC,EAAc5rQ,EAAGg2C,GACxB,OAAIh2C,GAAK,GAAsB,IAAjBg2C,EAAM9nD,QAAgB8nD,EAAMmyN,MAAc,EACpDnyN,EAAMqkJ,WAAmB,EAEzBr6L,IAAMA,EAEJg2C,EAAM6zN,SAAW7zN,EAAM9nD,OAAe8nD,EAAMpO,OAAOqqM,KAAKnkO,KAAK5f,OAAmB8nD,EAAM9nD,QAIxF8R,EAAIg2C,EAAMmkJ,gBAAenkJ,EAAMmkJ,cA/BrC,SAAiCn6L,GAgB/B,OAfIA,GAAK2rQ,EAEP3rQ,EAAI2rQ,GAIJ3rQ,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,CACR,CAcoD6rQ,CAAwB7rQ,IACvEA,GAAKg2C,EAAM9nD,OAAe8R,EAEzBg2C,EAAMmyN,MAKJnyN,EAAM9nD,QAJX8nD,EAAMi0N,cAAe,EACd,GAIV,CAoID,SAASe,EAAazsK,GACpB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,eAAgBzhB,EAAMi0N,aAAcj0N,EAAMk0N,iBAChDl0N,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTzyM,EAAM,eAAgBzhB,EAAM6zN,SAC5B7zN,EAAMk0N,iBAAkB,EACxBnrI,EAAQyuE,SAASy9D,EAAe1sK,GAEnC,CAED,SAAS0sK,EAAc1sK,GACrB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,gBAAiBzhB,EAAMuyN,UAAWvyN,EAAM9nD,OAAQ8nD,EAAMmyN,OAEvDnyN,EAAMuyN,YAAcvyN,EAAM9nD,SAAU8nD,EAAMmyN,QAC7C5pK,EAAOqlC,KAAK,YACZ5tF,EAAMk0N,iBAAkB,GAS1Bl0N,EAAMi0N,cAAgBj0N,EAAM6zN,UAAY7zN,EAAMmyN,OAASnyN,EAAM9nD,QAAU8nD,EAAMmkJ,cAC7E2xE,EAAKvtK,EACN,CAQD,SAAS+sK,EAAc/sK,EAAQvoD,GACxBA,EAAMy0N,cACTz0N,EAAMy0N,aAAc,EACpB1rI,EAAQyuE,SAASu+D,EAAgBxtK,EAAQvoD,GAE5C,CAED,SAAS+1N,EAAextK,EAAQvoD,GAwB9B,MAAQA,EAAM+zN,UAAY/zN,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAiBnkJ,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAe,CACpH,IAAI0pB,EAAMo+B,EAAM9nD,OAGhB,GAFAupE,EAAM,wBACN8mC,EAAOE,KAAK,GACR7mF,IAAQo+B,EAAM9nD,OAChB,KACH,CAED8nD,EAAMy0N,aAAc,CACrB,CA4QD,SAASuB,EAAwBvzQ,GAC/B,IAAIu9C,EAAQv9C,EAAK6vQ,eACjBtyN,EAAMm0N,kBAAoB1xQ,EAAKguJ,cAAc,YAAc,EAEvDzwG,EAAMo0N,kBAAoBp0N,EAAMo1D,OAGlCp1D,EAAM6zN,SAAU,EACPpxQ,EAAKguJ,cAAc,QAAU,GACtChuJ,EAAKwzQ,QAER,CAED,SAASC,EAAiBzzQ,GACxBg/D,EAAM,4BACNh/D,EAAKgmG,KAAK,EACX,CA2BD,SAAS0tK,EAAQ5tK,EAAQvoD,GACvByhB,EAAM,SAAUzhB,EAAM+zN,SAEjB/zN,EAAM+zN,SACTxrK,EAAOE,KAAK,GAGdzoD,EAAMo0N,iBAAkB,EACxB7rK,EAAOqlC,KAAK,UACZkoI,EAAKvtK,GACDvoD,EAAM6zN,UAAY7zN,EAAM+zN,SAASxrK,EAAOE,KAAK,EAClD,CAeD,SAASqtK,EAAKvtK,GACZ,IAAIvoD,EAAQuoD,EAAO+pK,eAGnB,IAFA7wM,EAAM,OAAQzhB,EAAM6zN,SAEb7zN,EAAM6zN,SAA6B,OAAlBtrK,EAAOE,SAGhC,CAyHD,SAAS2tK,EAASpsQ,EAAGg2C,GAEnB,OAAqB,IAAjBA,EAAM9nD,OAAqB,MAE3B8nD,EAAMqkJ,WAAYie,EAAMtiK,EAAMpO,OAAO8+C,SAAkB1mF,GAAKA,GAAKg2C,EAAM9nD,QAEtDoqN,EAAftiK,EAAMspD,QAAetpD,EAAMpO,OAAOupB,KAAK,IAAqC,IAAxBnb,EAAMpO,OAAO15C,OAAoB8nD,EAAMpO,OAAOwtK,QAAmBp/J,EAAMpO,OAAOykG,OAAOr2F,EAAM9nD,QACnJ8nD,EAAMpO,OAAO5D,SAGbs0K,EAAMtiK,EAAMpO,OAAOk2F,QAAQ99H,EAAGg2C,EAAMspD,SAE/Bg5G,GATP,IAAIA,CAUL,CAED,SAAS+zD,EAAY9tK,GACnB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,cAAezhB,EAAM8zN,YAEtB9zN,EAAM8zN,aACT9zN,EAAMmyN,OAAQ,EACdppI,EAAQyuE,SAAS8+D,EAAet2N,EAAOuoD,GAE1C,CAED,SAAS+tK,EAAct2N,EAAOuoD,GAG5B,GAFA9mC,EAAM,gBAAiBzhB,EAAM8zN,WAAY9zN,EAAM9nD,SAE1C8nD,EAAM8zN,YAA+B,IAAjB9zN,EAAM9nD,SAC7B8nD,EAAM8zN,YAAa,EACnBvrK,EAAO4vG,UAAW,EAClB5vG,EAAOqlC,KAAK,OAER5tF,EAAMs0N,aAAa,CAGrB,IAAIiC,EAAShuK,EAAO2pK,iBAEfqE,GAAUA,EAAOjC,aAAeiC,EAAOC,WAC1CjuK,EAAO1uG,SAEV,CAEJ,CAYD,SAASuC,EAAQq6Q,EAAIn6Q,GACnB,IAAK,IAAIpF,EAAI,EAAGgS,EAAIutQ,EAAGv+Q,OAAQhB,EAAIgS,EAAGhS,IACpC,GAAIu/Q,EAAGv/Q,KAAOoF,EAAG,OAAOpF,EAG1B,OAAQ,CACT,CA5tBD66Q,EAASvuQ,UAAUilG,KAAO,SAAUz+F,GAClCy3D,EAAM,OAAQz3D,GACdA,EAAI4L,SAAS5L,EAAG,IAChB,IAAIg2C,EAAQ1mD,KAAKg5Q,eACboE,EAAQ1sQ,EAKZ,GAJU,IAANA,IAASg2C,EAAMk0N,iBAAkB,GAI3B,IAANlqQ,GAAWg2C,EAAMi0N,gBAA0C,IAAxBj0N,EAAMmkJ,cAAsBnkJ,EAAM9nD,QAAU8nD,EAAMmkJ,cAAgBnkJ,EAAM9nD,OAAS,IAAM8nD,EAAMmyN,OAGlI,OAFA1wM,EAAM,qBAAsBzhB,EAAM9nD,OAAQ8nD,EAAMmyN,OAC3B,IAAjBnyN,EAAM9nD,QAAgB8nD,EAAMmyN,MAAOkE,EAAY/8Q,MAAW07Q,EAAa17Q,MACpE,KAKT,GAAU,KAFV0Q,EAAI4rQ,EAAc5rQ,EAAGg2C,KAENA,EAAMmyN,MAEnB,OADqB,IAAjBnyN,EAAM9nD,QAAcm+Q,EAAY/8Q,MAC7B,KAyBT,IA4BIgpN,EA5BAq0D,EAAS32N,EAAMi0N,aAgDnB,OA/CAxyM,EAAM,gBAAiBk1M,IAEF,IAAjB32N,EAAM9nD,QAAgB8nD,EAAM9nD,OAAS8R,EAAIg2C,EAAMmkJ,gBAEjD1iI,EAAM,6BADNk1M,GAAS,GAMP32N,EAAMmyN,OAASnyN,EAAM+zN,QAEvBtyM,EAAM,mBADNk1M,GAAS,GAEAA,IACTl1M,EAAM,WACNzhB,EAAM+zN,SAAU,EAChB/zN,EAAMg0N,MAAO,EAEQ,IAAjBh0N,EAAM9nD,SAAc8nD,EAAMi0N,cAAe,GAE7C36Q,KAAKo7Q,MAAM10N,EAAMmkJ,eAEjBnkJ,EAAMg0N,MAAO,EAGRh0N,EAAM+zN,UAAS/pQ,EAAI4rQ,EAAcc,EAAO12N,KAMnC,QAFDsiK,EAAPt4M,EAAI,EAASosQ,EAASpsQ,EAAGg2C,GAAkB,OAG7CA,EAAMi0N,aAAej0N,EAAM9nD,QAAU8nD,EAAMmkJ,cAC3Cn6L,EAAI,IAEJg2C,EAAM9nD,QAAU8R,EAChBg2C,EAAMw0N,WAAa,GAGA,IAAjBx0N,EAAM9nD,SAGH8nD,EAAMmyN,QAAOnyN,EAAMi0N,cAAe,GAEnCyC,IAAU1sQ,GAAKg2C,EAAMmyN,OAAOkE,EAAY/8Q,OAGlC,OAARgpN,GAAchpN,KAAKs0I,KAAK,OAAQ00E,GAC7BA,CACR,EAuHDyvD,EAASvuQ,UAAUkxQ,MAAQ,SAAU1qQ,GACnCupQ,EAAej6Q,KAAM,IAAI+5Q,EAA2B,WACrD,EAEDtB,EAASvuQ,UAAUovO,KAAO,SAAU9hI,EAAM8lK,GACxC,IAAIl+Q,EAAMY,KACN0mD,EAAQ1mD,KAAKg5Q,eAEjB,OAAQtyN,EAAM4zN,YACZ,KAAK,EACH5zN,EAAM2zN,MAAQ7iK,EACd,MAEF,KAAK,EACH9wD,EAAM2zN,MAAQ,CAAC3zN,EAAM2zN,MAAO7iK,GAC5B,MAEF,QACE9wD,EAAM2zN,MAAM37Q,KAAK84G,GAIrB9wD,EAAM4zN,YAAc,EACpBnyM,EAAM,wBAAyBzhB,EAAM4zN,WAAYgD,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAASjoO,MAAkBmiE,IAASi4B,EAAQ+tI,QAAUhmK,IAASi4B,EAAQ0yF,OAC7Ew2C,EAAQ8E,EAI5B,SAASC,EAAS7+D,EAAU8+D,GAC1Bx1M,EAAM,YAEF02I,IAAaz/M,GACXu+Q,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5Bz1M,EAAM,WAENqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BtmK,EAAK0+C,eAAe,QAAS6nH,GAC7BvmK,EAAK0+C,eAAe,QAAShjC,GAC7B1b,EAAK0+C,eAAe,SAAUwnH,GAC9Bt+Q,EAAI82J,eAAe,MAAOyiH,GAC1Bv5Q,EAAI82J,eAAe,MAAOunH,GAC1Br+Q,EAAI82J,eAAe,OAAQ8nH,GAC3BC,GAAY,GAMRv3N,EAAMw0N,YAAgB1jK,EAAKohK,iBAAkBphK,EAAKohK,eAAesF,WAAYH,IAhClF,CAED,SAASpF,IACPxwM,EAAM,SACNqvC,EAAKniE,KACN,CAjBGqR,EAAM8zN,WAAY/qI,EAAQyuE,SAASq/D,GAAYn+Q,EAAI83J,KAAK,MAAOqmH,GACnE/lK,EAAK+wB,GAAG,SAAUm1I,GAsBlB,IAAIK,EAwFN,SAAqB3+Q,GACnB,OAAO,WACL,IAAIsnD,EAAQtnD,EAAI45Q,eAChB7wM,EAAM,cAAezhB,EAAMw0N,YACvBx0N,EAAMw0N,YAAYx0N,EAAMw0N,aAEH,IAArBx0N,EAAMw0N,YAAoB9B,EAAgBh6Q,EAAK,UACjDsnD,EAAM6zN,SAAU,EAChBiC,EAAKp9Q,GAER,CACF,CAnGe++Q,CAAY/+Q,GAC1Bo4G,EAAK+wB,GAAG,QAASw1I,GACjB,IAAIE,GAAY,EAwBhB,SAASD,EAAO32E,GACdl/H,EAAM,UACN,IAAI6gJ,EAAMxxG,EAAKkrF,MAAM2E,GACrBl/H,EAAM,aAAc6gJ,IAER,IAARA,KAKwB,IAArBtiK,EAAM4zN,YAAoB5zN,EAAM2zN,QAAU7iK,GAAQ9wD,EAAM4zN,WAAa,IAAqC,IAAhCx3Q,EAAQ4jD,EAAM2zN,MAAO7iK,MAAkBymK,IACpH91M,EAAM,8BAA+BzhB,EAAMw0N,YAC3Cx0N,EAAMw0N,cAGR97Q,EAAIg/Q,QAEP,CAID,SAASlrJ,EAAQuoJ,GACftzM,EAAM,UAAWszM,GACjBgC,IACAjmK,EAAK0+C,eAAe,QAAShjC,GACU,IAAnCkmJ,EAAgB5hK,EAAM,UAAgByiK,EAAeziK,EAAMikK,EAChE,CAKD,SAASoC,IACPrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BL,GACD,CAID,SAASK,IACP31M,EAAM,YACNqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BJ,GACD,CAID,SAASA,IACPt1M,EAAM,UACN/oE,EAAIq+Q,OAAOjmK,EACZ,CAUD,OA7DAp4G,EAAImpI,GAAG,OAAQy1I,GAtkBjB,SAAyB3E,EAAS5pQ,EAAOvG,GAGvC,GAAuC,oBAA5BmwQ,EAAQgF,gBAAgC,OAAOhF,EAAQgF,gBAAgB5uQ,EAAOvG,GAKpFmwQ,EAAQiF,SAAYjF,EAAQiF,QAAQ7uQ,GAAuC5R,MAAMC,QAAQu7Q,EAAQiF,QAAQ7uQ,IAAS4pQ,EAAQiF,QAAQ7uQ,GAAO44C,QAAQn/C,GAASmwQ,EAAQiF,QAAQ7uQ,GAAS,CAACvG,EAAImwQ,EAAQiF,QAAQ7uQ,IAA5J4pQ,EAAQ9wI,GAAG94H,EAAOvG,EACpE,CA4lBCm1Q,CAAgB7mK,EAAM,QAAS0b,GAO/B1b,EAAK0/C,KAAK,QAAS2mH,GAQnBrmK,EAAK0/C,KAAK,SAAU4mH,GAQpBtmK,EAAK88B,KAAK,OAAQl1I,GAEbsnD,EAAM6zN,UACTpyM,EAAM,eACN/oE,EAAIu9Q,UAGCnlK,CACR,EAeDihK,EAASvuQ,UAAUuzQ,OAAS,SAAUjmK,GACpC,IAAI9wD,EAAQ1mD,KAAKg5Q,eACb2E,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBl3N,EAAM4zN,WAAkB,OAAOt6Q,KAEnC,GAAyB,IAArB0mD,EAAM4zN,WAER,OAAI9iK,GAAQA,IAAS9wD,EAAM2zN,QACtB7iK,IAAMA,EAAO9wD,EAAM2zN,OAExB3zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EACZ/iK,GAAMA,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IANK39Q,KAW3C,IAAKw3G,EAAM,CAET,IAAI+mK,EAAQ73N,EAAM2zN,MACd/xP,EAAMo+B,EAAM4zN,WAChB5zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EAEhB,IAAK,IAAI38Q,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACvB2gR,EAAM3gR,GAAG02I,KAAK,SAAUt0I,KAAM,CAC5B49Q,YAAY,IAIhB,OAAO59Q,IACR,CAGD,IAAIuP,EAAQzM,EAAQ4jD,EAAM2zN,MAAO7iK,GACjC,OAAe,IAAXjoG,IACJm3C,EAAM2zN,MAAM7qQ,OAAOD,EAAO,GAC1Bm3C,EAAM4zN,YAAc,EACK,IAArB5zN,EAAM4zN,aAAkB5zN,EAAM2zN,MAAQ3zN,EAAM2zN,MAAM,IACtD7iK,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IAJD39Q,IAM1B,EAIDy4Q,EAASvuQ,UAAUq+H,GAAK,SAAUq2D,EAAI11L,GACpC,IAAI0pG,EAAM8nH,EAAOxwN,UAAUq+H,GAAGhqI,KAAKyB,KAAM4+L,EAAI11L,GACzCw9C,EAAQ1mD,KAAKg5Q,eAuBjB,MArBW,SAAPp6E,GAGFl4I,EAAMm0N,kBAAoB76Q,KAAKm3J,cAAc,YAAc,GAErC,IAAlBzwG,EAAM6zN,SAAmBv6Q,KAAK28Q,UAClB,aAAP/9E,IACJl4I,EAAM8zN,YAAe9zN,EAAMm0N,oBAC9Bn0N,EAAMm0N,kBAAoBn0N,EAAMi0N,cAAe,EAC/Cj0N,EAAM6zN,SAAU,EAChB7zN,EAAMk0N,iBAAkB,EACxBzyM,EAAM,cAAezhB,EAAM9nD,OAAQ8nD,EAAM+zN,SAErC/zN,EAAM9nD,OACR88Q,EAAa17Q,MACH0mD,EAAM+zN,SAChBhrI,EAAQyuE,SAAS0+D,EAAkB58Q,QAKlC4yG,CACR,EAED6lK,EAASvuQ,UAAU0uJ,YAAc6/G,EAASvuQ,UAAUq+H,GAEpDkwI,EAASvuQ,UAAUgsJ,eAAiB,SAAU0oC,EAAI11L,GAChD,IAAI0pG,EAAM8nH,EAAOxwN,UAAUgsJ,eAAe33J,KAAKyB,KAAM4+L,EAAI11L,GAYzD,MAVW,aAAP01L,GAOFnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAED6lK,EAASvuQ,UAAUqvJ,mBAAqB,SAAUqlC,GAChD,IAAIhsF,EAAM8nH,EAAOxwN,UAAUqvJ,mBAAmBv3J,MAAMhC,KAAMmC,WAY1D,MAVW,aAAPy8L,QAA4Bv1L,IAAPu1L,GAOvBnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAsBD6lK,EAASvuQ,UAAUyyQ,OAAS,WAC1B,IAAIj2N,EAAQ1mD,KAAKg5Q,eAYjB,OAVKtyN,EAAM6zN,UACTpyM,EAAM,UAINzhB,EAAM6zN,SAAW7zN,EAAMm0N,kBAQ3B,SAAgB5rK,EAAQvoD,GACjBA,EAAMo0N,kBACTp0N,EAAMo0N,iBAAkB,EACxBrrI,EAAQyuE,SAAS2+D,EAAS5tK,EAAQvoD,GAErC,CAZGi2N,CAAO38Q,KAAM0mD,IAGfA,EAAMo1D,QAAS,EACR97G,IACR,EAsBDy4Q,EAASvuQ,UAAUk0Q,MAAQ,WAUzB,OATAj2M,EAAM,wBAAyBnoE,KAAKg5Q,eAAeuB,UAEf,IAAhCv6Q,KAAKg5Q,eAAeuB,UACtBpyM,EAAM,SACNnoE,KAAKg5Q,eAAeuB,SAAU,EAC9Bv6Q,KAAKs0I,KAAK,UAGZt0I,KAAKg5Q,eAAel9J,QAAS,EACtB97G,IACR,EAcDy4Q,EAASvuQ,UAAUsX,KAAO,SAAUytF,GAClC,IAAIla,EAAQ/0F,KAER0mD,EAAQ1mD,KAAKg5Q,eACbl9J,GAAS,EA0Bb,IAAK,IAAIl+G,KAzBTqxG,EAAOs5B,GAAG,OAAO,WAGf,GAFApgE,EAAM,eAEFzhB,EAAMspD,UAAYtpD,EAAMmyN,MAAO,CACjC,IAAIxxE,EAAQ3gJ,EAAMspD,QAAQ36D,MACtBgyJ,GAASA,EAAMzoM,QAAQm2F,EAAMr2F,KAAK2oM,EACvC,CAEDtyG,EAAMr2F,KAAK,KACZ,IACDuwG,EAAOs5B,GAAG,QAAQ,SAAU8+D,IAC1Bl/H,EAAM,gBACFzhB,EAAMspD,UAASq3F,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,KAE3C3gJ,EAAMqkJ,YAAyB,OAAV1D,QAA4Bh+L,IAAVg+L,MAAuC3gJ,EAAMqkJ,YAAgB1D,GAAUA,EAAMzoM,UAE9Gm2F,EAAMr2F,KAAK2oM,KAGnBvrF,GAAS,EACT7M,EAAOmvK,UAEV,IAGanvK,OACI5lG,IAAZrJ,KAAKpC,IAAyC,oBAAdqxG,EAAOrxG,KACzCoC,KAAKpC,GAAK,SAAoBo7F,GAC5B,OAAO,WACL,OAAOiW,EAAOjW,GAAQh3F,MAAMitG,EAAQ9sG,UACrC,CACF,CAJS,CAIRvE,IAKN,IAAK,IAAI8S,EAAI,EAAGA,EAAIwpQ,EAAat7Q,OAAQ8R,IACvCu+F,EAAOs5B,GAAG2xI,EAAaxpQ,GAAI1Q,KAAKs0I,KAAKzqI,KAAK7J,KAAMk6Q,EAAaxpQ,KAc/D,OATA1Q,KAAKo7Q,MAAQ,SAAU1qQ,GACrBy3D,EAAM,gBAAiBz3D,GAEnBorG,IACFA,GAAS,EACT7M,EAAO0tK,SAEV,EAEM38Q,IACR,EAEqB,oBAAXhC,SACTy6Q,EAASvuQ,UAAUlM,OAAOwgR,eAAiB,WAKzC,YAJ0Cn1Q,IAAtCqwQ,IACFA,EAAoCtgG,EAAQ,QAGvCsgG,EAAkC15Q,KAC1C,GAGHkB,OAAOC,eAAes3Q,EAASvuQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAenuE,aAC5B,IAEH3pM,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAe1gO,MACnD,IAEHp3C,OAAOC,eAAes3Q,EAASvuQ,UAAW,kBAAmB,CAI3D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAeuB,OAC5B,EACD9vQ,IAAK,SAAai8C,GACZ1mD,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeuB,QAAU7zN,EAEjC,IAGH+xN,EAASgG,UAAY3B,EACrB57Q,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAep6Q,MAC5B,IAmDmB,oBAAXZ,SACTy6Q,EAASp5P,KAAO,SAAUq/P,EAAU/gG,GAKlC,YAJat0K,IAATgW,IACFA,EAAO+5J,EAAQ,QAGV/5J,EAAKo5P,EAAUiG,EAAU/gG,EACjC,uCC3hCHxa,EAAOx3B,QAAU+jI,EAEjB,IAAI5zC,EAAiB1iD,EAAAA,OAAAA,EACjB2gG,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCC,EAAqC9iD,EAAe8iD,mCACpDC,EAA8B/iD,EAAe+iD,4BAE7C73E,EAAS5tB,EAAQ,OAIrB,SAAS0lG,EAAerD,EAAIj9P,GAC1B,IAAIugQ,EAAK/+Q,KAAKg/Q,gBACdD,EAAGE,cAAe,EAClB,IAAI5zO,EAAK0zO,EAAGG,QAEZ,GAAW,OAAP7zO,EACF,OAAOrrC,KAAKs0I,KAAK,QAAS,IAAIqqI,GAGhCI,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KACD,MAAR1gQ,GACFxe,KAAKtB,KAAK8f,GACZ6sB,EAAGowO,GACH,IAAIjrG,EAAKxwK,KAAKg5Q,eACdxoG,EAAGiqG,SAAU,GAETjqG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBACpC7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cAEjB,CAED,SAAS6kE,EAAU5vQ,GACjB,KAAME,gBAAgB0vQ,GAAY,OAAO,IAAIA,EAAU5vQ,GACvDknM,EAAOzoM,KAAKyB,KAAMF,GAClBE,KAAKg/Q,gBAAkB,CACrBF,eAAgBA,EAAej1Q,KAAK7J,MACpCo/Q,eAAe,EACfH,cAAc,EACdC,QAAS,KACTC,WAAY,KACZE,cAAe,MAGjBr/Q,KAAKg5Q,eAAe2B,cAAe,EAInC36Q,KAAKg5Q,eAAe0B,MAAO,EAEvB56Q,IAC+B,oBAAtBA,EAAQ+H,YAA0B7H,KAAKk5Q,WAAap5Q,EAAQ+H,WAC1C,oBAAlB/H,EAAQ2yQ,QAAsBzyQ,KAAKs/Q,OAASx/Q,EAAQ2yQ,QAIjEzyQ,KAAKuoI,GAAG,YAAag3I,EACtB,CAED,SAASA,IACP,IAAIxqL,EAAQ/0F,KAEe,oBAAhBA,KAAKs/Q,QAA0Bt/Q,KAAKg5Q,eAAeC,UAK5Dx6Q,EAAKuB,KAAM,KAAM,MAJjBA,KAAKs/Q,QAAO,SAAU7D,EAAIj9P,GACxB/f,EAAKs2F,EAAO0mL,EAAIj9P,EACjB,GAIJ,CAwDD,SAAS/f,EAAKwwG,EAAQwsK,EAAIj9P,GACxB,GAAIi9P,EAAI,OAAOxsK,EAAOqlC,KAAK,QAASmnI,GAMpC,GALY,MAARj9P,GACFywF,EAAOvwG,KAAK8f,GAIVywF,EAAO2pK,eAAeh6Q,OAAQ,MAAM,IAAIigR,EAC5C,GAAI5vK,EAAO+vK,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAO3vK,EAAOvwG,KAAK,KACpB,CA/HD06K,EAAQ,MAARA,CAAoBs2F,EAAW1oE,GA+D/B0oE,EAAUxlQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GAE1C,OADAjgB,KAAKg/Q,gBAAgBI,eAAgB,EAC9Bp4E,EAAO98L,UAAUxL,KAAKH,KAAKyB,KAAMqnM,EAAOpnL,EAChD,EAYDyvP,EAAUxlQ,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC1DA,EAAG,IAAI0uO,EAA2B,gBACnC,EAEDrK,EAAUxlQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACtD,IAAI0zO,EAAK/+Q,KAAKg/Q,gBAKd,GAJAD,EAAGG,QAAU7zO,EACb0zO,EAAGI,WAAa93E,EAChB03E,EAAGM,cAAgBp/P,GAEd8+P,EAAGE,aAAc,CACpB,IAAIzuG,EAAKxwK,KAAKg5Q,gBACV+F,EAAGK,eAAiB5uG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBAAe7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cACxF,CACF,EAKD6kE,EAAUxlQ,UAAUkxQ,MAAQ,SAAU1qQ,GACpC,IAAIquQ,EAAK/+Q,KAAKg/Q,gBAEQ,OAAlBD,EAAGI,YAAwBJ,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBj/Q,KAAKk5Q,WAAW6F,EAAGI,WAAYJ,EAAGM,cAAeN,EAAGD,gBAMvD,EAEDpP,EAAUxlQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC5C27J,EAAO98L,UAAUmxQ,SAAS98Q,KAAKyB,KAAMnB,GAAK,SAAU2gR,GAClDn0O,EAAGm0O,EACJ,GACF,0CCxIGx4E,YAfJ,SAASy4E,EAAc/4N,GACrB,IAAIquC,EAAQ/0F,KAEZA,KAAKxB,KAAO,KACZwB,KAAK04D,MAAQ,KAEb14D,KAAKguE,OAAS,YAimBhB,SAAwB0xM,EAASh5N,EAAO7nD,GACtC,IAAI65D,EAAQgnN,EAAQhnN,MACpBgnN,EAAQhnN,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAIrtB,EAAKqtB,EAAMrxC,SACfq/B,EAAMi5N,YACNt0O,EAAGxsC,GACH65D,EAAQA,EAAMl6D,IACf,CAGDkoD,EAAMk5N,mBAAmBphR,KAAOkhR,CACjC,CA7mBGG,CAAe9qL,EAAOruC,EACvB,CACF,CArBDy8G,EAAOx3B,QAAU0qI,EA8BjBA,EAASyJ,cAAgBA,EAGzB,IAAIC,EAAe,CACjBC,UAAW5mG,EAAQ,QAMjBshD,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAUvD,IAkIIyuQ,EAlIArG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC89C,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCuB,EAAyBpkD,EAAeokD,uBACxCC,EAAuBrkD,EAAeqkD,qBACtCC,EAAyBtkD,EAAeskD,uBACxCC,EAA6BvkD,EAAeukD,2BAC5CC,EAAuBxkD,EAAewkD,qBAEtCrG,EAAiBL,EAAYK,eAIjC,SAASsG,IAAQ,CAEjB,SAAST,EAAchgR,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQ0gR,oBAI7DxgR,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAE9En6Q,KAAKygR,aAAc,EAEnBzgR,KAAKk+Q,WAAY,EAEjBl+Q,KAAK0gR,QAAS,EAEd1gR,KAAK64Q,OAAQ,EAEb74Q,KAAKk9Q,UAAW,EAEhBl9Q,KAAKi5Q,WAAY,EAIjB,IAAI0H,GAAqC,IAA1B7gR,EAAQ8gR,cACvB5gR,KAAK4gR,eAAiBD,EAItB3gR,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAIlDj7Q,KAAKpB,OAAS,EAEdoB,KAAK6gR,SAAU,EAEf7gR,KAAK8gR,OAAS,EAKd9gR,KAAK06Q,MAAO,EAIZ16Q,KAAK+gR,kBAAmB,EAExB/gR,KAAKghR,QAAU,SAAUvF,IA6R3B,SAAiBxsK,EAAQwsK,GACvB,IAAI/0N,EAAQuoD,EAAO2pK,eACf8B,EAAOh0N,EAAMg0N,KACbrvO,EAAKqb,EAAMw4N,QACf,GAAkB,oBAAP7zO,EAAmB,MAAM,IAAIszO,EAExC,GAbF,SAA4Bj4N,GAC1BA,EAAMm6N,SAAU,EAChBn6N,EAAMw4N,QAAU,KAChBx4N,EAAM9nD,QAAU8nD,EAAMu6N,SACtBv6N,EAAMu6N,SAAW,CAClB,CAOCC,CAAmBx6N,GACf+0N,GArCN,SAAsBxsK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,KAC3Cqb,EAAMi5N,UAEJjF,GAGFjrI,EAAQyuE,SAAS7yK,EAAIowO,GAGrBhsI,EAAQyuE,SAASijE,EAAalyK,EAAQvoD,GACtCuoD,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,KAIvBpwO,EAAGowO,GACHxsK,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,GAGvB0F,EAAYlyK,EAAQvoD,GAEvB,CAeS26N,CAAapyK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,OAAS,CAErD,IAAI6xO,EAAWoE,EAAW56N,IAAUuoD,EAAOgqK,UAEtCiE,GAAax2N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBACjEC,EAAYvyK,EAAQvoD,GAGlBg0N,EACFjrI,EAAQyuE,SAASujE,EAAYxyK,EAAQvoD,EAAOw2N,EAAU7xO,GAEtDo2O,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,EAEvC,CACF,CAhTG21O,CAAQ/xK,EAAQwsK,EACjB,EAGDz7Q,KAAKk/Q,QAAU,KAEfl/Q,KAAKihR,SAAW,EAChBjhR,KAAKuhR,gBAAkB,KACvBvhR,KAAK0hR,oBAAsB,KAG3B1hR,KAAK2/Q,UAAY,EAGjB3/Q,KAAK2hR,aAAc,EAEnB3hR,KAAKohR,cAAe,EAEpBphR,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAK4hR,qBAAuB,EAG5B5hR,KAAK4/Q,mBAAqB,IAAIH,EAAcz/Q,KAC7C,CA2CD,SAASq2Q,EAASv2Q,GAUhB,IAAIq6Q,EAAWn6Q,gBATfgnM,EAASA,GAAU5tB,EAAQ,QAU3B,IAAK+gG,IAAa8F,EAAgB1hR,KAAK83Q,EAAUr2Q,MAAO,OAAO,IAAIq2Q,EAASv2Q,GAC5EE,KAAK44Q,eAAiB,IAAIkH,EAAchgR,EAASE,KAAMm6Q,GAEvDn6Q,KAAKsB,UAAW,EAEZxB,IAC2B,oBAAlBA,EAAQ4iM,QAAsB1iM,KAAKonM,OAAStnM,EAAQ4iM,OACjC,oBAAnB5iM,EAAQ+hR,SAAuB7hR,KAAK8hR,QAAUhiR,EAAQ+hR,QAClC,oBAApB/hR,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,SACtC,oBAAlBT,EAAQkxQ,QAAsBhxQ,KAAK+wQ,OAASjxQ,EAAQkxQ,QAGjEt2C,EAAOn8N,KAAKyB,KACb,CAuJD,SAAS+hR,EAAQ9yK,EAAQvoD,EAAOm7N,EAAQv5P,EAAK++K,EAAOpnL,EAAUorB,GAC5Dqb,EAAMu6N,SAAW34P,EACjBo+B,EAAMw4N,QAAU7zO,EAChBqb,EAAMm6N,SAAU,EAChBn6N,EAAMg0N,MAAO,EACTh0N,EAAMuyN,UAAWvyN,EAAMs6N,QAAQ,IAAIb,EAAqB,UAAmB0B,EAAQ5yK,EAAO6yK,QAAQz6E,EAAO3gJ,EAAMs6N,SAAc/xK,EAAOm4F,OAAOC,EAAOpnL,EAAUymC,EAAMs6N,SACtKt6N,EAAMg0N,MAAO,CACd,CAuDD,SAAS+G,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,GACtC6xO,GASP,SAAsBjuK,EAAQvoD,GACP,IAAjBA,EAAM9nD,QAAgB8nD,EAAMw3N,YAC9Bx3N,EAAMw3N,WAAY,EAClBjvK,EAAOqlC,KAAK,SAEf,CAdgB0tI,CAAa/yK,EAAQvoD,GACpCA,EAAMi5N,YACNt0O,IACA81O,EAAYlyK,EAAQvoD,EACrB,CAaD,SAAS86N,EAAYvyK,EAAQvoD,GAC3BA,EAAMq6N,kBAAmB,EACzB,IAAIroN,EAAQhS,EAAM66N,gBAElB,GAAItyK,EAAO6yK,SAAWppN,GAASA,EAAMl6D,KAAM,CAEzC,IAAIoR,EAAI82C,EAAMk7N,qBACVtpO,EAAS,IAAIz6C,MAAM+R,GACnBqyQ,EAASv7N,EAAMk5N,mBACnBqC,EAAOvpN,MAAQA,EAIf,IAHA,IAAIltC,EAAQ,EACR02P,GAAa,EAEVxpN,GACLpgB,EAAO9sB,GAASktC,EACXA,EAAMypN,QAAOD,GAAa,GAC/BxpN,EAAQA,EAAMl6D,KACdgtB,GAAS,EAGX8sB,EAAO4pO,WAAaA,EACpBH,EAAQ9yK,EAAQvoD,GAAO,EAAMA,EAAM9nD,OAAQ05C,EAAQ,GAAI2pO,EAAOj0M,QAG9DtnB,EAAMi5N,YACNj5N,EAAMg7N,oBAAsB,KAExBO,EAAOzjR,MACTkoD,EAAMk5N,mBAAqBqC,EAAOzjR,KAClCyjR,EAAOzjR,KAAO,MAEdkoD,EAAMk5N,mBAAqB,IAAIH,EAAc/4N,GAG/CA,EAAMk7N,qBAAuB,CAC9B,KAAM,CAEL,KAAOlpN,GAAO,CACZ,IAAI2uI,EAAQ3uI,EAAM2uI,MACdpnL,EAAWy4C,EAAMz4C,SACjBorB,EAAKqtB,EAAMrxC,SASf,GAPA06P,EAAQ9yK,EAAQvoD,GAAO,EADbA,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACJyoM,EAAOpnL,EAAUorB,GACpDqtB,EAAQA,EAAMl6D,KACdkoD,EAAMk7N,uBAKFl7N,EAAMm6N,QACR,KAEH,CAEa,OAAVnoN,IAAgBhS,EAAMg7N,oBAAsB,KACjD,CAEDh7N,EAAM66N,gBAAkB7oN,EACxBhS,EAAMq6N,kBAAmB,CAC1B,CA0CD,SAASO,EAAW56N,GAClB,OAAOA,EAAMg6N,QAA2B,IAAjBh6N,EAAM9nD,QAA0C,OAA1B8nD,EAAM66N,kBAA6B76N,EAAMw2N,WAAax2N,EAAMm6N,OAC1G,CAED,SAASuB,EAAUnzK,EAAQvoD,GACzBuoD,EAAO8hK,QAAO,SAAUlyQ,GACtB6nD,EAAMi5N,YAEF9gR,GACFo7Q,EAAehrK,EAAQpwG,GAGzB6nD,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,aACZ6sI,EAAYlyK,EAAQvoD,EACrB,GACF,CAeD,SAASy6N,EAAYlyK,EAAQvoD,GAC3B,IAAI27N,EAAOf,EAAW56N,GAEtB,GAAI27N,IAhBN,SAAmBpzK,EAAQvoD,GACpBA,EAAMi7N,aAAgBj7N,EAAM+5N,cACF,oBAAlBxxK,EAAO8hK,QAA0BrqN,EAAMuyN,WAKhDvyN,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,eALZ5tF,EAAMi5N,YACNj5N,EAAM+5N,aAAc,EACpBhxI,EAAQyuE,SAASkkE,EAAWnzK,EAAQvoD,IAMzC,CAMG64N,CAAUtwK,EAAQvoD,GAEM,IAApBA,EAAMi5N,YACRj5N,EAAMw2N,UAAW,EACjBjuK,EAAOqlC,KAAK,UAER5tF,EAAMs0N,cAAa,CAGrB,IAAIsH,EAASrzK,EAAO+pK,iBAEfsJ,GAAUA,EAAOtH,aAAesH,EAAO9H,aAC1CvrK,EAAO1uG,SAEV,CAIL,OAAO8hR,CACR,CA5hBDjpG,EAAQ,MAARA,CAAoBi9F,EAAU37C,GAyF9BolD,EAAc51Q,UAAU6uQ,UAAY,WAIlC,IAHA,IAAIxzQ,EAAUvF,KAAKuhR,gBACf12F,EAAM,GAEHtlL,GACLslL,EAAInsL,KAAK6G,GACTA,EAAUA,EAAQ/G,KAGpB,OAAOqsL,CACR,EAED,WACE,IACE3pL,OAAOC,eAAe2+Q,EAAc51Q,UAAW,SAAU,CACvDM,IAAKu1Q,EAAaC,WAAU,WAC1B,OAAOhgR,KAAK+4Q,WACb,GAAE,6EAAmF,YAE5E,CAAZ,MAAOttH,GAAK,CAPhB,IAcsB,oBAAXztJ,QAAyBA,OAAOukR,aAAiE,oBAA3Cv4Q,SAASE,UAAUlM,OAAOukR,cACzFtC,EAAkBj2Q,SAASE,UAAUlM,OAAOukR,aAC5CrhR,OAAOC,eAAek1Q,EAAUr4Q,OAAOukR,YAAa,CAClD5jR,MAAO,SAAe6C,GACpB,QAAIy+Q,EAAgB1hR,KAAKyB,KAAMwB,IAC3BxB,OAASq2Q,IACN70Q,GAAUA,EAAOo3Q,0BAA0BkH,EACnD,KAGHG,EAAkB,SAAyBz+Q,GACzC,OAAOA,aAAkBxB,IAC1B,EA8BHq2Q,EAASnsQ,UAAUovO,KAAO,WACxB2gC,EAAej6Q,KAAM,IAAIkgR,EAC1B,EA8BD7J,EAASnsQ,UAAUw4L,MAAQ,SAAU2E,EAAOpnL,EAAUorB,GACpD,IAnNqBrqC,EAmNjB0lD,EAAQ1mD,KAAK44Q,eACb5vD,GAAM,EAENm5D,GAASz7N,EAAMqkJ,aAtNE/pM,EAsN0BqmM,EArNxCz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAsO9C,OAfI6I,IAAUv1I,EAAOk2D,SAASuE,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CA2NWy0E,CAAoBz0E,IAGN,oBAAbpnL,IACTorB,EAAKprB,EACLA,EAAW,MAGTkiQ,EAAOliQ,EAAW,SAAmBA,IAAUA,EAAWymC,EAAMu0N,iBAClD,oBAAP5vO,IAAmBA,EAAKk1O,GAC/B75N,EAAMg6N,OA7CZ,SAAuBzxK,EAAQ5jE,GAC7B,IAAIowO,EAAK,IAAI4E,EAEbpG,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,EACtB,CAwCmB+G,CAAcxiR,KAAMqrC,IAAa82O,GAnCrD,SAAoBlzK,EAAQvoD,EAAO2gJ,EAAOh8J,GACxC,IAAIowO,EAQJ,OANc,OAAVp0E,EACFo0E,EAAK,IAAI2E,EACiB,kBAAV/4E,GAAuB3gJ,EAAMqkJ,aAC7C0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,UAAW50B,KAG3Do0E,IACFxB,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,IACd,EAIV,CAmB6DgH,CAAWziR,KAAM0mD,EAAO2gJ,EAAOh8J,MACzFqb,EAAMi5N,YACN32D,EAwDJ,SAAuB/5G,EAAQvoD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,GAC5D,IAAK82O,EAAO,CACV,IAAIO,EAtBR,SAAqBh8N,EAAO2gJ,EAAOpnL,GAC5BymC,EAAMqkJ,aAAsC,IAAxBrkJ,EAAMk6N,eAA4C,kBAAVv5E,IAC/DA,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,IAG7B,OAAOonL,CACR,CAgBkBs7E,CAAYj8N,EAAO2gJ,EAAOpnL,GAErConL,IAAUq7E,IACZP,GAAQ,EACRliQ,EAAW,SACXonL,EAAQq7E,EAEX,CAED,IAAIp6P,EAAMo+B,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACvC8nD,EAAM9nD,QAAU0pB,EAChB,IAAI0gM,EAAMtiK,EAAM9nD,OAAS8nD,EAAMmkJ,cAE1Bme,IAAKtiK,EAAMw3N,WAAY,GAE5B,GAAIx3N,EAAMm6N,SAAWn6N,EAAMo6N,OAAQ,CACjC,IAAIhlB,EAAOp1M,EAAMg7N,oBACjBh7N,EAAMg7N,oBAAsB,CAC1Br6E,MAAOA,EACPpnL,SAAUA,EACVkiQ,MAAOA,EACP96P,SAAUgkB,EACV7sC,KAAM,MAGJs9P,EACFA,EAAKt9P,KAAOkoD,EAAMg7N,oBAElBh7N,EAAM66N,gBAAkB76N,EAAMg7N,oBAGhCh7N,EAAMk7N,sBAAwB,CAC/B,MACCG,EAAQ9yK,EAAQvoD,GAAO,EAAOp+B,EAAK++K,EAAOpnL,EAAUorB,GAGtD,OAAO29K,CACR,CA/FS45D,CAAc5iR,KAAM0mD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,IAEpD29K,CACR,EAEDqtD,EAASnsQ,UAAU24Q,KAAO,WACxB7iR,KAAK44Q,eAAekI,QACrB,EAEDzK,EAASnsQ,UAAU44Q,OAAS,WAC1B,IAAIp8N,EAAQ1mD,KAAK44Q,eAEblyN,EAAMo6N,SACRp6N,EAAMo6N,SACDp6N,EAAMm6N,SAAYn6N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBAAiBC,EAAYxhR,KAAM0mD,GAE9G,EAED2vN,EAASnsQ,UAAU64Q,mBAAqB,SAA4B9iQ,GAGlE,GADwB,kBAAbA,IAAuBA,EAAWA,EAAS1P,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOzN,SAASmd,EAAW,IAAI1P,gBAAkB,GAAI,MAAM,IAAI+vQ,EAAqBrgQ,GAExL,OADAjgB,KAAK44Q,eAAeqC,gBAAkBh7P,EAC/BjgB,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAWH73Q,OAAOC,eAAek1Q,EAASnsQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IA2LHwrE,EAASnsQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACrDA,EAAG,IAAI0uO,EAA2B,YACnC,EAED1D,EAASnsQ,UAAU43Q,QAAU,KAE7BzL,EAASnsQ,UAAUmrC,IAAM,SAAUgyJ,EAAOpnL,EAAUorB,GAClD,IAAIqb,EAAQ1mD,KAAK44Q,eAoBjB,MAlBqB,oBAAVvxE,GACTh8J,EAAKg8J,EACLA,EAAQ,KACRpnL,EAAW,MACkB,oBAAbA,IAChBorB,EAAKprB,EACLA,EAAW,MAGC,OAAVonL,QAA4Bh+L,IAAVg+L,GAAqBrnM,KAAK0iM,MAAM2E,EAAOpnL,GAEzDymC,EAAMo6N,SACRp6N,EAAMo6N,OAAS,EACf9gR,KAAK8iR,UAIFp8N,EAAMg6N,QAsEb,SAAqBzxK,EAAQvoD,EAAOrb,GAClCqb,EAAMg6N,QAAS,EACfS,EAAYlyK,EAAQvoD,GAEhBrb,IACEqb,EAAMw2N,SAAUztI,EAAQyuE,SAAS7yK,GAAS4jE,EAAOioD,KAAK,SAAU7rH,IAGtEqb,EAAMmyN,OAAQ,EACd5pK,EAAO3tG,UAAW,CACnB,CAhFoB0hR,CAAYhjR,KAAM0mD,EAAOrb,GACrCrrC,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAsFHsC,OAAOC,eAAek1Q,EAASnsQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAK44Q,gBAIF54Q,KAAK44Q,eAAeK,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAK44Q,iBAMV54Q,KAAK44Q,eAAeK,UAAYt6Q,EACjC,IAEH03Q,EAASnsQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzC81Q,EAASnsQ,UAAU+xQ,WAAarC,EAAYsC,UAE5C7F,EAASnsQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,0CCtrBGokR,YAEJ,SAASliR,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAEjN,IAAIk8Q,EAAW9jG,EAAQ,OAEnB8pG,EAAellR,OAAO,eACtBmlR,EAAcnlR,OAAO,cACrBolR,EAASplR,OAAO,SAChBqlR,EAASrlR,OAAO,SAChBslR,EAAetlR,OAAO,eACtBulR,EAAiBvlR,OAAO,iBACxBwlR,EAAUxlR,OAAO,UAErB,SAASylR,EAAiB9kR,EAAOF,GAC/B,MAAO,CACLE,MAAOA,EACPF,KAAMA,EAET,CAED,SAASilR,EAAe90G,GACtB,IAAInmK,EAAUmmK,EAAKs0G,GAEnB,GAAgB,OAAZz6Q,EAAkB,CACpB,IAAI+V,EAAOowJ,EAAK40G,GAASr0K,OAIZ,OAAT3wF,IACFowJ,EAAK00G,GAAgB,KACrB10G,EAAKs0G,GAAgB,KACrBt0G,EAAKu0G,GAAe,KACpB16Q,EAAQg7Q,EAAiBjlQ,GAAM,IAElC,CACF,CAED,SAASmlQ,EAAW/0G,GAGlBn/B,EAAQyuE,SAASwlE,EAAgB90G,EAClC,CAeD,IAAIg1G,EAAyB1iR,OAAOyJ,gBAAe,WAAc,IAC7Dk5Q,EAAuC3iR,OAAO+I,gBA4D/ClJ,EA5D+DkiR,EAAwB,CACpFh0K,aACF,OAAOjvG,KAAKwjR,EACb,EAEDhlR,KAAM,WACJ,IAAIu2F,EAAQ/0F,KAIR+I,EAAQ/I,KAAKojR,GAEjB,GAAc,OAAVr6Q,EACF,OAAOC,QAAQN,OAAOK,GAGxB,GAAI/I,KAAKqjR,GACP,OAAOr6Q,QAAQP,QAAQg7Q,OAAiBp6Q,GAAW,IAGrD,GAAIrJ,KAAKwjR,GAASvK,UAKhB,OAAO,IAAIjwQ,SAAQ,SAAUP,EAASC,GACpC+mI,EAAQyuE,UAAS,WACXnpH,EAAMquL,GACR16Q,EAAOqsF,EAAMquL,IAEb36Q,EAAQg7Q,OAAiBp6Q,GAAW,GAEvC,GACF,IAOH,IACIu0H,EADAkmJ,EAAc9jR,KAAKsjR,GAGvB,GAAIQ,EACFlmJ,EAAU,IAAI50H,QA1DpB,SAAqB86Q,EAAal1G,GAChC,OAAO,SAAUnmK,EAASC,GACxBo7Q,EAAY76Q,MAAK,WACX2lK,EAAKy0G,GACP56Q,EAAQg7Q,OAAiBp6Q,GAAW,IAItCulK,EAAK20G,GAAgB96Q,EAASC,EAC/B,GAAEA,EACJ,CACF,CA+C2Bq7Q,CAAYD,EAAa9jR,WAC1C,CAGL,IAAIwe,EAAOxe,KAAKwjR,GAASr0K,OAEzB,GAAa,OAAT3wF,EACF,OAAOxV,QAAQP,QAAQg7Q,EAAiBjlQ,GAAM,IAGhDo/G,EAAU,IAAI50H,QAAQhJ,KAAKujR,GAC5B,CAGD,OADAvjR,KAAKsjR,GAAgB1lJ,EACdA,CACR,GACuC5/H,OAAOwgR,eAAe,WAC9D,OAAOx+Q,IACR,IAAGe,EAAgBkiR,EAAuB,UAAU,WACnD,IAAIe,EAAShkR,KAKb,OAAO,IAAIgJ,SAAQ,SAAUP,EAASC,GACpCs7Q,EAAOR,GAASjjR,QAAQ,MAAM,SAAU1B,GAClCA,EACF6J,EAAO7J,GAIT4J,EAAQg7Q,OAAiBp6Q,GAAW,GACrC,GACF,GACF,IAAG45Q,GAAwBW,GAoE5BzgH,EAAOx3B,QAlEiC,SAA2C18B,GACjF,IAAIg1K,EAEAhmR,EAAWiD,OAAO2J,OAAOg5Q,GAA4D9iR,EAArBkjR,EAAiB,CAAC,EAAmCT,EAAS,CAChI7kR,MAAOswG,EACP3tG,UAAU,IACRP,EAAgBkjR,EAAgBf,EAAc,CAChDvkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBd,EAAa,CAC/CxkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBb,EAAQ,CAC1CzkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBZ,EAAQ,CAC1C1kR,MAAOswG,EAAO+pK,eAAewB,WAC7Bl5Q,UAAU,IACRP,EAAgBkjR,EAAgBV,EAAgB,CAClD5kR,MAAO,SAAe8J,EAASC,GAC7B,IAAI8V,EAAOvgB,EAASulR,GAASr0K,OAEzB3wF,GACFvgB,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,EAAiBjlQ,GAAM,MAE/BvgB,EAASilR,GAAgBz6Q,EACzBxK,EAASklR,GAAez6Q,EAE3B,EACDpH,UAAU,IACR2iR,IA8BJ,OA7BAhmR,EAASqlR,GAAgB,KACzBpG,EAASjuK,GAAQ,SAAUpwG,GACzB,GAAIA,GAAoB,+BAAbA,EAAImrE,KAAuC,CACpD,IAAIthE,EAASzK,EAASklR,GAWtB,OARe,OAAXz6Q,IACFzK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxBz6Q,EAAO7J,SAGTZ,EAASmlR,GAAUvkR,EAEpB,CAED,IAAI4J,EAAUxK,EAASilR,GAEP,OAAZz6Q,IACFxK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,OAAiBp6Q,GAAW,KAGtCpL,EAASolR,IAAU,CACpB,IACDp0K,EAAOs5B,GAAG,WAAYo7I,EAAW95Q,KAAK,KAAM5L,IACrCA,CACR,sCC1MD,SAASsD,EAAQC,EAAQC,GAAkB,IAAIC,EAAOR,OAAOQ,KAAKF,GAAS,GAAIN,OAAOS,sBAAuB,CAAE,IAAIC,EAAUV,OAAOS,sBAAsBH,GAAaC,IAAgBG,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOZ,OAAOa,yBAAyBP,EAAQM,GAAKV,UAAa,KAAGM,EAAKhD,KAAKsD,MAAMN,EAAME,EAAW,CAAC,OAAOF,CAAO,CAIrV,SAASX,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAIjN,SAASi/N,EAAkB/9N,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAI7T,IACItzF,EADWwsC,EAAQ,OACDxsC,OAGlBi6B,EADYuS,EAAQ,OACAvS,QAEpB2gB,EAAS3gB,GAAWA,EAAQ2gB,QAAU,UAM1CrkB,EAAOx3B,QAEP,WACE,SAASguI,KArBX,SAAyB5vQ,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAsBrJk/N,CAAgBj+N,KAAM25Q,GAEtB35Q,KAAK2iP,KAAO,KACZ3iP,KAAK4iP,KAAO,KACZ5iP,KAAKpB,OAAS,CACf,CAvBH,IAAsBq6N,EAAamK,EAAYC,EAoM7C,OApMoBpK,EAyBP0gD,EAzBoBv2C,EAyBR,CAAC,CACxBniO,IAAK,OACLtC,MAAO,SAAcmW,GACnB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAM,MAEJwB,KAAKpB,OAAS,EAAGoB,KAAK4iP,KAAKpkP,KAAOk6D,EAAW14D,KAAK2iP,KAAOjqL,EAC7D14D,KAAK4iP,KAAOlqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,UACLtC,MAAO,SAAiBmW,GACtB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAMwB,KAAK2iP,MAEO,IAAhB3iP,KAAKpB,SAAcoB,KAAK4iP,KAAOlqL,GACnC14D,KAAK2iP,KAAOjqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,QACLtC,MAAO,WACL,GAAoB,IAAhBqB,KAAKpB,OAAT,CACA,IAAIoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAGpB,OAFoB,IAAhBxe,KAAKpB,OAAcoB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KAAU5iP,KAAK2iP,KAAO3iP,KAAK2iP,KAAKnkP,OAC7EwB,KAAKpB,OACAoqN,CAJsB,CAK9B,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACLqB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KACxB5iP,KAAKpB,OAAS,CACf,GACA,CACDqC,IAAK,OACLtC,MAAO,SAAc0U,GACnB,GAAoB,IAAhBrT,KAAKpB,OAAc,MAAO,GAI9B,IAHA,IAAI4c,EAAIxb,KAAK2iP,KACT35B,EAAM,GAAKxtM,EAAEgD,KAEVhD,EAAIA,EAAEhd,MACXwqN,GAAO31M,EAAImI,EAAEgD,KAGf,OAAOwqM,CACR,GACA,CACD/nN,IAAK,SACLtC,MAAO,SAAgB+R,GACrB,GAAoB,IAAhB1Q,KAAKpB,OAAc,OAAOguI,EAAOivD,MAAM,GAK3C,IAJA,IArEcz8L,EAAK8C,EAAQvC,EAqEvBqpN,EAAMp8E,EAAOigI,YAAYn8P,IAAM,GAC/B8K,EAAIxb,KAAK2iP,KACT/kP,EAAI,EAED4d,GAzEOpc,EA0EDoc,EAAEgD,KA1EItc,EA0EE8mN,EA1EMrpN,EA0ED/B,EAzE9BgvI,EAAO1iI,UAAU4R,KAAKvd,KAAKa,EAAK8C,EAAQvC,GA0ElC/B,GAAK4d,EAAEgD,KAAK5f,OACZ4c,EAAIA,EAAEhd,KAGR,OAAOwqN,CACR,GAEA,CACD/nN,IAAK,UACLtC,MAAO,SAAiB+R,EAAGwzQ,GACzB,IAAIl7D,EAcJ,OAZIt4M,EAAI1Q,KAAK2iP,KAAKnkO,KAAK5f,QAErBoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAAK7O,MAAM,EAAGe,GAC9B1Q,KAAK2iP,KAAKnkO,KAAOxe,KAAK2iP,KAAKnkO,KAAK7O,MAAMe,IAGtCs4M,EAFSt4M,IAAM1Q,KAAK2iP,KAAKnkO,KAAK5f,OAExBoB,KAAKo3F,QAGL8sL,EAAalkR,KAAKmkR,WAAWzzQ,GAAK1Q,KAAKokR,WAAW1zQ,GAGnDs4M,CACR,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACL,OAAOqB,KAAK2iP,KAAKnkO,IAClB,GAEA,CACDvd,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAI8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EACJm1M,EAAMxtM,EAAEgD,KAGZ,IAFA9N,GAAKs4M,EAAIpqN,OAEF4c,EAAIA,EAAEhd,MAAM,CACjB,IAAIozK,EAAMp2J,EAAEgD,KACR6lQ,EAAK3zQ,EAAIkhK,EAAIhzK,OAASgzK,EAAIhzK,OAAS8R,EAIvC,GAHI2zQ,IAAOzyG,EAAIhzK,OAAQoqN,GAAOp3C,EAASo3C,GAAOp3C,EAAIjiK,MAAM,EAAGe,GAGjD,KAFVA,GAAK2zQ,GAEQ,CACPA,IAAOzyG,EAAIhzK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAOozJ,EAAIjiK,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAIs4M,EAAMp8E,EAAOigI,YAAYn8P,GACzB8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EAIR,IAHA2H,EAAEgD,KAAK1C,KAAKktM,GACZt4M,GAAK8K,EAAEgD,KAAK5f,OAEL4c,EAAIA,EAAEhd,MAAM,CACjB,IAAI2uK,EAAM3xJ,EAAEgD,KACR6lQ,EAAK3zQ,EAAIy8J,EAAIvuK,OAASuuK,EAAIvuK,OAAS8R,EAIvC,GAHAy8J,EAAIrxJ,KAAKktM,EAAKA,EAAIpqN,OAAS8R,EAAG,EAAG2zQ,GAGvB,KAFV3zQ,GAAK2zQ,GAEQ,CACPA,IAAOl3G,EAAIvuK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAO2uJ,EAAIx9J,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAKumL,EACL7oL,MAAO,SAAe8sJ,EAAG3rJ,GACvB,OAAO+mK,EAAQ7mK,KAnMrB,SAAuBkC,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAAyB,MAAhBD,UAAUvE,GAAauE,UAAUvE,GAAK,CAAC,EAAOA,EAAI,EAAK2D,EAAQL,OAAOkB,IAAS,GAAMC,SAAQ,SAAUpB,GAAOF,EAAgBmB,EAAQjB,EAAKmB,EAAOnB,GAAQ,IAAcC,OAAOoB,0BAA6BpB,OAAOqB,iBAAiBL,EAAQhB,OAAOoB,0BAA0BF,IAAmBb,EAAQL,OAAOkB,IAASC,SAAQ,SAAUpB,GAAOC,OAAOC,eAAee,EAAQjB,EAAKC,OAAOa,yBAAyBK,EAAQnB,GAAQ,GAAM,CAAC,OAAOiB,CAAS,CAmM3fwhO,CAAc,CAAC,EAAG5jO,EAAS,CAE9CsjB,MAAO,EAEPg+M,eAAe,IAElB,IAjM6DgC,GAAYnD,EAAkBhH,EAAY/uN,UAAWk5N,GAAiBC,GAAapD,EAAkBhH,EAAaoK,GAoM3Ks2C,CACR,CArLD,qDC2BA,SAAS2K,EAAoBn7Q,EAAMtK,GACjC0lR,EAAYp7Q,EAAMtK,GAClB2lR,EAAYr7Q,EACb,CAED,SAASq7Q,EAAYr7Q,GACfA,EAAKyvQ,iBAAmBzvQ,EAAKyvQ,eAAemC,WAC5C5xQ,EAAK6vQ,iBAAmB7vQ,EAAK6vQ,eAAe+B,WAChD5xQ,EAAKmrI,KAAK,QACX,CAqBD,SAASiwI,EAAYp7Q,EAAMtK,GACzBsK,EAAKmrI,KAAK,QAASz1I,EACpB,CAaDskK,EAAOx3B,QAAU,CACfprI,QAnGF,SAAiB1B,EAAKwsC,GACpB,IAAI0pD,EAAQ/0F,KAERykR,EAAoBzkR,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAeC,UAC/DyL,EAAoB1kR,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeK,UAEnE,OAAIwL,GAAqBC,GACnBr5O,EACFA,EAAGxsC,GACMA,IACJmB,KAAK44Q,eAEE54Q,KAAK44Q,eAAewI,eAC9BphR,KAAK44Q,eAAewI,cAAe,EACnC3xI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAHpC4wI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAOjCmB,OAKLA,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,GAI9Bj5Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,GAGlCj5Q,KAAKq7Q,SAASx8Q,GAAO,MAAM,SAAUA,IAC9BwsC,GAAMxsC,EACJk2F,EAAM6jL,eAEC7jL,EAAM6jL,eAAewI,aAI/B3xI,EAAQyuE,SAASsmE,EAAazvL,IAH9BA,EAAM6jL,eAAewI,cAAe,EACpC3xI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,IAH7C4wI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,GAOtCwsC,GACTokG,EAAQyuE,SAASsmE,EAAazvL,GAC9B1pD,EAAGxsC,IAEH4wI,EAAQyuE,SAASsmE,EAAazvL,EAEjC,IAEM/0F,KACR,EAiDCk8Q,UApCF,WACMl8Q,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,EAChCj5Q,KAAKg5Q,eAAeyB,SAAU,EAC9Bz6Q,KAAKg5Q,eAAeH,OAAQ,EAC5B74Q,KAAKg5Q,eAAewB,YAAa,GAG/Bx6Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,EAChCj5Q,KAAK44Q,eAAeC,OAAQ,EAC5B74Q,KAAK44Q,eAAe8H,QAAS,EAC7B1gR,KAAK44Q,eAAe6H,aAAc,EAClCzgR,KAAK44Q,eAAe+I,aAAc,EAClC3hR,KAAK44Q,eAAesE,UAAW,EAC/Bl9Q,KAAK44Q,eAAewI,cAAe,EAEtC,EAoBCnH,eAdF,SAAwBhrK,EAAQpwG,GAM9B,IAAIyjR,EAASrzK,EAAO+pK,eAChBiE,EAAShuK,EAAO2pK,eAChB0J,GAAUA,EAAOtH,aAAeiC,GAAUA,EAAOjC,YAAa/rK,EAAO1uG,QAAQ1B,GAAUowG,EAAOqlC,KAAK,QAASz1I,EACjH,uCC9FD,IAAI8lR,EAA6BvrG,EAAAA,OAAAA,EAAAA,2BAgBjC,SAASwE,IAAS,CAmFlBza,EAAOx3B,QA7EP,SAASi5I,EAAI31K,EAAQ0uE,EAAMt2J,GACzB,GAAoB,oBAATs2J,EAAqB,OAAOinG,EAAI31K,EAAQ,KAAM0uE,GACpDA,IAAMA,EAAO,CAAC,GACnBt2J,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAIziC,EAAOn0N,UAAUvD,OAAQwK,EAAO,IAAIvL,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAC/Eh0N,EAAKg0N,GAAQj7N,UAAUi7N,GAGzB/1M,EAASrlB,MAAMhC,KAAMoJ,EAPH,CAQnB,CACF,CAWY8tJ,CAAK7vI,GAAYu2J,GAC5B,IAAIihC,EAAWlhC,EAAKkhC,WAA8B,IAAlBlhC,EAAKkhC,UAAsB5vG,EAAO4vG,SAC9Dv9M,EAAWq8K,EAAKr8K,WAA8B,IAAlBq8K,EAAKr8K,UAAsB2tG,EAAO3tG,SAE9DujR,EAAiB,WACd51K,EAAO3tG,UAAUw8Q,GACvB,EAEGgH,EAAgB71K,EAAO2pK,gBAAkB3pK,EAAO2pK,eAAesE,SAE/DY,EAAW,WACbx8Q,GAAW,EACXwjR,GAAgB,EACXjmE,GAAUx3L,EAAS9oB,KAAK0wG,EAC9B,EAEG81K,EAAgB91K,EAAO+pK,gBAAkB/pK,EAAO+pK,eAAewB,WAE/D7B,EAAQ,WACV95D,GAAW,EACXkmE,GAAgB,EACXzjR,GAAU+lB,EAAS9oB,KAAK0wG,EAC9B,EAEGikB,EAAU,SAAiBr0H,GAC7BwoB,EAAS9oB,KAAK0wG,EAAQpwG,EACvB,EAEGg/Q,EAAU,WACZ,IAAIh/Q,EAEJ,OAAIggN,IAAakmE,GACV91K,EAAO+pK,gBAAmB/pK,EAAO+pK,eAAeH,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,IAG3ByC,IAAawjR,GACV71K,EAAO2pK,gBAAmB3pK,EAAO2pK,eAAeC,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,SAF/B,CAID,EAEGmmR,EAAY,WACd/1K,EAAOhB,IAAIs6B,GAAG,SAAUu1I,EACzB,EAgBD,OAnEF,SAAmB7uK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAmDK4zC,CAAUj2K,GAIH3tG,IAAa2tG,EAAO2pK,iBAE7B3pK,EAAOs5B,GAAG,MAAOs8I,GACjB51K,EAAOs5B,GAAG,QAASs8I,KANnB51K,EAAOs5B,GAAG,WAAYu1I,GACtB7uK,EAAOs5B,GAAG,QAASs1I,GACf5uK,EAAOhB,IAAK+2K,IAAiB/1K,EAAOs5B,GAAG,UAAWy8I,IAOxD/1K,EAAOs5B,GAAG,MAAOowI,GACjB1pK,EAAOs5B,GAAG,SAAUu1I,IACD,IAAfngG,EAAK50K,OAAiBkmG,EAAOs5B,GAAG,QAASrV,GAC7CjkB,EAAOs5B,GAAG,QAASs1I,GACZ,WACL5uK,EAAOinD,eAAe,WAAY4nH,GAClC7uK,EAAOinD,eAAe,QAAS2nH,GAC/B5uK,EAAOinD,eAAe,UAAW8uH,GAC7B/1K,EAAOhB,KAAKgB,EAAOhB,IAAIioD,eAAe,SAAU4nH,GACpD7uK,EAAOinD,eAAe,MAAO2uH,GAC7B51K,EAAOinD,eAAe,QAAS2uH,GAC/B51K,EAAOinD,eAAe,SAAU4nH,GAChC7uK,EAAOinD,eAAe,MAAOyiH,GAC7B1pK,EAAOinD,eAAe,QAAShjC,GAC/BjkB,EAAOinD,eAAe,QAAS2nH,EAChC,CACF,qBCrGD16G,EAAOx3B,QAAU,WACf,MAAM,IAAIh6H,MAAM,gDACjB,sCCED,IAAIizQ,EAWJ,IAAI9oD,EAAiB1iD,EAAAA,OAAAA,EACjBgjD,EAAmBN,EAAeM,iBAClC+jD,EAAuBrkD,EAAeqkD,qBAE1C,SAASviG,EAAK/+K,GAEZ,GAAIA,EAAK,MAAMA,CAChB,CAMD,SAASsmR,EAAUl2K,EAAQwrK,EAASoG,EAASx5P,GAC3CA,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACDA,IACJA,GAAS,EACT1xO,EAASrlB,WAAM,EAAQG,WACxB,CACF,CAgBY+0J,CAAK7vI,GAChB,IAAI+9P,GAAS,EACbn2K,EAAOs5B,GAAG,SAAS,WACjB68I,GAAS,CACV,SACW/7Q,IAARu7Q,IAAmBA,EAAMxrG,EAAQ,QACrCwrG,EAAI31K,EAAQ,CACV4vG,SAAU47D,EACVn5Q,SAAUu/Q,IACT,SAAUhiR,GACX,GAAIA,EAAK,OAAOwoB,EAASxoB,GACzBumR,GAAS,EACT/9P,GACD,IACD,IAAI4xP,GAAY,EAChB,OAAO,SAAUp6Q,GACf,IAAIumR,IACAnM,EAGJ,OAFAA,GAAY,EAvBhB,SAAmBhqK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAuBO4zC,CAAUj2K,GAAgBA,EAAOqiI,QACP,oBAAnBriI,EAAO1uG,QAA+B0uG,EAAO1uG,eACxD8mB,EAASxoB,GAAO,IAAIshR,EAAqB,QAC1C,CACF,CAED,SAAS5hR,EAAK2K,GACZA,GACD,CAED,SAASowO,EAAKj6N,EAAM7f,GAClB,OAAO6f,EAAKi6N,KAAK95O,EAClB,CAED,SAAS6lR,EAAY1mE,GACnB,OAAKA,EAAQ//M,OAC8B,oBAAhC+/M,EAAQA,EAAQ//M,OAAS,GAA0Bg/K,EACvD+gC,EAAQvxI,MAFawwG,CAG7B,CA6BDza,EAAOx3B,QA3BP,WACE,IAAK,IAAI2qF,EAAOn0N,UAAUvD,OAAQ+/M,EAAU,IAAI9gN,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAClFze,EAAQye,GAAQj7N,UAAUi7N,GAG5B,IAOIr0N,EAPAse,EAAWg+P,EAAY1mE,GAG3B,GAFI9gN,MAAMC,QAAQ6gN,EAAQ,MAAKA,EAAUA,EAAQ,IAE7CA,EAAQ//M,OAAS,EACnB,MAAM,IAAIw9N,EAAiB,WAI7B,IAAIkpD,EAAW3mE,EAAQ/4M,KAAI,SAAUqpG,EAAQrxG,GAC3C,IAAI68Q,EAAU78Q,EAAI+gN,EAAQ//M,OAAS,EAEnC,OAAOumR,EAAUl2K,EAAQwrK,EADX78Q,EAAI,GACyB,SAAUiB,GAC9CkK,IAAOA,EAAQlK,GAChBA,GAAKymR,EAASjjR,QAAQ9D,GACtBk8Q,IACJ6K,EAASjjR,QAAQ9D,GACjB8oB,EAASte,GACV,GACF,IACD,OAAO41M,EAAQh8D,OAAO22F,EACvB,sCC5FD,IAAIisC,EAAwBnsG,EAAAA,OAAAA,EAAAA,sBAsB5BjW,EAAOx3B,QAAU,CACfkuI,iBAjBF,SAA0BnzN,EAAO5mD,EAAS0lR,EAAWrL,GACnD,IAAIvvE,EALN,SAA2B9qM,EAASq6Q,EAAUqL,GAC5C,OAAgC,MAAzB1lR,EAAQ+qM,cAAwB/qM,EAAQ+qM,cAAgBsvE,EAAWr6Q,EAAQ0lR,GAAa,IAChG,CAGWC,CAAkB3lR,EAASq6Q,EAAUqL,GAE/C,GAAW,MAAP56E,EAAa,CACf,IAAMhgK,SAASggK,IAAQzkM,KAAKQ,MAAMikM,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI26E,EADCpL,EAAWqL,EAAY,gBACI56E,GAGxC,OAAOzkM,KAAKQ,MAAMikM,EACnB,CAGD,OAAOlkJ,EAAMqkJ,WAAa,GAAK,KAChC,0BCtBD5nC,EAAOx3B,QAAU,EAAjBw3B,OAAAA,oCCEA,IAAI7qH,EAAS8gI,EAAQ,OACjBxsC,EAASt0F,EAAOs0F,OAGpB,SAAS+4I,EAAWvmR,EAAKkoB,GACvB,IAAK,IAAIrmB,KAAO7B,EACdkoB,EAAIrmB,GAAO7B,EAAI6B,EAElB,CASD,SAAS2kR,EAAY/8Q,EAAKg9Q,EAAkBjnR,GAC1C,OAAOguI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,CAVGguI,EAAOvtH,MAAQutH,EAAOivD,OAASjvD,EAAOigI,aAAejgI,EAAOk5I,gBAC9D3iH,EAAOx3B,QAAUrzF,GAGjBqtO,EAAUrtO,EAAQqzF,GAClBA,EAAQiB,OAASg5I,GAOnBA,EAAW17Q,UAAYhJ,OAAO2J,OAAO+hI,EAAO1iI,WAG5Cy7Q,EAAU/4I,EAAQg5I,GAElBA,EAAWvmQ,KAAO,SAAUxW,EAAKg9Q,EAAkBjnR,GACjD,GAAmB,kBAARiK,EACT,MAAM,IAAI9J,UAAU,iCAEtB,OAAO6tI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,EAEDgnR,EAAW/pF,MAAQ,SAAUr/K,EAAM43C,EAAMn0C,GACvC,GAAoB,kBAATzD,EACT,MAAM,IAAIzd,UAAU,6BAEtB,IAAIouK,EAAMvgC,EAAOpwH,GAUjB,YATanT,IAAT+qD,EACsB,kBAAbn0C,EACTktJ,EAAI/4G,KAAKA,EAAMn0C,GAEfktJ,EAAI/4G,KAAKA,GAGX+4G,EAAI/4G,KAAK,GAEJ+4G,CACR,EAEDy4G,EAAW/Y,YAAc,SAAUrwP,GACjC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAO6tI,EAAOpwH,EACf,EAEDopQ,EAAWE,gBAAkB,SAAUtpQ,GACrC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAOu5C,EAAOytO,WAAWvpQ,EAC1B,sCCvCD,IAAIowH,EAASwsC,EAAAA,OAAAA,OAGT4sG,EAAap5I,EAAOo5I,YAAc,SAAU/lQ,GAE9C,QADAA,EAAW,GAAKA,IACIA,EAAS1P,eAC3B,IAAK,MAAM,IAAK,OAAO,IAAK,QAAQ,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,OAAO,IAAK,QAAQ,IAAK,UAAU,IAAK,WAAW,IAAK,MACxI,OAAO,EACT,QACE,OAAO,EAEZ,EA0CD,SAASkpQ,EAAcx5P,GAErB,IAAIokQ,EACJ,OAFArkR,KAAKigB,SAXP,SAA2B89I,GACzB,IAAIkoH,EA/BN,SAA4BloH,GAC1B,IAAKA,EAAK,MAAO,OAEjB,IADA,IAAImoH,IAEF,OAAQnoH,GACN,IAAK,OACL,IAAK,QACH,MAAO,OACT,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,UACT,IAAK,SACL,IAAK,SACH,MAAO,SACT,IAAK,SACL,IAAK,QACL,IAAK,MACH,OAAOA,EACT,QACE,GAAImoH,EAAS,OACbnoH,GAAO,GAAKA,GAAKxtJ,cACjB21Q,GAAU,EAGjB,CAKYC,CAAmBpoH,GAC9B,GAAoB,kBAATkoH,IAAsBr5I,EAAOo5I,aAAeA,IAAeA,EAAWjoH,IAAO,MAAM,IAAIpsJ,MAAM,qBAAuBosJ,GAC/H,OAAOkoH,GAAQloH,CAChB,CAOiBqoH,CAAkBnmQ,GAE1BjgB,KAAKigB,UACX,IAAK,UACHjgB,KAAK4vG,KAAOy2K,EACZrmR,KAAKq1C,IAAMixO,EACXjC,EAAK,EACL,MACF,IAAK,OACHrkR,KAAKumR,SAAWC,EAChBnC,EAAK,EACL,MACF,IAAK,SACHrkR,KAAK4vG,KAAO62K,EACZzmR,KAAKq1C,IAAMqxO,EACXrC,EAAK,EACL,MACF,QAGE,OAFArkR,KAAK0iM,MAAQikF,OACb3mR,KAAKq1C,IAAMuxO,GAGf5mR,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAWn6I,EAAOigI,YAAYwX,EACpC,CAmCD,SAAS2C,EAAcxvD,GACrB,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,IAAM,EAAa,EAAWA,GAAQ,IAAM,GAAa,EAAWA,GAAQ,IAAM,GAAa,EACpIA,GAAQ,IAAM,GAAQ,GAAK,CACnC,CA0DD,SAASgvD,EAAar5G,GACpB,IAAI3xJ,EAAIxb,KAAK8mR,UAAY9mR,KAAK6mR,SAC1BxtQ,EAtBN,SAA6BlQ,EAAMgkK,EAAK3xJ,GACtC,GAAwB,OAAV,IAAT2xJ,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,EAAG,CACvC,GAAwB,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,GACZ,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,QAGZ,CACF,CAKSI,CAAoBjnR,KAAMmtK,GAClC,YAAU9jK,IAANgQ,EAAwBA,EACxBrZ,KAAK6mR,UAAY15G,EAAIvuK,QACvBuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAGxb,KAAK6mR,UAC5B7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,aAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAG2xJ,EAAIvuK,aAClCoB,KAAK6mR,UAAY15G,EAAIvuK,QACtB,CA0BD,SAASynR,EAAUl5G,EAAKvvK,GACtB,IAAKuvK,EAAIvuK,OAAShB,GAAK,IAAM,EAAG,CAC9B,IAAIyb,EAAI8zJ,EAAI7iK,SAAS,UAAW1M,GAChC,GAAIyb,EAAG,CACL,IAAIxF,EAAIwF,EAAEw2I,WAAWx2I,EAAEza,OAAS,GAChC,GAAIiV,GAAK,OAAUA,GAAK,MAKtB,OAJA7T,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7Bya,EAAE1J,MAAM,GAAI,EAEtB,CACD,OAAO0J,CACR,CAID,OAHArZ,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7BuuK,EAAI7iK,SAAS,UAAW1M,EAAGuvK,EAAIvuK,OAAS,EAChD,CAID,SAAS0nR,EAASn5G,GAChB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,GAAIntK,KAAK6mR,SAAU,CACjB,IAAIxxO,EAAMr1C,KAAK8mR,UAAY9mR,KAAK6mR,SAChC,OAAOxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,UAAW,EAAG+qC,EACjD,CACD,OAAOh8B,CACR,CAED,SAASotQ,EAAWt5G,EAAKvvK,GACvB,IAAI8S,GAAKy8J,EAAIvuK,OAAShB,GAAK,EAC3B,OAAU,IAAN8S,EAAgBy8J,EAAI7iK,SAAS,SAAU1M,IAC3CoC,KAAK6mR,SAAW,EAAIn2Q,EACpB1Q,KAAK8mR,UAAY,EACP,IAANp2Q,EACF1Q,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAEpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAE/BuuK,EAAI7iK,SAAS,SAAU1M,EAAGuvK,EAAIvuK,OAAS8R,GAC/C,CAED,SAASg2Q,EAAUv5G,GACjB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,SAAU,EAAG,EAAItK,KAAK6mR,UACpExtQ,CACR,CAGD,SAASstQ,EAAYx5G,GACnB,OAAOA,EAAI7iK,SAAStK,KAAKigB,SAC1B,CAED,SAAS2mQ,EAAUz5G,GACjB,OAAOA,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,EAC9C,CA1NDxhC,EAAQ,EAAgB8tI,EA6BxBA,EAAcvvQ,UAAUw4L,MAAQ,SAAUv1B,GACxC,GAAmB,IAAfA,EAAIvuK,OAAc,MAAO,GAC7B,IAAIya,EACAzb,EACJ,GAAIoC,KAAK6mR,SAAU,CAEjB,QAAUx9Q,KADVgQ,EAAIrZ,KAAKumR,SAASp5G,IACG,MAAO,GAC5BvvK,EAAIoC,KAAK6mR,SACT7mR,KAAK6mR,SAAW,CACjB,MACCjpR,EAAI,EAEN,OAAIA,EAAIuvK,EAAIvuK,OAAeya,EAAIA,EAAIrZ,KAAK4vG,KAAKu9D,EAAKvvK,GAAKoC,KAAK4vG,KAAKu9D,EAAKvvK,GAC/Dyb,GAAK,EACb,EAEDogQ,EAAcvvQ,UAAUmrC,IAwGxB,SAAiB83H,GACf,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAI,SACvBA,CACR,EAzGDogQ,EAAcvvQ,UAAU0lG,KA0FxB,SAAkBu9D,EAAKvvK,GACrB,IAAImxG,EArEN,SAA6B5lG,EAAMgkK,EAAKvvK,GACtC,IAAI8wB,EAAIy+I,EAAIvuK,OAAS,EACrB,GAAI8vB,EAAI9wB,EAAG,OAAO,EAClB,IAAIymR,EAAK2C,EAAc75G,EAAIz+I,IAC3B,GAAI21P,GAAM,EAER,OADIA,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAER,OADI21P,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAIR,OAHI21P,EAAK,IACI,IAAPA,EAAUA,EAAK,EAAOl7Q,EAAK09Q,SAAWxC,EAAK,GAE1CA,EAET,OAAO,CACR,CA8Ca6C,CAAoBlnR,KAAMmtK,EAAKvvK,GAC3C,IAAKoC,KAAK6mR,SAAU,OAAO15G,EAAI7iK,SAAS,OAAQ1M,GAChDoC,KAAK8mR,UAAY/3K,EACjB,IAAI15D,EAAM83H,EAAIvuK,QAAUmwG,EAAQ/uG,KAAK6mR,UAErC,OADA15G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU,EAAG1xO,GACpB83H,EAAI7iK,SAAS,OAAQ1M,EAAGy3C,EAChC,EA9FDokO,EAAcvvQ,UAAUq8Q,SAAW,SAAUp5G,GAC3C,GAAIntK,KAAK6mR,UAAY15G,EAAIvuK,OAEvB,OADAuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG7mR,KAAK6mR,UACzD7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,WAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG15G,EAAIvuK,QAC/DoB,KAAK6mR,UAAY15G,EAAIvuK,MACtB,yBCvID,IAAIo4b,EAAgB59Q,EAAQ,OACxBtrE,EAAWsrE,EAAQ,MACnB04D,EAAS14D,EAAQ,OACjB69Q,EAAc79Q,EAAQ,OACtBn6J,EAAMm6J,EAAQ,OAEdm3K,EAAO5kN,EAEX4kN,EAAK5nN,QAAU,SAAUg1C,EAAMtyI,GAE7BsyI,EADmB,kBAATA,EACH1+J,EAAIgC,MAAM08J,GAEVm0D,EAAOn0D,GAKf,IAAIu5Q,GAAoE,IAAlD/pV,EAAAA,EAAOjiD,SAAS46I,SAASxnE,OAAO,aAAsB,QAAU,GAElFwnE,EAAWnoB,EAAKmoB,UAAYoxP,EAC5B9wP,EAAOzoB,EAAKgE,UAAYhE,EAAKyoB,KAC7BE,EAAO3oB,EAAK2oB,KACZnmI,EAAOw9G,EAAKx9G,MAAQ,IAGpBimI,IAA+B,IAAvBA,EAAKtjM,QAAQ,OACxBsjM,EAAO,IAAMA,EAAO,KAGrBzoB,EAAK1+J,KAAOmnL,EAAQN,EAAW,KAAOM,EAAQ,KAAOE,EAAO,IAAMA,EAAO,IAAMnmI,EAC/Ew9G,EAAK3kF,QAAU2kF,EAAK3kF,QAAU,OAAOt3B,cACrCi8G,EAAKxvE,QAAUwvE,EAAKxvE,SAAW,CAAC,EAIhC,IAAIF,EAAM,IAAI+oV,EAAcr5Q,GAG5B,OAFItyI,GACH4iE,EAAIs6B,GAAG,WAAYl9F,GACb4iE,CACP,EAEDsiP,EAAK/lV,IAAM,SAAcmzK,EAAMtyI,GAC9B,IAAI4iE,EAAMsiP,EAAK5nN,QAAQg1C,EAAMtyI,GAE7B,OADA4iE,EAAI54D,MACG44D,CACP,EAEDsiP,EAAKymG,cAAgBA,EACrBzmG,EAAK4mG,gBAAkBrpV,EAASqpV,gBAEhC5mG,EAAKzP,MAAQ,WAAc,EAC3ByP,EAAKzP,MAAMU,kBAAoB,EAE/B+O,EAAK83E,YAAc,IAAI93E,EAAKzP,MAE5ByP,EAAK6mG,aAAeH,EAEpB1mG,EAAK8mG,QAAU,CACd,WACA,UACA,OACA,SACA,MACA,OACA,OACA,WACA,QACA,aACA,QACA,OACA,SACA,UACA,QACA,OACA,WACA,YACA,QACA,MACA,SACA,SACA,YACA,QACA,SACA,qCC1ED,IAAIpxT,EACJ,SAASqxT,IAER,QAAYjub,IAAR48H,EAAmB,OAAOA,EAE9B,GAAI94B,EAAAA,EAAOyiI,eAAgB,CAC1B3pG,EAAM,IAAI94B,EAAAA,EAAOyiI,eAIjB,IACC3pG,EAAI44D,KAAK,MAAO1xF,EAAAA,EAAOoqV,eAAiB,IAAM,sBAG9C,CAFC,MAAMvwb,GACPi/H,EAAM,IACN,CACD,MAEAA,EAAM,KAEP,OAAOA,CACP,CAED,SAASuxT,EAAkBnwb,GAC1B,IAAI4+H,EAAMqxT,IACV,IAAKrxT,EAAK,OAAO,EACjB,IAEC,OADAA,EAAI13B,aAAelnG,EACZ4+H,EAAI13B,eAAiBlnG,CACf,CAAZ,MAAOL,GAAK,CACd,OAAO,CACP,CAeD,SAASqyO,EAAY16O,GACpB,MAAwB,oBAAVA,CACd,CAxDDgtI,EAAQn9B,MAAQ6qI,EAAWlsI,EAAAA,EAAOqB,QAAU6qI,EAAWlsI,EAAAA,EAAOsB,gBAE9Dk9B,EAAQ8rT,eAAiBp+M,EAAWlsI,EAAAA,EAAOuqV,gBAE3C/rT,EAAQgsT,gBAAkBt+M,EAAWlsI,EAAAA,EAAOyqV,iBAuC5CjsT,EAAQksT,YAAclsT,EAAQn9B,OAASgpV,EAAiB,eAIxD7rT,EAAQmsT,UAAYnsT,EAAQn9B,OAASgpV,EAAiB,aACtD7rT,EAAQosT,uBAAyBpsT,EAAQn9B,OAASgpV,EAAiB,2BAInE7rT,EAAQqsT,iBAAmBrsT,EAAQn9B,SAAU8oV,KAAWj+M,EAAWi+M,IAASU,kBAM5E/xT,EAAM,4DC1DFgyT,EAAa7+Q,EAAQ,MACrBlV,EAAWkV,EAAQ,OACnBtrE,EAAWsrE,EAAQ,MACnBnqE,EAASmqE,EAAQ,OAEjB+9Q,EAAkBrpV,EAASqpV,gBAC3Be,EAAUpqV,EAASqqV,YAgBvB,IAAInB,EAAgB7zR,EAAOx3B,QAAU,SAAUgyC,GAC9C,IAYIy6Q,EAZAjvb,EAAOnJ,KACXivG,EAAOonK,SAAS93Q,KAAK4K,GAErBA,EAAK4xK,MAAQ4C,EACbx0K,EAAKkvb,MAAQ,GACblvb,EAAKmvb,SAAW,CAAC,EACb36Q,EAAKkyD,MACR1mO,EAAK87Q,UAAU,gBAAiB,SAAWr4I,EAAOvtH,KAAKs+J,EAAKkyD,MAAMvlO,SAAS,WAC5EpJ,OAAOQ,KAAKi8K,EAAKxvE,SAAS9rG,SAAQ,SAAUiY,GAC3CnR,EAAK87Q,UAAU3qQ,EAAMqjK,EAAKxvE,QAAQ7zF,GAClC,IAGD,IAAIi+a,GAAW,EACf,GAAkB,kBAAd56Q,EAAKpxH,MAA6B,mBAAoBoxH,IAASs6Q,EAAWN,gBAE7EY,GAAW,EACXH,GAAe,OACT,GAAkB,qBAAdz6Q,EAAKpxH,KAGf6rY,GAAe,OACT,GAAkB,6BAAdz6Q,EAAKpxH,KAEf6rY,GAAgBH,EAAWD,qBACrB,IAAKr6Q,EAAKpxH,MAAsB,YAAdoxH,EAAKpxH,MAAoC,gBAAdoxH,EAAKpxH,KAIxD,MAAM,IAAI56C,MAAM,+BAFhBymb,GAAe,CAGf,CACDjvb,EAAKwnQ,MA9CN,SAAqBynL,EAAcG,GAClC,OAAIN,EAAWzpV,OAAS+pV,EAChB,QACGN,EAAWF,sBACd,0BACGE,EAAWH,SACd,YACGG,EAAWJ,aAAeO,EAC7B,cAEA,MAER,CAkCaI,CAAWJ,EAAcG,GACtCpvb,EAAKsvb,YAAc,KACnBtvb,EAAKuvb,eAAiB,KACtBvvb,EAAKwvb,aAAe,KAEpBxvb,EAAKo/H,GAAG,UAAU,WACjBp/H,EAAKyvb,WACL,GACD,EAED10R,EAAS8yR,EAAe/nV,EAAOonK,UAE/B2gL,EAAc9sb,UAAU+6Q,UAAY,SAAU3qQ,EAAM3b,GACnD,IACIk6b,EAAYv+a,EAAK/J,eAIqB,IAAtCuob,EAAch2b,QAAQ+1b,KALf74b,KAQNs4b,SAASO,GAAa,CAC1Bv+a,KAAMA,EACN3b,MAAOA,GAER,EAEDq4b,EAAc9sb,UAAUuoR,UAAY,SAAUn4Q,GAC7C,IAAIy5G,EAAS/zH,KAAKs4b,SAASh+a,EAAK/J,eAChC,OAAIwjH,EACIA,EAAOp1H,MACR,IACP,EAEDq4b,EAAc9sb,UAAUwoR,aAAe,SAAUp4Q,UACrCta,KACCs4b,SAASh+a,EAAK/J,cAC1B,EAEDymb,EAAc9sb,UAAU0ub,UAAY,WACnC,IAAIzvb,EAAOnJ,KAEX,IAAImJ,EAAK4vb,WAAT,CAEA,IAAIp7Q,EAAOx0K,EAAK4xK,MAEZ,YAAa4C,GAAyB,IAAjBA,EAAKvhC,SAC7BjzI,EAAK6kG,WAAW2vE,EAAKvhC,SAGtB,IAAIoiR,EAAar1Z,EAAKmvb,SAClB5pV,EAAO,KACS,QAAhBivE,EAAK3kF,QAAoC,SAAhB2kF,EAAK3kF,SAC3B0V,EAAO,IAAIyvB,KAAKh1H,EAAKkvb,MAAO,CACxBhxb,MAAOm3Z,EAAW,iBAAmB,CAAC,GAAG7/Z,OAAS,MAK7D,IAAIq6b,EAAc,GAalB,GAZA93b,OAAOQ,KAAK88Z,GAAYn8Z,SAAQ,SAAUwgb,GACzC,IAAIvoa,EAAOkkZ,EAAWqkB,GAASvoa,KAC3B3b,EAAQ6/Z,EAAWqkB,GAASlkb,MAC5Bd,MAAMC,QAAQa,GACjBA,EAAM0D,SAAQ,SAAUyS,GACvBkkb,EAAYt6b,KAAK,CAAC4b,EAAMxF,GACxB,IAEDkkb,EAAYt6b,KAAK,CAAC4b,EAAM3b,GAEzB,IAEkB,UAAfwK,EAAKwnQ,MAAmB,CAC3B,IAAIlhC,EAAS,KACb,GAAIwoN,EAAWN,gBAAiB,CAC/B,IAAIxsW,EAAa,IAAIysW,gBACrBnoN,EAAStkJ,EAAWskJ,OACpBtmO,EAAK8vb,sBAAwB9tW,EAEzB,mBAAoBwyF,GAAgC,IAAxBA,EAAKu7Q,iBACpC/vb,EAAKsvb,YAActrV,EAAAA,EAAOa,YAAW,WACpC7kG,EAAKmrI,KAAK,kBACNnrI,EAAK8vb,uBACR9vb,EAAK8vb,sBAAsB3nN,OAC5B,GAAE3zD,EAAKu7Q,gBAET,CAED/rV,EAAAA,EAAOqB,MAAMrlG,EAAK4xK,MAAM97J,IAAK,CAC5B+5E,OAAQ7vF,EAAK4xK,MAAM/hF,OACnBmV,QAAS6qV,EACTtqV,KAAMA,QAAQrlG,EACdkjD,KAAM,OACN8hD,YAAasvE,EAAKnwE,gBAAkB,UAAY,cAChDiiI,OAAQA,IACNxmO,MAAK,SAAU6kG,GACjB3kG,EAAKgwb,eAAiBrrV,EACtB3kG,EAAKiwb,cAAa,GAClBjwb,EAAK6zR,UACL,IAAE,SAAUtyI,GACZvhJ,EAAKiwb,cAAa,GACbjwb,EAAK4vb,YACT5vb,EAAKmrI,KAAK,QAASoW,EACpB,GACD,KAAM,CACN,IAAIzkB,EAAM98H,EAAKkwb,KAAO,IAAIlsV,EAAAA,EAAOyiI,eACjC,IACC3pG,EAAI44D,KAAK11L,EAAK4xK,MAAM/hF,OAAQ7vF,EAAK4xK,MAAM97J,KAAK,EAM5C,CALC,MAAOpgB,GAIR,YAHA4wI,EAAQyuE,UAAS,WAChB/0M,EAAKmrI,KAAK,QAASz1I,EACnB,GAED,CAGG,iBAAkBonI,IACrBA,EAAI13B,aAAeplG,EAAKwnQ,OAErB,oBAAqB1qI,IACxBA,EAAIz4B,kBAAoBmwE,EAAKnwE,iBAEX,SAAfrkG,EAAKwnQ,OAAoB,qBAAsB1qI,GAClDA,EAAI+xT,iBAAiB,sCAElB,mBAAoBr6Q,IACvB13C,EAAImW,QAAUuhC,EAAKu7Q,eACnBjzT,EAAI0qG,UAAY,WACfxnO,EAAKmrI,KAAK,iBACV,GAGF0kT,EAAY32b,SAAQ,SAAU0xH,GAC7BkS,EAAIpZ,iBAAiBkH,EAAO,GAAIA,EAAO,GACvC,IAED5qH,EAAKmwb,UAAY,KACjBrzT,EAAIoqG,mBAAqB,WACxB,OAAQpqG,EAAIqqG,YACX,KAAK4nN,EAAQqB,QACb,KAAKrB,EAAQsB,KACZrwb,EAAKswb,iBAGP,EAGkB,4BAAftwb,EAAKwnQ,QACR1qI,EAAIyzT,WAAa,WAChBvwb,EAAKswb,gBACL,GAGFxzT,EAAI/S,QAAU,WACT/pH,EAAK4vb,aAET5vb,EAAKiwb,cAAa,GAClBjwb,EAAKmrI,KAAK,QAAS,IAAI3iI,MAAM,cAC7B,EAED,IACCs0H,EAAIgV,KAAKvsC,EAMT,CALC,MAAO7vG,GAIR,YAHA4wI,EAAQyuE,UAAS,WAChB/0M,EAAKmrI,KAAK,QAASz1I,EACnB,GAED,CACD,CA7HM,CA8HP,EAgBDm4b,EAAc9sb,UAAUuvb,eAAiB,WACxC,IAAItwb,EAAOnJ,KAEXmJ,EAAKiwb,cAAa,GAZnB,SAAsBnzT,GACrB,IACC,IAAI9kE,EAAS8kE,EAAI9kE,OACjB,OAAmB,OAAXA,GAA8B,IAAXA,CAG3B,CAFC,MAAOn6D,GACR,OAAO,CACP,CACD,CAOK2yb,CAAYxwb,EAAKkwb,QAASlwb,EAAK4vb,aAG/B5vb,EAAKmwb,WACTnwb,EAAK6zR,WAEN7zR,EAAKmwb,UAAUG,eAAetwb,EAAKiwb,aAAavvb,KAAKV,IACrD,EAED6tb,EAAc9sb,UAAU8yR,SAAW,WAClC,IAAI7zR,EAAOnJ,KAEPmJ,EAAK4vb,aAGT5vb,EAAKmwb,UAAY,IAAInC,EAAgBhub,EAAKkwb,KAAMlwb,EAAKgwb,eAAgBhwb,EAAKwnQ,MAAOxnQ,EAAKiwb,aAAavvb,KAAKV,IACxGA,EAAKmwb,UAAU/wT,GAAG,SAAS,SAAS1pI,GACnCsK,EAAKmrI,KAAK,QAASz1I,EACnB,IAEDsK,EAAKmrI,KAAK,WAAYnrI,EAAKmwb,WAC3B,EAEDtC,EAAc9sb,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GAChDrrC,KAENq4b,MAAM35b,KAAK2oM,GAChBh8J,GACA,EAED2rZ,EAAc9sb,UAAUkvb,aAAe,SAAU36b,GAChD,IAAI0K,EAAOnJ,KAEXmtG,EAAAA,EAAO67J,aAAa7/P,EAAKwvb,cACzBxvb,EAAKwvb,aAAe,KAEhBl6b,GACH0uG,EAAAA,EAAO67J,aAAa7/P,EAAKsvb,aACzBtvb,EAAKsvb,YAAc,MACTtvb,EAAKuvb,iBACfvvb,EAAKwvb,aAAexrV,EAAAA,EAAOa,YAAW,WACrC7kG,EAAKmrI,KAAK,UACV,GAAEnrI,EAAKuvb,gBAET,EAED1B,EAAc9sb,UAAUonO,MAAQ0lN,EAAc9sb,UAAU3J,QAAU,SAAU1B,GAC3E,IAAIsK,EAAOnJ,KACXmJ,EAAK4vb,YAAa,EAClB5vb,EAAKiwb,cAAa,GACdjwb,EAAKmwb,YACRnwb,EAAKmwb,UAAUP,YAAa,GACzB5vb,EAAKkwb,KACRlwb,EAAKkwb,KAAK/nN,QACFnoO,EAAK8vb,uBACb9vb,EAAK8vb,sBAAsB3nN,QAExBzyO,GACHsK,EAAKmrI,KAAK,QAASz1I,EACpB,EAEDm4b,EAAc9sb,UAAUmrC,IAAM,SAAU72B,EAAMyB,EAAUorB,GAEnC,oBAAT7sB,IACV6sB,EAAK7sB,EACLA,OAAOnV,GAGR4lG,EAAOonK,SAASnsQ,UAAUmrC,IAAI92C,KANnByB,KAM8Bwe,EAAMyB,EAAUorB,EACzD,EAED2rZ,EAAc9sb,UAAU8jG,WAAa,SAAUouC,EAAS/wG,GACvD,IAAIliC,EAAOnJ,KAEPqrC,GACHliC,EAAK+tJ,KAAK,UAAW7rH,GAEtBliC,EAAKuvb,eAAiBt8S,EACtBjzI,EAAKiwb,cAAa,EAClB,EAEDpC,EAAc9sb,UAAU0vb,aAAe,WAAc,EACrD5C,EAAc9sb,UAAU08L,WAAa,WAAc,EACnDowP,EAAc9sb,UAAU2vb,mBAAqB,WAAc,EAG3D,IAAIf,EAAgB,CACnB,iBACA,kBACA,iCACA,gCACA,aACA,iBACA,SACA,UACA,OACA,MACA,SACA,OACA,aACA,SACA,UACA,KACA,UACA,oBACA,UACA,6DC9VGb,EAAa7+Q,EAAQ,MACrBlV,EAAWkV,EAAQ,OACnBnqE,EAASmqE,EAAQ,OAEjB8+Q,EAAUvsT,EAAQwsT,YAAc,CACnC2B,OAAQ,EACRC,OAAQ,EACRC,iBAAkB,EAClBT,QAAS,EACTC,KAAM,GAGHrC,EAAkBxrT,EAAQwrT,gBAAkB,SAAUlxT,EAAKn4B,EAAUvhD,EAAM0tY,GAC9E,IAAI9wb,EAAOnJ,KAiBX,GAhBAivG,EAAOwpK,SAASl6Q,KAAK4K,GAErBA,EAAKwnQ,MAAQpkN,EACbpjD,EAAKglG,QAAU,CAAC,EAChBhlG,EAAK+wb,WAAa,GAClB/wb,EAAKgxb,SAAW,CAAC,EACjBhxb,EAAKixb,YAAc,GAGnBjxb,EAAKo/H,GAAG,OAAO,WAEdkH,EAAQyuE,UAAS,WAChB/0M,EAAKmrI,KAAK,QACV,GACD,IAEY,UAAT/nF,EAAkB,CAYrB,GAXApjD,EAAKgwb,eAAiBrrV,EAEtB3kG,EAAK8V,IAAM6uF,EAAS7uF,IACpB9V,EAAK2+T,WAAah6N,EAAS3sC,OAC3Bh4D,EAAKwuF,cAAgBmW,EAAS2B,WAE9B3B,EAASK,QAAQ9rG,SAAQ,SAAU0xH,EAAQ9yH,GAC1CkI,EAAKglG,QAAQltG,EAAIsP,eAAiBwjH,EAClC5qH,EAAK+wb,WAAWx7b,KAAKuC,EAAK8yH,EAC1B,IAEGkkU,EAAWR,eAAgB,CAC9B,IAAIn2b,EAAW,IAAIo2b,eAAe,CACjCh1P,MAAO,SAAU2E,GAEhB,OADA4yP,GAAY,GACL,IAAIjxb,SAAQ,SAAUP,EAASC,GACjCS,EAAK4vb,WACRrwb,IACSS,EAAKzK,KAAKkuI,EAAOvtH,KAAKgoL,IAC/B5+L,IAEAU,EAAKkxb,aAAe5xb,CAErB,GACD,EACD2mG,MAAO,WACN6qV,GAAY,GACP9wb,EAAK4vb,YACT5vb,EAAKzK,KAAK,KACX,EACD4yO,MAAO,SAAUzyO,GAChBo7b,GAAY,GACP9wb,EAAK4vb,YACT5vb,EAAKmrI,KAAK,QAASz1I,EACpB,IAGF,IAMC,YALAivG,EAASY,KAAK4rV,OAAOh5b,GAAU6uG,OAAM,SAAUtxG,GAC9Co7b,GAAY,GACP9wb,EAAK4vb,YACT5vb,EAAKmrI,KAAK,QAASz1I,EACpB,GAEY,CAAZ,MAAOmI,GAAK,CACd,CAED,IAAI6nG,EAASf,EAASY,KAAKC,aAC3B,SAASQ,IACRN,EAAOM,OAAOlmG,MAAK,SAAUmrE,GACxBjrE,EAAK4vb,aAETkB,EAAY7lX,EAAO31E,MACf21E,EAAO31E,KACV0K,EAAKzK,KAAK,OAGXyK,EAAKzK,KAAKkuI,EAAOvtH,KAAK+0D,EAAOz1E,QAC7BwwG,KACA,IAAEgB,OAAM,SAAUtxG,GAClBo7b,GAAY,GACP9wb,EAAK4vb,YACT5vb,EAAKmrI,KAAK,QAASz1I,EACpB,GACD,CACDswG,EACA,KAAM,CA2BN,GA1BAhmG,EAAKkwb,KAAOpzT,EACZ98H,EAAKoxb,KAAO,EAEZpxb,EAAK8V,IAAMgnH,EAAIsqG,YACfpnO,EAAK2+T,WAAa7hM,EAAI9kE,OACtBh4D,EAAKwuF,cAAgBsuC,EAAIx2B,WACXw2B,EAAIiqG,wBAAwBvuK,MAAM,SACxCt/D,SAAQ,SAAU0xH,GACzB,IAAIhb,EAAUgb,EAAOrxH,MAAM,oBAC3B,GAAIq2G,EAAS,CACZ,IAAI93G,EAAM83G,EAAQ,GAAGxoG,cACT,eAARtP,QACuBoI,IAAtBF,EAAKglG,QAAQltG,KAChBkI,EAAKglG,QAAQltG,GAAO,IAErBkI,EAAKglG,QAAQltG,GAAKvC,KAAKq6G,EAAQ,UACC1vG,IAAtBF,EAAKglG,QAAQltG,GACvBkI,EAAKglG,QAAQltG,IAAQ,KAAO83G,EAAQ,GAEpC5vG,EAAKglG,QAAQltG,GAAO83G,EAAQ,GAE7B5vG,EAAK+wb,WAAWx7b,KAAKq6G,EAAQ,GAAIA,EAAQ,GACzC,CACD,IAED5vG,EAAKqxb,SAAW,kBACXvC,EAAWD,iBAAkB,CACjC,IAAI1pV,EAAWnlG,EAAK+wb,WAAW,aAC/B,GAAI5rV,EAAU,CACb,IAAImsV,EAAensV,EAAS5rG,MAAM,2BAC9B+3b,IACHtxb,EAAKqxb,SAAWC,EAAa,GAAGlqb,cAEjC,CACIpH,EAAKqxb,WACTrxb,EAAKqxb,SAAW,QACjB,CACD,CACD,EAEDt2R,EAASizR,EAAiBloV,EAAOwpK,UAEjC0+K,EAAgBjtb,UAAUkxQ,MAAQ,WACjC,IAEI3yQ,EAFOzI,KAEQq6b,aACf5xb,IAHOzI,KAILq6b,aAAe,KACpB5xb,IAED,EAED0ub,EAAgBjtb,UAAUuvb,eAAiB,SAAUQ,GACpD,IAAI9wb,EAAOnJ,KAEPimI,EAAM98H,EAAKkwb,KAEXvrV,EAAW,KACf,OAAQ3kG,EAAKwnQ,OACZ,IAAK,OAEJ,IADA7iK,EAAWm4B,EAAIkqG,cACFvxO,OAASuK,EAAKoxb,KAAM,CAChC,IAAIG,EAAU5sV,EAAS6mE,OAAOxrK,EAAKoxb,MACnC,GAAsB,mBAAlBpxb,EAAKqxb,SAA+B,CAEvC,IADA,IAAIliZ,EAASs0F,EAAOivD,MAAM6+P,EAAQ97b,QACzBhB,EAAI,EAAGA,EAAI88b,EAAQ97b,OAAQhB,IACnC06C,EAAO16C,GAA6B,IAAxB88b,EAAQ7qS,WAAWjyJ,GAEhCuL,EAAKzK,KAAK45C,EACV,MACAnvC,EAAKzK,KAAKg8b,EAASvxb,EAAKqxb,UAEzBrxb,EAAKoxb,KAAOzsV,EAASlvG,MACrB,CACD,MACD,IAAK,cACJ,GAAIqnI,EAAIqqG,aAAe4nN,EAAQsB,OAASvzT,EAAIn4B,SAC3C,MACDA,EAAWm4B,EAAIn4B,SACf3kG,EAAKzK,KAAKkuI,EAAOvtH,KAAK,IAAI7N,WAAWs8F,KACrC,MACD,IAAK,0BAEJ,GADAA,EAAWm4B,EAAIn4B,SACXm4B,EAAIqqG,aAAe4nN,EAAQqB,UAAYzrV,EAC1C,MACD3kG,EAAKzK,KAAKkuI,EAAOvtH,KAAK,IAAI7N,WAAWs8F,KACrC,MACD,IAAK,YAEJ,GADAA,EAAWm4B,EAAIn4B,SACXm4B,EAAIqqG,aAAe4nN,EAAQqB,QAC9B,MACD,IAAI1qV,EAAS,IAAI1B,EAAAA,EAAOwtV,eACxB9rV,EAAO6qV,WAAa,WACf7qV,EAAOz6B,OAAOi7B,WAAalmG,EAAKoxb,OACnCpxb,EAAKzK,KAAKkuI,EAAOvtH,KAAK,IAAI7N,WAAWq9F,EAAOz6B,OAAOzkE,MAAMxG,EAAKoxb,SAC9Dpxb,EAAKoxb,KAAO1rV,EAAOz6B,OAAOi7B,WAE3B,EACDR,EAAOokB,OAAS,WACfgnU,GAAY,GACZ9wb,EAAKzK,KAAK,KACV,EAEDmwG,EAAO+rV,kBAAkB9sV,GAKvB3kG,EAAKkwb,KAAK/oN,aAAe4nN,EAAQsB,MAAuB,cAAfrwb,EAAKwnQ,QACjDspL,GAAY,GACZ9wb,EAAKzK,KAAK,MAEX,kCC9MD,IAAIq9N,EAAQ,CAAC,EAEb,SAAS4H,EAAgB35J,EAAMqtB,EAASmsE,GACjCA,IACHA,EAAO7xJ,OAWT,IAAIiyN,EAEJ,SAAUC,GAnBZ,IAAwBP,EAAUC,EAsB9B,SAASK,EAAUE,EAAMC,EAAMC,GAC7B,OAAOH,EAAMtlO,KAAKyB,KAdtB,SAAoB8jO,EAAMC,EAAMC,GAC9B,MAAuB,kBAAZ3sI,EACFA,EAEAA,EAAQysI,EAAMC,EAAMC,EAE9B,CAQ2BC,CAAWH,EAAMC,EAAMC,KAAUhkO,IAC1D,CAED,OA1B8BujO,EAoBJM,GApBNP,EAoBLM,GApBsC15N,UAAYhJ,OAAO2J,OAAO04N,EAAWr5N,WAAYo5N,EAASp5N,UAAUU,YAAc04N,EAAUA,EAAStxN,UAAYuxN,EA0B/JK,CACR,CARD,CAQEpgE,GAEFogE,EAAU15N,UAAUoQ,KAAOkpJ,EAAKlpJ,KAChCspN,EAAU15N,UAAU8/D,KAAOA,EAC3B+xJ,EAAM/xJ,GAAQ45J,CACf,CAGD,SAASvyC,EAAM3kC,EAAUw3E,GACvB,GAAIrmO,MAAMC,QAAQ4uJ,GAAW,CAC3B,IAAIpkI,EAAMokI,EAAS9tJ,OAKnB,OAJA8tJ,EAAWA,EAAS9mJ,KAAI,SAAUhI,GAChC,OAAO6vC,OAAO7vC,EACf,IAEG0qB,EAAM,EACD,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS/8I,MAAM,EAAG2Y,EAAM,GAAGu5C,KAAK,MAAO,SAAW6qF,EAASpkI,EAAM,GAC3F,IAARA,EACF,UAAUy0H,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAAI,QAAQ3P,OAAO2P,EAAS,IAEzE,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAO2P,EAAS,GAEnD,CACC,MAAO,MAAM3P,OAAOmnF,EAAO,KAAKnnF,OAAOtvG,OAAOi/G,GAEjD,CA6BDi3E,EAAgB,yBAAyB,SAAUrpN,EAAM3b,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B2b,EAAO,GACrE,GAAEvb,WACH4kO,EAAgB,wBAAwB,SAAUrpN,EAAMoyI,EAAUquE,GAEhE,IAAIoJ,EA/BmB7lG,EAAQl3H,EAwC3BqnI,EAEJ,GATwB,kBAAbie,IAjCYpuB,EAiCkC,OAAVouB,EAhCpCioB,QAAQvtK,GAAOA,EAAM,EAAI,GAAKA,EAAKk3H,EAAO1/H,UAAY0/H,IAiC/D6lG,EAAa,cACbz3E,EAAWA,EAAS/pF,QAAQ,QAAS,KAErCwhK,EAAa,UAhCjB,SAAkBvyD,EAAKtzC,EAAQoiG,GAK7B,YAJiBr3N,IAAbq3N,GAA0BA,EAAW9uD,EAAIhzK,UAC3C8hO,EAAW9uD,EAAIhzK,QAGVgzK,EAAI14D,UAAUwnH,EAAWpiG,EAAO1/H,OAAQ8hO,KAAcpiG,CAC9D,CA+BKmiG,CAASnmN,EAAM,aAEjBm0H,EAAM,OAAOsO,OAAOziI,EAAM,KAAKyiI,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,aACzE,CACL,IAAIrlJ,EAhCR,SAAkBuqK,EAAKtzC,EAAQn2F,GAK7B,MAJqB,kBAAVA,IACTA,EAAQ,KAGNA,EAAQm2F,EAAO1/H,OAASgzK,EAAIhzK,UAGS,IAAhCgzK,EAAI9uK,QAAQw7H,EAAQn2F,EAE9B,CAsBc60G,CAAS1iI,EAAM,KAAO,WAAa,WAC9Cm0H,EAAM,QAASsO,OAAOziI,EAAM,MAAOyiI,OAAO11I,EAAM,KAAK01I,OAAOonF,EAAY,KAAKpnF,OAAOs0C,EAAM3kC,EAAU,QACrG,CAGD,OADAje,GAAO,mBAAmBsO,cAAcg+E,EAEzC,GAAEh8N,WACH4kO,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAUrpN,GACtD,MAAO,OAASA,EAAO,4BACxB,IACDqpN,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAUrpN,GAChD,MAAO,eAAiBA,EAAO,+BAChC,IACDqpN,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC5kO,WACjF4kO,EAAgB,wBAAwB,SAAU96N,GAChD,MAAO,qBAAuBA,CAC/B,GAAE9J,WACH4kO,EAAgB,qCAAsC,oCACtDxgE,EAAOx3B,QAAQ,EAAQowF,oDCnGnBy8C,EAAat3Q,OAAOQ,MAAQ,SAAUV,GACxC,IAAIU,EAAO,GAEX,IAAK,IAAIT,KAAOD,EACdU,EAAKhD,KAAKuC,GAGZ,OAAOS,CACR,EAIDyhK,EAAOx3B,QAAUq7D,EAEjB,IAAIyxE,EAAWr/F,EAAQ,OAEnBi9F,EAAWj9F,EAAQ,OAEvBA,EAAQ,MAARA,CAAoB4tB,EAAQyxE,GAM1B,IAFA,IAAI/2Q,EAAO82Q,EAAWnC,EAASnsQ,WAEtB4K,EAAI,EAAGA,EAAIpT,EAAK9C,OAAQkW,IAAK,CACpC,IAAIkkF,EAASt3F,EAAKoT,GACbkyL,EAAO98L,UAAU8uF,KAASguG,EAAO98L,UAAU8uF,GAAUq9K,EAASnsQ,UAAU8uF,GAC9E,CAGH,SAASguG,EAAOlnM,GACd,KAAME,gBAAgBgnM,GAAS,OAAO,IAAIA,EAAOlnM,GACjD24Q,EAASl6Q,KAAKyB,KAAMF,GACpBu2Q,EAAS93Q,KAAKyB,KAAMF,GACpBE,KAAK04Q,eAAgB,EAEjB54Q,KACuB,IAArBA,EAAQ++M,WAAoB7+M,KAAK6+M,UAAW,IACvB,IAArB/+M,EAAQwB,WAAoBtB,KAAKsB,UAAW,IAElB,IAA1BxB,EAAQ44Q,gBACV14Q,KAAK04Q,eAAgB,EACrB14Q,KAAKk3J,KAAK,MAAOyhH,IAGtB,CA8BD,SAASA,IAEH34Q,KAAK44Q,eAAeC,OAGxBppI,EAAQyuE,SAAS46D,EAAS94Q,KAC3B,CAED,SAAS84Q,EAAQ3vQ,GACfA,EAAKksC,KACN,CAtCDn0C,OAAOC,eAAe6lM,EAAO98L,UAAW,wBAAyB,CAI/D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IAEH3pM,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAEH73Q,OAAOC,eAAe6lM,EAAO98L,UAAW,iBAAkB,CAIxD9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAeHsC,OAAOC,eAAe6lM,EAAO98L,UAAW,YAAa,CAInD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAIvC54Q,KAAKg5Q,eAAeC,WAAaj5Q,KAAK44Q,eAAeK,UAC7D,EACDxuQ,IAAK,SAAa9L,QAGY0K,IAAxBrJ,KAAKg5Q,qBAAwD3vQ,IAAxBrJ,KAAK44Q,iBAM9C54Q,KAAKg5Q,eAAeC,UAAYt6Q,EAChCqB,KAAK44Q,eAAeK,UAAYt6Q,EACjC,wCChHHwkK,EAAOx3B,QAAUu7D,EAEjB,IAAIwoE,EAAYt2F,EAAQ,MAIxB,SAAS8tB,EAAYpnM,GACnB,KAAME,gBAAgBknM,GAAc,OAAO,IAAIA,EAAYpnM,GAC3D4vQ,EAAUnxQ,KAAKyB,KAAMF,EACtB,CALDs5K,EAAQ,MAARA,CAAoB8tB,EAAawoE,GAOjCxoE,EAAYh9L,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC5DA,EAAG,KAAMg8J,EACV,0CCbGL,YAHJ7jC,EAAOx3B,QAAU8sI,EAMjBA,EAASU,cAAgBA,EAGhB//F,EAAAA,OAAAA,aAAT,IAEIggG,EAAkB,SAAyBC,EAAShyQ,GACtD,OAAOgyQ,EAAQhqQ,UAAUhI,GAAMzI,MAChC,EAMG87N,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAYvD,IAEI22D,EAFAoxM,EAAYngG,EAAQ,OAKtBjxG,EADEoxM,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,WAAmB,EAK7B,IAcIC,EACAC,EACAr6P,EAhBAs6P,EAAavgG,EAAQ,OAErBwgG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC69C,EAA4Bh+C,EAAeg+C,0BAC3CC,EAA6Bj+C,EAAei+C,2BAC5CC,EAAqCl+C,EAAek+C,mCAOxD5gG,EAAQ,MAARA,CAAoBq/F,EAAU/9C,GAE9B,IAAIu/C,EAAiBL,EAAYK,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASf,EAAcr5Q,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQs6Q,oBAG7Dp6Q,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAI9En6Q,KAAKs4C,OAAS,IAAIqhO,EAClB35Q,KAAKpB,OAAS,EACdoB,KAAKq6Q,MAAQ,KACbr6Q,KAAKs6Q,WAAa,EAClBt6Q,KAAKu6Q,QAAU,KACfv6Q,KAAK64Q,OAAQ,EACb74Q,KAAKw6Q,YAAa,EAClBx6Q,KAAKy6Q,SAAU,EAKfz6Q,KAAK06Q,MAAO,EAGZ16Q,KAAK26Q,cAAe,EACpB36Q,KAAK46Q,iBAAkB,EACvB56Q,KAAK66Q,mBAAoB,EACzB76Q,KAAK86Q,iBAAkB,EACvB96Q,KAAK87G,QAAS,EAEd97G,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAKi5Q,WAAY,EAIjBj5Q,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAElDj7Q,KAAKk7Q,WAAa,EAElBl7Q,KAAKm7Q,aAAc,EACnBn7Q,KAAKgwG,QAAU,KACfhwG,KAAKigB,SAAW,KAEZngB,EAAQmgB,WACLw5P,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpCp5K,KAAKgwG,QAAU,IAAIypK,EAAc35Q,EAAQmgB,UACzCjgB,KAAKigB,SAAWngB,EAAQmgB,SAE3B,CAED,SAASw4P,EAAS34Q,GAEhB,GADAknM,EAASA,GAAU5tB,EAAQ,SACrBp5K,gBAAgBy4Q,GAAW,OAAO,IAAIA,EAAS34Q,GAGrD,IAAIq6Q,EAAWn6Q,gBAAgBgnM,EAC/BhnM,KAAKg5Q,eAAiB,IAAIG,EAAcr5Q,EAASE,KAAMm6Q,GAEvDn6Q,KAAK6+M,UAAW,EAEZ/+M,IAC0B,oBAAjBA,EAAQqvG,OAAqBnvG,KAAKo7Q,MAAQt7Q,EAAQqvG,MAC9B,oBAApBrvG,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,UAGrEm6N,EAAOn8N,KAAKyB,KACb,CAgED,SAASs7Q,EAAiBrsK,EAAQo4F,EAAOpnL,EAAUs7P,EAAYC,GAC7DrzM,EAAM,mBAAoBk/H,GAC1B,IAMMo0E,EANF/0N,EAAQuoD,EAAO+pK,eAEnB,GAAc,OAAV3xE,EACF3gJ,EAAM+zN,SAAU,EAyOpB,SAAoBxrK,EAAQvoD,GAE1B,GADAyhB,EAAM,cACFzhB,EAAMmyN,MAAO,OAEjB,GAAInyN,EAAMspD,QAAS,CACjB,IAAIq3F,EAAQ3gJ,EAAMspD,QAAQ36D,MAEtBgyJ,GAASA,EAAMzoM,SACjB8nD,EAAMpO,OAAO55C,KAAK2oM,GAClB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OAEhD,CAED8nD,EAAMmyN,OAAQ,EAEVnyN,EAAMg0N,KAIRgB,EAAazsK,IAGbvoD,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTl0N,EAAMk0N,iBAAkB,EACxBe,EAAc1sK,IAGnB,CArQG2sK,CAAW3sK,EAAQvoD,QAKnB,GAFK80N,IAAgBC,EAmDzB,SAAsB/0N,EAAO2gJ,GAC3B,IAAIo0E,EAhQiBz6Q,EAkQFqmM,EAjQZz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAiQA,kBAAVjyE,QAAgCh+L,IAAVg+L,GAAwB3gJ,EAAMqkJ,aACtF0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAe50B,IAnQ/E,IAAuBrmM,EAsQrB,OAAOy6Q,CACR,CA3D6BI,CAAan1N,EAAO2gJ,IAE1Co0E,EACFxB,EAAehrK,EAAQwsK,QAClB,GAAI/0N,EAAMqkJ,YAAc1D,GAASA,EAAMzoM,OAAS,EAKrD,GAJqB,kBAAVyoM,GAAuB3gJ,EAAMqkJ,YAAc7pM,OAAOyJ,eAAe08L,KAAWz6D,EAAO1iI,YAC5Fm9L,EAtNR,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CAoNey0E,CAAoBz0E,IAG1Bk0E,EACE70N,EAAM8zN,WAAYP,EAAehrK,EAAQ,IAAI+qK,GAA2C+B,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,QACtH,GAAI3gJ,EAAMmyN,MACfoB,EAAehrK,EAAQ,IAAI6qK,OACtB,IAAIpzN,EAAMuyN,UACf,OAAO,EAEPvyN,EAAM+zN,SAAU,EAEZ/zN,EAAMspD,UAAY/vF,GACpBonL,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,GACxB3gJ,EAAMqkJ,YAA+B,IAAjB1D,EAAMzoM,OAAcm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,GAAY20E,EAAc/sK,EAAQvoD,IAE7Gq1N,EAAS9sK,EAAQvoD,EAAO2gJ,GAAO,EAElC,MACSk0E,IACV70N,EAAM+zN,SAAU,EAChBuB,EAAc/sK,EAAQvoD,IAO1B,OAAQA,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAkC,IAAjBnkJ,EAAM9nD,OACrE,CAED,SAASm9Q,EAAS9sK,EAAQvoD,EAAO2gJ,EAAOk0E,GAClC70N,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAiB8nD,EAAMg0N,MAChDh0N,EAAMw0N,WAAa,EACnBjsK,EAAOqlC,KAAK,OAAQ+yD,KAGpB3gJ,EAAM9nD,QAAU8nD,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACzC28Q,EAAY70N,EAAMpO,OAAO+P,QAAQg/I,GAAY3gJ,EAAMpO,OAAO55C,KAAK2oM,GAC/D3gJ,EAAMi0N,cAAce,EAAazsK,IAGvC+sK,EAAc/sK,EAAQvoD,EACvB,CAxHDxlD,OAAOC,eAAes3Q,EAASvuQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAKg5Q,gBAIFh5Q,KAAKg5Q,eAAeC,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAKg5Q,iBAMVh5Q,KAAKg5Q,eAAeC,UAAYt6Q,EACjC,IAEH85Q,EAASvuQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzCk4Q,EAASvuQ,UAAU+xQ,WAAarC,EAAYsC,UAE5CzD,EAASvuQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,EAMD45Q,EAASvuQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GACzC,IACIu7P,EADA90N,EAAQ1mD,KAAKg5Q,eAkBjB,OAfKtyN,EAAMqkJ,WAYTywE,GAAiB,EAXI,kBAAVn0E,KACTpnL,EAAWA,GAAYymC,EAAMu0N,mBAEZv0N,EAAMzmC,WACrBonL,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,GAC3BA,EAAW,IAGbu7P,GAAiB,GAMdF,EAAiBt7Q,KAAMqnM,EAAOpnL,GAAU,EAAOu7P,EACvD,EAGD/C,EAASvuQ,UAAUm+C,QAAU,SAAUg/I,GACrC,OAAOi0E,EAAiBt7Q,KAAMqnM,EAAO,MAAM,GAAM,EAClD,EAwEDoxE,EAASvuQ,UAAUiyQ,SAAW,WAC5B,OAAuC,IAAhCn8Q,KAAKg5Q,eAAeuB,OAC5B,EAGD9B,EAASvuQ,UAAUkyQ,YAAc,SAAUr+G,GACpC07G,IAAeA,EAAgBrgG,EAAAA,OAAAA,GACpC,IAAIppE,EAAU,IAAIypK,EAAc17G,GAChC/9J,KAAKg5Q,eAAehpK,QAAUA,EAE9BhwG,KAAKg5Q,eAAe/4P,SAAWjgB,KAAKg5Q,eAAehpK,QAAQ/vF,SAK3D,IAHA,IAAIzE,EAAIxb,KAAKg5Q,eAAe1gO,OAAOqqM,KAC/B31H,EAAU,GAED,OAANxxG,GACLwxG,GAAWhd,EAAQ0yF,MAAMlnL,EAAEgD,MAC3BhD,EAAIA,EAAEhd,KAOR,OAJAwB,KAAKg5Q,eAAe1gO,OAAO5D,QAEX,KAAZs4E,GAAgBhtH,KAAKg5Q,eAAe1gO,OAAO55C,KAAKsuH,GACpDhtH,KAAKg5Q,eAAep6Q,OAASouH,EAAQpuH,OAC9BoB,IACR,EAGD,IAAIq8Q,EAAU,WAuBd,SAASC,EAAc5rQ,EAAGg2C,GACxB,OAAIh2C,GAAK,GAAsB,IAAjBg2C,EAAM9nD,QAAgB8nD,EAAMmyN,MAAc,EACpDnyN,EAAMqkJ,WAAmB,EAEzBr6L,IAAMA,EAEJg2C,EAAM6zN,SAAW7zN,EAAM9nD,OAAe8nD,EAAMpO,OAAOqqM,KAAKnkO,KAAK5f,OAAmB8nD,EAAM9nD,QAIxF8R,EAAIg2C,EAAMmkJ,gBAAenkJ,EAAMmkJ,cA/BrC,SAAiCn6L,GAgB/B,OAfIA,GAAK2rQ,EAEP3rQ,EAAI2rQ,GAIJ3rQ,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,CACR,CAcoD6rQ,CAAwB7rQ,IACvEA,GAAKg2C,EAAM9nD,OAAe8R,EAEzBg2C,EAAMmyN,MAKJnyN,EAAM9nD,QAJX8nD,EAAMi0N,cAAe,EACd,GAIV,CAoID,SAASe,EAAazsK,GACpB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,eAAgBzhB,EAAMi0N,aAAcj0N,EAAMk0N,iBAChDl0N,EAAMi0N,cAAe,EAEhBj0N,EAAMk0N,kBACTzyM,EAAM,eAAgBzhB,EAAM6zN,SAC5B7zN,EAAMk0N,iBAAkB,EACxBnrI,EAAQyuE,SAASy9D,EAAe1sK,GAEnC,CAED,SAAS0sK,EAAc1sK,GACrB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,gBAAiBzhB,EAAMuyN,UAAWvyN,EAAM9nD,OAAQ8nD,EAAMmyN,OAEvDnyN,EAAMuyN,YAAcvyN,EAAM9nD,SAAU8nD,EAAMmyN,QAC7C5pK,EAAOqlC,KAAK,YACZ5tF,EAAMk0N,iBAAkB,GAS1Bl0N,EAAMi0N,cAAgBj0N,EAAM6zN,UAAY7zN,EAAMmyN,OAASnyN,EAAM9nD,QAAU8nD,EAAMmkJ,cAC7E2xE,EAAKvtK,EACN,CAQD,SAAS+sK,EAAc/sK,EAAQvoD,GACxBA,EAAMy0N,cACTz0N,EAAMy0N,aAAc,EACpB1rI,EAAQyuE,SAASu+D,EAAgBxtK,EAAQvoD,GAE5C,CAED,SAAS+1N,EAAextK,EAAQvoD,GAwB9B,MAAQA,EAAM+zN,UAAY/zN,EAAMmyN,QAAUnyN,EAAM9nD,OAAS8nD,EAAMmkJ,eAAiBnkJ,EAAM6zN,SAA4B,IAAjB7zN,EAAM9nD,SAAe,CACpH,IAAI0pB,EAAMo+B,EAAM9nD,OAGhB,GAFAupE,EAAM,wBACN8mC,EAAOE,KAAK,GACR7mF,IAAQo+B,EAAM9nD,OAChB,KACH,CAED8nD,EAAMy0N,aAAc,CACrB,CA4QD,SAASuB,EAAwBvzQ,GAC/B,IAAIu9C,EAAQv9C,EAAK6vQ,eACjBtyN,EAAMm0N,kBAAoB1xQ,EAAKguJ,cAAc,YAAc,EAEvDzwG,EAAMo0N,kBAAoBp0N,EAAMo1D,OAGlCp1D,EAAM6zN,SAAU,EACPpxQ,EAAKguJ,cAAc,QAAU,GACtChuJ,EAAKwzQ,QAER,CAED,SAASC,EAAiBzzQ,GACxBg/D,EAAM,4BACNh/D,EAAKgmG,KAAK,EACX,CA2BD,SAAS0tK,EAAQ5tK,EAAQvoD,GACvByhB,EAAM,SAAUzhB,EAAM+zN,SAEjB/zN,EAAM+zN,SACTxrK,EAAOE,KAAK,GAGdzoD,EAAMo0N,iBAAkB,EACxB7rK,EAAOqlC,KAAK,UACZkoI,EAAKvtK,GACDvoD,EAAM6zN,UAAY7zN,EAAM+zN,SAASxrK,EAAOE,KAAK,EAClD,CAeD,SAASqtK,EAAKvtK,GACZ,IAAIvoD,EAAQuoD,EAAO+pK,eAGnB,IAFA7wM,EAAM,OAAQzhB,EAAM6zN,SAEb7zN,EAAM6zN,SAA6B,OAAlBtrK,EAAOE,SAGhC,CAyHD,SAAS2tK,EAASpsQ,EAAGg2C,GAEnB,OAAqB,IAAjBA,EAAM9nD,OAAqB,MAE3B8nD,EAAMqkJ,WAAYie,EAAMtiK,EAAMpO,OAAO8+C,SAAkB1mF,GAAKA,GAAKg2C,EAAM9nD,QAEtDoqN,EAAftiK,EAAMspD,QAAetpD,EAAMpO,OAAOupB,KAAK,IAAqC,IAAxBnb,EAAMpO,OAAO15C,OAAoB8nD,EAAMpO,OAAOwtK,QAAmBp/J,EAAMpO,OAAOykG,OAAOr2F,EAAM9nD,QACnJ8nD,EAAMpO,OAAO5D,SAGbs0K,EAAMtiK,EAAMpO,OAAOk2F,QAAQ99H,EAAGg2C,EAAMspD,SAE/Bg5G,GATP,IAAIA,CAUL,CAED,SAAS+zD,EAAY9tK,GACnB,IAAIvoD,EAAQuoD,EAAO+pK,eACnB7wM,EAAM,cAAezhB,EAAM8zN,YAEtB9zN,EAAM8zN,aACT9zN,EAAMmyN,OAAQ,EACdppI,EAAQyuE,SAAS8+D,EAAet2N,EAAOuoD,GAE1C,CAED,SAAS+tK,EAAct2N,EAAOuoD,GAG5B,GAFA9mC,EAAM,gBAAiBzhB,EAAM8zN,WAAY9zN,EAAM9nD,SAE1C8nD,EAAM8zN,YAA+B,IAAjB9zN,EAAM9nD,SAC7B8nD,EAAM8zN,YAAa,EACnBvrK,EAAO4vG,UAAW,EAClB5vG,EAAOqlC,KAAK,OAER5tF,EAAMs0N,aAAa,CAGrB,IAAIiC,EAAShuK,EAAO2pK,iBAEfqE,GAAUA,EAAOjC,aAAeiC,EAAOC,WAC1CjuK,EAAO1uG,SAEV,CAEJ,CAYD,SAASuC,EAAQq6Q,EAAIn6Q,GACnB,IAAK,IAAIpF,EAAI,EAAGgS,EAAIutQ,EAAGv+Q,OAAQhB,EAAIgS,EAAGhS,IACpC,GAAIu/Q,EAAGv/Q,KAAOoF,EAAG,OAAOpF,EAG1B,OAAQ,CACT,CA5tBD66Q,EAASvuQ,UAAUilG,KAAO,SAAUz+F,GAClCy3D,EAAM,OAAQz3D,GACdA,EAAI4L,SAAS5L,EAAG,IAChB,IAAIg2C,EAAQ1mD,KAAKg5Q,eACboE,EAAQ1sQ,EAKZ,GAJU,IAANA,IAASg2C,EAAMk0N,iBAAkB,GAI3B,IAANlqQ,GAAWg2C,EAAMi0N,gBAA0C,IAAxBj0N,EAAMmkJ,cAAsBnkJ,EAAM9nD,QAAU8nD,EAAMmkJ,cAAgBnkJ,EAAM9nD,OAAS,IAAM8nD,EAAMmyN,OAGlI,OAFA1wM,EAAM,qBAAsBzhB,EAAM9nD,OAAQ8nD,EAAMmyN,OAC3B,IAAjBnyN,EAAM9nD,QAAgB8nD,EAAMmyN,MAAOkE,EAAY/8Q,MAAW07Q,EAAa17Q,MACpE,KAKT,GAAU,KAFV0Q,EAAI4rQ,EAAc5rQ,EAAGg2C,KAENA,EAAMmyN,MAEnB,OADqB,IAAjBnyN,EAAM9nD,QAAcm+Q,EAAY/8Q,MAC7B,KAyBT,IA4BIgpN,EA5BAq0D,EAAS32N,EAAMi0N,aAgDnB,OA/CAxyM,EAAM,gBAAiBk1M,IAEF,IAAjB32N,EAAM9nD,QAAgB8nD,EAAM9nD,OAAS8R,EAAIg2C,EAAMmkJ,gBAEjD1iI,EAAM,6BADNk1M,GAAS,GAMP32N,EAAMmyN,OAASnyN,EAAM+zN,QAEvBtyM,EAAM,mBADNk1M,GAAS,GAEAA,IACTl1M,EAAM,WACNzhB,EAAM+zN,SAAU,EAChB/zN,EAAMg0N,MAAO,EAEQ,IAAjBh0N,EAAM9nD,SAAc8nD,EAAMi0N,cAAe,GAE7C36Q,KAAKo7Q,MAAM10N,EAAMmkJ,eAEjBnkJ,EAAMg0N,MAAO,EAGRh0N,EAAM+zN,UAAS/pQ,EAAI4rQ,EAAcc,EAAO12N,KAMnC,QAFDsiK,EAAPt4M,EAAI,EAASosQ,EAASpsQ,EAAGg2C,GAAkB,OAG7CA,EAAMi0N,aAAej0N,EAAM9nD,QAAU8nD,EAAMmkJ,cAC3Cn6L,EAAI,IAEJg2C,EAAM9nD,QAAU8R,EAChBg2C,EAAMw0N,WAAa,GAGA,IAAjBx0N,EAAM9nD,SAGH8nD,EAAMmyN,QAAOnyN,EAAMi0N,cAAe,GAEnCyC,IAAU1sQ,GAAKg2C,EAAMmyN,OAAOkE,EAAY/8Q,OAGlC,OAARgpN,GAAchpN,KAAKs0I,KAAK,OAAQ00E,GAC7BA,CACR,EAuHDyvD,EAASvuQ,UAAUkxQ,MAAQ,SAAU1qQ,GACnCupQ,EAAej6Q,KAAM,IAAI+5Q,EAA2B,WACrD,EAEDtB,EAASvuQ,UAAUovO,KAAO,SAAU9hI,EAAM8lK,GACxC,IAAIl+Q,EAAMY,KACN0mD,EAAQ1mD,KAAKg5Q,eAEjB,OAAQtyN,EAAM4zN,YACZ,KAAK,EACH5zN,EAAM2zN,MAAQ7iK,EACd,MAEF,KAAK,EACH9wD,EAAM2zN,MAAQ,CAAC3zN,EAAM2zN,MAAO7iK,GAC5B,MAEF,QACE9wD,EAAM2zN,MAAM37Q,KAAK84G,GAIrB9wD,EAAM4zN,YAAc,EACpBnyM,EAAM,wBAAyBzhB,EAAM4zN,WAAYgD,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAASjoO,MAAkBmiE,IAASi4B,EAAQ+tI,QAAUhmK,IAASi4B,EAAQ0yF,OAC7Ew2C,EAAQ8E,EAI5B,SAASC,EAAS7+D,EAAU8+D,GAC1Bx1M,EAAM,YAEF02I,IAAaz/M,GACXu+Q,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5Bz1M,EAAM,WAENqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BtmK,EAAK0+C,eAAe,QAAS6nH,GAC7BvmK,EAAK0+C,eAAe,QAAShjC,GAC7B1b,EAAK0+C,eAAe,SAAUwnH,GAC9Bt+Q,EAAI82J,eAAe,MAAOyiH,GAC1Bv5Q,EAAI82J,eAAe,MAAOunH,GAC1Br+Q,EAAI82J,eAAe,OAAQ8nH,GAC3BC,GAAY,GAMRv3N,EAAMw0N,YAAgB1jK,EAAKohK,iBAAkBphK,EAAKohK,eAAesF,WAAYH,IAhClF,CAED,SAASpF,IACPxwM,EAAM,SACNqvC,EAAKniE,KACN,CAjBGqR,EAAM8zN,WAAY/qI,EAAQyuE,SAASq/D,GAAYn+Q,EAAI83J,KAAK,MAAOqmH,GACnE/lK,EAAK+wB,GAAG,SAAUm1I,GAsBlB,IAAIK,EAwFN,SAAqB3+Q,GACnB,OAAO,WACL,IAAIsnD,EAAQtnD,EAAI45Q,eAChB7wM,EAAM,cAAezhB,EAAMw0N,YACvBx0N,EAAMw0N,YAAYx0N,EAAMw0N,aAEH,IAArBx0N,EAAMw0N,YAAoB9B,EAAgBh6Q,EAAK,UACjDsnD,EAAM6zN,SAAU,EAChBiC,EAAKp9Q,GAER,CACF,CAnGe++Q,CAAY/+Q,GAC1Bo4G,EAAK+wB,GAAG,QAASw1I,GACjB,IAAIE,GAAY,EAwBhB,SAASD,EAAO32E,GACdl/H,EAAM,UACN,IAAI6gJ,EAAMxxG,EAAKkrF,MAAM2E,GACrBl/H,EAAM,aAAc6gJ,IAER,IAARA,KAKwB,IAArBtiK,EAAM4zN,YAAoB5zN,EAAM2zN,QAAU7iK,GAAQ9wD,EAAM4zN,WAAa,IAAqC,IAAhCx3Q,EAAQ4jD,EAAM2zN,MAAO7iK,MAAkBymK,IACpH91M,EAAM,8BAA+BzhB,EAAMw0N,YAC3Cx0N,EAAMw0N,cAGR97Q,EAAIg/Q,QAEP,CAID,SAASlrJ,EAAQuoJ,GACftzM,EAAM,UAAWszM,GACjBgC,IACAjmK,EAAK0+C,eAAe,QAAShjC,GACU,IAAnCkmJ,EAAgB5hK,EAAM,UAAgByiK,EAAeziK,EAAMikK,EAChE,CAKD,SAASoC,IACPrmK,EAAK0+C,eAAe,SAAU4nH,GAC9BL,GACD,CAID,SAASK,IACP31M,EAAM,YACNqvC,EAAK0+C,eAAe,QAAS2nH,GAC7BJ,GACD,CAID,SAASA,IACPt1M,EAAM,UACN/oE,EAAIq+Q,OAAOjmK,EACZ,CAUD,OA7DAp4G,EAAImpI,GAAG,OAAQy1I,GAtkBjB,SAAyB3E,EAAS5pQ,EAAOvG,GAGvC,GAAuC,oBAA5BmwQ,EAAQgF,gBAAgC,OAAOhF,EAAQgF,gBAAgB5uQ,EAAOvG,GAKpFmwQ,EAAQiF,SAAYjF,EAAQiF,QAAQ7uQ,GAAuC5R,MAAMC,QAAQu7Q,EAAQiF,QAAQ7uQ,IAAS4pQ,EAAQiF,QAAQ7uQ,GAAO44C,QAAQn/C,GAASmwQ,EAAQiF,QAAQ7uQ,GAAS,CAACvG,EAAImwQ,EAAQiF,QAAQ7uQ,IAA5J4pQ,EAAQ9wI,GAAG94H,EAAOvG,EACpE,CA4lBCm1Q,CAAgB7mK,EAAM,QAAS0b,GAO/B1b,EAAK0/C,KAAK,QAAS2mH,GAQnBrmK,EAAK0/C,KAAK,SAAU4mH,GAQpBtmK,EAAK88B,KAAK,OAAQl1I,GAEbsnD,EAAM6zN,UACTpyM,EAAM,eACN/oE,EAAIu9Q,UAGCnlK,CACR,EAeDihK,EAASvuQ,UAAUuzQ,OAAS,SAAUjmK,GACpC,IAAI9wD,EAAQ1mD,KAAKg5Q,eACb2E,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBl3N,EAAM4zN,WAAkB,OAAOt6Q,KAEnC,GAAyB,IAArB0mD,EAAM4zN,WAER,OAAI9iK,GAAQA,IAAS9wD,EAAM2zN,QACtB7iK,IAAMA,EAAO9wD,EAAM2zN,OAExB3zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EACZ/iK,GAAMA,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IANK39Q,KAW3C,IAAKw3G,EAAM,CAET,IAAI+mK,EAAQ73N,EAAM2zN,MACd/xP,EAAMo+B,EAAM4zN,WAChB5zN,EAAM2zN,MAAQ,KACd3zN,EAAM4zN,WAAa,EACnB5zN,EAAM6zN,SAAU,EAEhB,IAAK,IAAI38Q,EAAI,EAAGA,EAAI0qB,EAAK1qB,IACvB2gR,EAAM3gR,GAAG02I,KAAK,SAAUt0I,KAAM,CAC5B49Q,YAAY,IAIhB,OAAO59Q,IACR,CAGD,IAAIuP,EAAQzM,EAAQ4jD,EAAM2zN,MAAO7iK,GACjC,OAAe,IAAXjoG,IACJm3C,EAAM2zN,MAAM7qQ,OAAOD,EAAO,GAC1Bm3C,EAAM4zN,YAAc,EACK,IAArB5zN,EAAM4zN,aAAkB5zN,EAAM2zN,MAAQ3zN,EAAM2zN,MAAM,IACtD7iK,EAAK88B,KAAK,SAAUt0I,KAAM29Q,IAJD39Q,IAM1B,EAIDy4Q,EAASvuQ,UAAUq+H,GAAK,SAAUq2D,EAAI11L,GACpC,IAAI0pG,EAAM8nH,EAAOxwN,UAAUq+H,GAAGhqI,KAAKyB,KAAM4+L,EAAI11L,GACzCw9C,EAAQ1mD,KAAKg5Q,eAuBjB,MArBW,SAAPp6E,GAGFl4I,EAAMm0N,kBAAoB76Q,KAAKm3J,cAAc,YAAc,GAErC,IAAlBzwG,EAAM6zN,SAAmBv6Q,KAAK28Q,UAClB,aAAP/9E,IACJl4I,EAAM8zN,YAAe9zN,EAAMm0N,oBAC9Bn0N,EAAMm0N,kBAAoBn0N,EAAMi0N,cAAe,EAC/Cj0N,EAAM6zN,SAAU,EAChB7zN,EAAMk0N,iBAAkB,EACxBzyM,EAAM,cAAezhB,EAAM9nD,OAAQ8nD,EAAM+zN,SAErC/zN,EAAM9nD,OACR88Q,EAAa17Q,MACH0mD,EAAM+zN,SAChBhrI,EAAQyuE,SAAS0+D,EAAkB58Q,QAKlC4yG,CACR,EAED6lK,EAASvuQ,UAAU0uJ,YAAc6/G,EAASvuQ,UAAUq+H,GAEpDkwI,EAASvuQ,UAAUgsJ,eAAiB,SAAU0oC,EAAI11L,GAChD,IAAI0pG,EAAM8nH,EAAOxwN,UAAUgsJ,eAAe33J,KAAKyB,KAAM4+L,EAAI11L,GAYzD,MAVW,aAAP01L,GAOFnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAED6lK,EAASvuQ,UAAUqvJ,mBAAqB,SAAUqlC,GAChD,IAAIhsF,EAAM8nH,EAAOxwN,UAAUqvJ,mBAAmBv3J,MAAMhC,KAAMmC,WAY1D,MAVW,aAAPy8L,QAA4Bv1L,IAAPu1L,GAOvBnvD,EAAQyuE,SAASw+D,EAAyB18Q,MAGrC4yG,CACR,EAsBD6lK,EAASvuQ,UAAUyyQ,OAAS,WAC1B,IAAIj2N,EAAQ1mD,KAAKg5Q,eAYjB,OAVKtyN,EAAM6zN,UACTpyM,EAAM,UAINzhB,EAAM6zN,SAAW7zN,EAAMm0N,kBAQ3B,SAAgB5rK,EAAQvoD,GACjBA,EAAMo0N,kBACTp0N,EAAMo0N,iBAAkB,EACxBrrI,EAAQyuE,SAAS2+D,EAAS5tK,EAAQvoD,GAErC,CAZGi2N,CAAO38Q,KAAM0mD,IAGfA,EAAMo1D,QAAS,EACR97G,IACR,EAsBDy4Q,EAASvuQ,UAAUk0Q,MAAQ,WAUzB,OATAj2M,EAAM,wBAAyBnoE,KAAKg5Q,eAAeuB,UAEf,IAAhCv6Q,KAAKg5Q,eAAeuB,UACtBpyM,EAAM,SACNnoE,KAAKg5Q,eAAeuB,SAAU,EAC9Bv6Q,KAAKs0I,KAAK,UAGZt0I,KAAKg5Q,eAAel9J,QAAS,EACtB97G,IACR,EAcDy4Q,EAASvuQ,UAAUsX,KAAO,SAAUytF,GAClC,IAAIla,EAAQ/0F,KAER0mD,EAAQ1mD,KAAKg5Q,eACbl9J,GAAS,EA0Bb,IAAK,IAAIl+G,KAzBTqxG,EAAOs5B,GAAG,OAAO,WAGf,GAFApgE,EAAM,eAEFzhB,EAAMspD,UAAYtpD,EAAMmyN,MAAO,CACjC,IAAIxxE,EAAQ3gJ,EAAMspD,QAAQ36D,MACtBgyJ,GAASA,EAAMzoM,QAAQm2F,EAAMr2F,KAAK2oM,EACvC,CAEDtyG,EAAMr2F,KAAK,KACZ,IACDuwG,EAAOs5B,GAAG,QAAQ,SAAU8+D,IAC1Bl/H,EAAM,gBACFzhB,EAAMspD,UAASq3F,EAAQ3gJ,EAAMspD,QAAQ0yF,MAAM2E,KAE3C3gJ,EAAMqkJ,YAAyB,OAAV1D,QAA4Bh+L,IAAVg+L,MAAuC3gJ,EAAMqkJ,YAAgB1D,GAAUA,EAAMzoM,UAE9Gm2F,EAAMr2F,KAAK2oM,KAGnBvrF,GAAS,EACT7M,EAAOmvK,UAEV,IAGanvK,OACI5lG,IAAZrJ,KAAKpC,IAAyC,oBAAdqxG,EAAOrxG,KACzCoC,KAAKpC,GAAK,SAAoBo7F,GAC5B,OAAO,WACL,OAAOiW,EAAOjW,GAAQh3F,MAAMitG,EAAQ9sG,UACrC,CACF,CAJS,CAIRvE,IAKN,IAAK,IAAI8S,EAAI,EAAGA,EAAIwpQ,EAAat7Q,OAAQ8R,IACvCu+F,EAAOs5B,GAAG2xI,EAAaxpQ,GAAI1Q,KAAKs0I,KAAKzqI,KAAK7J,KAAMk6Q,EAAaxpQ,KAc/D,OATA1Q,KAAKo7Q,MAAQ,SAAU1qQ,GACrBy3D,EAAM,gBAAiBz3D,GAEnBorG,IACFA,GAAS,EACT7M,EAAO0tK,SAEV,EAEM38Q,IACR,EAEqB,oBAAXhC,SACTy6Q,EAASvuQ,UAAUlM,OAAOwgR,eAAiB,WAKzC,YAJ0Cn1Q,IAAtCqwQ,IACFA,EAAoCtgG,EAAQ,QAGvCsgG,EAAkC15Q,KAC1C,GAGHkB,OAAOC,eAAes3Q,EAASvuQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAenuE,aAC5B,IAEH3pM,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAe1gO,MACnD,IAEHp3C,OAAOC,eAAes3Q,EAASvuQ,UAAW,kBAAmB,CAI3D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAeuB,OAC5B,EACD9vQ,IAAK,SAAai8C,GACZ1mD,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeuB,QAAU7zN,EAEjC,IAGH+xN,EAASgG,UAAY3B,EACrB57Q,OAAOC,eAAes3Q,EAASvuQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAKg5Q,eAAep6Q,MAC5B,IAmDmB,oBAAXZ,SACTy6Q,EAASp5P,KAAO,SAAUq/P,EAAU/gG,GAKlC,YAJat0K,IAATgW,IACFA,EAAO+5J,EAAQ,QAGV/5J,EAAKo5P,EAAUiG,EAAU/gG,EACjC,sCC3hCHxa,EAAOx3B,QAAU+jI,EAEjB,IAAI5zC,EAAiB1iD,EAAAA,OAAAA,EACjB2gG,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCC,EAAqC9iD,EAAe8iD,mCACpDC,EAA8B/iD,EAAe+iD,4BAE7C73E,EAAS5tB,EAAQ,OAIrB,SAAS0lG,EAAerD,EAAIj9P,GAC1B,IAAIugQ,EAAK/+Q,KAAKg/Q,gBACdD,EAAGE,cAAe,EAClB,IAAI5zO,EAAK0zO,EAAGG,QAEZ,GAAW,OAAP7zO,EACF,OAAOrrC,KAAKs0I,KAAK,QAAS,IAAIqqI,GAGhCI,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KACD,MAAR1gQ,GACFxe,KAAKtB,KAAK8f,GACZ6sB,EAAGowO,GACH,IAAIjrG,EAAKxwK,KAAKg5Q,eACdxoG,EAAGiqG,SAAU,GAETjqG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBACpC7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cAEjB,CAED,SAAS6kE,EAAU5vQ,GACjB,KAAME,gBAAgB0vQ,GAAY,OAAO,IAAIA,EAAU5vQ,GACvDknM,EAAOzoM,KAAKyB,KAAMF,GAClBE,KAAKg/Q,gBAAkB,CACrBF,eAAgBA,EAAej1Q,KAAK7J,MACpCo/Q,eAAe,EACfH,cAAc,EACdC,QAAS,KACTC,WAAY,KACZE,cAAe,MAGjBr/Q,KAAKg5Q,eAAe2B,cAAe,EAInC36Q,KAAKg5Q,eAAe0B,MAAO,EAEvB56Q,IAC+B,oBAAtBA,EAAQ+H,YAA0B7H,KAAKk5Q,WAAap5Q,EAAQ+H,WAC1C,oBAAlB/H,EAAQ2yQ,QAAsBzyQ,KAAKs/Q,OAASx/Q,EAAQ2yQ,QAIjEzyQ,KAAKuoI,GAAG,YAAag3I,EACtB,CAED,SAASA,IACP,IAAIxqL,EAAQ/0F,KAEe,oBAAhBA,KAAKs/Q,QAA0Bt/Q,KAAKg5Q,eAAeC,UAK5Dx6Q,EAAKuB,KAAM,KAAM,MAJjBA,KAAKs/Q,QAAO,SAAU7D,EAAIj9P,GACxB/f,EAAKs2F,EAAO0mL,EAAIj9P,EACjB,GAIJ,CAwDD,SAAS/f,EAAKwwG,EAAQwsK,EAAIj9P,GACxB,GAAIi9P,EAAI,OAAOxsK,EAAOqlC,KAAK,QAASmnI,GAMpC,GALY,MAARj9P,GACFywF,EAAOvwG,KAAK8f,GAIVywF,EAAO2pK,eAAeh6Q,OAAQ,MAAM,IAAIigR,EAC5C,GAAI5vK,EAAO+vK,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAO3vK,EAAOvwG,KAAK,KACpB,CA/HD06K,EAAQ,MAARA,CAAoBs2F,EAAW1oE,GA+D/B0oE,EAAUxlQ,UAAUxL,KAAO,SAAU2oM,EAAOpnL,GAE1C,OADAjgB,KAAKg/Q,gBAAgBI,eAAgB,EAC9Bp4E,EAAO98L,UAAUxL,KAAKH,KAAKyB,KAAMqnM,EAAOpnL,EAChD,EAYDyvP,EAAUxlQ,UAAUgvQ,WAAa,SAAU7xE,EAAOpnL,EAAUorB,GAC1DA,EAAG,IAAI0uO,EAA2B,gBACnC,EAEDrK,EAAUxlQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACtD,IAAI0zO,EAAK/+Q,KAAKg/Q,gBAKd,GAJAD,EAAGG,QAAU7zO,EACb0zO,EAAGI,WAAa93E,EAChB03E,EAAGM,cAAgBp/P,GAEd8+P,EAAGE,aAAc,CACpB,IAAIzuG,EAAKxwK,KAAKg5Q,gBACV+F,EAAGK,eAAiB5uG,EAAGmqG,cAAgBnqG,EAAG5xK,OAAS4xK,EAAGq6B,gBAAe7qM,KAAKo7Q,MAAM5qG,EAAGq6B,cACxF,CACF,EAKD6kE,EAAUxlQ,UAAUkxQ,MAAQ,SAAU1qQ,GACpC,IAAIquQ,EAAK/+Q,KAAKg/Q,gBAEQ,OAAlBD,EAAGI,YAAwBJ,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBj/Q,KAAKk5Q,WAAW6F,EAAGI,WAAYJ,EAAGM,cAAeN,EAAGD,gBAMvD,EAEDpP,EAAUxlQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC5C27J,EAAO98L,UAAUmxQ,SAAS98Q,KAAKyB,KAAMnB,GAAK,SAAU2gR,GAClDn0O,EAAGm0O,EACJ,GACF,0CCxIGx4E,YAfJ,SAASy4E,EAAc/4N,GACrB,IAAIquC,EAAQ/0F,KAEZA,KAAKxB,KAAO,KACZwB,KAAK04D,MAAQ,KAEb14D,KAAKguE,OAAS,YAimBhB,SAAwB0xM,EAASh5N,EAAO7nD,GACtC,IAAI65D,EAAQgnN,EAAQhnN,MACpBgnN,EAAQhnN,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAIrtB,EAAKqtB,EAAMrxC,SACfq/B,EAAMi5N,YACNt0O,EAAGxsC,GACH65D,EAAQA,EAAMl6D,IACf,CAGDkoD,EAAMk5N,mBAAmBphR,KAAOkhR,CACjC,CA7mBGG,CAAe9qL,EAAOruC,EACvB,CACF,CArBDy8G,EAAOx3B,QAAU0qI,EA8BjBA,EAASyJ,cAAgBA,EAGzB,IAAIC,EAAe,CACjBC,UAAW5mG,EAAQ,QAMjBshD,EAASthD,EAAQ,OAIjBxsC,EAASwsC,EAAAA,OAAAA,OAETkgG,EAAgBnsK,EAAAA,EAAO37F,YAAc,WAAc,EAUvD,IAkIIyuQ,EAlIArG,EAAcxgG,EAAQ,OAGtBygG,EADWzgG,EAAQ,OACSygG,iBAE5B/9C,EAAiB1iD,EAAAA,OAAAA,EACjB6iD,EAAuBH,EAAeG,qBACtC89C,EAA6Bj+C,EAAei+C,2BAC5C4E,EAAwB7iD,EAAe6iD,sBACvCuB,EAAyBpkD,EAAeokD,uBACxCC,EAAuBrkD,EAAeqkD,qBACtCC,EAAyBtkD,EAAeskD,uBACxCC,EAA6BvkD,EAAeukD,2BAC5CC,EAAuBxkD,EAAewkD,qBAEtCrG,EAAiBL,EAAYK,eAIjC,SAASsG,IAAQ,CAEjB,SAAST,EAAchgR,EAASmvG,EAAQkrK,GACtCnzE,EAASA,GAAU5tB,EAAQ,OAC3Bt5K,EAAUA,GAAW,CAAC,EAME,mBAAbq6Q,IAAwBA,EAAWlrK,aAAkB+3F,GAGhEhnM,KAAK+qM,aAAejrM,EAAQirM,WACxBovE,IAAUn6Q,KAAK+qM,WAAa/qM,KAAK+qM,cAAgBjrM,EAAQ0gR,oBAI7DxgR,KAAK6qM,cAAgBgvE,EAAiB75Q,KAAMF,EAAS,wBAAyBq6Q,GAE9En6Q,KAAKygR,aAAc,EAEnBzgR,KAAKk+Q,WAAY,EAEjBl+Q,KAAK0gR,QAAS,EAEd1gR,KAAK64Q,OAAQ,EAEb74Q,KAAKk9Q,UAAW,EAEhBl9Q,KAAKi5Q,WAAY,EAIjB,IAAI0H,GAAqC,IAA1B7gR,EAAQ8gR,cACvB5gR,KAAK4gR,eAAiBD,EAItB3gR,KAAKi7Q,gBAAkBn7Q,EAAQm7Q,iBAAmB,OAIlDj7Q,KAAKpB,OAAS,EAEdoB,KAAK6gR,SAAU,EAEf7gR,KAAK8gR,OAAS,EAKd9gR,KAAK06Q,MAAO,EAIZ16Q,KAAK+gR,kBAAmB,EAExB/gR,KAAKghR,QAAU,SAAUvF,IA6R3B,SAAiBxsK,EAAQwsK,GACvB,IAAI/0N,EAAQuoD,EAAO2pK,eACf8B,EAAOh0N,EAAMg0N,KACbrvO,EAAKqb,EAAMw4N,QACf,GAAkB,oBAAP7zO,EAAmB,MAAM,IAAIszO,EAExC,GAbF,SAA4Bj4N,GAC1BA,EAAMm6N,SAAU,EAChBn6N,EAAMw4N,QAAU,KAChBx4N,EAAM9nD,QAAU8nD,EAAMu6N,SACtBv6N,EAAMu6N,SAAW,CAClB,CAOCC,CAAmBx6N,GACf+0N,GArCN,SAAsBxsK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,KAC3Cqb,EAAMi5N,UAEJjF,GAGFjrI,EAAQyuE,SAAS7yK,EAAIowO,GAGrBhsI,EAAQyuE,SAASijE,EAAalyK,EAAQvoD,GACtCuoD,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,KAIvBpwO,EAAGowO,GACHxsK,EAAO2pK,eAAewI,cAAe,EACrCnH,EAAehrK,EAAQwsK,GAGvB0F,EAAYlyK,EAAQvoD,GAEvB,CAeS26N,CAAapyK,EAAQvoD,EAAOg0N,EAAMe,EAAIpwO,OAAS,CAErD,IAAI6xO,EAAWoE,EAAW56N,IAAUuoD,EAAOgqK,UAEtCiE,GAAax2N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBACjEC,EAAYvyK,EAAQvoD,GAGlBg0N,EACFjrI,EAAQyuE,SAASujE,EAAYxyK,EAAQvoD,EAAOw2N,EAAU7xO,GAEtDo2O,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,EAEvC,CACF,CAhTG21O,CAAQ/xK,EAAQwsK,EACjB,EAGDz7Q,KAAKk/Q,QAAU,KAEfl/Q,KAAKihR,SAAW,EAChBjhR,KAAKuhR,gBAAkB,KACvBvhR,KAAK0hR,oBAAsB,KAG3B1hR,KAAK2/Q,UAAY,EAGjB3/Q,KAAK2hR,aAAc,EAEnB3hR,KAAKohR,cAAe,EAEpBphR,KAAK+6Q,WAAkC,IAAtBj7Q,EAAQi7Q,UAEzB/6Q,KAAKg7Q,cAAgBl7Q,EAAQk7Q,YAE7Bh7Q,KAAK4hR,qBAAuB,EAG5B5hR,KAAK4/Q,mBAAqB,IAAIH,EAAcz/Q,KAC7C,CA2CD,SAASq2Q,EAASv2Q,GAUhB,IAAIq6Q,EAAWn6Q,gBATfgnM,EAASA,GAAU5tB,EAAQ,QAU3B,IAAK+gG,IAAa8F,EAAgB1hR,KAAK83Q,EAAUr2Q,MAAO,OAAO,IAAIq2Q,EAASv2Q,GAC5EE,KAAK44Q,eAAiB,IAAIkH,EAAchgR,EAASE,KAAMm6Q,GAEvDn6Q,KAAKsB,UAAW,EAEZxB,IAC2B,oBAAlBA,EAAQ4iM,QAAsB1iM,KAAKonM,OAAStnM,EAAQ4iM,OACjC,oBAAnB5iM,EAAQ+hR,SAAuB7hR,KAAK8hR,QAAUhiR,EAAQ+hR,QAClC,oBAApB/hR,EAAQS,UAAwBP,KAAKq7Q,SAAWv7Q,EAAQS,SACtC,oBAAlBT,EAAQkxQ,QAAsBhxQ,KAAK+wQ,OAASjxQ,EAAQkxQ,QAGjEt2C,EAAOn8N,KAAKyB,KACb,CAuJD,SAAS+hR,EAAQ9yK,EAAQvoD,EAAOm7N,EAAQv5P,EAAK++K,EAAOpnL,EAAUorB,GAC5Dqb,EAAMu6N,SAAW34P,EACjBo+B,EAAMw4N,QAAU7zO,EAChBqb,EAAMm6N,SAAU,EAChBn6N,EAAMg0N,MAAO,EACTh0N,EAAMuyN,UAAWvyN,EAAMs6N,QAAQ,IAAIb,EAAqB,UAAmB0B,EAAQ5yK,EAAO6yK,QAAQz6E,EAAO3gJ,EAAMs6N,SAAc/xK,EAAOm4F,OAAOC,EAAOpnL,EAAUymC,EAAMs6N,SACtKt6N,EAAMg0N,MAAO,CACd,CAuDD,SAAS+G,EAAWxyK,EAAQvoD,EAAOw2N,EAAU7xO,GACtC6xO,GASP,SAAsBjuK,EAAQvoD,GACP,IAAjBA,EAAM9nD,QAAgB8nD,EAAMw3N,YAC9Bx3N,EAAMw3N,WAAY,EAClBjvK,EAAOqlC,KAAK,SAEf,CAdgB0tI,CAAa/yK,EAAQvoD,GACpCA,EAAMi5N,YACNt0O,IACA81O,EAAYlyK,EAAQvoD,EACrB,CAaD,SAAS86N,EAAYvyK,EAAQvoD,GAC3BA,EAAMq6N,kBAAmB,EACzB,IAAIroN,EAAQhS,EAAM66N,gBAElB,GAAItyK,EAAO6yK,SAAWppN,GAASA,EAAMl6D,KAAM,CAEzC,IAAIoR,EAAI82C,EAAMk7N,qBACVtpO,EAAS,IAAIz6C,MAAM+R,GACnBqyQ,EAASv7N,EAAMk5N,mBACnBqC,EAAOvpN,MAAQA,EAIf,IAHA,IAAIltC,EAAQ,EACR02P,GAAa,EAEVxpN,GACLpgB,EAAO9sB,GAASktC,EACXA,EAAMypN,QAAOD,GAAa,GAC/BxpN,EAAQA,EAAMl6D,KACdgtB,GAAS,EAGX8sB,EAAO4pO,WAAaA,EACpBH,EAAQ9yK,EAAQvoD,GAAO,EAAMA,EAAM9nD,OAAQ05C,EAAQ,GAAI2pO,EAAOj0M,QAG9DtnB,EAAMi5N,YACNj5N,EAAMg7N,oBAAsB,KAExBO,EAAOzjR,MACTkoD,EAAMk5N,mBAAqBqC,EAAOzjR,KAClCyjR,EAAOzjR,KAAO,MAEdkoD,EAAMk5N,mBAAqB,IAAIH,EAAc/4N,GAG/CA,EAAMk7N,qBAAuB,CAC9B,KAAM,CAEL,KAAOlpN,GAAO,CACZ,IAAI2uI,EAAQ3uI,EAAM2uI,MACdpnL,EAAWy4C,EAAMz4C,SACjBorB,EAAKqtB,EAAMrxC,SASf,GAPA06P,EAAQ9yK,EAAQvoD,GAAO,EADbA,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACJyoM,EAAOpnL,EAAUorB,GACpDqtB,EAAQA,EAAMl6D,KACdkoD,EAAMk7N,uBAKFl7N,EAAMm6N,QACR,KAEH,CAEa,OAAVnoN,IAAgBhS,EAAMg7N,oBAAsB,KACjD,CAEDh7N,EAAM66N,gBAAkB7oN,EACxBhS,EAAMq6N,kBAAmB,CAC1B,CA0CD,SAASO,EAAW56N,GAClB,OAAOA,EAAMg6N,QAA2B,IAAjBh6N,EAAM9nD,QAA0C,OAA1B8nD,EAAM66N,kBAA6B76N,EAAMw2N,WAAax2N,EAAMm6N,OAC1G,CAED,SAASuB,EAAUnzK,EAAQvoD,GACzBuoD,EAAO8hK,QAAO,SAAUlyQ,GACtB6nD,EAAMi5N,YAEF9gR,GACFo7Q,EAAehrK,EAAQpwG,GAGzB6nD,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,aACZ6sI,EAAYlyK,EAAQvoD,EACrB,GACF,CAeD,SAASy6N,EAAYlyK,EAAQvoD,GAC3B,IAAI27N,EAAOf,EAAW56N,GAEtB,GAAI27N,IAhBN,SAAmBpzK,EAAQvoD,GACpBA,EAAMi7N,aAAgBj7N,EAAM+5N,cACF,oBAAlBxxK,EAAO8hK,QAA0BrqN,EAAMuyN,WAKhDvyN,EAAMi7N,aAAc,EACpB1yK,EAAOqlC,KAAK,eALZ5tF,EAAMi5N,YACNj5N,EAAM+5N,aAAc,EACpBhxI,EAAQyuE,SAASkkE,EAAWnzK,EAAQvoD,IAMzC,CAMG64N,CAAUtwK,EAAQvoD,GAEM,IAApBA,EAAMi5N,YACRj5N,EAAMw2N,UAAW,EACjBjuK,EAAOqlC,KAAK,UAER5tF,EAAMs0N,cAAa,CAGrB,IAAIsH,EAASrzK,EAAO+pK,iBAEfsJ,GAAUA,EAAOtH,aAAesH,EAAO9H,aAC1CvrK,EAAO1uG,SAEV,CAIL,OAAO8hR,CACR,CA5hBDjpG,EAAQ,MAARA,CAAoBi9F,EAAU37C,GAyF9BolD,EAAc51Q,UAAU6uQ,UAAY,WAIlC,IAHA,IAAIxzQ,EAAUvF,KAAKuhR,gBACf12F,EAAM,GAEHtlL,GACLslL,EAAInsL,KAAK6G,GACTA,EAAUA,EAAQ/G,KAGpB,OAAOqsL,CACR,EAED,WACE,IACE3pL,OAAOC,eAAe2+Q,EAAc51Q,UAAW,SAAU,CACvDM,IAAKu1Q,EAAaC,WAAU,WAC1B,OAAOhgR,KAAK+4Q,WACb,GAAE,6EAAmF,YAE5E,CAAZ,MAAOttH,GAAK,CAPhB,IAcsB,oBAAXztJ,QAAyBA,OAAOukR,aAAiE,oBAA3Cv4Q,SAASE,UAAUlM,OAAOukR,cACzFtC,EAAkBj2Q,SAASE,UAAUlM,OAAOukR,aAC5CrhR,OAAOC,eAAek1Q,EAAUr4Q,OAAOukR,YAAa,CAClD5jR,MAAO,SAAe6C,GACpB,QAAIy+Q,EAAgB1hR,KAAKyB,KAAMwB,IAC3BxB,OAASq2Q,IACN70Q,GAAUA,EAAOo3Q,0BAA0BkH,EACnD,KAGHG,EAAkB,SAAyBz+Q,GACzC,OAAOA,aAAkBxB,IAC1B,EA8BHq2Q,EAASnsQ,UAAUovO,KAAO,WACxB2gC,EAAej6Q,KAAM,IAAIkgR,EAC1B,EA8BD7J,EAASnsQ,UAAUw4L,MAAQ,SAAU2E,EAAOpnL,EAAUorB,GACpD,IAnNqBrqC,EAmNjB0lD,EAAQ1mD,KAAK44Q,eACb5vD,GAAM,EAENm5D,GAASz7N,EAAMqkJ,aAtNE/pM,EAsN0BqmM,EArNxCz6D,EAAOk2D,SAAS9hM,IAAQA,aAAes4Q,GAsO9C,OAfI6I,IAAUv1I,EAAOk2D,SAASuE,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAOz6D,EAAOvtH,KAAKgoL,EACpB,CA2NWy0E,CAAoBz0E,IAGN,oBAAbpnL,IACTorB,EAAKprB,EACLA,EAAW,MAGTkiQ,EAAOliQ,EAAW,SAAmBA,IAAUA,EAAWymC,EAAMu0N,iBAClD,oBAAP5vO,IAAmBA,EAAKk1O,GAC/B75N,EAAMg6N,OA7CZ,SAAuBzxK,EAAQ5jE,GAC7B,IAAIowO,EAAK,IAAI4E,EAEbpG,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,EACtB,CAwCmB+G,CAAcxiR,KAAMqrC,IAAa82O,GAnCrD,SAAoBlzK,EAAQvoD,EAAO2gJ,EAAOh8J,GACxC,IAAIowO,EAQJ,OANc,OAAVp0E,EACFo0E,EAAK,IAAI2E,EACiB,kBAAV/4E,GAAuB3gJ,EAAMqkJ,aAC7C0wE,EAAK,IAAIx/C,EAAqB,QAAS,CAAC,SAAU,UAAW50B,KAG3Do0E,IACFxB,EAAehrK,EAAQwsK,GACvBhsI,EAAQyuE,SAAS7yK,EAAIowO,IACd,EAIV,CAmB6DgH,CAAWziR,KAAM0mD,EAAO2gJ,EAAOh8J,MACzFqb,EAAMi5N,YACN32D,EAwDJ,SAAuB/5G,EAAQvoD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,GAC5D,IAAK82O,EAAO,CACV,IAAIO,EAtBR,SAAqBh8N,EAAO2gJ,EAAOpnL,GAC5BymC,EAAMqkJ,aAAsC,IAAxBrkJ,EAAMk6N,eAA4C,kBAAVv5E,IAC/DA,EAAQz6D,EAAOvtH,KAAKgoL,EAAOpnL,IAG7B,OAAOonL,CACR,CAgBkBs7E,CAAYj8N,EAAO2gJ,EAAOpnL,GAErConL,IAAUq7E,IACZP,GAAQ,EACRliQ,EAAW,SACXonL,EAAQq7E,EAEX,CAED,IAAIp6P,EAAMo+B,EAAMqkJ,WAAa,EAAI1D,EAAMzoM,OACvC8nD,EAAM9nD,QAAU0pB,EAChB,IAAI0gM,EAAMtiK,EAAM9nD,OAAS8nD,EAAMmkJ,cAE1Bme,IAAKtiK,EAAMw3N,WAAY,GAE5B,GAAIx3N,EAAMm6N,SAAWn6N,EAAMo6N,OAAQ,CACjC,IAAIhlB,EAAOp1M,EAAMg7N,oBACjBh7N,EAAMg7N,oBAAsB,CAC1Br6E,MAAOA,EACPpnL,SAAUA,EACVkiQ,MAAOA,EACP96P,SAAUgkB,EACV7sC,KAAM,MAGJs9P,EACFA,EAAKt9P,KAAOkoD,EAAMg7N,oBAElBh7N,EAAM66N,gBAAkB76N,EAAMg7N,oBAGhCh7N,EAAMk7N,sBAAwB,CAC/B,MACCG,EAAQ9yK,EAAQvoD,GAAO,EAAOp+B,EAAK++K,EAAOpnL,EAAUorB,GAGtD,OAAO29K,CACR,CA/FS45D,CAAc5iR,KAAM0mD,EAAOy7N,EAAO96E,EAAOpnL,EAAUorB,IAEpD29K,CACR,EAEDqtD,EAASnsQ,UAAU24Q,KAAO,WACxB7iR,KAAK44Q,eAAekI,QACrB,EAEDzK,EAASnsQ,UAAU44Q,OAAS,WAC1B,IAAIp8N,EAAQ1mD,KAAK44Q,eAEblyN,EAAMo6N,SACRp6N,EAAMo6N,SACDp6N,EAAMm6N,SAAYn6N,EAAMo6N,QAAWp6N,EAAMq6N,mBAAoBr6N,EAAM66N,iBAAiBC,EAAYxhR,KAAM0mD,GAE9G,EAED2vN,EAASnsQ,UAAU64Q,mBAAqB,SAA4B9iQ,GAGlE,GADwB,kBAAbA,IAAuBA,EAAWA,EAAS1P,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOzN,SAASmd,EAAW,IAAI1P,gBAAkB,GAAI,MAAM,IAAI+vQ,EAAqBrgQ,GAExL,OADAjgB,KAAK44Q,eAAeqC,gBAAkBh7P,EAC/BjgB,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeG,WACnD,IAWH73Q,OAAOC,eAAek1Q,EAASnsQ,UAAW,wBAAyB,CAIjE9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAe/tE,aAC5B,IA2LHwrE,EAASnsQ,UAAUk9L,OAAS,SAAUC,EAAOpnL,EAAUorB,GACrDA,EAAG,IAAI0uO,EAA2B,YACnC,EAED1D,EAASnsQ,UAAU43Q,QAAU,KAE7BzL,EAASnsQ,UAAUmrC,IAAM,SAAUgyJ,EAAOpnL,EAAUorB,GAClD,IAAIqb,EAAQ1mD,KAAK44Q,eAoBjB,MAlBqB,oBAAVvxE,GACTh8J,EAAKg8J,EACLA,EAAQ,KACRpnL,EAAW,MACkB,oBAAbA,IAChBorB,EAAKprB,EACLA,EAAW,MAGC,OAAVonL,QAA4Bh+L,IAAVg+L,GAAqBrnM,KAAK0iM,MAAM2E,EAAOpnL,GAEzDymC,EAAMo6N,SACRp6N,EAAMo6N,OAAS,EACf9gR,KAAK8iR,UAIFp8N,EAAMg6N,QAsEb,SAAqBzxK,EAAQvoD,EAAOrb,GAClCqb,EAAMg6N,QAAS,EACfS,EAAYlyK,EAAQvoD,GAEhBrb,IACEqb,EAAMw2N,SAAUztI,EAAQyuE,SAAS7yK,GAAS4jE,EAAOioD,KAAK,SAAU7rH,IAGtEqb,EAAMmyN,OAAQ,EACd5pK,EAAO3tG,UAAW,CACnB,CAhFoB0hR,CAAYhjR,KAAM0mD,EAAOrb,GACrCrrC,IACR,EAEDkB,OAAOC,eAAek1Q,EAASnsQ,UAAW,iBAAkB,CAI1D9I,YAAY,EACZoJ,IAAK,WACH,OAAOxK,KAAK44Q,eAAeh6Q,MAC5B,IAsFHsC,OAAOC,eAAek1Q,EAASnsQ,UAAW,YAAa,CAIrD9I,YAAY,EACZoJ,IAAK,WACH,YAA4BnB,IAAxBrJ,KAAK44Q,gBAIF54Q,KAAK44Q,eAAeK,SAC5B,EACDxuQ,IAAK,SAAa9L,GAGXqB,KAAK44Q,iBAMV54Q,KAAK44Q,eAAeK,UAAYt6Q,EACjC,IAEH03Q,EAASnsQ,UAAU3J,QAAUq5Q,EAAYr5Q,QACzC81Q,EAASnsQ,UAAU+xQ,WAAarC,EAAYsC,UAE5C7F,EAASnsQ,UAAUmxQ,SAAW,SAAUx8Q,EAAKwsC,GAC3CA,EAAGxsC,EACJ,0CCtrBGokR,YAEJ,SAASliR,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAEjN,IAAIk8Q,EAAW9jG,EAAQ,OAEnB8pG,EAAellR,OAAO,eACtBmlR,EAAcnlR,OAAO,cACrBolR,EAASplR,OAAO,SAChBqlR,EAASrlR,OAAO,SAChBslR,EAAetlR,OAAO,eACtBulR,EAAiBvlR,OAAO,iBACxBwlR,EAAUxlR,OAAO,UAErB,SAASylR,EAAiB9kR,EAAOF,GAC/B,MAAO,CACLE,MAAOA,EACPF,KAAMA,EAET,CAED,SAASilR,EAAe90G,GACtB,IAAInmK,EAAUmmK,EAAKs0G,GAEnB,GAAgB,OAAZz6Q,EAAkB,CACpB,IAAI+V,EAAOowJ,EAAK40G,GAASr0K,OAIZ,OAAT3wF,IACFowJ,EAAK00G,GAAgB,KACrB10G,EAAKs0G,GAAgB,KACrBt0G,EAAKu0G,GAAe,KACpB16Q,EAAQg7Q,EAAiBjlQ,GAAM,IAElC,CACF,CAED,SAASmlQ,EAAW/0G,GAGlBn/B,EAAQyuE,SAASwlE,EAAgB90G,EAClC,CAeD,IAAIg1G,EAAyB1iR,OAAOyJ,gBAAe,WAAc,IAC7Dk5Q,EAAuC3iR,OAAO+I,gBA4D/ClJ,EA5D+DkiR,EAAwB,CACpFh0K,aACF,OAAOjvG,KAAKwjR,EACb,EAEDhlR,KAAM,WACJ,IAAIu2F,EAAQ/0F,KAIR+I,EAAQ/I,KAAKojR,GAEjB,GAAc,OAAVr6Q,EACF,OAAOC,QAAQN,OAAOK,GAGxB,GAAI/I,KAAKqjR,GACP,OAAOr6Q,QAAQP,QAAQg7Q,OAAiBp6Q,GAAW,IAGrD,GAAIrJ,KAAKwjR,GAASvK,UAKhB,OAAO,IAAIjwQ,SAAQ,SAAUP,EAASC,GACpC+mI,EAAQyuE,UAAS,WACXnpH,EAAMquL,GACR16Q,EAAOqsF,EAAMquL,IAEb36Q,EAAQg7Q,OAAiBp6Q,GAAW,GAEvC,GACF,IAOH,IACIu0H,EADAkmJ,EAAc9jR,KAAKsjR,GAGvB,GAAIQ,EACFlmJ,EAAU,IAAI50H,QA1DpB,SAAqB86Q,EAAal1G,GAChC,OAAO,SAAUnmK,EAASC,GACxBo7Q,EAAY76Q,MAAK,WACX2lK,EAAKy0G,GACP56Q,EAAQg7Q,OAAiBp6Q,GAAW,IAItCulK,EAAK20G,GAAgB96Q,EAASC,EAC/B,GAAEA,EACJ,CACF,CA+C2Bq7Q,CAAYD,EAAa9jR,WAC1C,CAGL,IAAIwe,EAAOxe,KAAKwjR,GAASr0K,OAEzB,GAAa,OAAT3wF,EACF,OAAOxV,QAAQP,QAAQg7Q,EAAiBjlQ,GAAM,IAGhDo/G,EAAU,IAAI50H,QAAQhJ,KAAKujR,GAC5B,CAGD,OADAvjR,KAAKsjR,GAAgB1lJ,EACdA,CACR,GACuC5/H,OAAOwgR,eAAe,WAC9D,OAAOx+Q,IACR,IAAGe,EAAgBkiR,EAAuB,UAAU,WACnD,IAAIe,EAAShkR,KAKb,OAAO,IAAIgJ,SAAQ,SAAUP,EAASC,GACpCs7Q,EAAOR,GAASjjR,QAAQ,MAAM,SAAU1B,GAClCA,EACF6J,EAAO7J,GAIT4J,EAAQg7Q,OAAiBp6Q,GAAW,GACrC,GACF,GACF,IAAG45Q,GAAwBW,GAoE5BzgH,EAAOx3B,QAlEiC,SAA2C18B,GACjF,IAAIg1K,EAEAhmR,EAAWiD,OAAO2J,OAAOg5Q,GAA4D9iR,EAArBkjR,EAAiB,CAAC,EAAmCT,EAAS,CAChI7kR,MAAOswG,EACP3tG,UAAU,IACRP,EAAgBkjR,EAAgBf,EAAc,CAChDvkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBd,EAAa,CAC/CxkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBb,EAAQ,CAC1CzkR,MAAO,KACP2C,UAAU,IACRP,EAAgBkjR,EAAgBZ,EAAQ,CAC1C1kR,MAAOswG,EAAO+pK,eAAewB,WAC7Bl5Q,UAAU,IACRP,EAAgBkjR,EAAgBV,EAAgB,CAClD5kR,MAAO,SAAe8J,EAASC,GAC7B,IAAI8V,EAAOvgB,EAASulR,GAASr0K,OAEzB3wF,GACFvgB,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,EAAiBjlQ,GAAM,MAE/BvgB,EAASilR,GAAgBz6Q,EACzBxK,EAASklR,GAAez6Q,EAE3B,EACDpH,UAAU,IACR2iR,IA8BJ,OA7BAhmR,EAASqlR,GAAgB,KACzBpG,EAASjuK,GAAQ,SAAUpwG,GACzB,GAAIA,GAAoB,+BAAbA,EAAImrE,KAAuC,CACpD,IAAIthE,EAASzK,EAASklR,GAWtB,OARe,OAAXz6Q,IACFzK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxBz6Q,EAAO7J,SAGTZ,EAASmlR,GAAUvkR,EAEpB,CAED,IAAI4J,EAAUxK,EAASilR,GAEP,OAAZz6Q,IACFxK,EAASqlR,GAAgB,KACzBrlR,EAASilR,GAAgB,KACzBjlR,EAASklR,GAAe,KACxB16Q,EAAQg7Q,OAAiBp6Q,GAAW,KAGtCpL,EAASolR,IAAU,CACpB,IACDp0K,EAAOs5B,GAAG,WAAYo7I,EAAW95Q,KAAK,KAAM5L,IACrCA,CACR,sCC1MD,SAASsD,EAAQC,EAAQC,GAAkB,IAAIC,EAAOR,OAAOQ,KAAKF,GAAS,GAAIN,OAAOS,sBAAuB,CAAE,IAAIC,EAAUV,OAAOS,sBAAsBH,GAAaC,IAAgBG,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOZ,OAAOa,yBAAyBP,EAAQM,GAAKV,UAAa,KAAGM,EAAKhD,KAAKsD,MAAMN,EAAME,EAAW,CAAC,OAAOF,CAAO,CAIrV,SAASX,EAAgBC,EAAKC,EAAKtC,GAAiK,OAApJsC,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEtC,MAAOA,EAAOyC,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOtC,EAAgBqC,CAAM,CAIjN,SAASi/N,EAAkB/9N,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAI7T,IACItzF,EADWwsC,EAAQ,OACDxsC,OAGlBi6B,EADYuS,EAAQ,OACAvS,QAEpB2gB,EAAS3gB,GAAWA,EAAQ2gB,QAAU,UAM1CrkB,EAAOx3B,QAEP,WACE,SAASguI,KArBX,SAAyB5vQ,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAsBrJk/N,CAAgBj+N,KAAM25Q,GAEtB35Q,KAAK2iP,KAAO,KACZ3iP,KAAK4iP,KAAO,KACZ5iP,KAAKpB,OAAS,CACf,CAvBH,IAAsBq6N,EAAamK,EAAYC,EAoM7C,OApMoBpK,EAyBP0gD,EAzBoBv2C,EAyBR,CAAC,CACxBniO,IAAK,OACLtC,MAAO,SAAcmW,GACnB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAM,MAEJwB,KAAKpB,OAAS,EAAGoB,KAAK4iP,KAAKpkP,KAAOk6D,EAAW14D,KAAK2iP,KAAOjqL,EAC7D14D,KAAK4iP,KAAOlqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,UACLtC,MAAO,SAAiBmW,GACtB,IAAI4jD,EAAQ,CACVl6C,KAAM1J,EACNtW,KAAMwB,KAAK2iP,MAEO,IAAhB3iP,KAAKpB,SAAcoB,KAAK4iP,KAAOlqL,GACnC14D,KAAK2iP,KAAOjqL,IACV14D,KAAKpB,MACR,GACA,CACDqC,IAAK,QACLtC,MAAO,WACL,GAAoB,IAAhBqB,KAAKpB,OAAT,CACA,IAAIoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAGpB,OAFoB,IAAhBxe,KAAKpB,OAAcoB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KAAU5iP,KAAK2iP,KAAO3iP,KAAK2iP,KAAKnkP,OAC7EwB,KAAKpB,OACAoqN,CAJsB,CAK9B,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACLqB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,KACxB5iP,KAAKpB,OAAS,CACf,GACA,CACDqC,IAAK,OACLtC,MAAO,SAAc0U,GACnB,GAAoB,IAAhBrT,KAAKpB,OAAc,MAAO,GAI9B,IAHA,IAAI4c,EAAIxb,KAAK2iP,KACT35B,EAAM,GAAKxtM,EAAEgD,KAEVhD,EAAIA,EAAEhd,MACXwqN,GAAO31M,EAAImI,EAAEgD,KAGf,OAAOwqM,CACR,GACA,CACD/nN,IAAK,SACLtC,MAAO,SAAgB+R,GACrB,GAAoB,IAAhB1Q,KAAKpB,OAAc,OAAOguI,EAAOivD,MAAM,GAK3C,IAJA,IArEcz8L,EAAK8C,EAAQvC,EAqEvBqpN,EAAMp8E,EAAOigI,YAAYn8P,IAAM,GAC/B8K,EAAIxb,KAAK2iP,KACT/kP,EAAI,EAED4d,GAzEOpc,EA0EDoc,EAAEgD,KA1EItc,EA0EE8mN,EA1EMrpN,EA0ED/B,EAzE9BgvI,EAAO1iI,UAAU4R,KAAKvd,KAAKa,EAAK8C,EAAQvC,GA0ElC/B,GAAK4d,EAAEgD,KAAK5f,OACZ4c,EAAIA,EAAEhd,KAGR,OAAOwqN,CACR,GAEA,CACD/nN,IAAK,UACLtC,MAAO,SAAiB+R,EAAGwzQ,GACzB,IAAIl7D,EAcJ,OAZIt4M,EAAI1Q,KAAK2iP,KAAKnkO,KAAK5f,QAErBoqN,EAAMhpN,KAAK2iP,KAAKnkO,KAAK7O,MAAM,EAAGe,GAC9B1Q,KAAK2iP,KAAKnkO,KAAOxe,KAAK2iP,KAAKnkO,KAAK7O,MAAMe,IAGtCs4M,EAFSt4M,IAAM1Q,KAAK2iP,KAAKnkO,KAAK5f,OAExBoB,KAAKo3F,QAGL8sL,EAAalkR,KAAKmkR,WAAWzzQ,GAAK1Q,KAAKokR,WAAW1zQ,GAGnDs4M,CACR,GACA,CACD/nN,IAAK,QACLtC,MAAO,WACL,OAAOqB,KAAK2iP,KAAKnkO,IAClB,GAEA,CACDvd,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAI8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EACJm1M,EAAMxtM,EAAEgD,KAGZ,IAFA9N,GAAKs4M,EAAIpqN,OAEF4c,EAAIA,EAAEhd,MAAM,CACjB,IAAIozK,EAAMp2J,EAAEgD,KACR6lQ,EAAK3zQ,EAAIkhK,EAAIhzK,OAASgzK,EAAIhzK,OAAS8R,EAIvC,GAHI2zQ,IAAOzyG,EAAIhzK,OAAQoqN,GAAOp3C,EAASo3C,GAAOp3C,EAAIjiK,MAAM,EAAGe,GAGjD,KAFVA,GAAK2zQ,GAEQ,CACPA,IAAOzyG,EAAIhzK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAOozJ,EAAIjiK,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAK,aACLtC,MAAO,SAAoB+R,GACzB,IAAIs4M,EAAMp8E,EAAOigI,YAAYn8P,GACzB8K,EAAIxb,KAAK2iP,KACT9uO,EAAI,EAIR,IAHA2H,EAAEgD,KAAK1C,KAAKktM,GACZt4M,GAAK8K,EAAEgD,KAAK5f,OAEL4c,EAAIA,EAAEhd,MAAM,CACjB,IAAI2uK,EAAM3xJ,EAAEgD,KACR6lQ,EAAK3zQ,EAAIy8J,EAAIvuK,OAASuuK,EAAIvuK,OAAS8R,EAIvC,GAHAy8J,EAAIrxJ,KAAKktM,EAAKA,EAAIpqN,OAAS8R,EAAG,EAAG2zQ,GAGvB,KAFV3zQ,GAAK2zQ,GAEQ,CACPA,IAAOl3G,EAAIvuK,UACXiV,EACE2H,EAAEhd,KAAMwB,KAAK2iP,KAAOnnO,EAAEhd,KAAUwB,KAAK2iP,KAAO3iP,KAAK4iP,KAAO,OAE5D5iP,KAAK2iP,KAAOnnO,EACZA,EAAEgD,KAAO2uJ,EAAIx9J,MAAM00Q,IAGrB,KACD,GAECxwQ,CACH,CAGD,OADA7T,KAAKpB,QAAUiV,EACRm1M,CACR,GAEA,CACD/nN,IAAKumL,EACL7oL,MAAO,SAAe8sJ,EAAG3rJ,GACvB,OAAO+mK,EAAQ7mK,KAnMrB,SAAuBkC,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAAyB,MAAhBD,UAAUvE,GAAauE,UAAUvE,GAAK,CAAC,EAAOA,EAAI,EAAK2D,EAAQL,OAAOkB,IAAS,GAAMC,SAAQ,SAAUpB,GAAOF,EAAgBmB,EAAQjB,EAAKmB,EAAOnB,GAAQ,IAAcC,OAAOoB,0BAA6BpB,OAAOqB,iBAAiBL,EAAQhB,OAAOoB,0BAA0BF,IAAmBb,EAAQL,OAAOkB,IAASC,SAAQ,SAAUpB,GAAOC,OAAOC,eAAee,EAAQjB,EAAKC,OAAOa,yBAAyBK,EAAQnB,GAAQ,GAAM,CAAC,OAAOiB,CAAS,CAmM3fwhO,CAAc,CAAC,EAAG5jO,EAAS,CAE9CsjB,MAAO,EAEPg+M,eAAe,IAElB,IAjM6DgC,GAAYnD,EAAkBhH,EAAY/uN,UAAWk5N,GAAiBC,GAAapD,EAAkBhH,EAAaoK,GAoM3Ks2C,CACR,CArLD,qDC2BA,SAAS2K,EAAoBn7Q,EAAMtK,GACjC0lR,EAAYp7Q,EAAMtK,GAClB2lR,EAAYr7Q,EACb,CAED,SAASq7Q,EAAYr7Q,GACfA,EAAKyvQ,iBAAmBzvQ,EAAKyvQ,eAAemC,WAC5C5xQ,EAAK6vQ,iBAAmB7vQ,EAAK6vQ,eAAe+B,WAChD5xQ,EAAKmrI,KAAK,QACX,CAqBD,SAASiwI,EAAYp7Q,EAAMtK,GACzBsK,EAAKmrI,KAAK,QAASz1I,EACpB,CAaDskK,EAAOx3B,QAAU,CACfprI,QAnGF,SAAiB1B,EAAKwsC,GACpB,IAAI0pD,EAAQ/0F,KAERykR,EAAoBzkR,KAAKg5Q,gBAAkBh5Q,KAAKg5Q,eAAeC,UAC/DyL,EAAoB1kR,KAAK44Q,gBAAkB54Q,KAAK44Q,eAAeK,UAEnE,OAAIwL,GAAqBC,GACnBr5O,EACFA,EAAGxsC,GACMA,IACJmB,KAAK44Q,eAEE54Q,KAAK44Q,eAAewI,eAC9BphR,KAAK44Q,eAAewI,cAAe,EACnC3xI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAHpC4wI,EAAQyuE,SAASqmE,EAAavkR,KAAMnB,IAOjCmB,OAKLA,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,GAI9Bj5Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,GAGlCj5Q,KAAKq7Q,SAASx8Q,GAAO,MAAM,SAAUA,IAC9BwsC,GAAMxsC,EACJk2F,EAAM6jL,eAEC7jL,EAAM6jL,eAAewI,aAI/B3xI,EAAQyuE,SAASsmE,EAAazvL,IAH9BA,EAAM6jL,eAAewI,cAAe,EACpC3xI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,IAH7C4wI,EAAQyuE,SAASomE,EAAqBvvL,EAAOl2F,GAOtCwsC,GACTokG,EAAQyuE,SAASsmE,EAAazvL,GAC9B1pD,EAAGxsC,IAEH4wI,EAAQyuE,SAASsmE,EAAazvL,EAEjC,IAEM/0F,KACR,EAiDCk8Q,UApCF,WACMl8Q,KAAKg5Q,iBACPh5Q,KAAKg5Q,eAAeC,WAAY,EAChCj5Q,KAAKg5Q,eAAeyB,SAAU,EAC9Bz6Q,KAAKg5Q,eAAeH,OAAQ,EAC5B74Q,KAAKg5Q,eAAewB,YAAa,GAG/Bx6Q,KAAK44Q,iBACP54Q,KAAK44Q,eAAeK,WAAY,EAChCj5Q,KAAK44Q,eAAeC,OAAQ,EAC5B74Q,KAAK44Q,eAAe8H,QAAS,EAC7B1gR,KAAK44Q,eAAe6H,aAAc,EAClCzgR,KAAK44Q,eAAe+I,aAAc,EAClC3hR,KAAK44Q,eAAesE,UAAW,EAC/Bl9Q,KAAK44Q,eAAewI,cAAe,EAEtC,EAoBCnH,eAdF,SAAwBhrK,EAAQpwG,GAM9B,IAAIyjR,EAASrzK,EAAO+pK,eAChBiE,EAAShuK,EAAO2pK,eAChB0J,GAAUA,EAAOtH,aAAeiC,GAAUA,EAAOjC,YAAa/rK,EAAO1uG,QAAQ1B,GAAUowG,EAAOqlC,KAAK,QAASz1I,EACjH,uCC9FD,IAAI8lR,EAA6BvrG,EAAAA,OAAAA,EAAAA,2BAgBjC,SAASwE,IAAS,CAmFlBza,EAAOx3B,QA7EP,SAASi5I,EAAI31K,EAAQ0uE,EAAMt2J,GACzB,GAAoB,oBAATs2J,EAAqB,OAAOinG,EAAI31K,EAAQ,KAAM0uE,GACpDA,IAAMA,EAAO,CAAC,GACnBt2J,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAIziC,EAAOn0N,UAAUvD,OAAQwK,EAAO,IAAIvL,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAC/Eh0N,EAAKg0N,GAAQj7N,UAAUi7N,GAGzB/1M,EAASrlB,MAAMhC,KAAMoJ,EAPH,CAQnB,CACF,CAWY8tJ,CAAK7vI,GAAYu2J,GAC5B,IAAIihC,EAAWlhC,EAAKkhC,WAA8B,IAAlBlhC,EAAKkhC,UAAsB5vG,EAAO4vG,SAC9Dv9M,EAAWq8K,EAAKr8K,WAA8B,IAAlBq8K,EAAKr8K,UAAsB2tG,EAAO3tG,SAE9DujR,EAAiB,WACd51K,EAAO3tG,UAAUw8Q,GACvB,EAEGgH,EAAgB71K,EAAO2pK,gBAAkB3pK,EAAO2pK,eAAesE,SAE/DY,EAAW,WACbx8Q,GAAW,EACXwjR,GAAgB,EACXjmE,GAAUx3L,EAAS9oB,KAAK0wG,EAC9B,EAEG81K,EAAgB91K,EAAO+pK,gBAAkB/pK,EAAO+pK,eAAewB,WAE/D7B,EAAQ,WACV95D,GAAW,EACXkmE,GAAgB,EACXzjR,GAAU+lB,EAAS9oB,KAAK0wG,EAC9B,EAEGikB,EAAU,SAAiBr0H,GAC7BwoB,EAAS9oB,KAAK0wG,EAAQpwG,EACvB,EAEGg/Q,EAAU,WACZ,IAAIh/Q,EAEJ,OAAIggN,IAAakmE,GACV91K,EAAO+pK,gBAAmB/pK,EAAO+pK,eAAeH,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,IAG3ByC,IAAawjR,GACV71K,EAAO2pK,gBAAmB3pK,EAAO2pK,eAAeC,QAAOh6Q,EAAM,IAAI8lR,GAC/Dt9P,EAAS9oB,KAAK0wG,EAAQpwG,SAF/B,CAID,EAEGmmR,EAAY,WACd/1K,EAAOhB,IAAIs6B,GAAG,SAAUu1I,EACzB,EAgBD,OAnEF,SAAmB7uK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAmDK4zC,CAAUj2K,GAIH3tG,IAAa2tG,EAAO2pK,iBAE7B3pK,EAAOs5B,GAAG,MAAOs8I,GACjB51K,EAAOs5B,GAAG,QAASs8I,KANnB51K,EAAOs5B,GAAG,WAAYu1I,GACtB7uK,EAAOs5B,GAAG,QAASs1I,GACf5uK,EAAOhB,IAAK+2K,IAAiB/1K,EAAOs5B,GAAG,UAAWy8I,IAOxD/1K,EAAOs5B,GAAG,MAAOowI,GACjB1pK,EAAOs5B,GAAG,SAAUu1I,IACD,IAAfngG,EAAK50K,OAAiBkmG,EAAOs5B,GAAG,QAASrV,GAC7CjkB,EAAOs5B,GAAG,QAASs1I,GACZ,WACL5uK,EAAOinD,eAAe,WAAY4nH,GAClC7uK,EAAOinD,eAAe,QAAS2nH,GAC/B5uK,EAAOinD,eAAe,UAAW8uH,GAC7B/1K,EAAOhB,KAAKgB,EAAOhB,IAAIioD,eAAe,SAAU4nH,GACpD7uK,EAAOinD,eAAe,MAAO2uH,GAC7B51K,EAAOinD,eAAe,QAAS2uH,GAC/B51K,EAAOinD,eAAe,SAAU4nH,GAChC7uK,EAAOinD,eAAe,MAAOyiH,GAC7B1pK,EAAOinD,eAAe,QAAShjC,GAC/BjkB,EAAOinD,eAAe,QAAS2nH,EAChC,CACF,qBCrGD16G,EAAOx3B,QAAU,WACf,MAAM,IAAIh6H,MAAM,gDACjB,sCCED,IAAIizQ,EAWJ,IAAI9oD,EAAiB1iD,EAAAA,OAAAA,EACjBgjD,EAAmBN,EAAeM,iBAClC+jD,EAAuBrkD,EAAeqkD,qBAE1C,SAASviG,EAAK/+K,GAEZ,GAAIA,EAAK,MAAMA,CAChB,CAMD,SAASsmR,EAAUl2K,EAAQwrK,EAASoG,EAASx5P,GAC3CA,EAvBF,SAAcA,GACZ,IAAI0xO,GAAS,EACb,OAAO,WACDA,IACJA,GAAS,EACT1xO,EAASrlB,WAAM,EAAQG,WACxB,CACF,CAgBY+0J,CAAK7vI,GAChB,IAAI+9P,GAAS,EACbn2K,EAAOs5B,GAAG,SAAS,WACjB68I,GAAS,CACV,SACW/7Q,IAARu7Q,IAAmBA,EAAMxrG,EAAQ,QACrCwrG,EAAI31K,EAAQ,CACV4vG,SAAU47D,EACVn5Q,SAAUu/Q,IACT,SAAUhiR,GACX,GAAIA,EAAK,OAAOwoB,EAASxoB,GACzBumR,GAAS,EACT/9P,GACD,IACD,IAAI4xP,GAAY,EAChB,OAAO,SAAUp6Q,GACf,IAAIumR,IACAnM,EAGJ,OAFAA,GAAY,EAvBhB,SAAmBhqK,GACjB,OAAOA,EAAOg2K,WAAqC,oBAAjBh2K,EAAOqiI,KAC1C,CAuBO4zC,CAAUj2K,GAAgBA,EAAOqiI,QACP,oBAAnBriI,EAAO1uG,QAA+B0uG,EAAO1uG,eACxD8mB,EAASxoB,GAAO,IAAIshR,EAAqB,QAC1C,CACF,CAED,SAAS5hR,EAAK2K,GACZA,GACD,CAED,SAASowO,EAAKj6N,EAAM7f,GAClB,OAAO6f,EAAKi6N,KAAK95O,EAClB,CAED,SAAS6lR,EAAY1mE,GACnB,OAAKA,EAAQ//M,OAC8B,oBAAhC+/M,EAAQA,EAAQ//M,OAAS,GAA0Bg/K,EACvD+gC,EAAQvxI,MAFawwG,CAG7B,CA6BDza,EAAOx3B,QA3BP,WACE,IAAK,IAAI2qF,EAAOn0N,UAAUvD,OAAQ+/M,EAAU,IAAI9gN,MAAMy4N,GAAO8G,EAAO,EAAGA,EAAO9G,EAAM8G,IAClFze,EAAQye,GAAQj7N,UAAUi7N,GAG5B,IAOIr0N,EAPAse,EAAWg+P,EAAY1mE,GAG3B,GAFI9gN,MAAMC,QAAQ6gN,EAAQ,MAAKA,EAAUA,EAAQ,IAE7CA,EAAQ//M,OAAS,EACnB,MAAM,IAAIw9N,EAAiB,WAI7B,IAAIkpD,EAAW3mE,EAAQ/4M,KAAI,SAAUqpG,EAAQrxG,GAC3C,IAAI68Q,EAAU78Q,EAAI+gN,EAAQ//M,OAAS,EAEnC,OAAOumR,EAAUl2K,EAAQwrK,EADX78Q,EAAI,GACyB,SAAUiB,GAC9CkK,IAAOA,EAAQlK,GAChBA,GAAKymR,EAASjjR,QAAQ9D,GACtBk8Q,IACJ6K,EAASjjR,QAAQ9D,GACjB8oB,EAASte,GACV,GACF,IACD,OAAO41M,EAAQh8D,OAAO22F,EACvB,sCC5FD,IAAIisC,EAAwBnsG,EAAAA,OAAAA,EAAAA,sBAsB5BjW,EAAOx3B,QAAU,CACfkuI,iBAjBF,SAA0BnzN,EAAO5mD,EAAS0lR,EAAWrL,GACnD,IAAIvvE,EALN,SAA2B9qM,EAASq6Q,EAAUqL,GAC5C,OAAgC,MAAzB1lR,EAAQ+qM,cAAwB/qM,EAAQ+qM,cAAgBsvE,EAAWr6Q,EAAQ0lR,GAAa,IAChG,CAGWC,CAAkB3lR,EAASq6Q,EAAUqL,GAE/C,GAAW,MAAP56E,EAAa,CACf,IAAMhgK,SAASggK,IAAQzkM,KAAKQ,MAAMikM,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI26E,EADCpL,EAAWqL,EAAY,gBACI56E,GAGxC,OAAOzkM,KAAKQ,MAAMikM,EACnB,CAGD,OAAOlkJ,EAAMqkJ,WAAa,GAAK,KAChC,0BCtBD5nC,EAAOx3B,QAAU,EAAjBw3B,OAAAA,qCCAAx3B,EAAUw3B,EAAOx3B,QAAU,EAAjBw3B,QACFu3D,OAAS/uF,EACjBA,EAAQ8sI,SAAW9sI,EACnBA,EAAQ0qI,SAAW,EAAnB1qI,OACAA,EAAQq7D,OAAS,EAAjBr7D,OACAA,EAAQ+jI,UAAY,EAApB/jI,MACAA,EAAQu7D,YAAc,EAAtBv7D,OACAA,EAAQuxI,SAAW,EAAnBvxI,OACAA,EAAQ+5I,SAAW,EAAnB/5I,8BCNA,IAAIrzF,EAAS8gI,EAAQ,OACjBxsC,EAASt0F,EAAOs0F,OAGpB,SAAS+4I,EAAWvmR,EAAKkoB,GACvB,IAAK,IAAIrmB,KAAO7B,EACdkoB,EAAIrmB,GAAO7B,EAAI6B,EAElB,CASD,SAAS2kR,EAAY/8Q,EAAKg9Q,EAAkBjnR,GAC1C,OAAOguI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,CAVGguI,EAAOvtH,MAAQutH,EAAOivD,OAASjvD,EAAOigI,aAAejgI,EAAOk5I,gBAC9D3iH,EAAOx3B,QAAUrzF,GAGjBqtO,EAAUrtO,EAAQqzF,GAClBA,EAAQiB,OAASg5I,GAOnBA,EAAW17Q,UAAYhJ,OAAO2J,OAAO+hI,EAAO1iI,WAG5Cy7Q,EAAU/4I,EAAQg5I,GAElBA,EAAWvmQ,KAAO,SAAUxW,EAAKg9Q,EAAkBjnR,GACjD,GAAmB,kBAARiK,EACT,MAAM,IAAI9J,UAAU,iCAEtB,OAAO6tI,EAAO/jI,EAAKg9Q,EAAkBjnR,EACtC,EAEDgnR,EAAW/pF,MAAQ,SAAUr/K,EAAM43C,EAAMn0C,GACvC,GAAoB,kBAATzD,EACT,MAAM,IAAIzd,UAAU,6BAEtB,IAAIouK,EAAMvgC,EAAOpwH,GAUjB,YATanT,IAAT+qD,EACsB,kBAAbn0C,EACTktJ,EAAI/4G,KAAKA,EAAMn0C,GAEfktJ,EAAI/4G,KAAKA,GAGX+4G,EAAI/4G,KAAK,GAEJ+4G,CACR,EAEDy4G,EAAW/Y,YAAc,SAAUrwP,GACjC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAO6tI,EAAOpwH,EACf,EAEDopQ,EAAWE,gBAAkB,SAAUtpQ,GACrC,GAAoB,kBAATA,EACT,MAAM,IAAIzd,UAAU,6BAEtB,OAAOu5C,EAAOytO,WAAWvpQ,EAC1B,sCCvCD,IAAIowH,EAASwsC,EAAAA,OAAAA,OAGT4sG,EAAap5I,EAAOo5I,YAAc,SAAU/lQ,GAE9C,QADAA,EAAW,GAAKA,IACIA,EAAS1P,eAC3B,IAAK,MAAM,IAAK,OAAO,IAAK,QAAQ,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,OAAO,IAAK,QAAQ,IAAK,UAAU,IAAK,WAAW,IAAK,MACxI,OAAO,EACT,QACE,OAAO,EAEZ,EA0CD,SAASkpQ,EAAcx5P,GAErB,IAAIokQ,EACJ,OAFArkR,KAAKigB,SAXP,SAA2B89I,GACzB,IAAIkoH,EA/BN,SAA4BloH,GAC1B,IAAKA,EAAK,MAAO,OAEjB,IADA,IAAImoH,IAEF,OAAQnoH,GACN,IAAK,OACL,IAAK,QACH,MAAO,OACT,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,UACT,IAAK,SACL,IAAK,SACH,MAAO,SACT,IAAK,SACL,IAAK,QACL,IAAK,MACH,OAAOA,EACT,QACE,GAAImoH,EAAS,OACbnoH,GAAO,GAAKA,GAAKxtJ,cACjB21Q,GAAU,EAGjB,CAKYC,CAAmBpoH,GAC9B,GAAoB,kBAATkoH,IAAsBr5I,EAAOo5I,aAAeA,IAAeA,EAAWjoH,IAAO,MAAM,IAAIpsJ,MAAM,qBAAuBosJ,GAC/H,OAAOkoH,GAAQloH,CAChB,CAOiBqoH,CAAkBnmQ,GAE1BjgB,KAAKigB,UACX,IAAK,UACHjgB,KAAK4vG,KAAOy2K,EACZrmR,KAAKq1C,IAAMixO,EACXjC,EAAK,EACL,MACF,IAAK,OACHrkR,KAAKumR,SAAWC,EAChBnC,EAAK,EACL,MACF,IAAK,SACHrkR,KAAK4vG,KAAO62K,EACZzmR,KAAKq1C,IAAMqxO,EACXrC,EAAK,EACL,MACF,QAGE,OAFArkR,KAAK0iM,MAAQikF,OACb3mR,KAAKq1C,IAAMuxO,GAGf5mR,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAWn6I,EAAOigI,YAAYwX,EACpC,CAmCD,SAAS2C,EAAcxvD,GACrB,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,IAAM,EAAa,EAAWA,GAAQ,IAAM,GAAa,EAAWA,GAAQ,IAAM,GAAa,EACpIA,GAAQ,IAAM,GAAQ,GAAK,CACnC,CA0DD,SAASgvD,EAAar5G,GACpB,IAAI3xJ,EAAIxb,KAAK8mR,UAAY9mR,KAAK6mR,SAC1BxtQ,EAtBN,SAA6BlQ,EAAMgkK,EAAK3xJ,GACtC,GAAwB,OAAV,IAAT2xJ,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,EAAG,CACvC,GAAwB,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,SAET,GAAI19Q,EAAK09Q,SAAW,GAAK15G,EAAIvuK,OAAS,GACZ,OAAV,IAATuuK,EAAI,IAEP,OADAhkK,EAAK09Q,SAAW,EACT,QAGZ,CACF,CAKSI,CAAoBjnR,KAAMmtK,GAClC,YAAU9jK,IAANgQ,EAAwBA,EACxBrZ,KAAK6mR,UAAY15G,EAAIvuK,QACvBuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAGxb,KAAK6mR,UAC5B7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,aAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAUvrQ,EAAG,EAAG2xJ,EAAIvuK,aAClCoB,KAAK6mR,UAAY15G,EAAIvuK,QACtB,CA0BD,SAASynR,EAAUl5G,EAAKvvK,GACtB,IAAKuvK,EAAIvuK,OAAShB,GAAK,IAAM,EAAG,CAC9B,IAAIyb,EAAI8zJ,EAAI7iK,SAAS,UAAW1M,GAChC,GAAIyb,EAAG,CACL,IAAIxF,EAAIwF,EAAEw2I,WAAWx2I,EAAEza,OAAS,GAChC,GAAIiV,GAAK,OAAUA,GAAK,MAKtB,OAJA7T,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7Bya,EAAE1J,MAAM,GAAI,EAEtB,CACD,OAAO0J,CACR,CAID,OAHArZ,KAAK6mR,SAAW,EAChB7mR,KAAK8mR,UAAY,EACjB9mR,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GAC7BuuK,EAAI7iK,SAAS,UAAW1M,EAAGuvK,EAAIvuK,OAAS,EAChD,CAID,SAAS0nR,EAASn5G,GAChB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,GAAIntK,KAAK6mR,SAAU,CACjB,IAAIxxO,EAAMr1C,KAAK8mR,UAAY9mR,KAAK6mR,SAChC,OAAOxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,UAAW,EAAG+qC,EACjD,CACD,OAAOh8B,CACR,CAED,SAASotQ,EAAWt5G,EAAKvvK,GACvB,IAAI8S,GAAKy8J,EAAIvuK,OAAShB,GAAK,EAC3B,OAAU,IAAN8S,EAAgBy8J,EAAI7iK,SAAS,SAAU1M,IAC3CoC,KAAK6mR,SAAW,EAAIn2Q,EACpB1Q,KAAK8mR,UAAY,EACP,IAANp2Q,EACF1Q,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAEpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,GACpCoB,KAAK+mR,SAAS,GAAK55G,EAAIA,EAAIvuK,OAAS,IAE/BuuK,EAAI7iK,SAAS,SAAU1M,EAAGuvK,EAAIvuK,OAAS8R,GAC/C,CAED,SAASg2Q,EAAUv5G,GACjB,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAIrZ,KAAK+mR,SAASz8Q,SAAS,SAAU,EAAG,EAAItK,KAAK6mR,UACpExtQ,CACR,CAGD,SAASstQ,EAAYx5G,GACnB,OAAOA,EAAI7iK,SAAStK,KAAKigB,SAC1B,CAED,SAAS2mQ,EAAUz5G,GACjB,OAAOA,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,EAC9C,CA1NDxhC,EAAQ,EAAgB8tI,EA6BxBA,EAAcvvQ,UAAUw4L,MAAQ,SAAUv1B,GACxC,GAAmB,IAAfA,EAAIvuK,OAAc,MAAO,GAC7B,IAAIya,EACAzb,EACJ,GAAIoC,KAAK6mR,SAAU,CAEjB,QAAUx9Q,KADVgQ,EAAIrZ,KAAKumR,SAASp5G,IACG,MAAO,GAC5BvvK,EAAIoC,KAAK6mR,SACT7mR,KAAK6mR,SAAW,CACjB,MACCjpR,EAAI,EAEN,OAAIA,EAAIuvK,EAAIvuK,OAAeya,EAAIA,EAAIrZ,KAAK4vG,KAAKu9D,EAAKvvK,GAAKoC,KAAK4vG,KAAKu9D,EAAKvvK,GAC/Dyb,GAAK,EACb,EAEDogQ,EAAcvvQ,UAAUmrC,IAwGxB,SAAiB83H,GACf,IAAI9zJ,EAAI8zJ,GAAOA,EAAIvuK,OAASoB,KAAK0iM,MAAMv1B,GAAO,GAC9C,OAAIntK,KAAK6mR,SAAiBxtQ,EAAI,SACvBA,CACR,EAzGDogQ,EAAcvvQ,UAAU0lG,KA0FxB,SAAkBu9D,EAAKvvK,GACrB,IAAImxG,EArEN,SAA6B5lG,EAAMgkK,EAAKvvK,GACtC,IAAI8wB,EAAIy+I,EAAIvuK,OAAS,EACrB,GAAI8vB,EAAI9wB,EAAG,OAAO,EAClB,IAAIymR,EAAK2C,EAAc75G,EAAIz+I,IAC3B,GAAI21P,GAAM,EAER,OADIA,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAER,OADI21P,EAAK,IAAGl7Q,EAAK09Q,SAAWxC,EAAK,GAC1BA,EAET,KAAM31P,EAAI9wB,IAAa,IAARymR,EAAW,OAAO,EAEjC,IADAA,EAAK2C,EAAc75G,EAAIz+I,MACb,EAIR,OAHI21P,EAAK,IACI,IAAPA,EAAUA,EAAK,EAAOl7Q,EAAK09Q,SAAWxC,EAAK,GAE1CA,EAET,OAAO,CACR,CA8Ca6C,CAAoBlnR,KAAMmtK,EAAKvvK,GAC3C,IAAKoC,KAAK6mR,SAAU,OAAO15G,EAAI7iK,SAAS,OAAQ1M,GAChDoC,KAAK8mR,UAAY/3K,EACjB,IAAI15D,EAAM83H,EAAIvuK,QAAUmwG,EAAQ/uG,KAAK6mR,UAErC,OADA15G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU,EAAG1xO,GACpB83H,EAAI7iK,SAAS,OAAQ1M,EAAGy3C,EAChC,EA9FDokO,EAAcvvQ,UAAUq8Q,SAAW,SAAUp5G,GAC3C,GAAIntK,KAAK6mR,UAAY15G,EAAIvuK,OAEvB,OADAuuK,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG7mR,KAAK6mR,UACzD7mR,KAAK+mR,SAASz8Q,SAAStK,KAAKigB,SAAU,EAAGjgB,KAAK8mR,WAEvD35G,EAAIrxJ,KAAK9b,KAAK+mR,SAAU/mR,KAAK8mR,UAAY9mR,KAAK6mR,SAAU,EAAG15G,EAAIvuK,QAC/DoB,KAAK6mR,UAAY15G,EAAIvuK,MACtB,yBClHD,IAAIguI,EAASwsC,EAAAA,OAAAA,OAETyhR,EAAmBjuT,EAAOo5I,YACzB,SAAS/lQ,GACP,OAAQA,GAAYA,EAAS1P,eAC3B,IAAK,MAAO,IAAK,OAAQ,IAAK,QAAS,IAAK,QAAS,IAAK,SAAU,IAAK,SAAU,IAAK,OAAQ,IAAK,QAAS,IAAK,UAAW,IAAK,WAAY,IAAK,MAAO,OAAO,EAClK,QAAS,OAAO,EAEnB,EAiBN,IAAIkpQ,EAAgB9tI,EAAQ,EAAgB,SAAS1rH,GAGnD,OAFAjgB,KAAKigB,UAAYA,GAAY,QAAQ1P,cAAcoyD,QAAQ,OAAQ,IAfrE,SAAwB1iD,GACtB,GAAIA,IAAa46a,EAAiB56a,GAChC,MAAM,IAAItO,MAAM,qBAAuBsO,EAE1C,CAYC66a,CAAe76a,GACPjgB,KAAKigB,UACX,IAAK,OAEHjgB,KAAK+6b,cAAgB,EACrB,MACF,IAAK,OACL,IAAK,UAEH/6b,KAAK+6b,cAAgB,EACrB/6b,KAAKg7b,qBAAuBC,EAC5B,MACF,IAAK,SAEHj7b,KAAK+6b,cAAgB,EACrB/6b,KAAKg7b,qBAAuBE,EAC5B,MACF,QAEE,YADAl7b,KAAK0iM,MAAQy4P,GAMjBn7b,KAAKo7b,WAAa,IAAIxuT,EAAO,GAE7B5sI,KAAKq7b,aAAe,EAEpBr7b,KAAKs7b,WAAa,CACnB,EAmID,SAASH,EAAiB7iZ,GACxB,OAAOA,EAAOhuC,SAAStK,KAAKigB,SAC7B,CAED,SAASg7a,EAA0B3iZ,GACjCt4C,KAAKq7b,aAAe/iZ,EAAO15C,OAAS,EACpCoB,KAAKs7b,WAAat7b,KAAKq7b,aAAe,EAAI,CAC3C,CAED,SAASH,EAA2B5iZ,GAClCt4C,KAAKq7b,aAAe/iZ,EAAO15C,OAAS,EACpCoB,KAAKs7b,WAAat7b,KAAKq7b,aAAe,EAAI,CAC3C,CAnID5hL,EAAcvvQ,UAAUw4L,MAAQ,SAASpqJ,GAGvC,IAFA,IAAIijZ,EAAU,GAEPv7b,KAAKs7b,YAAY,CAEtB,IAAIp4b,EAAao1C,EAAO15C,QAAUoB,KAAKs7b,WAAat7b,KAAKq7b,aACrDr7b,KAAKs7b,WAAat7b,KAAKq7b,aACvB/iZ,EAAO15C,OAMX,GAHA05C,EAAOx8B,KAAK9b,KAAKo7b,WAAYp7b,KAAKq7b,aAAc,EAAGn4b,GACnDlD,KAAKq7b,cAAgBn4b,EAEjBlD,KAAKq7b,aAAer7b,KAAKs7b,WAE3B,MAAO,GAWT,GAPAhjZ,EAASA,EAAO3oC,MAAMzM,EAAWo1C,EAAO15C,WAMpC49X,GAHJ++D,EAAUv7b,KAAKo7b,WAAWzrb,MAAM,EAAG3P,KAAKs7b,YAAYhxb,SAAStK,KAAKigB,WAG3C4vI,WAAW0rS,EAAQ38b,OAAS,KACnC,OAAU49X,GAAY,OAAtC,CAQA,GAHAx8X,KAAKq7b,aAAer7b,KAAKs7b,WAAa,EAGhB,IAAlBhjZ,EAAO15C,OACT,OAAO28b,EAET,KAPC,CAHCv7b,KAAKs7b,YAAct7b,KAAK+6b,cACxBQ,EAAU,EAUb,CAGDv7b,KAAKg7b,qBAAqB1iZ,GAE1B,IAAIjD,EAAMiD,EAAO15C,OACboB,KAAKs7b,aAEPhjZ,EAAOx8B,KAAK9b,KAAKo7b,WAAY,EAAG9iZ,EAAO15C,OAASoB,KAAKq7b,aAAchmZ,GACnEA,GAAOr1C,KAAKq7b,cAKd,IACI7+D,EADAnnV,GAFJkmZ,GAAWjjZ,EAAOhuC,SAAStK,KAAKigB,SAAU,EAAGo1B,IAE3Bz2C,OAAS,EAG3B,IAFI49X,EAAW++D,EAAQ1rS,WAAWx6G,KAElB,OAAUmnV,GAAY,MAAQ,CAC5C,IAAIhgX,EAAOxc,KAAK+6b,cAKhB,OAJA/6b,KAAKs7b,YAAc9+a,EACnBxc,KAAKq7b,cAAgB7+a,EACrBxc,KAAKo7b,WAAWt/a,KAAK9b,KAAKo7b,WAAY5+a,EAAM,EAAGA,GAC/C87B,EAAOx8B,KAAK9b,KAAKo7b,WAAY,EAAG,EAAG5+a,GAC5B++a,EAAQriV,UAAU,EAAG7jE,EAC7B,CAGD,OAAOkmZ,CACR,EAMD9hL,EAAcvvQ,UAAU8wb,qBAAuB,SAAS1iZ,GAMtD,IAJA,IAAI16C,EAAK06C,EAAO15C,QAAU,EAAK,EAAI05C,EAAO15C,OAInChB,EAAI,EAAGA,IAAK,CACjB,IAAIiW,EAAIykC,EAAOA,EAAO15C,OAAShB,GAK/B,GAAS,GAALA,GAAUiW,GAAK,GAAK,EAAM,CAC5B7T,KAAKs7b,WAAa,EAClB,KACD,CAGD,GAAI19b,GAAK,GAAKiW,GAAK,GAAK,GAAM,CAC5B7T,KAAKs7b,WAAa,EAClB,KACD,CAGD,GAAI19b,GAAK,GAAKiW,GAAK,GAAK,GAAM,CAC5B7T,KAAKs7b,WAAa,EAClB,KACD,CACF,CACDt7b,KAAKq7b,aAAez9b,CACrB,EAED67Q,EAAcvvQ,UAAUmrC,IAAM,SAASiD,GACrC,IAAIs6D,EAAM,GAIV,GAHIt6D,GAAUA,EAAO15C,SACnBg0G,EAAM5yG,KAAK0iM,MAAMpqJ,IAEft4C,KAAKq7b,aAAc,CACrB,IAAIxyM,EAAK7oP,KAAKq7b,aACVluR,EAAMntK,KAAKo7b,WACXr9R,EAAM/9J,KAAKigB,SACf2yF,GAAOu6D,EAAIx9J,MAAM,EAAGk5O,GAAIv+O,SAASyzJ,EAClC,CAED,OAAOnrD,CACR,yBC9MD,IAAIk5M,EAAgB1yI,EAAQ,OAO5BjW,EAAOx3B,QAAU,SAAwBimC,GACvC,MAAmB,kBAARA,EACFA,EAGFk6I,EAAcl6I,GAAOA,EAAIjiK,MAAM,GAAKiiK,CAC5C,uBCbD,IAAI/nK,EAAOG,SAASE,UAAUL,KAC1B8F,EAAQ9R,MAAMqM,UAAUyF,MACxBrF,EAAWpJ,OAAOgJ,UAAUI,SAwChC,SAASkxb,EAAmBn0b,GAG3B,OAFAA,EAAO,WAAaA,EAAO,IAEpB,SAAU7F,GAAS,OAAO8I,EAAS/L,KAAKiD,KAAY6F,CAAM,CACjE,CA1CDskI,EAAQ9hI,KAAO,SAAUuxH,EAAMisJ,GAC9B,IAAIj+Q,EAAOuG,EAAMpR,KAAK4D,UAAW,GAEjC,OAAI0H,GACHT,EAAKi/C,QAAQg/N,GAENx9Q,EAAK7H,MAAMo5H,EAAMhyH,IAGlB,WACN,OAAOgyH,EAAKp5H,MAAMqlR,EAAMj+Q,EAAK2zI,OAAOptI,EAAMpR,KAAK4D,YAC/C,CACD,EAEDwpI,EAAQh8H,MAAQ,SAAUnO,EAAQi6b,EAAOpmZ,GACxC,OAAO1lC,EAAMpR,KAAKiD,EAAQi6b,EAAOpmZ,EACjC,EAEDs2F,EAAQrhI,SAAW,SAAU9I,GAC5B,OAAO8I,EAAS/L,KAAKiD,EACrB,EAGDmqI,EAAQ0/J,OAASmwJ,EAAkB,QACnC7vT,EAAQw5F,OAASq2N,EAAkB,QACnC7vT,EAAQ+vT,OAASF,EAAkB,QACnC7vT,EAAQgwT,OAASH,EAAkB,QACnC7vT,EAAQm2E,QAAU05O,EAAkB,SACpC7vT,EAAQ7tI,QAAUD,MAAMC,SAAW09b,EAAkB,SACrD7vT,EAAQmrG,SAAW0kN,EAAkB,UACrC7vT,EAAQ4wF,SAAWi/N,EAAkB,UACrC7vT,EAAQs9C,SAAWuyQ,EAAkB,UACrC7vT,EAAQwrG,SAAWqkN,EAAkB,UACrC7vT,EAAQy/J,UAAYowJ,EAAkB,WACtC7vT,EAAQ0tG,WAAamiN,EAAkB,YACvC7vT,EAAQmmO,YAAc0pF,EAAkB,aACxC7vT,EAAQwlG,YAAcqqN,EAAkB,aASxC7vT,EAAQ6yN,QAAU,SAAUh9V,GAC3B,OAAQmqI,EAAQiwT,UAAUp6b,EAC1B,EAEDmqI,EAAQiwT,UAAY,SAAUp6b,GAC7B,OAAOmqI,EAAQ0/J,OAAO7pS,IAAWmqI,EAAQwlG,YAAY3vO,EACrD,EAGDmqI,EAAQkwT,YAAc,SAAUr6b,GAC/B,OAAQmqI,EAAQmwT,UAAUt6b,EAC1B,EAEDmqI,EAAQmwT,UAAY,SAAUt6b,GAC7B,OAAOA,IACLmqI,EAAQs9C,SAASznL,KACjBmqI,EAAQwrG,SAAS31O,KACjBmqI,EAAQy/J,UAAU5pS,EACpB,EAGDmqI,EAAQ2rO,aAAe,SAAU91W,GAChC,QAAKA,IAEDmqI,EAAQs9C,SAASznL,GAAgBmqI,EAAQonB,UAAUvxJ,GAEnDmqI,EAAQonB,UAAUvxJ,EAAO5C,QAAgB4C,EAAO5C,QAAU,EAEvD+sI,EAAQowT,mBAAmBv6b,GAClC,EAEDmqI,EAAQowT,mBAAqB,SAAUv6b,GACtC,IAAK,IAAIiqJ,KAAKjqJ,EAAQ,OAAO,EAE7B,OAAO,CACP,EAEDmqI,EAAQx/G,QAAU,SAAU3qB,GAC3B,OAAOmqI,EAAQmrG,SAASt1O,IACtBmqI,EAAQowT,mBAAmBv6b,IAC3BmqI,EAAQ2rO,aAAa91W,EACvB,EAGDmqI,EAAQqwT,eAAiB,SAAUn/R,GAClC,OAAOlxB,EAAQs9C,SAASpsB,IAAWjyH,SAASiyH,EAC5C,EAEDlxB,EAAQonB,UAAY,SAAU8J,GAC7B,OAAOlxB,EAAQqwT,eAAen/R,IAAW12J,KAAKQ,MAAMk2J,KAAYA,CAChE,EAEDlxB,EAAQswT,QAAU,SAAUz6b,GAC3B,OAAOA,GAA4B,kBAAXA,CACxB,EAEDmqI,EAAQuwT,OAAS,SAAU5tX,GAC1B,OACCq9D,EAAQswT,QAAQ3tX,IAChBq9D,EAAQonB,UAAUzkF,EAAK1vE,SAAW0vE,EAAK1vE,QAAU,CAClD,EAGD+sI,EAAQviG,MAAQA,MAGhBuiG,EAAQwwT,aAAe,SAAU36b,GAChC,IAAI46b,EAAa56b,EAAO8I,SAAS9I,GAEjC,OAAO46b,EAAWljV,UAAU,EAAGkjV,EAAWx9b,OAAS,EACnD,EAED+sI,EAAQ0wT,OAAS,SAAU76b,GAC1B,OAAOmqI,EAAQmrG,SAASt1O,GACvBA,EAAOoJ,YAAY0P,MAAQ,SAC3BqxH,EAAQwwT,aAAa36b,EACtB,EAGDmqI,EAAQ2wT,UAAY,SAAUlhU,EAAMhyH,EAAMi+Q,GACzC,OAAO17I,EAAQ0tG,WAAWj+G,GACzBA,EAAKp5H,MAAMqlR,GAAQrnR,KAAMoJ,QACzBC,CACD,EAGDsiI,EAAQ4wT,UAAY,SAAU/6b,EAAQvD,EAAUopR,EAAMm1K,GACrD,IAAKh7b,EAAQ,OAAOA,EAIpB,GAFA6lR,EAAOA,GAAQrnR,MAEVw8b,GAAkB7wT,EAAQ0tG,WAAW73O,EAAOa,SAChD,OAAOb,EAAOa,QAAQpE,EAAUopR,GAEjC,IAAIpmR,EAAM,EAAGo0C,EAAM7zC,EAAO5C,OAE1B,GAAI+sI,EAAQwrG,SAAS31O,GACpB,KAAOP,EAAMo0C,EAAKp0C,GAAO,EAAGhD,EAASM,KAAK8oR,EAAM7lR,EAAOib,OAAOxb,GAAMA,EAAKO,GAExE,GAAImqI,EAAQuwT,OAAO16b,GACpB,KAAOP,EAAMo0C,EAAKp0C,GAAO,EAAGhD,EAASM,KAAK8oR,EAAM7lR,EAAOP,GAAMA,EAAKO,QAE5D,GAAImqI,EAAQonB,UAAUvxJ,GAO5B,IANIA,EAAS,GACZ6zC,EAAM,EACNp0C,EAAMO,GAEA6zC,EAAM7zC,EAENP,EAAMo0C,EAAKp0C,GAAO,EAAGhD,EAASM,KAAK8oR,EAAMpmR,EAAKkF,KAAKG,IAAIrF,GAAMO,QAE9DmqI,EAAQ8wT,gBAAgBj7b,EAAQvD,EAAUopR,GAEjD,OAAO7lR,CACP,EAEDmqI,EAAQ8wT,gBAAkB,SAAUj7b,EAAQvD,EAAUopR,GACrD,IAAIpmR,EAEJ,IAAKA,KAAOO,EAAQvD,EAASM,KAAK8oR,EAAM7lR,EAAOP,GAAMA,EAAKO,GAE1D,OAAOA,CACP,EAGDmqI,EAAQ+wT,UAAY,SAAUx6b,EAAQy6b,EAAO96b,EAAQwlR,EAAMu1K,GAC1D,OAAKjxT,EAAQmwT,UAAU55b,IAIvBypI,EAFAixT,EAAsB,cAAZA,EAA0BA,EAAU,mBAE7BD,GAAO,SAAUh+b,EAAOsC,GACnC0qI,EAAQ2wT,UAAUz6b,EAAQM,UAAWklR,GAAQnlR,KACjDA,EAAOjB,GAAOtC,EAEf,IAEMuD,GAVgCA,CAWvC,EAEDypI,EAAQkxT,WAAa,SAAU36b,EAAQy6b,EAAO96b,EAAQwlR,GACrD,OAAO17I,EAAQ+wT,UAAUx6b,EAAQy6b,EAAO96b,EAAQwlR,EAAM,YACtD,EAED17I,EAAQ5nH,OAAS,SAAU7hB,EAAQy6b,EAAO96b,EAAQwlR,GACjD,OAAO17I,EAAQ+wT,UAAUx6b,EAAQy6b,GAAO,SAAUlxS,EAAGxqJ,GACpD,OAAK07b,EAAM5uR,eAAe9sK,IAEnB0qI,EAAQ2wT,UAAUz6b,EAAQM,UAAWklR,GAAQrnR,KACpD,GAAEqnR,EACH,EAGD17I,EAAQrwG,QAAU,SAAU95B,EAAQi6b,EAAOpmZ,GAC1C,OAAIs2F,EAAQ7tI,UAAkB6tI,EAAQonB,UAAU0oS,GAC/C9vT,EAAQh8H,MAAMnO,EAAQi6b,EAAOpmZ,GAC7B7zC,EAEGmqI,EAAQmmO,YAAYtwW,IAAWmqI,EAAQwrG,SAAS31O,GAC5CmqI,EAAQh8H,MAAMnO,EAAQi6b,EAAOpmZ,GAEhCs2F,EAAQuwT,OAAO16b,IAEfmqI,EAAQonB,UAAU19G,KAAMA,EAAM7zC,EAAO5C,QAE1C68b,EAAQA,GAAS,EAEV9vT,EAAQkxT,WAAW,GAAIr7b,GAAQ,SAAUiqJ,EAAG7tJ,GAClD,OAAO69b,EAAQ79b,GAAKA,GAAKy3C,CACzB,UARD,CASA,0CCWG8yB,YAlOA64Q,GADM5nK,EAAQ,MACRA,EAAQ,QACdm3K,EAAOn3K,EAAQ,OACfo3K,EAAQp3K,EAAQ,OAChBnuB,EAASmuB,EAAQ,OACjB1b,EAAS0b,EAAQ,OACjBM,EAAON,EAAQ,OACfxsC,EAASwsC,EAAAA,OAAAA,OAsCb,SAAS0jR,EAAeh9b,GACtB,IAAIqJ,EAAOnJ,KACXmJ,EAAKrJ,QAAUA,GAAW,CAAC,EAC3BqJ,EAAK4zb,aAAe5zb,EAAKrJ,QAAQmka,OAAS,CAAC,EAC3C96Z,EAAKo4U,WAAap4U,EAAKrJ,QAAQyhV,YAAcgP,EAAKzP,MAAMU,kBACxDr4U,EAAKi4U,SAAW,GAChBj4U,EAAKk4U,QAAU,GAEfl4U,EAAKo/H,GAAG,QAAQ,SAAgBo5M,EAAQv7I,EAAME,GAC5C,IAAK,IAAI1oM,EAAI,EAAG0qB,EAAMnf,EAAKi4U,SAASxiV,OAAQhB,EAAI0qB,IAAO1qB,EAAG,CACxD,IAAI+gH,EAAUx1G,EAAKi4U,SAASxjV,GAC5B,GAAI+gH,EAAQynF,OAASA,GAAQznF,EAAQ2nF,OAASA,EAK5C,OAFAn9L,EAAKi4U,SAAS5xU,OAAO5R,EAAG,QACxB+gH,EAAQgqB,QAAQi5M,SAASD,EAG5B,CACDA,EAAOphV,UACP4I,EAAKk5U,aAAaV,EACnB,GACF,CAgID,SAASq7G,EAAmBl9b,EAASurC,GACnC,IAAIliC,EAAOnJ,KACX88b,EAAe5yb,UAAUo4U,aAAa/jV,KAAK4K,EAAMrJ,GAAS,SAAS6hV,GAEjE,IAAIs7G,EAAej8G,EAAI/0M,QAAQ,EAAGixT,EAAa,CAAC,EAAG/zb,EAAKrJ,QACtD,CAAEumM,WAAYvmM,EAAQsmM,KACpBu7I,OAAQA,KAGZx4U,EAAKk4U,QAAQl4U,EAAKk4U,QAAQv+U,QAAQ6+U,IAAWs7G,EAC7C5xZ,EAAG4xZ,EACJ,GACF,CAGD,SAASC,EAAah7b,GACpB,IAAK,IAAItE,EAAI,EAAG0qB,EAAMnmB,UAAUvD,OAAQhB,EAAI0qB,IAAO1qB,EAAG,CACpD,IAAIk3J,EAAY3yJ,UAAUvE,GAC1B,GAAyB,kBAAdk3J,EAET,IADA,IAAIpzJ,EAAOR,OAAOQ,KAAKozJ,GACdpmI,EAAI,EAAG+lP,EAAS/yQ,EAAK9C,OAAQ8vB,EAAI+lP,IAAU/lP,EAAG,CACrD,IAAIqmD,EAAIrzE,EAAKgtB,QACQrlB,IAAjByrJ,EAAU//E,KACZ7yE,EAAO6yE,GAAK+/E,EAAU//E,GAEzB,CAEJ,CACD,OAAO7yE,CACR,CAtNDypI,EAAQwxT,aAMR,SAAsBr9b,GACpB,IAAIsja,EAAQ,IAAI05B,EAAeh9b,GAE/B,OADAsja,EAAMz6R,QAAU4nN,EAAK5nN,QACdy6R,CACR,EATDz3R,EAAQyxT,cAWR,SAAuBt9b,GACrB,IAAIsja,EAAQ,IAAI05B,EAAeh9b,GAI/B,OAHAsja,EAAMz6R,QAAU4nN,EAAK5nN,QACrBy6R,EAAM9gF,aAAe06G,EACrB55B,EAAMi6B,YAAc,IACbj6B,CACR,EAhBDz3R,EAAQ2xT,cAkBR,SAAuBx9b,GACrB,IAAIsja,EAAQ,IAAI05B,EAAeh9b,GAE/B,OADAsja,EAAMz6R,QAAU6nN,EAAM7nN,QACfy6R,CACR,EArBDz3R,EAAQ4xT,eAuBR,SAAwBz9b,GACtB,IAAIsja,EAAQ,IAAI05B,EAAeh9b,GAI/B,OAHAsja,EAAMz6R,QAAU6nN,EAAM7nN,QACtBy6R,EAAM9gF,aAAe06G,EACrB55B,EAAMi6B,YAAc,IACbj6B,CACR,EA0BD1pP,EAAKxV,SAAS44R,EAAgB7xS,EAAOovC,cAErCyiQ,EAAe5yb,UAAU+3U,WAAa,SAAoBh0O,EAAKnuG,GAC7D,IAAIqJ,EAAOnJ,KAGY,kBAAZF,IACTA,EAAU,CACRsmM,KAAMtmM,EACNwmM,KAAMnkM,UAAU,GAChBg+D,KAAMh+D,UAAU,KAIhBgH,EAAKk4U,QAAQziV,QAAUoB,KAAKuhV,WAE9Bp4U,EAAKi4U,SAAS1iV,KAAK,CAAC0nM,KAAMtmM,EAAQsmM,KAAME,KAAMxmM,EAAQwmM,KAAM39D,QAAS16B,IAKvE9kG,EAAK44U,iBAAiB,CAAC37I,KAAMtmM,EAAQsmM,KAAME,KAAMxmM,EAAQwmM,KAAM39D,QAAS16B,GACzE,EAED6uV,EAAe5yb,UAAU63U,iBAAmB,SAA0BpjO,GACpE,IAAIx1G,EAAOnJ,KAEXmJ,EAAKm5U,aAAa3jO,GAAS,SAASgjO,GAMlC,SAAS67G,IACPr0b,EAAKmrI,KAAK,OAAQqtM,EAAQhjO,EAAQynF,KAAMznF,EAAQ2nF,KACjD,CAED,SAASm3P,EAAgB5+b,GACvBsK,EAAKk5U,aAAaV,GAClBA,EAAOzrL,eAAe,OAAQsnS,GAC9B77G,EAAOzrL,eAAe,QAASunS,GAC/B97G,EAAOzrL,eAAe,cAAeunS,EACtC,CAdD97G,EAAOp5M,GAAG,OAAQi1T,GAClB77G,EAAOp5M,GAAG,QAASk1T,GACnB97G,EAAOp5M,GAAG,cAAek1T,GACzB9+U,EAAQgqB,QAAQi5M,SAASD,EAY1B,GACF,EAEDm7G,EAAe5yb,UAAUo4U,aAAe,SAAsBxiV,EAASurC,GACrE,IAAIliC,EAAOnJ,KACP09b,EAAc,CAAC,EACnBv0b,EAAKk4U,QAAQ3iV,KAAKg/b,GAElB,IAAIC,EAAiBT,EAAa,CAAC,EAAG/zb,EAAK4zb,aACzC,CAAE/jW,OAAQ,UACR74B,KAAMrgE,EAAQsmM,KAAO,IAAMtmM,EAAQwmM,KACnC88N,OAAO,IAGPu6B,EAAe/4B,YACjB+4B,EAAexvV,QAAUwvV,EAAexvV,SAAW,CAAC,EACpDwvV,EAAexvV,QAAQ,uBAAyB,SAC5Cy+B,EAAOvtH,KAAKs+a,EAAe/4B,WAAWt6Z,SAAS,WAGrD69D,EAAM,0BACN,IAAIy1X,EAAaz0b,EAAKw/H,QAAQg1T,GAoB9B,SAASh3P,EAAU/zF,EAAK+uO,EAAQh/F,GAI9B,GAHAi7M,EAAWrkS,qBACXooL,EAAOpoL,qBAEgB,MAAnB3mD,EAAIk1N,WACNpqK,EAAOE,MAAM+kF,EAAK/jP,OAAQ,GAC1BupE,EAAM,wCACNh/D,EAAKk4U,QAAQl4U,EAAKk4U,QAAQv+U,QAAQ46b,IAAgB/7G,EAClDt2S,EAAGs2S,OACE,CACLx5Q,EAAM,2DAA4DyqC,EAAIk1N,YACtE,IAAI/+T,EAAQ,IAAI4I,MAAM,yDAAgEihG,EAAIk1N,YAC1F/+T,EAAMihE,KAAO,aACblqE,EAAQ6oI,QAAQ2L,KAAK,QAASvrI,GAC9BI,EAAKk5U,aAAaq7G,EACnB,CACF,CAnCDE,EAAW17G,6BAA8B,EACzC07G,EAAW1mS,KAAK,YAMhB,SAAoBtkD,GAElBA,EAAIirV,SAAU,CACf,IARDD,EAAW1mS,KAAK,WAUhB,SAAmBtkD,EAAK+uO,EAAQh/F,GAE9BlzG,EAAQyuE,UAAS,WACfvX,EAAU/zF,EAAK+uO,EAAQh/F,EACxB,GACF,IAdDi7M,EAAW1mS,KAAK,UAAWyvC,GAC3Bi3P,EAAW1mS,KAAK,SAiChB,SAAiBihG,GACfylM,EAAWrkS,qBAEXpxF,EAAM,wDAAyDgwL,EAAM9gK,QAAS8gK,EAAMj9D,OACpF,IAAInyL,EAAQ,IAAI4I,MAAM,oDAA2DwmP,EAAM9gK,SACvFtuF,EAAMihE,KAAO,aACblqE,EAAQ6oI,QAAQ2L,KAAK,QAASvrI,GAC9BI,EAAKk5U,aAAaq7G,EACnB,IAxCDE,EAAWvoZ,KAyCZ,EAEDynZ,EAAe5yb,UAAUm4U,aAAe,SAAsBV,GAC5D,IAAIv6U,EAAMpH,KAAKqhV,QAAQv+U,QAAQ6+U,GAC/B,IAAa,IAATv6U,EAAJ,CAEApH,KAAKqhV,QAAQ7xU,OAAOpI,EAAK,GAEzB,IAAIu3G,EAAU3+G,KAAKohV,SAAShqP,QACxBunB,GAGF3+G,KAAK+hV,iBAAiBpjO,EARF,CAUvB,EAoCCx2C,EADEsnE,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,YAAc,aAAahhW,KAAKgyH,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,YAClD,WACN,IAAIr1W,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,WACf,kBAAZiH,EAAK,GACdA,EAAK,GAAK,WAAaA,EAAK,GAE5BA,EAAKi/C,QAAQ,WAEf5zC,QAAQ1L,MAAM/G,MAAMyS,QAASrL,EAC9B,EAEO,WAAa,EAEvBuiI,EAAQxjE,MAAQA,yBCnPhB,SAAUm5W,GACV,aAQA,IAAI96C,EAAK,SAASp3U,GAChB,IAAIxxD,EAAGyb,EAAI,IAAIe,aAAa,IAC5B,GAAIg1C,EAAM,IAAKxxD,EAAI,EAAGA,EAAIwxD,EAAKxwD,OAAQhB,IAAKyb,EAAEzb,GAAKwxD,EAAKxxD,GACxD,OAAOyb,CACR,EAGGqnS,EAAc,WAAuB,MAAM,IAAI/uS,MAAM,UAAa,EAElEmsb,EAAK,IAAItsb,WAAW,IACpBusb,EAAK,IAAIvsb,WAAW,IAAKusb,EAAG,GAAK,EAErC,IAAIC,EAAMx3D,IACNy3D,EAAMz3D,EAAG,CAAC,IACV03D,EAAU13D,EAAG,CAAC,MAAQ,IACtBxzK,EAAIwzK,EAAG,CAAC,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,IAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,QAChI23D,EAAK33D,EAAG,CAAC,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,IAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,OACjImU,EAAInU,EAAG,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,OAChIuV,EAAIvV,EAAG,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,QAChItlO,EAAIslO,EAAG,CAAC,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,IAAQ,MAAQ,MAAQ,MAAQ,KAAQ,QAEpI,SAAS43D,EAAKp7b,EAAGpF,EAAG8a,EAAG9I,GACrB5M,EAAEpF,GAAQ8a,GAAK,GAAM,IACrB1V,EAAEpF,EAAE,GAAM8a,GAAK,GAAM,IACrB1V,EAAEpF,EAAE,GAAM8a,GAAM,EAAK,IACrB1V,EAAEpF,EAAE,GAAS,IAAJ8a,EACT1V,EAAEpF,EAAE,GAAMgS,GAAK,GAAO,IACtB5M,EAAEpF,EAAE,GAAMgS,GAAK,GAAO,IACtB5M,EAAEpF,EAAE,GAAMgS,GAAM,EAAM,IACtB5M,EAAEpF,EAAE,GAAS,IAAJgS,CACV,CAED,SAAS8lT,EAAG1yT,EAAG0rQ,EAAIzrQ,EAAG0wY,EAAIjjY,GACxB,IAAI9S,EAAE2a,EAAI,EACV,IAAK3a,EAAI,EAAGA,EAAI8S,EAAG9S,IAAK2a,GAAKvV,EAAE0rQ,EAAG9wQ,GAAGqF,EAAE0wY,EAAG/1Y,GAC1C,OAAQ,EAAM2a,EAAI,IAAO,GAAM,CAChC,CAED,SAAS8lb,EAAiBr7b,EAAG0rQ,EAAIzrQ,EAAG0wY,GAClC,OAAOj+E,EAAG1yT,EAAE0rQ,EAAGzrQ,EAAE0wY,EAAG,GACrB,CAED,SAAS2qD,EAAiBt7b,EAAG0rQ,EAAIzrQ,EAAG0wY,GAClC,OAAOj+E,EAAG1yT,EAAE0rQ,EAAGzrQ,EAAE0wY,EAAG,GACrB,CA4UD,SAAS4qD,EAAoB1zQ,EAAIknH,EAAIh9N,EAAElhE,IA1UvC,SAAsB22F,EAAGhvF,EAAGu5D,EAAGlhE,GAsB7B,IArBA,IAmBeqX,EAnBXsza,EAAc,IAAR3qb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAC9E4qb,EAAc,IAAR1pX,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAC9E2pX,EAAc,IAAR3pX,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAC9E4pX,EAAc,IAAR5pX,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9E6pX,EAAc,IAAR7pX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9E8pX,EAAc,IAARhrb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAC9Eirb,EAAc,IAARtjb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAC9Eujb,EAAc,IAARvjb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAC9Ewjb,EAAc,IAARxjb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9Eyjb,EAAc,IAARzjb,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9E0jb,EAAc,IAARrrb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9Esrb,EAAc,IAARpqX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9EqqX,EAAc,IAARrqX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9EsqX,EAAc,IAARtqX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9EuqX,EAAc,IAARvqX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAC9EwqX,EAAc,IAAR1rb,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAE9E+T,EAAK42a,EAAIx2a,EAAKy2a,EAAI3oa,EAAK4oa,EAAIpmJ,EAAKqmJ,EAAIhwL,EAAKiwL,EAAIY,EAAKX,EAAIY,EAAKX,EAAIY,EAAKX,EACpE3jN,EAAK4jN,EAAIW,EAAKV,EAAIW,EAAMV,EAAKW,EAAMV,EAAKW,EAAMV,EAAKW,EAAMV,EAAKW,EAAMV,EACpEW,EAAMV,EAED3hc,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAQ3BgqB,IADAsD,GADA40a,IADA50a,GADAkwN,IADAlwN,GADAyjP,IADAzjP,EAAItD,EAAKk4a,EAAM,IACN,EAAI50a,IAAK,IACTtD,EAAK,IACL,EAAIsD,IAAK,IACTyjP,EAAK,IACJ,GAAKzjP,IAAK,IACVkwN,EAAK,IACN,GAAKlwN,IAAK,GASnBs0a,IADAt0a,GADAlD,IADAkD,GADA60a,IADA70a,GADAy0a,IADAz0a,EAAIs0a,EAAKx3a,EAAK,IACL,EAAIkD,IAAK,IACTs0a,EAAK,IACJ,EAAIt0a,IAAK,IACTy0a,EAAK,IACN,GAAKz0a,IAAK,IACV60a,EAAM,IACN,GAAK70a,IAAK,GASnB00a,IADA10a,GADAu0a,IADAv0a,GADA4K,IADA5K,GADA80a,IADA90a,EAAI00a,EAAMH,EAAK,IACL,EAAIv0a,IAAK,IACT00a,EAAM,IACP,EAAI10a,IAAK,IACT80a,EAAM,IACN,GAAK90a,IAAK,IACV4K,EAAK,IACJ,GAAK5K,IAAK,GASpB+0a,IADA/0a,GADA20a,IADA30a,GADAw0a,IADAx0a,GADAotR,IADAptR,EAAI+0a,EAAMJ,EAAM,IACP,EAAI30a,IAAK,IACT+0a,EAAM,IACN,EAAI/0a,IAAK,IACTotR,EAAK,IACJ,GAAKptR,IAAK,IACVw0a,EAAK,IACL,GAAKx0a,IAAK,GASpBtD,IADAsD,GADAotR,IADAptR,GADA4K,IADA5K,GADAlD,IADAkD,EAAItD,EAAK0wR,EAAK,IACL,EAAIptR,IAAK,IACTtD,EAAK,IACL,EAAIsD,IAAK,IACTlD,EAAK,IACL,GAAKkD,IAAK,IACV4K,EAAK,IACL,GAAK5K,IAAK,GASnBs0a,IADAt0a,GADAyjP,IADAzjP,GADAw0a,IADAx0a,GADAu0a,IADAv0a,EAAIs0a,EAAK7wL,EAAK,IACL,EAAIzjP,IAAK,IACTs0a,EAAK,IACL,EAAIt0a,IAAK,IACTu0a,EAAK,IACL,GAAKv0a,IAAK,IACVw0a,EAAK,IACL,GAAKx0a,IAAK,GASnB00a,IADA10a,GADAy0a,IADAz0a,GADAkwN,IADAlwN,GADA20a,IADA30a,EAAI00a,EAAMD,EAAK,IACL,EAAIz0a,IAAK,IACT00a,EAAM,IACP,EAAI10a,IAAK,IACT20a,EAAM,IACN,GAAK30a,IAAK,IACVkwN,EAAK,IACJ,GAAKlwN,IAAK,GASpB+0a,IADA/0a,GADA80a,IADA90a,GADA60a,IADA70a,GADA40a,IADA50a,EAAI+0a,EAAMD,EAAM,IACN,EAAI90a,IAAK,IACT+0a,EAAM,IACN,EAAI/0a,IAAK,IACT40a,EAAM,IACN,GAAK50a,IAAK,IACV60a,EAAM,IACN,GAAK70a,IAAK,GAErBtD,EAAMA,EAAM42a,EAAK,EACjBx2a,EAAMA,EAAMy2a,EAAK,EACjB3oa,EAAMA,EAAM4oa,EAAK,EACjBpmJ,EAAMA,EAAMqmJ,EAAK,EACjBhwL,EAAMA,EAAMiwL,EAAK,EACjBY,EAAMA,EAAMX,EAAK,EACjBY,EAAMA,EAAMX,EAAK,EACjBY,EAAMA,EAAMX,EAAK,EACjB3jN,EAAMA,EAAM4jN,EAAK,EACjBW,EAAMA,EAAMV,EAAK,EAClBW,EAAMA,EAAMV,EAAM,EAClBW,EAAMA,EAAMV,EAAM,EAClBW,EAAMA,EAAMV,EAAM,EAClBW,EAAMA,EAAMV,EAAM,EAClBW,EAAMA,EAAMV,EAAM,EAClBW,EAAMA,EAAMV,EAAM,EAElB/0V,EAAG,GAAK5iF,IAAQ,EAAI,IACpB4iF,EAAG,GAAK5iF,IAAQ,EAAI,IACpB4iF,EAAG,GAAK5iF,IAAO,GAAK,IACpB4iF,EAAG,GAAK5iF,IAAO,GAAK,IAEpB4iF,EAAG,GAAKxiF,IAAQ,EAAI,IACpBwiF,EAAG,GAAKxiF,IAAQ,EAAI,IACpBwiF,EAAG,GAAKxiF,IAAO,GAAK,IACpBwiF,EAAG,GAAKxiF,IAAO,GAAK,IAEpBwiF,EAAG,GAAK10E,IAAQ,EAAI,IACpB00E,EAAG,GAAK10E,IAAQ,EAAI,IACpB00E,EAAE,IAAM10E,IAAO,GAAK,IACpB00E,EAAE,IAAM10E,IAAO,GAAK,IAEpB00E,EAAE,IAAM8tM,IAAQ,EAAI,IACpB9tM,EAAE,IAAM8tM,IAAQ,EAAI,IACpB9tM,EAAE,IAAM8tM,IAAO,GAAK,IACpB9tM,EAAE,IAAM8tM,IAAO,GAAK,IAEpB9tM,EAAE,IAAMmkK,IAAQ,EAAI,IACpBnkK,EAAE,IAAMmkK,IAAQ,EAAI,IACpBnkK,EAAE,IAAMmkK,IAAO,GAAK,IACpBnkK,EAAE,IAAMmkK,IAAO,GAAK,IAEpBnkK,EAAE,IAAMg1V,IAAQ,EAAI,IACpBh1V,EAAE,IAAMg1V,IAAQ,EAAI,IACpBh1V,EAAE,IAAMg1V,IAAO,GAAK,IACpBh1V,EAAE,IAAMg1V,IAAO,GAAK,IAEpBh1V,EAAE,IAAMi1V,IAAQ,EAAI,IACpBj1V,EAAE,IAAMi1V,IAAQ,EAAI,IACpBj1V,EAAE,IAAMi1V,IAAO,GAAK,IACpBj1V,EAAE,IAAMi1V,IAAO,GAAK,IAEpBj1V,EAAE,IAAMk1V,IAAQ,EAAI,IACpBl1V,EAAE,IAAMk1V,IAAQ,EAAI,IACpBl1V,EAAE,IAAMk1V,IAAO,GAAK,IACpBl1V,EAAE,IAAMk1V,IAAO,GAAK,IAEpBl1V,EAAE,IAAM4wI,IAAQ,EAAI,IACpB5wI,EAAE,IAAM4wI,IAAQ,EAAI,IACpB5wI,EAAE,IAAM4wI,IAAO,GAAK,IACpB5wI,EAAE,IAAM4wI,IAAO,GAAK,IAEpB5wI,EAAE,IAAMm1V,IAAQ,EAAI,IACpBn1V,EAAE,IAAMm1V,IAAQ,EAAI,IACpBn1V,EAAE,IAAMm1V,IAAO,GAAK,IACpBn1V,EAAE,IAAMm1V,IAAO,GAAK,IAEpBn1V,EAAE,IAAMo1V,IAAS,EAAI,IACrBp1V,EAAE,IAAMo1V,IAAS,EAAI,IACrBp1V,EAAE,IAAMo1V,IAAQ,GAAK,IACrBp1V,EAAE,IAAMo1V,IAAQ,GAAK,IAErBp1V,EAAE,IAAMq1V,IAAS,EAAI,IACrBr1V,EAAE,IAAMq1V,IAAS,EAAI,IACrBr1V,EAAE,IAAMq1V,IAAQ,GAAK,IACrBr1V,EAAE,IAAMq1V,IAAQ,GAAK,IAErBr1V,EAAE,IAAMs1V,IAAS,EAAI,IACrBt1V,EAAE,IAAMs1V,IAAS,EAAI,IACrBt1V,EAAE,IAAMs1V,IAAQ,GAAK,IACrBt1V,EAAE,IAAMs1V,IAAQ,GAAK,IAErBt1V,EAAE,IAAMu1V,IAAS,EAAI,IACrBv1V,EAAE,IAAMu1V,IAAS,EAAI,IACrBv1V,EAAE,IAAMu1V,IAAQ,GAAK,IACrBv1V,EAAE,IAAMu1V,IAAQ,GAAK,IAErBv1V,EAAE,IAAMw1V,IAAS,EAAI,IACrBx1V,EAAE,IAAMw1V,IAAS,EAAI,IACrBx1V,EAAE,IAAMw1V,IAAQ,GAAK,IACrBx1V,EAAE,IAAMw1V,IAAQ,GAAK,IAErBx1V,EAAE,IAAMy1V,IAAS,EAAI,IACrBz1V,EAAE,IAAMy1V,IAAS,EAAI,IACrBz1V,EAAE,IAAMy1V,IAAQ,GAAK,IACrBz1V,EAAE,IAAMy1V,IAAQ,GAAK,GACtB,CA4ICC,CAAar1Q,EAAIknH,EAAIh9N,EAAElhE,EACxB,CAED,SAASssb,EAAqBt1Q,EAAIknH,EAAIh9N,EAAElhE,IA7IxC,SAAuB22F,EAAEhvF,EAAEu5D,EAAElhE,GAsB3B,IArBA,IAmBeqX,EAFXtD,EAjBc,IAAR/T,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAiBrEmU,EAhBK,IAAR+sD,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAgB5Dj/C,EAfJ,IAARi/C,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAenDujO,EAdb,IAARvjO,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAc1C45L,EAbtB,IAAR55L,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAajCyqX,EAZ/B,IAAR3rb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAYxB4rb,EAXxC,IAARjkb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAWfkkb,EAVjD,IAARlkb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAG,KAAY,IAAc,IAARA,EAAG,KAAY,GAW9E4/N,EAVc,IAAR5/N,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAUrEmkb,EATK,IAARnkb,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAS5Dokb,EARJ,IAAR/rb,EAAG,IAAqB,IAARA,EAAG,KAAY,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAQjDgsb,EAPf,IAAR9qX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAOtC+qX,EAN1B,IAAR/qX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAM3BgrX,EALrC,IAARhrX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAKhBirX,EAJhD,IAARjrX,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAK9EkrX,EAJc,IAARpsb,EAAE,KAAsB,IAARA,EAAE,MAAa,GAAa,IAARA,EAAE,MAAa,IAAc,IAARA,EAAE,MAAa,GAMzEjW,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAQ3BgqB,IADAsD,GADA40a,IADA50a,GADAkwN,IADAlwN,GADAyjP,IADAzjP,EAAItD,EAAKk4a,EAAM,IACN,EAAI50a,IAAK,IACTtD,EAAK,IACL,EAAIsD,IAAK,IACTyjP,EAAK,IACJ,GAAKzjP,IAAK,IACVkwN,EAAK,IACN,GAAKlwN,IAAK,GASnBs0a,IADAt0a,GADAlD,IADAkD,GADA60a,IADA70a,GADAy0a,IADAz0a,EAAIs0a,EAAKx3a,EAAK,IACL,EAAIkD,IAAK,IACTs0a,EAAK,IACJ,EAAIt0a,IAAK,IACTy0a,EAAK,IACN,GAAKz0a,IAAK,IACV60a,EAAM,IACN,GAAK70a,IAAK,GASnB00a,IADA10a,GADAu0a,IADAv0a,GADA4K,IADA5K,GADA80a,IADA90a,EAAI00a,EAAMH,EAAK,IACL,EAAIv0a,IAAK,IACT00a,EAAM,IACP,EAAI10a,IAAK,IACT80a,EAAM,IACN,GAAK90a,IAAK,IACV4K,EAAK,IACJ,GAAK5K,IAAK,GASpB+0a,IADA/0a,GADA20a,IADA30a,GADAw0a,IADAx0a,GADAotR,IADAptR,EAAI+0a,EAAMJ,EAAM,IACP,EAAI30a,IAAK,IACT+0a,EAAM,IACN,EAAI/0a,IAAK,IACTotR,EAAK,IACJ,GAAKptR,IAAK,IACVw0a,EAAK,IACL,GAAKx0a,IAAK,GASpBtD,IADAsD,GADAotR,IADAptR,GADA4K,IADA5K,GADAlD,IADAkD,EAAItD,EAAK0wR,EAAK,IACL,EAAIptR,IAAK,IACTtD,EAAK,IACL,EAAIsD,IAAK,IACTlD,EAAK,IACL,GAAKkD,IAAK,IACV4K,EAAK,IACL,GAAK5K,IAAK,GASnBs0a,IADAt0a,GADAyjP,IADAzjP,GADAw0a,IADAx0a,GADAu0a,IADAv0a,EAAIs0a,EAAK7wL,EAAK,IACL,EAAIzjP,IAAK,IACTs0a,EAAK,IACL,EAAIt0a,IAAK,IACTu0a,EAAK,IACL,GAAKv0a,IAAK,IACVw0a,EAAK,IACL,GAAKx0a,IAAK,GASnB00a,IADA10a,GADAy0a,IADAz0a,GADAkwN,IADAlwN,GADA20a,IADA30a,EAAI00a,EAAMD,EAAK,IACL,EAAIz0a,IAAK,IACT00a,EAAM,IACP,EAAI10a,IAAK,IACT20a,EAAM,IACN,GAAK30a,IAAK,IACVkwN,EAAK,IACJ,GAAKlwN,IAAK,GASpB+0a,IADA/0a,GADA80a,IADA90a,GADA60a,IADA70a,GADA40a,IADA50a,EAAI+0a,EAAMD,EAAM,IACN,EAAI90a,IAAK,IACT+0a,EAAM,IACN,EAAI/0a,IAAK,IACT40a,EAAM,IACN,GAAK50a,IAAK,IACV60a,EAAM,IACN,GAAK70a,IAAK,GAGtBs/E,EAAG,GAAK5iF,IAAQ,EAAI,IACpB4iF,EAAG,GAAK5iF,IAAQ,EAAI,IACpB4iF,EAAG,GAAK5iF,IAAO,GAAK,IACpB4iF,EAAG,GAAK5iF,IAAO,GAAK,IAEpB4iF,EAAG,GAAKg1V,IAAQ,EAAI,IACpBh1V,EAAG,GAAKg1V,IAAQ,EAAI,IACpBh1V,EAAG,GAAKg1V,IAAO,GAAK,IACpBh1V,EAAG,GAAKg1V,IAAO,GAAK,IAEpBh1V,EAAG,GAAKo1V,IAAS,EAAI,IACrBp1V,EAAG,GAAKo1V,IAAS,EAAI,IACrBp1V,EAAE,IAAMo1V,IAAQ,GAAK,IACrBp1V,EAAE,IAAMo1V,IAAQ,GAAK,IAErBp1V,EAAE,IAAMy1V,IAAS,EAAI,IACrBz1V,EAAE,IAAMy1V,IAAS,EAAI,IACrBz1V,EAAE,IAAMy1V,IAAQ,GAAK,IACrBz1V,EAAE,IAAMy1V,IAAQ,GAAK,IAErBz1V,EAAE,IAAMi1V,IAAQ,EAAI,IACpBj1V,EAAE,IAAMi1V,IAAQ,EAAI,IACpBj1V,EAAE,IAAMi1V,IAAO,GAAK,IACpBj1V,EAAE,IAAMi1V,IAAO,GAAK,IAEpBj1V,EAAE,IAAMk1V,IAAQ,EAAI,IACpBl1V,EAAE,IAAMk1V,IAAQ,EAAI,IACpBl1V,EAAE,IAAMk1V,IAAO,GAAK,IACpBl1V,EAAE,IAAMk1V,IAAO,GAAK,IAEpBl1V,EAAE,IAAM4wI,IAAQ,EAAI,IACpB5wI,EAAE,IAAM4wI,IAAQ,EAAI,IACpB5wI,EAAE,IAAM4wI,IAAO,GAAK,IACpB5wI,EAAE,IAAM4wI,IAAO,GAAK,IAEpB5wI,EAAE,IAAMm1V,IAAQ,EAAI,IACpBn1V,EAAE,IAAMm1V,IAAQ,EAAI,IACpBn1V,EAAE,IAAMm1V,IAAO,GAAK,IACpBn1V,EAAE,IAAMm1V,IAAO,GAAK,GACrB,CAOCS,CAAcv1Q,EAAIknH,EAAIh9N,EAAElhE,EACzB,CAED,IAAIs+C,EAAQ,IAAI3gD,WAAW,CAAC,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,MAGhG,SAAS6ub,EAA0Bxsb,EAAEysb,EAAK3vb,EAAE4vb,EAAK3sb,EAAElD,EAAEqkE,GACnD,IACI7pD,EAAGttB,EADHyF,EAAI,IAAImO,WAAW,IAAKxO,EAAI,IAAIwO,WAAW,IAE/C,IAAK5T,EAAI,EAAGA,EAAI,GAAIA,IAAKyF,EAAEzF,GAAK,EAChC,IAAKA,EAAI,EAAGA,EAAI,EAAGA,IAAKyF,EAAEzF,GAAK8S,EAAE9S,GACjC,KAAOgW,GAAK,IAAI,CAEd,IADA2qb,EAAoBv7b,EAAEK,EAAE0xE,EAAE5iB,GACrBv0D,EAAI,EAAGA,EAAI,GAAIA,IAAKiW,EAAEysb,EAAK1ic,GAAK+S,EAAE4vb,EAAK3ic,GAAKoF,EAAEpF,GAEnD,IADAstB,EAAI,EACCttB,EAAI,EAAGA,EAAI,GAAIA,IAClBstB,EAAIA,GAAY,IAAP7nB,EAAEzF,IAAa,EACxByF,EAAEzF,GAAS,IAAJstB,EACPA,KAAO,EAETtX,GAAK,GACL0sb,GAAQ,GACRC,GAAQ,EACT,CACD,GAAI3sb,EAAI,EAEN,IADA2qb,EAAoBv7b,EAAEK,EAAE0xE,EAAE5iB,GACrBv0D,EAAI,EAAGA,EAAIgW,EAAGhW,IAAKiW,EAAEysb,EAAK1ic,GAAK+S,EAAE4vb,EAAK3ic,GAAKoF,EAAEpF,GAEpD,OAAO,CACR,CAED,SAAS4ic,EAAsB3sb,EAAEysb,EAAK1sb,EAAElD,EAAEqkE,GACxC,IACI7pD,EAAGttB,EADHyF,EAAI,IAAImO,WAAW,IAAKxO,EAAI,IAAIwO,WAAW,IAE/C,IAAK5T,EAAI,EAAGA,EAAI,GAAIA,IAAKyF,EAAEzF,GAAK,EAChC,IAAKA,EAAI,EAAGA,EAAI,EAAGA,IAAKyF,EAAEzF,GAAK8S,EAAE9S,GACjC,KAAOgW,GAAK,IAAI,CAEd,IADA2qb,EAAoBv7b,EAAEK,EAAE0xE,EAAE5iB,GACrBv0D,EAAI,EAAGA,EAAI,GAAIA,IAAKiW,EAAEysb,EAAK1ic,GAAKoF,EAAEpF,GAEvC,IADAstB,EAAI,EACCttB,EAAI,EAAGA,EAAI,GAAIA,IAClBstB,EAAIA,GAAY,IAAP7nB,EAAEzF,IAAa,EACxByF,EAAEzF,GAAS,IAAJstB,EACPA,KAAO,EAETtX,GAAK,GACL0sb,GAAQ,EACT,CACD,GAAI1sb,EAAI,EAEN,IADA2qb,EAAoBv7b,EAAEK,EAAE0xE,EAAE5iB,GACrBv0D,EAAI,EAAGA,EAAIgW,EAAGhW,IAAKiW,EAAEysb,EAAK1ic,GAAKoF,EAAEpF,GAExC,OAAO,CACR,CAED,SAAS6ic,EAAc5sb,EAAEysb,EAAK/nb,EAAE7H,EAAEqkE,GAChC,IAAI1hE,EAAI,IAAI7B,WAAW,IACvB2ub,EAAqB9sb,EAAE3C,EAAEqkE,EAAE5iB,GAE3B,IADA,IAAIuuY,EAAK,IAAIlvb,WAAW,GACf5T,EAAI,EAAGA,EAAI,EAAGA,IAAK8ic,EAAG9ic,GAAK8S,EAAE9S,EAAE,IACxC,OAAO4ic,EAAsB3sb,EAAEysb,EAAK/nb,EAAEmob,EAAGrtb,EAC1C,CAED,SAASstb,EAAkB9sb,EAAEysb,EAAK3vb,EAAE4vb,EAAKhob,EAAE7H,EAAEqkE,GAC3C,IAAI1hE,EAAI,IAAI7B,WAAW,IACvB2ub,EAAqB9sb,EAAE3C,EAAEqkE,EAAE5iB,GAE3B,IADA,IAAIuuY,EAAK,IAAIlvb,WAAW,GACf5T,EAAI,EAAGA,EAAI,EAAGA,IAAK8ic,EAAG9ic,GAAK8S,EAAE9S,EAAE,IACxC,OAAOyic,EAA0Bxsb,EAAEysb,EAAK3vb,EAAE4vb,EAAKhob,EAAEmob,EAAGrtb,EACrD,CAOD,IAAIutb,EAAW,SAAS3/b,GAQtB,IAAIswB,EAAIC,EAAI42I,EAAI4lG,EAAI6yL,EAAIC,EAAIC,EAAIC,EAPhChhc,KAAKs4C,OAAS,IAAI9mC,WAAW,IAC7BxR,KAAKqZ,EAAI,IAAI9H,YAAY,IACzBvR,KAAK0Y,EAAI,IAAInH,YAAY,IACzBvR,KAAK+4K,IAAM,IAAIxnK,YAAY,GAC3BvR,KAAKihc,SAAW,EAChBjhc,KAAK6pS,IAAM,EAIXt4Q,EAAe,IAAVtwB,EAAK,IAAuB,IAAVA,EAAK,KAAc,EAAGjB,KAAKqZ,EAAE,GAAkC,KAA3BkY,EAC3DC,EAAe,IAAVvwB,EAAK,IAAuB,IAAVA,EAAK,KAAc,EAAGjB,KAAKqZ,EAAE,GAAkC,MAA3BkY,IAAO,GAAOC,GAAO,GAChF42I,EAAe,IAAVnnK,EAAK,IAAuB,IAAVA,EAAK,KAAc,EAAGjB,KAAKqZ,EAAE,GAAkC,MAA3BmY,IAAO,GAAO42I,GAAO,GAChF4lG,EAAe,IAAV/sQ,EAAK,IAAuB,IAAVA,EAAK,KAAc,EAAGjB,KAAKqZ,EAAE,GAAkC,MAA3B+uJ,IAAQ,EAAM4lG,GAAO,GAChF6yL,EAAe,IAAV5/b,EAAK,IAAuB,IAAVA,EAAK,KAAc,EAAGjB,KAAKqZ,EAAE,GAAkC,KAA3B20P,IAAQ,EAAM6yL,GAAM,IAC/E7gc,KAAKqZ,EAAE,GAAOwnb,IAAQ,EAAM,KAC5BC,EAAe,IAAV7/b,EAAI,KAAwB,IAAVA,EAAI,MAAe,EAAGjB,KAAKqZ,EAAE,GAAkC,MAA3Bwnb,IAAO,GAAOC,GAAO,GAChFC,EAAe,IAAV9/b,EAAI,KAAwB,IAAVA,EAAI,MAAe,EAAGjB,KAAKqZ,EAAE,GAAkC,MAA3Bynb,IAAO,GAAOC,GAAO,GAChFC,EAAe,IAAV//b,EAAI,KAAwB,IAAVA,EAAI,MAAe,EAAGjB,KAAKqZ,EAAE,GAAkC,MAA3B0nb,IAAQ,EAAMC,GAAO,GAChFhhc,KAAKqZ,EAAE,GAAO2nb,IAAQ,EAAM,IAE5Bhhc,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,EACnDjB,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,EACnDjB,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,EACnDjB,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,EACnDjB,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,EACnDjB,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,EACnDjB,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,EACnDjB,KAAK+4K,IAAI,GAAe,IAAV93K,EAAI,KAAwB,IAAVA,EAAI,MAAe,CACpD,EAmUD,SAASigc,EAAmBr2Q,EAAKs2Q,EAAQxwb,EAAG4vb,EAAM7vb,EAAGqkE,GACnD,IAAI1hE,EAAI,IAAIutb,EAAS7rX,GAGrB,OAFA1hE,EAAEyR,OAAOnU,EAAG4vb,EAAM7vb,GAClB2C,EAAE26D,OAAO68G,EAAKs2Q,GACP,CACR,CAED,SAASC,EAA0B1ob,EAAG2ob,EAAM1wb,EAAG4vb,EAAM7vb,EAAGqkE,GACtD,IAAI/xE,EAAI,IAAIwO,WAAW,IAEvB,OADA0vb,EAAmBl+b,EAAE,EAAE2N,EAAE4vb,EAAK7vb,EAAEqkE,GACzBspX,EAAiB3lb,EAAE2ob,EAAKr+b,EAAE,EAClC,CAED,SAASs+b,EAAiBztb,EAAElD,EAAE4H,EAAE7H,EAAEqkE,GAChC,IAAIn3E,EACJ,GAAI2a,EAAI,GAAI,OAAQ,EAGpB,IAFAoob,EAAkB9sb,EAAE,EAAElD,EAAE,EAAE4H,EAAE7H,EAAEqkE,GAC9BmsX,EAAmBrtb,EAAG,GAAIA,EAAG,GAAI0E,EAAI,GAAI1E,GACpCjW,EAAI,EAAGA,EAAI,GAAIA,IAAKiW,EAAEjW,GAAK,EAChC,OAAO,CACR,CAED,SAAS2jc,EAAsB5wb,EAAEkD,EAAE0E,EAAE7H,EAAEqkE,GACrC,IAAIn3E,EACAoF,EAAI,IAAIwO,WAAW,IACvB,GAAI+G,EAAI,GAAI,OAAQ,EAEpB,GADAkob,EAAcz9b,EAAE,EAAE,GAAG0N,EAAEqkE,GACiC,IAApDqsX,EAA0Bvtb,EAAG,GAAGA,EAAG,GAAG0E,EAAI,GAAGvV,GAAU,OAAQ,EAEnE,IADA29b,EAAkBhwb,EAAE,EAAEkD,EAAE,EAAE0E,EAAE7H,EAAEqkE,GACzBn3E,EAAI,EAAGA,EAAI,GAAIA,IAAK+S,EAAE/S,GAAK,EAChC,OAAO,CACR,CAED,SAAS4jc,EAASnob,EAAGvP,GACnB,IAAIlM,EACJ,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKyb,EAAEzb,GAAU,EAALkM,EAAElM,EACnC,CAED,SAAS6jc,EAASj3V,GAChB,IAAI5sG,EAAGkX,EAAGjB,EAAI,EACd,IAAKjW,EAAI,EAAGA,EAAI,GAAIA,IAClBkX,EAAI01F,EAAE5sG,GAAKiW,EAAI,MACfA,EAAI1N,KAAKQ,MAAMmO,EAAI,OACnB01F,EAAE5sG,GAAKkX,EAAQ,MAAJjB,EAEb22F,EAAE,IAAM32F,EAAE,EAAI,IAAMA,EAAE,EACvB,CAED,SAAS6tb,EAASlmb,EAAG7Y,EAAGiR,GAEtB,IADA,IAAI/C,EAAGgD,IAAMD,EAAE,GACNhW,EAAI,EAAGA,EAAI,GAAIA,IACtBiT,EAAIgD,GAAK2H,EAAE5d,GAAK+E,EAAE/E,IAClB4d,EAAE5d,IAAMiT,EACRlO,EAAE/E,IAAMiT,CAEX,CAED,SAAS8wb,EAAUn3V,EAAG95F,GACpB,IAAI9S,EAAG8wB,EAAG9a,EACNjD,EAAI61X,IAAM31X,EAAI21X,IAClB,IAAK5oY,EAAI,EAAGA,EAAI,GAAIA,IAAKiT,EAAEjT,GAAK8S,EAAE9S,GAIlC,IAHA6jc,EAAS5wb,GACT4wb,EAAS5wb,GACT4wb,EAAS5wb,GACJ6d,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAEtB,IADA/d,EAAE,GAAKE,EAAE,GAAK,MACTjT,EAAI,EAAGA,EAAI,GAAIA,IAClB+S,EAAE/S,GAAKiT,EAAEjT,GAAK,OAAW+S,EAAE/S,EAAE,IAAI,GAAM,GACvC+S,EAAE/S,EAAE,IAAM,MAEZ+S,EAAE,IAAME,EAAE,IAAM,OAAWF,EAAE,KAAK,GAAM,GACxCiD,EAAKjD,EAAE,KAAK,GAAM,EAClBA,EAAE,KAAO,MACT+wb,EAAS7wb,EAAGF,EAAG,EAAEiD,EAClB,CACD,IAAKhW,EAAI,EAAGA,EAAI,GAAIA,IAClB4sG,EAAE,EAAE5sG,GAAY,IAAPiT,EAAEjT,GACX4sG,EAAE,EAAE5sG,EAAE,GAAKiT,EAAEjT,IAAI,CAEpB,CAED,SAASgkc,EAAS93b,EAAG8J,GACnB,IAAIC,EAAI,IAAIrC,WAAW,IAAK+G,EAAI,IAAI/G,WAAW,IAG/C,OAFAmwb,EAAU9tb,EAAG/J,GACb63b,EAAUppb,EAAG3E,GACN0qb,EAAiBzqb,EAAG,EAAG0E,EAAG,EAClC,CAED,SAASspb,EAAS/3b,GAChB,IAAIyO,EAAI,IAAI/G,WAAW,IAEvB,OADAmwb,EAAUppb,EAAGzO,GACC,EAAPyO,EAAE,EACV,CAED,SAASupb,EAAYt3V,EAAG95F,GACtB,IAAI9S,EACJ,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAK4sG,EAAE5sG,GAAK8S,EAAE,EAAE9S,IAAM8S,EAAE,EAAE9S,EAAE,IAAM,GACtD4sG,EAAE,KAAO,KACV,CAED,SAASsoH,EAAEtoH,EAAG1gG,EAAG8J,GACf,IAAK,IAAIhW,EAAI,EAAGA,EAAI,GAAIA,IAAK4sG,EAAE5sG,GAAKkM,EAAElM,GAAKgW,EAAEhW,EAC9C,CAED,SAASo+Y,EAAExxS,EAAG1gG,EAAG8J,GACf,IAAK,IAAIhW,EAAI,EAAGA,EAAI,GAAIA,IAAK4sG,EAAE5sG,GAAKkM,EAAElM,GAAKgW,EAAEhW,EAC9C,CAED,SAAS+vQ,EAAEnjK,EAAG1gG,EAAG8J,GACf,IAAIkB,EAAGjB,EACJ0d,EAAK,EAAIC,EAAK,EAAI42I,EAAK,EAAI4lG,EAAK,EAAI6yL,EAAK,EAAIC,EAAK,EAAIC,EAAK,EAAIC,EAAK,EACpEe,EAAK,EAAIC,EAAK,EAAGC,EAAM,EAAGtpb,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAG0c,EAAM,EAAG2sa,EAAM,EACrEC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EACrEC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAC5D/xa,EAAKtd,EAAE,GACPxB,EAAKwB,EAAE,GACPvB,EAAKuB,EAAE,GACP+4M,EAAK/4M,EAAE,GACPk5M,EAAKl5M,EAAE,GACPq5M,EAAKr5M,EAAE,GACPw5M,EAAKx5M,EAAE,GACP25M,EAAK35M,EAAE,GACP85M,EAAK95M,EAAE,GACPi6M,EAAKj6M,EAAE,GACPk1S,EAAMl1S,EAAE,IACRkE,EAAMlE,EAAE,IACRmE,EAAMnE,EAAE,IACRoE,EAAMpE,EAAE,IACRohB,EAAMphB,EAAE,IACRm1S,EAAMn1S,EAAE,IAGV2d,IADAzc,EAAIhL,EAAE,IACIonB,EACVM,GAAM1c,EAAI1C,EACVg2J,GAAMtzJ,EAAIzC,EACV27P,GAAMl5P,EAAI63M,EACVk0O,GAAM/rb,EAAIg4M,EACVg0O,GAAMhsb,EAAIm4M,EACV8zO,GAAMjsb,EAAIs4M,EACV4zO,GAAMlsb,EAAIy4M,EACVw0O,GAAMjtb,EAAI44M,EACVs0O,GAAMltb,EAAI+4M,EACVo0O,GAAOntb,EAAIg0S,EACXnwS,GAAO7D,EAAIgD,EACXc,GAAO9D,EAAIiD,EACXc,GAAO/D,EAAIkD,EACXud,GAAOzgB,EAAIkgB,EACXkta,GAAOptb,EAAIi0S,EAEXv3R,IADA1c,EAAIhL,EAAE,IACIonB,EACVk3I,GAAMtzJ,EAAI1C,EACV47P,GAAMl5P,EAAIzC,EACVwub,GAAM/rb,EAAI63M,EACVm0O,GAAMhsb,EAAIg4M,EACVi0O,GAAMjsb,EAAIm4M,EACV+zO,GAAMlsb,EAAIs4M,EACV20O,GAAMjtb,EAAIy4M,EACVy0O,GAAMltb,EAAI44M,EACVu0O,GAAOntb,EAAI+4M,EACXl1M,GAAO7D,EAAIg0S,EACXlwS,GAAO9D,EAAIgD,EACXe,GAAO/D,EAAIiD,EACXwd,GAAOzgB,EAAIkD,EACXkqb,GAAOptb,EAAIkgB,EACXmta,GAAOrtb,EAAIi0S,EAEX3gJ,IADAtzJ,EAAIhL,EAAE,IACIonB,EACV88O,GAAMl5P,EAAI1C,EACVyub,GAAM/rb,EAAIzC,EACVyub,GAAMhsb,EAAI63M,EACVo0O,GAAMjsb,EAAIg4M,EACVk0O,GAAMlsb,EAAIm4M,EACV80O,GAAMjtb,EAAIs4M,EACV40O,GAAMltb,EAAIy4M,EACV00O,GAAOntb,EAAI44M,EACX/0M,GAAO7D,EAAI+4M,EACXj1M,GAAO9D,EAAIg0S,EACXjwS,GAAO/D,EAAIgD,EACXyd,GAAOzgB,EAAIiD,EACXmqb,GAAOptb,EAAIkD,EACXmqb,GAAOrtb,EAAIkgB,EACXota,GAAOttb,EAAIi0S,EAEX/6C,IADAl5P,EAAIhL,EAAE,IACIonB,EACV2va,GAAM/rb,EAAI1C,EACV0ub,GAAMhsb,EAAIzC,EACV0ub,GAAMjsb,EAAI63M,EACVq0O,GAAMlsb,EAAIg4M,EACVi1O,GAAMjtb,EAAIm4M,EACV+0O,GAAMltb,EAAIs4M,EACV60O,GAAOntb,EAAIy4M,EACX50M,GAAO7D,EAAI44M,EACX90M,GAAO9D,EAAI+4M,EACXh1M,GAAO/D,EAAIg0S,EACXvzR,GAAOzgB,EAAIgD,EACXoqb,GAAOptb,EAAIiD,EACXoqb,GAAOrtb,EAAIkD,EACXoqb,GAAOttb,EAAIkgB,EACXqta,GAAOvtb,EAAIi0S,EAEX83I,IADA/rb,EAAIhL,EAAE,IACIonB,EACV4va,GAAMhsb,EAAI1C,EACV2ub,GAAMjsb,EAAIzC,EACV2ub,GAAMlsb,EAAI63M,EACVo1O,GAAMjtb,EAAIg4M,EACVk1O,GAAMltb,EAAIm4M,EACVg1O,GAAOntb,EAAIs4M,EACXz0M,GAAO7D,EAAIy4M,EACX30M,GAAO9D,EAAI44M,EACX70M,GAAO/D,EAAI+4M,EACXt4L,GAAOzgB,EAAIg0S,EACXo5I,GAAOptb,EAAIgD,EACXqqb,GAAOrtb,EAAIiD,EACXqqb,GAAOttb,EAAIkD,EACXqqb,GAAOvtb,EAAIkgB,EACXsta,GAAOxtb,EAAIi0S,EAEX+3I,IADAhsb,EAAIhL,EAAE,IACIonB,EACV6va,GAAMjsb,EAAI1C,EACV4ub,GAAMlsb,EAAIzC,EACV0vb,GAAMjtb,EAAI63M,EACVq1O,GAAMltb,EAAIg4M,EACVm1O,GAAOntb,EAAIm4M,EACXt0M,GAAO7D,EAAIs4M,EACXx0M,GAAO9D,EAAIy4M,EACX10M,GAAO/D,EAAI44M,EACXn4L,GAAOzgB,EAAI+4M,EACXq0O,GAAOptb,EAAIg0S,EACXq5I,GAAOrtb,EAAIgD,EACXsqb,GAAOttb,EAAIiD,EACXsqb,GAAOvtb,EAAIkD,EACXsqb,GAAOxtb,EAAIkgB,EACXuta,GAAOztb,EAAIi0S,EAEXg4I,IADAjsb,EAAIhL,EAAE,IACIonB,EACV8va,GAAMlsb,EAAI1C,EACV2vb,GAAMjtb,EAAIzC,EACV2vb,GAAMltb,EAAI63M,EACVs1O,GAAOntb,EAAIg4M,EACXn0M,GAAO7D,EAAIm4M,EACXr0M,GAAO9D,EAAIs4M,EACXv0M,GAAO/D,EAAIy4M,EACXh4L,GAAOzgB,EAAI44M,EACXw0O,GAAOptb,EAAI+4M,EACXs0O,GAAOrtb,EAAIg0S,EACXs5I,GAAOttb,EAAIgD,EACXuqb,GAAOvtb,EAAIiD,EACXuqb,GAAOxtb,EAAIkD,EACXuqb,GAAOztb,EAAIkgB,EACXwta,GAAO1tb,EAAIi0S,EAEXi4I,IADAlsb,EAAIhL,EAAE,IACIonB,EACV6wa,GAAMjtb,EAAI1C,EACV4vb,GAAMltb,EAAIzC,EACV4vb,GAAOntb,EAAI63M,EACXh0M,GAAO7D,EAAIg4M,EACXl0M,GAAO9D,EAAIm4M,EACXp0M,GAAO/D,EAAIs4M,EACX73L,GAAOzgB,EAAIy4M,EACX20O,GAAOptb,EAAI44M,EACXy0O,GAAOrtb,EAAI+4M,EACXu0O,GAAOttb,EAAIg0S,EACXu5I,GAAOvtb,EAAIgD,EACXwqb,GAAOxtb,EAAIiD,EACXwqb,GAAOztb,EAAIkD,EACXwqb,GAAO1tb,EAAIkgB,EACXyta,GAAO3tb,EAAIi0S,EAEXg5I,IADAjtb,EAAIhL,EAAE,IACIonB,EACV8wa,GAAMltb,EAAI1C,EACV6vb,GAAOntb,EAAIzC,EACXsG,GAAO7D,EAAI63M,EACX/zM,GAAO9D,EAAIg4M,EACXj0M,GAAO/D,EAAIm4M,EACX13L,GAAOzgB,EAAIs4M,EACX80O,GAAOptb,EAAIy4M,EACX40O,GAAOrtb,EAAI44M,EACX00O,GAAOttb,EAAI+4M,EACXw0O,GAAOvtb,EAAIg0S,EACXw5I,GAAOxtb,EAAIgD,EACXyqb,GAAOztb,EAAIiD,EACXyqb,GAAO1tb,EAAIkD,EACXyqb,GAAO3tb,EAAIkgB,EACX0ta,GAAO5tb,EAAIi0S,EAEXi5I,IADAltb,EAAIhL,EAAE,IACIonB,EACV+wa,GAAOntb,EAAI1C,EACXuG,GAAO7D,EAAIzC,EACXuG,GAAO9D,EAAI63M,EACX9zM,GAAO/D,EAAIg4M,EACXv3L,GAAOzgB,EAAIm4M,EACXi1O,GAAOptb,EAAIs4M,EACX+0O,GAAOrtb,EAAIy4M,EACX60O,GAAOttb,EAAI44M,EACX20O,GAAOvtb,EAAI+4M,EACXy0O,GAAOxtb,EAAIg0S,EACXy5I,GAAOztb,EAAIgD,EACX0qb,GAAO1tb,EAAIiD,EACX0qb,GAAO3tb,EAAIkD,EACX0qb,GAAO5tb,EAAIkgB,EACX2ta,GAAO7tb,EAAIi0S,EAEXk5I,IADAntb,EAAIhL,EAAE,KACKonB,EACXvY,GAAO7D,EAAI1C,EACXwG,GAAO9D,EAAIzC,EACXwG,GAAO/D,EAAI63M,EACXp3L,GAAOzgB,EAAIg4M,EACXo1O,GAAOptb,EAAIm4M,EACXk1O,GAAOrtb,EAAIs4M,EACXg1O,GAAOttb,EAAIy4M,EACX80O,GAAOvtb,EAAI44M,EACX40O,GAAOxtb,EAAI+4M,EACX00O,GAAOztb,EAAIg0S,EACX05I,GAAO1tb,EAAIgD,EACX2qb,GAAO3tb,EAAIiD,EACX2qb,GAAO5tb,EAAIkD,EACX2qb,GAAO7tb,EAAIkgB,EACX4ta,GAAO9tb,EAAIi0S,EAEXpwS,IADA7D,EAAIhL,EAAE,KACKonB,EACXtY,GAAO9D,EAAI1C,EACXyG,GAAO/D,EAAIzC,EACXkjB,GAAOzgB,EAAI63M,EACXu1O,GAAOptb,EAAIg4M,EACXq1O,GAAOrtb,EAAIm4M,EACXm1O,GAAOttb,EAAIs4M,EACXi1O,GAAOvtb,EAAIy4M,EACX+0O,GAAOxtb,EAAI44M,EACX60O,GAAOztb,EAAI+4M,EACX20O,GAAO1tb,EAAIg0S,EACX25I,GAAO3tb,EAAIgD,EACX4qb,GAAO5tb,EAAIiD,EACX4qb,GAAO7tb,EAAIkD,EACX4qb,GAAO9tb,EAAIkgB,EACX6ta,GAAO/tb,EAAIi0S,EAEXnwS,IADA9D,EAAIhL,EAAE,KACKonB,EACXrY,GAAO/D,EAAI1C,EACXmjB,GAAOzgB,EAAIzC,EACX6vb,GAAOptb,EAAI63M,EACXw1O,GAAOrtb,EAAIg4M,EACXs1O,GAAOttb,EAAIm4M,EACXo1O,GAAOvtb,EAAIs4M,EACXk1O,GAAOxtb,EAAIy4M,EACXg1O,GAAOztb,EAAI44M,EACX80O,GAAO1tb,EAAI+4M,EACX40O,GAAO3tb,EAAIg0S,EACX45I,GAAO5tb,EAAIgD,EACX6qb,GAAO7tb,EAAIiD,EACX6qb,GAAO9tb,EAAIkD,EACX6qb,GAAO/tb,EAAIkgB,EACX8ta,GAAOhub,EAAIi0S,EAEXlwS,IADA/D,EAAIhL,EAAE,KACKonB,EACXqE,GAAOzgB,EAAI1C,EACX8vb,GAAOptb,EAAIzC,EACX8vb,GAAOrtb,EAAI63M,EACXy1O,GAAOttb,EAAIg4M,EACXu1O,GAAOvtb,EAAIm4M,EACXq1O,GAAOxtb,EAAIs4M,EACXm1O,GAAOztb,EAAIy4M,EACXi1O,GAAO1tb,EAAI44M,EACX+0O,GAAO3tb,EAAI+4M,EACX60O,GAAO5tb,EAAIg0S,EACX65I,GAAO7tb,EAAIgD,EACX8qb,GAAO9tb,EAAIiD,EACX8qb,GAAO/tb,EAAIkD,EACX8qb,GAAOhub,EAAIkgB,EACX+ta,GAAOjub,EAAIi0S,EAEXxzR,IADAzgB,EAAIhL,EAAE,KACKonB,EACXgxa,GAAOptb,EAAI1C,EACX+vb,GAAOrtb,EAAIzC,EACX+vb,GAAOttb,EAAI63M,EACX01O,GAAOvtb,EAAIg4M,EACXw1O,GAAOxtb,EAAIm4M,EACXs1O,GAAOztb,EAAIs4M,EACXo1O,GAAO1tb,EAAIy4M,EACXk1O,GAAO3tb,EAAI44M,EACXg1O,GAAO5tb,EAAI+4M,EACX80O,GAAO7tb,EAAIg0S,EACX85I,GAAO9tb,EAAIgD,EACX+qb,GAAO/tb,EAAIiD,EACX+qb,GAAOhub,EAAIkD,EACX+qb,GAAOjub,EAAIkgB,EACXgua,GAAOlub,EAAIi0S,EAEXm5I,IADAptb,EAAIhL,EAAE,KACKonB,EAkBXM,GAAO,IAhBP4wa,GAAOttb,EAAIzC,GAiBX+1J,GAAO,IAhBPi6R,GAAOvtb,EAAI63M,GAiBXqhD,GAAO,IAhBPs0L,GAAOxtb,EAAIg4M,GAiBX+zO,GAAO,IAhBP0B,GAAOztb,EAAIm4M,GAiBX6zO,GAAO,IAhBP0B,GAAO1tb,EAAIs4M,GAiBX2zO,GAAO,IAhBP0B,GAAO3tb,EAAIy4M,GAiBXyzO,GAAO,IAhBP0B,GAAO5tb,EAAI44M,GAiBXq0O,GAAO,IAhBPY,GAAO7tb,EAAI+4M,GAiBXm0O,GAAO,IAhBPY,GAAO9tb,EAAIg0S,GAiBXm5I,GAAO,IAhBPY,GAAO/tb,EAAIgD,GAiBXa,GAAO,IAhBPmqb,GAAOhub,EAAIiD,GAiBXa,GAAO,IAhBPmqb,GAAOjub,EAAIkD,GAiBXa,GAAO,IAhBPmqb,GAAOlub,EAAIkgB,GAiBXO,GAAO,IAhBP0ta,GAAOnub,EAAIi0S,GAqBsCx3R,GAAjDzc,GAnBAyc,GAAO,IAhBP4wa,GAAOrtb,EAAI1C,KAkCXyB,EAAI,GACU,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACS0c,GAAjD1c,EAAK0c,EAAK3d,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSszJ,GAAjDtzJ,EAAKszJ,EAAKv0J,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSk5P,GAAjDl5P,EAAKk5P,EAAKn6P,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACS+rb,GAAjD/rb,EAAK+rb,EAAKhtb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSgsb,GAAjDhsb,EAAKgsb,EAAKjtb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSisb,GAAjDjsb,EAAKisb,EAAKltb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSksb,GAAjDlsb,EAAKksb,EAAKntb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSitb,GAAjDjtb,EAAKitb,EAAKlub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSktb,GAAjDltb,EAAKktb,EAAKnub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQmtb,GAAhDntb,EAAImtb,EAAMpub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQ6D,GAAhD7D,EAAI6D,EAAM9E,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQ8D,GAAhD9D,EAAI8D,EAAM/E,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQ+D,GAAhD/D,EAAI+D,EAAMhF,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQygB,GAAhDzgB,EAAIygB,EAAM1hB,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQotb,GAAhDptb,EAAIotb,EAAMrub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QAKSyc,GAAjDzc,GAJAyc,GAAM1d,EAAE,EAAI,IAAMA,EAAE,KAGpBA,EAAI,GACU,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACS0c,GAAjD1c,EAAK0c,EAAK3d,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSszJ,GAAjDtzJ,EAAKszJ,EAAKv0J,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSk5P,GAAjDl5P,EAAKk5P,EAAKn6P,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACS+rb,GAAjD/rb,EAAK+rb,EAAKhtb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSgsb,GAAjDhsb,EAAKgsb,EAAKjtb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSisb,GAAjDjsb,EAAKisb,EAAKltb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSksb,GAAjDlsb,EAAKksb,EAAKntb,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSitb,GAAjDjtb,EAAKitb,EAAKlub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACSktb,GAAjDltb,EAAKktb,EAAKnub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQmtb,GAAhDntb,EAAImtb,EAAMpub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQ6D,GAAhD7D,EAAI6D,EAAM9E,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQ8D,GAAhD9D,EAAI8D,EAAM/E,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQ+D,GAAhD/D,EAAI+D,EAAMhF,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQygB,GAAhDzgB,EAAIygB,EAAM1hB,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACQotb,GAAhDptb,EAAIotb,EAAMrub,EAAI,OAAgD,OAAzCA,EAAI1N,KAAKQ,MAAMmO,EAAI,QACxCyc,GAAM1d,EAAE,EAAI,IAAMA,EAAE,GAEpB22F,EAAG,GAAKj5E,EACRi5E,EAAG,GAAKh5E,EACRg5E,EAAG,GAAK49D,EACR59D,EAAG,GAAKwjK,EACRxjK,EAAG,GAAKq2V,EACRr2V,EAAG,GAAKs2V,EACRt2V,EAAG,GAAKu2V,EACRv2V,EAAG,GAAKw2V,EACRx2V,EAAG,GAAKu3V,EACRv3V,EAAG,GAAKw3V,EACRx3V,EAAE,IAAMy3V,EACRz3V,EAAE,IAAM7xF,EACR6xF,EAAE,IAAM5xF,EACR4xF,EAAE,IAAM3xF,EACR2xF,EAAE,IAAMj1E,EACRi1E,EAAE,IAAM03V,CACT,CAED,SAASjtR,EAAEzqE,EAAG1gG,GACZ6jQ,EAAEnjK,EAAG1gG,EAAGA,EACT,CAED,SAASo5b,EAAS14V,EAAG5sG,GACnB,IACIkM,EADA+J,EAAI2yX,IAER,IAAK18X,EAAI,EAAGA,EAAI,GAAIA,IAAK+J,EAAE/J,GAAKlM,EAAEkM,GAClC,IAAKA,EAAI,IAAKA,GAAK,EAAGA,IACpBmrK,EAAEphK,EAAGA,GACI,IAAN/J,GAAiB,IAANA,GAAS6jQ,EAAE95P,EAAGA,EAAGjW,GAEjC,IAAKkM,EAAI,EAAGA,EAAI,GAAIA,IAAK0gG,EAAE1gG,GAAK+J,EAAE/J,EACnC,CAaD,SAASq5b,EAAkBxgc,EAAG+N,EAAG8K,GAC/B,IAC8BnC,EAAGzb,EAD7ByF,EAAI,IAAImO,WAAW,IACnBxO,EAAI,IAAIoX,aAAa,IACrBtQ,EAAI08X,IAAM5yX,EAAI4yX,IAAM3yX,EAAI2yX,IACxBjuX,EAAIiuX,IAAMx/X,EAAIw/X,IAAMhuX,EAAIguX,IAC5B,IAAK5oY,EAAI,EAAGA,EAAI,GAAIA,IAAKyF,EAAEzF,GAAK8S,EAAE9S,GAIlC,IAHAyF,EAAE,IAAW,IAANqN,EAAE,IAAS,GAClBrN,EAAE,IAAI,IACNy+b,EAAY9+b,EAAEwY,GACT5d,EAAI,EAAGA,EAAI,GAAIA,IAClBgW,EAAEhW,GAAGoF,EAAEpF,GACP2a,EAAE3a,GAAGkM,EAAElM,GAAGiW,EAAEjW,GAAG,EAGjB,IADAkM,EAAE,GAAGyO,EAAE,GAAG,EACL3a,EAAE,IAAKA,GAAG,IAAKA,EAElB8jc,EAAS53b,EAAE8J,EADXyF,EAAGhW,EAAEzF,IAAI,MAAQ,EAAFA,GAAM,GAErB8jc,EAAS7tb,EAAE0E,EAAEc,GACby5M,EAAE9rN,EAAE8C,EAAE+J,GACNmoY,EAAElyY,EAAEA,EAAE+J,GACNi/M,EAAEj/M,EAAED,EAAE2E,GACNyjY,EAAEpoY,EAAEA,EAAE2E,GACN08J,EAAE18J,EAAEvR,GACJiuK,EAAEz8J,EAAE1O,GACJ6jQ,EAAE7jQ,EAAE+J,EAAE/J,GACN6jQ,EAAE95P,EAAED,EAAE5M,GACN8rN,EAAE9rN,EAAE8C,EAAE+J,GACNmoY,EAAElyY,EAAEA,EAAE+J,GACNohK,EAAErhK,EAAE9J,GACJkyY,EAAEnoY,EAAE0E,EAAEC,GACNm1P,EAAE7jQ,EAAE+J,EAAEqqb,GACNprO,EAAEhpN,EAAEA,EAAEyO,GACNo1P,EAAE95P,EAAEA,EAAE/J,GACN6jQ,EAAE7jQ,EAAEyO,EAAEC,GACNm1P,EAAEp1P,EAAE3E,EAAE5Q,GACNiyK,EAAErhK,EAAE5M,GACJ06b,EAAS53b,EAAE8J,EAAEyF,GACbqob,EAAS7tb,EAAE0E,EAAEc,GAEf,IAAKzb,EAAI,EAAGA,EAAI,GAAIA,IAClBoF,EAAEpF,EAAE,IAAIkM,EAAElM,GACVoF,EAAEpF,EAAE,IAAIiW,EAAEjW,GACVoF,EAAEpF,EAAE,IAAIgW,EAAEhW,GACVoF,EAAEpF,EAAE,IAAI2a,EAAE3a,GAEZ,IAAIwlc,EAAMpgc,EAAEk2C,SAAS,IACjBmqZ,EAAMrgc,EAAEk2C,SAAS,IAIrB,OAHAgqZ,EAASE,EAAIA,GACbz1L,EAAE01L,EAAIA,EAAID,GACVzB,EAAUh/b,EAAE0gc,GACL,CACR,CAED,SAASC,EAAuB3gc,EAAG+N,GACjC,OAAOyyb,EAAkBxgc,EAAG+N,EAAGqtb,EAChC,CAED,SAASwF,EAAmBtgc,EAAGD,GAE7B,OADA09S,EAAY19S,EAAG,IACRsgc,EAAuBrgc,EAAGD,EAClC,CAED,SAASwgc,EAAoBzuX,EAAG9xE,EAAGD,GACjC,IAAIqQ,EAAI,IAAI7B,WAAW,IAEvB,OADA2xb,EAAkB9vb,EAAGrQ,EAAGC,GACjBk9b,EAAqBprX,EAAG+oX,EAAIzqb,EAAG8+C,EACvC,CA53BDyuY,EAAS12b,UAAU2xO,OAAS,SAASlrO,EAAG4vb,EAAMn6S,GA2B5C,IA1BA,IACI70H,EAAIC,EAAI42I,EAAI4lG,EAAI6yL,EAAIC,EAAIC,EAAIC,EAAIntb,EAChC1D,EAAIC,EAAIC,EAAIC,EAAI8tB,EAAIG,EAAIC,EAAIila,EAAI9nN,EAAI+nN,EAFpCC,EAAQ3jc,KAAK6pS,IAAM,EAAK,KAIxBskI,EAAKnua,KAAK0Y,EAAE,GACZorO,EAAK9jP,KAAK0Y,EAAE,GACZ+uJ,EAAKznK,KAAK0Y,EAAE,GACZgvJ,EAAK1nK,KAAK0Y,EAAE,GACZqrO,EAAK/jP,KAAK0Y,EAAE,GACZ01Z,EAAKpua,KAAK0Y,EAAE,GACZ21Z,EAAKrua,KAAK0Y,EAAE,GACZ41Z,EAAKtua,KAAK0Y,EAAE,GACZkrb,EAAK5jc,KAAK0Y,EAAE,GACZmrb,EAAK7jc,KAAK0Y,EAAE,GAEZorb,EAAK9jc,KAAKqZ,EAAE,GACZ4/Z,EAAKj5a,KAAKqZ,EAAE,GACZu5M,EAAK5yN,KAAKqZ,EAAE,GACZ0qb,EAAK/jc,KAAKqZ,EAAE,GACZ2qb,EAAKhkc,KAAKqZ,EAAE,GACZ4qb,EAAKjkc,KAAKqZ,EAAE,GACZ6qb,EAAKlkc,KAAKqZ,EAAE,GACZ8qb,EAAKnkc,KAAKqZ,EAAE,GACZ+qb,EAAKpkc,KAAKqZ,EAAE,GACZgrb,EAAKrkc,KAAKqZ,EAAE,GAET+sI,GAAS,IAcdj2I,EAFA0D,EAAI,EAGJ1D,IAdmDg+Z,GAAmC,MAAtF58Y,EAAkB,IAAb5gB,EAAE4vb,EAAM,IAA0B,IAAb5vb,EAAE4vb,EAAM,KAAc,IAcrCuD,EACX3zb,IAdmD2zO,GAAmC,MAA3BvyN,IAAO,IAAlEC,EAAkB,IAAb7gB,EAAE4vb,EAAM,IAA0B,IAAb5vb,EAAE4vb,EAAM,KAAc,IAAgC,KAcpE,EAAI8D,GAChBl0b,IAdmDs3J,GAAmC,MAA3Bj2I,IAAO,IAAlE42I,EAAkB,IAAbz3J,EAAE4vb,EAAM,IAA0B,IAAb5vb,EAAE4vb,EAAM,KAAc,IAAgC,KAcpE,EAAI6D,GAChBj0b,IAdmDu3J,GAAmC,MAA3BU,IAAQ,GAAnE4lG,EAAkB,IAAbr9P,EAAE4vb,EAAM,IAA0B,IAAb5vb,EAAE4vb,EAAM,KAAc,IAAgC,KAcpE,EAAI4D,GAEhBtwb,GADA1D,IAdmD4zO,GAAmC,MAA3BiqB,IAAQ,GAAnE6yL,EAAkB,IAAblwb,EAAE4vb,EAAM,IAA0B,IAAb5vb,EAAE4vb,EAAM,KAAc,IAA+B,MAcnE,EAAI2D,MACJ,GAAK/zb,GAAM,KACvBA,IAfAi+Z,GAAQyyB,IAAQ,EAAM,OAeV,EAAIoD,GAChB9zb,IAfmDk+Z,GAAmC,MAA3BwyB,IAAO,IAAlEC,EAAkB,IAAbnwb,EAAE4vb,EAAK,KAA2B,IAAb5vb,EAAE4vb,EAAK,MAAe,IAAgC,KAepE,EAAIyD,GAChB7zb,IAfmDm+Z,GAAmC,MAA3BwyB,IAAO,IAAlEC,EAAkB,IAAbpwb,EAAE4vb,EAAK,KAA2B,IAAb5vb,EAAE4vb,EAAK,MAAe,IAAgC,KAepE,EAAIwD,GAChB5zb,IAfmDyzb,GAAmC,MAA3B7C,IAAQ,GAAnEC,EAAkB,IAAbrwb,EAAE4vb,EAAK,KAA2B,IAAb5vb,EAAE4vb,EAAK,MAAe,IAAgC,KAepE,EAAI3tO,GAIhBxiN,EAFAyD,IADA1D,IAfA0zb,GAAQ7C,IAAO,EAAM2C,IAeT,EAAI1qB,MACH,GAGb7oa,GAAM+9Z,EAAK8K,EACX7oa,GAAM0zO,EAAKggN,EACX1zb,GAAMq3J,GAAM,EAAI48R,GAChBj0b,GAAMs3J,GAAM,EAAI08R,GAEhBvwb,GADAzD,GAAM2zO,GAAM,EAAIogN,MACJ,GAAK/zb,GAAM,KACvBA,GAAMg+Z,GAAM,EAAI81B,GAChB9zb,GAAMi+Z,GAAM,EAAI41B,GAChB7zb,GAAMk+Z,GAAM,EAAI01B,GAChB5zb,GAAMwzb,GAAM,EAAIG,GAEhBlwb,IADAzD,GAAMyzb,GAAM,EAAIjxO,MACH,GAAKxiN,GAAM,KAExBC,EAAKwD,EACLxD,GAAM89Z,EAAKv7M,EACXviN,GAAMyzO,EAAKm1L,EACX5oa,GAAMo3J,EAAKq8R,EACXzzb,GAAMq3J,GAAM,EAAI28R,GAEhBxwb,GADAxD,GAAM0zO,GAAM,EAAIqgN,MACJ,GAAK/zb,GAAM,KACvBA,GAAM+9Z,GAAM,EAAI+1B,GAChB9zb,GAAMg+Z,GAAM,EAAI61B,GAChB7zb,GAAMi+Z,GAAM,EAAI21B,GAChB5zb,GAAMuzb,GAAM,EAAII,GAIhB1zb,EAFAuD,IADAxD,GAAMwzb,GAAM,EAAIE,MACH,GAGbzzb,GAAM69Z,EAAK41B,EACXzzb,GAAMwzO,EAAKlxB,EACXtiN,GAAMm3J,EAAKwxQ,EACX3oa,GAAMo3J,EAAKo8R,EAEXjwb,GADAvD,GAAMyzO,GAAM,EAAIsgN,MACJ,GAAK/zb,GAAM,KACvBA,GAAM89Z,GAAM,EAAIg2B,GAChB9zb,GAAM+9Z,GAAM,EAAI81B,GAChB7zb,GAAMg+Z,GAAM,EAAI41B,GAChB5zb,GAAMszb,GAAM,EAAIK,GAIhB7la,EAFAvqB,IADAvD,GAAMuzb,GAAM,EAAIG,MACH,GAGb5la,GAAM+vY,EAAK61B,EACX5la,GAAM0lN,EAAKigN,EACX3la,GAAMqpI,EAAKmrD,EACXx0L,GAAMspI,EAAKuxQ,EAEXpla,GADAuqB,GAAM2lN,EAAK+/M,KACC,GAAK1la,GAAM,KACvBA,GAAMgwY,GAAM,EAAIi2B,GAChBjma,GAAMiwY,GAAM,EAAI+1B,GAChBhma,GAAMkwY,GAAM,EAAI61B,GAChB/la,GAAMwla,GAAM,EAAIM,GAIhB3la,EAFA1qB,IADAuqB,GAAMyla,GAAM,EAAII,MACH,GAGb1la,GAAM4vY,EAAK81B,EACX1la,GAAMulN,EAAKkgN,EACXzla,GAAMkpI,EAAKs8R,EACXxla,GAAMmpI,EAAKkrD,EAEX/+M,GADA0qB,GAAMwlN,EAAKk1L,KACC,GAAK16Y,GAAM,KACvBA,GAAM6vY,EAAK01B,EACXvla,GAAM8vY,GAAM,EAAIg2B,GAChB9la,GAAM+vY,GAAM,EAAI81B,GAChB7la,GAAMqla,GAAM,EAAIO,GAIhB3la,EAFA3qB,IADA0qB,GAAMsla,GAAM,EAAIK,MACH,GAGb1la,GAAM2vY,EAAK+1B,EACX1la,GAAMslN,EAAKmgN,EACXzla,GAAMipI,EAAKu8R,EACXxla,GAAMkpI,EAAKq8R,EAEXlwb,GADA2qB,GAAMulN,EAAKnxB,KACC,GAAKp0L,GAAM,KACvBA,GAAM4vY,EAAK6K,EACXz6Y,GAAM6vY,EAAKy1B,EACXtla,GAAM8vY,GAAM,EAAI+1B,GAChB7la,GAAMola,GAAM,EAAIQ,GAIhBX,EAFA5vb,IADA2qB,GAAMqla,GAAM,EAAIM,MACH,GAGbV,GAAMt1B,EAAKg2B,EACXV,GAAM3/M,EAAKogN,EACXT,GAAMh8R,EAAKw8R,EACXR,GAAM/7R,EAAKs8R,EAEXnwb,GADA4vb,GAAM1/M,EAAKggN,KACC,GAAKN,GAAM,KACvBA,GAAMr1B,EAAKx7M,EACX6wO,GAAMp1B,EAAK4K,EACXwqB,GAAMn1B,EAAKw1B,EACXL,GAAMG,GAAM,EAAIS,GAIhB1oN,EAFA9nO,IADA4vb,GAAMI,GAAM,EAAIO,MACH,GAGbzoN,GAAMwyL,EAAKi2B,EACXzoN,GAAMmI,EAAKqgN,EACXxoN,GAAMl0E,EAAKy8R,EACXvoN,GAAMj0E,EAAKu8R,EAEXpwb,GADA8nO,GAAMoI,EAAKigN,KACC,GAAKroN,GAAM,KACvBA,GAAMyyL,EAAK21B,EACXpoN,GAAM0yL,EAAKz7M,EACX+oB,GAAM2yL,EAAK2K,EACXt9L,GAAMioN,EAAKE,EAIXJ,EAFA7vb,IADA8nO,GAAMkoN,GAAM,EAAIQ,MACH,GAGbX,GAAMv1B,EAAKk2B,EACXX,GAAM5/M,EAAKsgN,EACXV,GAAMj8R,EAAK08R,EACXT,GAAMh8R,EAAKw8R,EAEXrwb,GADA6vb,GAAM3/M,EAAKkgN,KACC,GAAKP,GAAM,KACvBA,GAAMt1B,EAAK41B,EACXN,GAAMr1B,EAAK01B,EACXL,GAAMp1B,EAAK17M,EACX8wO,GAAME,EAAK3qB,EAUX9K,EAJAh+Z,EAAS,MADT0D,GADAA,IAFAA,IADA6vb,GAAMG,EAAKC,KACE,KAED,GAAKjwb,EAAM,IAhIL1D,GAAM,MAiIT,GAMf2zO,EAHA1zO,GADAyD,KAAW,GAKX4zJ,EA5GkBp3J,GAAM,KA6GxBq3J,EA/FkBp3J,GAAM,KAgGxByzO,EAlFkB3lN,GAAM,KAmFxBgwY,EArEkB7vY,GAAM,KAsExB8vY,EAxDkB7vY,GAAM,KAyDxB8vY,EA3CkBm1B,GAAM,KA4CxBG,EA9BkBjoN,GAAM,KA+BxBkoN,EAjBkBH,GAAM,KAmBxBnD,GAAQ,GACRn6S,GAAS,GAEXpmJ,KAAK0Y,EAAE,GAAKy1Z,EACZnua,KAAK0Y,EAAE,GAAKorO,EACZ9jP,KAAK0Y,EAAE,GAAK+uJ,EACZznK,KAAK0Y,EAAE,GAAKgvJ,EACZ1nK,KAAK0Y,EAAE,GAAKqrO,EACZ/jP,KAAK0Y,EAAE,GAAK01Z,EACZpua,KAAK0Y,EAAE,GAAK21Z,EACZrua,KAAK0Y,EAAE,GAAK41Z,EACZtua,KAAK0Y,EAAE,GAAKkrb,EACZ5jc,KAAK0Y,EAAE,GAAKmrb,CACb,EAEDjD,EAAS12b,UAAU8jE,OAAS,SAAS4yP,EAAK0jI,GACxC,IACIzwb,EAAG2jB,EAAMhf,EAAG5a,EADZ6a,EAAI,IAAIlH,YAAY,IAGxB,GAAIvR,KAAKihc,SAAU,CAGjB,IAFArjc,EAAIoC,KAAKihc,SACTjhc,KAAKs4C,OAAO16C,KAAO,EACZA,EAAI,GAAIA,IAAKoC,KAAKs4C,OAAO16C,GAAK,EACrCoC,KAAK6pS,IAAM,EACX7pS,KAAK67O,OAAO77O,KAAKs4C,OAAQ,EAAG,GAC7B,CAID,IAFAzkC,EAAI7T,KAAK0Y,EAAE,KAAO,GAClB1Y,KAAK0Y,EAAE,IAAM,KACR9a,EAAI,EAAGA,EAAI,GAAIA,IAClBoC,KAAK0Y,EAAE9a,IAAMiW,EACbA,EAAI7T,KAAK0Y,EAAE9a,KAAO,GAClBoC,KAAK0Y,EAAE9a,IAAM,KAaf,IAXAoC,KAAK0Y,EAAE,IAAW,EAAJ7E,EACdA,EAAI7T,KAAK0Y,EAAE,KAAO,GAClB1Y,KAAK0Y,EAAE,IAAM,KACb1Y,KAAK0Y,EAAE,IAAM7E,EACbA,EAAI7T,KAAK0Y,EAAE,KAAO,GAClB1Y,KAAK0Y,EAAE,IAAM,KACb1Y,KAAK0Y,EAAE,IAAM7E,EAEb4E,EAAE,GAAKzY,KAAK0Y,EAAE,GAAK,EACnB7E,EAAI4E,EAAE,KAAO,GACbA,EAAE,IAAM,KACH7a,EAAI,EAAGA,EAAI,GAAIA,IAClB6a,EAAE7a,GAAKoC,KAAK0Y,EAAE9a,GAAKiW,EACnBA,EAAI4E,EAAE7a,KAAO,GACb6a,EAAE7a,IAAM,KAKV,IAHA6a,EAAE,IAAO,KAET+e,GAAY,EAAJ3jB,GAAS,EACZjW,EAAI,EAAGA,EAAI,GAAIA,IAAK6a,EAAE7a,IAAM45B,EAEjC,IADAA,GAAQA,EACH55B,EAAI,EAAGA,EAAI,GAAIA,IAAKoC,KAAK0Y,EAAE9a,GAAMoC,KAAK0Y,EAAE9a,GAAK45B,EAAQ/e,EAAE7a,GAa5D,IAXAoC,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,GAAc1Y,KAAK0Y,EAAE,IAAM,IAChD1Y,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,KAAQ,EAAM1Y,KAAK0Y,EAAE,IAAM,IAChD1Y,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,KAAQ,EAAM1Y,KAAK0Y,EAAE,IAAO,GACjD1Y,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,KAAQ,EAAM1Y,KAAK0Y,EAAE,IAAO,GACjD1Y,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,KAAO,GAAO1Y,KAAK0Y,EAAE,IAAO,EAAM1Y,KAAK0Y,EAAE,IAAM,IACpE1Y,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,KAAQ,EAAM1Y,KAAK0Y,EAAE,IAAM,IAChD1Y,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,KAAQ,EAAM1Y,KAAK0Y,EAAE,IAAO,GACjD1Y,KAAK0Y,EAAE,GAAoE,OAA7D1Y,KAAK0Y,EAAE,KAAQ,EAAM1Y,KAAK0Y,EAAE,IAAO,GAEjDF,EAAIxY,KAAK0Y,EAAE,GAAK1Y,KAAK+4K,IAAI,GACzB/4K,KAAK0Y,EAAE,GAAS,MAAJF,EACP5a,EAAI,EAAGA,EAAI,EAAGA,IACjB4a,GAAOxY,KAAK0Y,EAAE9a,GAAKoC,KAAK+4K,IAAIn7K,GAAM,IAAM4a,IAAM,IAAO,EACrDxY,KAAK0Y,EAAE9a,GAAS,MAAJ4a,EAGdooT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAQ,GAAMtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAO,IAAOtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAO,IAAOtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAO,IAAOtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAO,IAAOtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAO,IAAOtkc,KAAK0Y,EAAE,KAAO,EAAK,IACrCkoT,EAAI0jI,EAAO,IAAOtkc,KAAK0Y,EAAE,KAAO,EAAK,GACtC,EAEDkob,EAAS12b,UAAU4a,OAAS,SAASnU,EAAG4vb,EAAMn6S,GAC5C,IAAIxoJ,EAAG2mc,EAEP,GAAIvkc,KAAKihc,SAAU,CAIjB,KAHAsD,EAAQ,GAAKvkc,KAAKihc,UACP76S,IACTm+S,EAAOn+S,GACJxoJ,EAAI,EAAGA,EAAI2mc,EAAM3mc,IACpBoC,KAAKs4C,OAAOt4C,KAAKihc,SAAWrjc,GAAK+S,EAAE4vb,EAAK3ic,GAI1C,GAHAwoJ,GAASm+S,EACThE,GAAQgE,EACRvkc,KAAKihc,UAAYsD,EACbvkc,KAAKihc,SAAW,GAClB,OACFjhc,KAAK67O,OAAO77O,KAAKs4C,OAAQ,EAAG,IAC5Bt4C,KAAKihc,SAAW,CACjB,CASD,GAPI76S,GAAS,KACXm+S,EAAOn+S,EAASA,EAAQ,GACxBpmJ,KAAK67O,OAAOlrO,EAAG4vb,EAAMgE,GACrBhE,GAAQgE,EACRn+S,GAASm+S,GAGPn+S,EAAO,CACT,IAAKxoJ,EAAI,EAAGA,EAAIwoJ,EAAOxoJ,IACrBoC,KAAKs4C,OAAOt4C,KAAKihc,SAAWrjc,GAAK+S,EAAE4vb,EAAK3ic,GAC1CoC,KAAKihc,UAAY76S,CAClB,CACF,EA+jBD,IAAIo+S,EAAqBlD,EACrBmD,EAA0BlD,EAc9B,IAAIv2R,EAAI,CACN,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGtC,SAAS05R,EAAqB34G,EAAIC,EAAIr7U,EAAGD,GAyBvC,IAxBA,IACI47M,EAAKE,EAAKE,EAAKG,EAAKG,EAAKG,EAAKG,EAAKG,EACnCpB,EAAKE,EAAKE,EAAKG,EAAKG,EAAKG,EAAKG,EAAKG,EACnC6iL,EAAI+P,EAAIxiZ,EAAG8wB,EAAGhW,EAAG9I,EAAG9F,EAAG8J,EAAGC,EAAG0E,EAH7Bi4X,EAAK,IAAIt2X,WAAW,IAAK6nY,EAAK,IAAI7nY,WAAW,IAK7CywM,EAAMohI,EAAG,GACTlhI,EAAMkhI,EAAG,GACThhI,EAAMghI,EAAG,GACT7gI,EAAM6gI,EAAG,GACT1gI,EAAM0gI,EAAG,GACTvgI,EAAMugI,EAAG,GACTpgI,EAAMogI,EAAG,GACTjgI,EAAMigI,EAAG,GAETrhI,EAAMshI,EAAG,GACTphI,EAAMohI,EAAG,GACTlhI,EAAMkhI,EAAG,GACT/gI,EAAM+gI,EAAG,GACT5gI,EAAM4gI,EAAG,GACTzgI,EAAMygI,EAAG,GACTtgI,EAAMsgI,EAAG,GACTngI,EAAMmgI,EAAG,GAET5kV,EAAM,EACHsJ,GAAK,KAAK,CACf,IAAK9S,EAAI,EAAGA,EAAI,GAAIA,IAClB8wB,EAAI,EAAI9wB,EAAIwJ,EACZopY,EAAG5yY,GAAM+S,EAAE+d,EAAE,IAAM,GAAO/d,EAAE+d,EAAE,IAAM,GAAO/d,EAAE+d,EAAE,IAAM,EAAK/d,EAAE+d,EAAE,GAC9DqzX,EAAGnkZ,GAAM+S,EAAE+d,EAAE,IAAM,GAAO/d,EAAE+d,EAAE,IAAM,GAAO/d,EAAE+d,EAAE,IAAM,EAAK/d,EAAE+d,EAAE,GAEhE,IAAK9wB,EAAI,EAAGA,EAAI,GAAIA,IA+HlB,GA9HA0uN,EAAM3B,EACN6B,EAAM3B,EACN6B,EAAM3B,EACN8B,EAAM3B,EACN8B,EAAM3B,EACN8B,EAAM3B,EACN8B,EAAM3B,EACAG,EAENO,EAAM3B,EACN6B,EAAM3B,EACN6B,EAAM3B,EACN8B,EAAM3B,EACN8B,EAAM3B,EACN8B,EAAM3B,EACN8B,EAAM3B,EACAG,EAMN/hN,EAAQ,OAFR8F,EAAIi8M,GAEYj4M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAIozM,GAIYvzM,EAAIG,IAAM,GAM1B5O,GAAS,OAFT8F,GAAMw7M,IAAQ,GAAOC,GAAQ,KAAaD,IAAQ,GAAOC,GAAQ,KAAaA,IAAS,EAAWD,GAAQ,KAEzFx3M,GAAKhE,IAAM,GAC5BiE,GAAS,OAJT6E,GAAM2yM,IAAQ,GAAOD,GAAQ,KAAaC,IAAQ,GAAOD,GAAQ,KAAaA,IAAS,EAAWC,GAAQ,KAIzF9yM,GAAKG,IAAM,GAM5B5O,GAAS,OAFT8F,EAAKw7M,EAAMG,GAASH,EAAMM,GAET93M,GAAKhE,IAAM,GAC5BiE,GAAS,OAJT6E,EAAK2yM,EAAMG,GAASH,EAAMM,GAITpzM,GAAKG,IAAM,GAM5B5O,GAAS,OAFT8F,EAAIo7J,EAAI,EAAFptK,EAAI,IAEOgW,GAAKhE,IAAM,GAC5BiE,GAAS,OAJT6E,EAAIsyJ,EAAI,EAAFptK,IAIW2a,GAAKG,IAAM,GAG5BA,EAAI83X,EAAG5yY,EAAE,IAGQgW,IAFjBhE,EAAImyY,EAAGnkZ,EAAE,OAEmB,GAC5BiW,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAG5B7E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,GAUX9F,EAAQ,OAFR8F,EAJAwwY,EAAS,MAAJt2Y,EAAa8J,GAAK,IAMPA,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAJA23X,EAAS,MAAJx8X,GAFL0E,GAAK1E,IAAM,KAEY,IAQP0E,EAAIG,IAAM,GAM1B5O,GAAS,OAFT8F,GAAM86M,IAAQ,GAAOC,GAAQ,IAAaA,IAAS,EAAWD,GAAQ,KAAkBC,IAAS,EAAWD,GAAQ,KAEnG92M,GAAKhE,IAAM,GAC5BiE,GAAS,OAJT6E,GAAMiyM,IAAQ,GAAOD,GAAQ,IAAaA,IAAS,EAAWC,GAAQ,KAAkBD,IAAS,EAAWC,GAAQ,KAInGpyM,GAAKG,IAAM,GAMX9E,IAFjBhE,EAAK86M,EAAME,EAAQF,EAAMI,EAAQF,EAAME,KAEX,GAC5Bj3M,GAAS,OAJT6E,EAAKiyM,EAAME,EAAQF,EAAMI,EAAQF,EAAME,GAItBxyM,GAAKG,IAAM,GAM5B+0M,EAAW,OAHX55M,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,KACX2I,GAAK1E,IAAM,KAEgB,GAC3B25M,EAAW,MAAJ1jN,EAAe8J,GAAK,GAM3B9J,EAAQ,OAFR8F,EAAIg9M,GAEYh5M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAIm0M,GAIYt0M,EAAIG,IAAM,GAKT9E,IAFjBhE,EAAIwwY,KAEwB,GAC5BvsY,GAAS,OAJT6E,EAAI23X,GAIa93X,GAAKG,IAAM,GAS5BmyM,EAAMyB,EACNvB,EAAMyB,EACNtB,EAAMwB,EACNrB,EANAwB,EAAW,OAHXh5M,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,KACX2I,GAAK1E,IAAM,KAEgB,GAO3B23M,EAAMwB,EACNrB,EAAMwB,EACNrB,EAAMwB,EACN3C,EAAM8C,EAEN7C,EAAMyB,EACNvB,EAAMyB,EACNtB,EAAMwB,EACNrB,EAdAwB,EAAW,MAAJ9iN,EAAe8J,GAAK,GAe3B23M,EAAMwB,EACNrB,EAAMwB,EACNrB,EAAMwB,EACN3C,EAAM8C,EAEF5vN,EAAE,KAAO,GACX,IAAK8wB,EAAI,EAAGA,EAAI,GAAIA,IAElBhW,EAAI83X,EAAG9hX,GAGP5kB,EAAQ,OAFR8F,EAAImyY,EAAGrzX,IAES9a,EAAIhE,IAAM,GAC1BiE,EAAQ,MAAJ6E,EAAYH,EAAIG,IAAM,GAE1BA,EAAI83X,GAAI9hX,EAAE,GAAG,IAGb5kB,GAAS,OAFT8F,EAAImyY,GAAIrzX,EAAE,GAAG,KAEI9a,GAAKhE,IAAM,GAC5BiE,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAG5B23X,EAAKG,GAAI9hX,EAAE,GAAG,IAKd5kB,GAAS,OAFT8F,IAFAwwY,EAAK2B,GAAIrzX,EAAE,GAAG,OAED,EAAM2hX,GAAO,KAAY+P,IAAO,EAAM/P,GAAO,KAAY+P,IAAO,EAAM/P,GAAO,KAEzEz8X,GAAKhE,IAAM,GAC5BiE,GAAS,OAJT6E,GAAM23X,IAAO,EAAM+P,GAAO,KAAY/P,IAAO,EAAM+P,GAAO,IAAW/P,IAAO,GAI3D93X,GAAKG,IAAM,GAG5B23X,EAAKG,GAAI9hX,EAAE,IAAI,IAKE9a,IAFjBhE,IAFAwwY,EAAK2B,GAAIrzX,EAAE,IAAI,OAEF,GAAO2hX,GAAO,KAAaA,IAAQ,GAAW+P,GAAO,IAAkBA,IAAO,EAAM/P,GAAO,OAE5E,GAC5Bx8X,GAAS,OAJT6E,GAAM23X,IAAO,GAAO+P,GAAO,KAAaA,IAAQ,GAAW/P,GAAO,GAAiBA,IAAO,GAIzE93X,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEX4gY,EAAG9hX,GAAU,MAAJ7a,EAAe0E,GAAK,GAC7BwpY,EAAGrzX,GAAU,MAAJ5kB,EAAe8J,GAAK,GASnC9J,EAAQ,OAFR8F,EAAI86M,GAEY92M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAIiyM,GAIYpyM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAKphI,EAAW,MAAJ92M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAKthI,EAAW,MAAJ5gN,EAAe8J,GAAK,GAKnC9J,EAAQ,OAFR8F,EAAIg7M,GAEYh3M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAImyM,GAIYtyM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAKlhI,EAAW,MAAJh3M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAKphI,EAAW,MAAJ9gN,EAAe8J,GAAK,GAKnC9J,EAAQ,OAFR8F,EAAIk7M,GAEYl3M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAIqyM,GAIYxyM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAKhhI,EAAW,MAAJl3M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAKlhI,EAAW,MAAJhhN,EAAe8J,GAAK,GAKnC9J,EAAQ,OAFR8F,EAAIq7M,GAEYr3M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAIwyM,GAIY3yM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAK7gI,EAAW,MAAJr3M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAK/gI,EAAW,MAAJnhN,EAAe8J,GAAK,GAKnC9J,EAAQ,OAFR8F,EAAIw7M,GAEYx3M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAI2yM,GAIY9yM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAK1gI,EAAW,MAAJx3M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAK5gI,EAAW,MAAJthN,EAAe8J,GAAK,GAKnC9J,EAAQ,OAFR8F,EAAI27M,GAEY33M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAI8yM,GAIYjzM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAKvgI,EAAW,MAAJ33M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAKzgI,EAAW,MAAJzhN,EAAe8J,GAAK,GAKnC9J,EAAQ,OAFR8F,EAAI87M,GAEY93M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAIizM,GAIYpzM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAKpgI,EAAW,MAAJ93M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAKtgI,EAAW,MAAJ5hN,EAAe8J,GAAK,GAKnC9J,EAAQ,OAFR8F,EAAIi8M,GAEYj4M,EAAIhE,IAAM,GAC1BiE,EAAQ,OAJR6E,EAAIozM,GAIYvzM,EAAIG,IAAM,GAE1BA,EAAIqzU,EAAG,GAGUn4U,IAFjBhE,EAAIo8U,EAAG,MAEqB,GAC5Bn4U,GAAS,MAAJ6E,EAAYH,GAAKG,IAAM,GAI5BH,IADA1E,IADAD,IAHA9J,GAAS,MAAJ8F,KAGM,MACA,MACA,GAEXm8U,EAAG,GAAKjgI,EAAW,MAAJj4M,EAAe0E,GAAK,GACnCyzU,EAAG,GAAKngI,EAAW,MAAJ/hN,EAAe8J,GAAK,GAEnCxM,GAAO,IACPsJ,GAAK,GACN,CAED,OAAOA,CACR,CAED,SAASi0b,EAAY95Q,EAAKl6K,EAAGD,GAC3B,IAGI9S,EAHAmuV,EAAK,IAAI7xU,WAAW,GACpB8xU,EAAK,IAAI9xU,WAAW,GACpBlX,EAAI,IAAIwO,WAAW,KAChBoC,EAAIlD,EAuBX,IArBAq7U,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,UACRA,EAAG,GAAK,WAERC,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,WACRA,EAAG,GAAK,UACRA,EAAG,GAAK,WACRA,EAAG,GAAK,UAER04G,EAAqB34G,EAAIC,EAAIr7U,EAAGD,GAChCA,GAAK,IAEA9S,EAAI,EAAGA,EAAI8S,EAAG9S,IAAKoF,EAAEpF,GAAK+S,EAAEiD,EAAElD,EAAE9S,GAQrC,IAPAoF,EAAE0N,GAAK,IAGP1N,GADA0N,EAAI,IAAI,KAAKA,EAAE,IAAI,EAAE,IACjB,GAAK,EACT0tb,EAAKp7b,EAAG0N,EAAE,EAAKkD,EAAI,UAAc,EAAGA,GAAK,GACzC8wb,EAAqB34G,EAAIC,EAAIhpV,EAAG0N,GAE3B9S,EAAI,EAAGA,EAAI,EAAGA,IAAKwgc,EAAKvzQ,EAAK,EAAEjtL,EAAGmuV,EAAGnuV,GAAIouV,EAAGpuV,IAEjD,OAAO,CACR,CAED,SAASmuB,EAAIvQ,EAAG7Y,GACd,IAAImH,EAAI08X,IAAM5yX,EAAI4yX,IAAM3yX,EAAI2yX,IACxBjuX,EAAIiuX,IAAMx/X,EAAIw/X,IAAMhuX,EAAIguX,IACxB/tX,EAAI+tX,IAAM9tX,EAAI8tX,IAAM31X,EAAI21X,IAE5BwV,EAAElyY,EAAG0R,EAAE,GAAIA,EAAE,IACbwgY,EAAEnrY,EAAGlO,EAAE,GAAIA,EAAE,IACbgrQ,EAAE7jQ,EAAGA,EAAG+G,GACRiiN,EAAEl/M,EAAG4H,EAAE,GAAIA,EAAE,IACbs3M,EAAEjiN,EAAGlO,EAAE,GAAIA,EAAE,IACbgrQ,EAAE/5P,EAAGA,EAAG/C,GACR88P,EAAE95P,EAAG2H,EAAE,GAAI7Y,EAAE,IACbgrQ,EAAE95P,EAAGA,EAAGsqb,GACRxwL,EAAEp1P,EAAGiD,EAAE,GAAI7Y,EAAE,IACbmwN,EAAEv6M,EAAGA,EAAGA,GACRyjY,EAAEh1Y,EAAG4M,EAAG9J,GACRkyY,EAAExjY,EAAGD,EAAG1E,GACRi/M,EAAEr6M,EAAGF,EAAG1E,GACRi/M,EAAEp6M,EAAG9E,EAAG9J,GAER6jQ,EAAEnyP,EAAE,GAAIxU,EAAGwR,GACXm1P,EAAEnyP,EAAE,GAAI9C,EAAGD,GACXk1P,EAAEnyP,EAAE,GAAI/C,EAAGD,GACXm1P,EAAEnyP,EAAE,GAAIxU,EAAG0R,EACZ,CAED,SAASksb,EAAMppb,EAAG7Y,EAAGiR,GACnB,IAAIhW,EACJ,IAAKA,EAAI,EAAGA,EAAI,EAAGA,IACjB8jc,EAASlmb,EAAE5d,GAAI+E,EAAE/E,GAAIgW,EAExB,CAED,SAASwtI,EAAK/nI,EAAGmC,GACf,IAAIlC,EAAKktX,IAAMjtX,EAAKitX,IAAM7oF,EAAK6oF,IAC/B08D,EAASvlJ,EAAIniS,EAAE,IACfmyP,EAAEr0P,EAAIkC,EAAE,GAAImiS,GACZhwC,EAAEp0P,EAAIiC,EAAE,GAAImiS,GACZgkJ,EAAUtob,EAAGE,GACbF,EAAE,KAAOwob,EAASvob,IAAO,CAC1B,CAED,SAASurb,GAAWrpb,EAAG7Y,EAAG0Q,GACxB,IAAIO,EAAGhW,EAKP,IAJA4jc,EAAShmb,EAAE,GAAIwib,GACfwD,EAAShmb,EAAE,GAAIyib,GACfuD,EAAShmb,EAAE,GAAIyib,GACfuD,EAAShmb,EAAE,GAAIwib,GACVpgc,EAAI,IAAKA,GAAK,IAAKA,EAEtBgnc,EAAMppb,EAAG7Y,EADTiR,EAAKP,EAAGzV,EAAE,EAAG,KAAS,EAAFA,GAAQ,GAE5BmuB,EAAIppB,EAAG6Y,GACPuQ,EAAIvQ,EAAGA,GACPopb,EAAMppb,EAAG7Y,EAAGiR,EAEf,CAED,SAASkxb,GAAWtpb,EAAGnI,GACrB,IAAI1Q,EAAI,CAAC6jY,IAAMA,IAAMA,IAAMA,KAC3Bg7D,EAAS7+b,EAAE,GAAIg4Y,GACf6mD,EAAS7+b,EAAE,GAAIo5Y,GACfylD,EAAS7+b,EAAE,GAAIs7b,GACftwL,EAAEhrQ,EAAE,GAAIg4Y,EAAGoB,GACX8oD,GAAWrpb,EAAG7Y,EAAG0Q,EAClB,CAED,SAAS0xb,GAAoBnkJ,EAAIu7F,EAAI6oD,GACnC,IAEIpnc,EAFA2a,EAAI,IAAI/G,WAAW,IACnBgK,EAAI,CAACgrX,IAAMA,IAAMA,IAAMA,KAY3B,IATKw+D,GAAQtkJ,EAAYy7F,EAAI,IAC7BwoD,EAAYpsb,EAAG4jY,EAAI,IACnB5jY,EAAE,IAAM,IACRA,EAAE,KAAO,IACTA,EAAE,KAAO,GAETusb,GAAWtpb,EAAGjD,GACd6oI,EAAKw/J,EAAIplS,GAEJ5d,EAAI,EAAGA,EAAI,GAAIA,IAAKu+Y,EAAGv+Y,EAAE,IAAMgjT,EAAGhjT,GACvC,OAAO,CACR,CAED,IAAIqxY,GAAI,IAAI70X,aAAa,CAAC,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAEvK,SAAS6qb,GAAK5rb,EAAGrW,GACf,IAAIylN,EAAO7qN,EAAG8wB,EAAGqmD,EACjB,IAAKn3E,EAAI,GAAIA,GAAK,KAAMA,EAAG,CAEzB,IADA6qN,EAAQ,EACH/5L,EAAI9wB,EAAI,GAAIm3E,EAAIn3E,EAAI,GAAI8wB,EAAIqmD,IAAKrmD,EACpC1rB,EAAE0rB,IAAM+5L,EAAQ,GAAKzlN,EAAEpF,GAAKqxY,GAAEvgX,GAAK9wB,EAAI,KACvC6qN,EAASzlN,EAAE0rB,GAAK,KAAQ,EACxB1rB,EAAE0rB,IAAc,IAAR+5L,EAEVzlN,EAAE0rB,IAAM+5L,EACRzlN,EAAEpF,GAAK,CACR,CAED,IADA6qN,EAAQ,EACH/5L,EAAI,EAAGA,EAAI,GAAIA,IAClB1rB,EAAE0rB,IAAM+5L,GAASzlN,EAAE,KAAO,GAAKisY,GAAEvgX,GACjC+5L,EAAQzlN,EAAE0rB,IAAM,EAChB1rB,EAAE0rB,IAAM,IAEV,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAK1rB,EAAE0rB,IAAM+5L,EAAQwmL,GAAEvgX,GAC3C,IAAK9wB,EAAI,EAAGA,EAAI,GAAIA,IAClBoF,EAAEpF,EAAE,IAAMoF,EAAEpF,IAAM,EAClByb,EAAEzb,GAAY,IAAPoF,EAAEpF,EAEZ,CAED,SAAS+kJ,GAAOtpI,GACd,IAA8Bzb,EAA1BoF,EAAI,IAAIoX,aAAa,IACzB,IAAKxc,EAAI,EAAGA,EAAI,GAAIA,IAAKoF,EAAEpF,GAAKyb,EAAEzb,GAClC,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKyb,EAAEzb,GAAK,EAChCqnc,GAAK5rb,EAAGrW,EACT,CAGD,SAASkic,GAAYC,EAAIx0b,EAAGD,EAAGyrY,GAC7B,IACIv+Y,EAAG8wB,EADHnW,EAAI,IAAI/G,WAAW,IAAKkH,EAAI,IAAIlH,WAAW,IAAK6H,EAAI,IAAI7H,WAAW,IAC7DxO,EAAI,IAAIoX,aAAa,IAC3BoB,EAAI,CAACgrX,IAAMA,IAAMA,IAAMA,KAE3Bm+D,EAAYpsb,EAAG4jY,EAAI,IACnB5jY,EAAE,IAAM,IACRA,EAAE,KAAO,IACTA,EAAE,KAAO,GAET,IAAI6sb,EAAQ10b,EAAI,GAChB,IAAK9S,EAAI,EAAGA,EAAI8S,EAAG9S,IAAKunc,EAAG,GAAKvnc,GAAK+S,EAAE/S,GACvC,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKunc,EAAG,GAAKvnc,GAAK2a,EAAE,GAAK3a,GAO7C,IALA+mc,EAAYtrb,EAAG8rb,EAAGjsZ,SAAS,IAAKxoC,EAAE,IAClCiyI,GAAOtpI,GACPyrb,GAAWtpb,EAAGnC,GACd+nI,EAAK+jT,EAAI3pb,GAEJ5d,EAAI,GAAIA,EAAI,GAAIA,IAAKunc,EAAGvnc,GAAKu+Y,EAAGv+Y,GAIrC,IAHA+mc,EAAYjsb,EAAGysb,EAAIz0b,EAAI,IACvBiyI,GAAOjqI,GAEF9a,EAAI,EAAGA,EAAI,GAAIA,IAAKoF,EAAEpF,GAAK,EAChC,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKoF,EAAEpF,GAAKyb,EAAEzb,GAClC,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAClB,IAAK8wB,EAAI,EAAGA,EAAI,GAAIA,IAClB1rB,EAAEpF,EAAE8wB,IAAMhW,EAAE9a,GAAK2a,EAAEmW,GAKvB,OADAu2a,GAAKE,EAAGjsZ,SAAS,IAAKl2C,GACfoic,CACR,CAED,SAASC,GAAUhsb,EAAGmC,GACpB,IAAI3K,EAAI21X,IAAMvpJ,EAAMupJ,IAAMnoO,EAAMmoO,IAC5B8+D,EAAM9+D,IAAM++D,EAAO/+D,IAAMg/D,EAAOh/D,IAChCi/D,EAAOj/D,IA2BX,OAzBAg7D,EAASnob,EAAE,GAAI4kb,GACf6D,EAAYzob,EAAE,GAAImC,GAClBy5J,EAAE5W,EAAKhlJ,EAAE,IACTs0P,EAAE23L,EAAKjnS,EAAK20D,GACZgpL,EAAE39O,EAAKA,EAAKhlJ,EAAE,IACdy5M,EAAEwyO,EAAKjsb,EAAE,GAAIisb,GAEbrwR,EAAEswR,EAAMD,GACRrwR,EAAEuwR,EAAMD,GACR53L,EAAE83L,EAAMD,EAAMD,GACd53L,EAAE98P,EAAG40b,EAAMpnS,GACXsvG,EAAE98P,EAAGA,EAAGy0b,GApsBV,SAAiB96V,EAAG5sG,GAClB,IACIkM,EADA+J,EAAI2yX,IAER,IAAK18X,EAAI,EAAGA,EAAI,GAAIA,IAAK+J,EAAE/J,GAAKlM,EAAEkM,GAClC,IAAKA,EAAI,IAAKA,GAAK,EAAGA,IAClBmrK,EAAEphK,EAAGA,GACI,IAAN/J,GAAS6jQ,EAAE95P,EAAGA,EAAGjW,GAExB,IAAKkM,EAAI,EAAGA,EAAI,GAAIA,IAAK0gG,EAAE1gG,GAAK+J,EAAE/J,EACnC,CA6rBC47b,CAAQ70b,EAAGA,GACX88P,EAAE98P,EAAGA,EAAGwtJ,GACRsvG,EAAE98P,EAAGA,EAAGy0b,GACR33L,EAAE98P,EAAGA,EAAGy0b,GACR33L,EAAEt0P,EAAE,GAAIxI,EAAGy0b,GAEXrwR,EAAEgoE,EAAK5jO,EAAE,IACTs0P,EAAE1wB,EAAKA,EAAKqoN,GACR1D,EAAS3kN,EAAK5+E,IAAMsvG,EAAEt0P,EAAE,GAAIA,EAAE,GAAI6nJ,GAEtC+T,EAAEgoE,EAAK5jO,EAAE,IACTs0P,EAAE1wB,EAAKA,EAAKqoN,GACR1D,EAAS3kN,EAAK5+E,IAAc,GAE5BwjS,EAASxob,EAAE,MAASmC,EAAE,KAAK,GAAIwgY,EAAE3iY,EAAE,GAAI2kb,EAAK3kb,EAAE,IAElDs0P,EAAEt0P,EAAE,GAAIA,EAAE,GAAIA,EAAE,IACT,EACR,CAED,SAASssb,GAAiBh1b,EAAGw0b,EAAIz0b,EAAGkwS,GAClC,IAAIhjT,EACAiT,EAAI,IAAIW,WAAW,IAAKkH,EAAI,IAAIlH,WAAW,IAC3CgK,EAAI,CAACgrX,IAAMA,IAAMA,IAAMA,KACvB7jY,EAAI,CAAC6jY,IAAMA,IAAMA,IAAMA,KAG3B,IADQ,EACJ91X,EAAI,GAAI,OAAQ,EAEpB,GAAI20b,GAAU1ic,EAAGi+S,GAAK,OAAQ,EAE9B,IAAKhjT,EAAI,EAAGA,EAAI8S,EAAG9S,IAAK+S,EAAE/S,GAAKunc,EAAGvnc,GAClC,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAK+S,EAAE/S,EAAE,IAAMgjT,EAAGhjT,GAUtC,GATA+mc,EAAYjsb,EAAG/H,EAAGD,GAClBiyI,GAAOjqI,GACPmsb,GAAWrpb,EAAG7Y,EAAG+V,GAEjBosb,GAAWnic,EAAGwic,EAAGjsZ,SAAS,KAC1BntB,EAAIvQ,EAAG7Y,GACPy+I,EAAKvwI,EAAG2K,GAER9K,GAAK,GACD4tb,EAAiB6G,EAAI,EAAGt0b,EAAG,GAAI,CACjC,IAAKjT,EAAI,EAAGA,EAAI8S,EAAG9S,IAAK+S,EAAE/S,GAAK,EAC/B,OAAQ,CACT,CAED,IAAKA,EAAI,EAAGA,EAAI8S,EAAG9S,IAAK+S,EAAE/S,GAAKunc,EAAGvnc,EAAI,IAEtC,OADO8S,CAER,CAED,IAGIk1b,GAAgC,GAShCC,GAAoB,GACpBC,GAA6B,GAC7BC,GAA6B,GAiDjC,SAASC,GAAajxX,EAAGrkE,GACvB,GAhE8B,KAgE1BqkE,EAAEn2E,OAAsC,MAAM,IAAI+S,MAAM,gBAC5D,GAhEgC,KAgE5BjB,EAAE9R,OAAwC,MAAM,IAAI+S,MAAM,iBAC/D,CAOD,SAASs0b,KACP,IAAIp1b,EAAGjT,EACP,IAAKA,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAC/B,GAA2D,yBAAtDiT,EAAI3P,OAAOgJ,UAAUI,SAAS/L,KAAK4D,UAAUvE,KAChD,MAAM,IAAImB,UAAU,mBAAqB8R,EAAI,mBAEnD,CAED,SAASiuM,GAAQnhN,GACf,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAIiB,OAAQhB,IAAKD,EAAIC,GAAK,CAC/C,CAjED0jb,EAAK4kB,SAAW,CACd/F,qBAAsBA,EACtBQ,kBAAmBA,EACnBF,cAAeA,EACfJ,0BAA2BA,EAC3BG,sBAAuBA,EACvBU,mBAAoBA,EACpBE,0BAA2BA,EAC3B/C,iBAAkBA,EAClBC,iBAAkBA,EAClBgD,iBAAkBA,EAClBC,sBAAuBA,EACvB4B,kBAAmBA,EACnBG,uBAAwBA,EACxBE,oBAAqBA,EACrBgB,mBAAoBA,EACpB2B,WA1sBF,SAAoBtyb,EAAGlD,EAAG4H,EAAG7H,EAAGzN,EAAGD,GACjC,IAAI+xE,EAAI,IAAIvjE,WAAW,IAEvB,OADAgyb,EAAoBzuX,EAAG9xE,EAAGD,GACnBwhc,EAAmB3wb,EAAGlD,EAAG4H,EAAG7H,EAAGqkE,EACvC,EAusBCqxX,gBArsBF,SAAyBz1b,EAAGkD,EAAG0E,EAAG7H,EAAGzN,EAAGD,GACtC,IAAI+xE,EAAI,IAAIvjE,WAAW,IAEvB,OADAgyb,EAAoBzuX,EAAG9xE,EAAGD,GACnByhc,EAAwB9zb,EAAGkD,EAAG0E,EAAG7H,EAAGqkE,EAC5C,EAksBCwuX,mBAAoBA,EACpBoB,YAAaA,EACbO,YAAaA,GACbH,oBAAqBA,GACrBY,iBAAkBA,GAElBU,0BA1C8B,GA2C9BC,4BA1CgC,GA2ChCC,2BA1C+B,GA2C/BX,8BAA+BA,GAC/BY,wBA1C4B,GA2C5BC,8BA1CkC,GA2ClCC,0BA1C8B,GA2C9BC,0BA1C8B,GA2C9BC,yBA1C6B,GA2C7BC,sBAlDgC,GAmDhCC,qBAlD+B,GAmD/BC,wBA1C4BnB,GA2C5BC,kBAAmBA,GACnBC,2BAA4BA,GAC5BC,2BAA4BA,GAC5BiB,sBA1C0B,GA2C1BC,kBA1CsB,IAsEnB3lB,EAAK5nQ,OACR4nQ,EAAK5nQ,KAAO,CAAC,EACb4nQ,EAAK5nQ,KAAKwtR,WAAa5lB,EAAK5nQ,KAAKytR,WAAa7lB,EAAK5nQ,KAAK0tR,aAAe9lB,EAAK5nQ,KAAK2tR,aAAe,WAC9F,MAAM,IAAI11b,MAAM,qFACjB,GAGH2va,EAAK/zK,YAAc,SAAS78P,GAC1B,IAAIkD,EAAI,IAAIpC,WAAWd,GAEvB,OADAgwS,EAAY9sS,EAAGlD,GACRkD,CACR,EAED0ta,EAAKgmB,UAAY,SAAS74T,EAAKgM,EAAOx5I,GACpCglc,GAAgBx3T,EAAKgM,EAAOx5I,GAC5B+kc,GAAa/kc,EAAKw5I,GAGlB,IAFA,IAAI9pI,EAAI,IAAIa,WApGmB,GAoGqBi9H,EAAI7vI,QACpDiV,EAAI,IAAIrC,WAAWb,EAAE/R,QAChBhB,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAAK+S,EAAE/S,EAtGR,IAsGwC6wI,EAAI7wI,GAE3E,OADA0jc,EAAiBztb,EAAGlD,EAAGA,EAAE/R,OAAQ67I,EAAOx5I,GACjC4S,EAAEqlC,SAAS0sZ,GACnB,EAEDtkB,EAAKgmB,UAAUzoQ,KAAO,SAAS3yK,EAAKuuH,EAAOx5I,GACzCglc,GAAgB/5a,EAAKuuH,EAAOx5I,GAC5B+kc,GAAa/kc,EAAKw5I,GAGlB,IAFA,IAAI5mI,EAAI,IAAIrC,WAAWo0b,GAAgC15a,EAAIttB,QACvD+R,EAAI,IAAIa,WAAWqC,EAAEjV,QAChBhB,EAAI,EAAGA,EAAIsuB,EAAIttB,OAAQhB,IAAKiW,EAAEjW,EAAEgoc,IAAiC15a,EAAItuB,GAC9E,QAAIiW,EAAEjV,OAAS,MAC2C,IAAtD2ic,EAAsB5wb,EAAGkD,EAAGA,EAAEjV,OAAQ67I,EAAOx5I,IAC1C0P,EAAEuoC,SAnHsB,IAoHhC,EAEDooY,EAAKgmB,UAAUC,UAxHiB,GAyHhCjmB,EAAKgmB,UAAUE,YAxHmB,GAyHlClmB,EAAKgmB,UAAUG,eAAiB7B,GAEhCtkB,EAAKomB,WAAa,SAASh3b,EAAG8K,GAE5B,GADAyqb,GAAgBv1b,EAAG8K,GAxHe,KAyH9B9K,EAAE9R,OAA0C,MAAM,IAAI+S,MAAM,cAChE,GA3H4B,KA2HxB6J,EAAE5c,OAAoC,MAAM,IAAI+S,MAAM,cAC1D,IAAIhP,EAAI,IAAI6O,WA5HgB,IA8H5B,OADA2xb,EAAkBxgc,EAAG+N,EAAG8K,GACjB7Y,CACR,EAED2+a,EAAKomB,WAAW39R,KAAO,SAASr5J,GAE9B,GADAu1b,GAAgBv1b,GAjIkB,KAkI9BA,EAAE9R,OAA0C,MAAM,IAAI+S,MAAM,cAChE,IAAIhP,EAAI,IAAI6O,WApIgB,IAsI5B,OADA8xb,EAAuB3gc,EAAG+N,GACnB/N,CACR,EAED2+a,EAAKomB,WAAWC,aAxIoB,GAyIpCrmB,EAAKomB,WAAWE,mBA1Ic,GA4I9BtmB,EAAKp1Z,IAAM,SAASuiH,EAAKgM,EAAOw1B,EAAWsxQ,GACzC,IAAIxsW,EAAIusW,EAAKp1Z,IAAIqkO,OAAOtgF,EAAWsxQ,GACnC,OAAOD,EAAKgmB,UAAU74T,EAAKgM,EAAO1lE,EACnC,EAEDusW,EAAKp1Z,IAAIqkO,OAAS,SAAStgF,EAAWsxQ,GACpC0kB,GAAgBh2R,EAAWsxQ,GAlF7B,SAAyB3gI,EAAIu7F,GAC3B,GA/D8B,KA+D1Bv7F,EAAGhiT,OAAsC,MAAM,IAAI+S,MAAM,uBAC7D,GA/D8B,KA+D1BwqY,EAAGv9Y,OAAsC,MAAM,IAAI+S,MAAM,sBAC9D,CAgFCk2b,CAAgB53R,EAAWsxQ,GAC3B,IAAIxsW,EAAI,IAAIvjE,WAhJiB,IAkJ7B,OADAgyb,EAAoBzuX,EAAGk7F,EAAWsxQ,GAC3BxsW,CACR,EAEDusW,EAAKp1Z,IAAIukO,MAAQ6wL,EAAKgmB,UAEtBhmB,EAAKp1Z,IAAI2yK,KAAO,SAASpwD,EAAKgM,EAAOw1B,EAAWsxQ,GAC9C,IAAIxsW,EAAIusW,EAAKp1Z,IAAIqkO,OAAOtgF,EAAWsxQ,GACnC,OAAOD,EAAKgmB,UAAUzoQ,KAAKpwD,EAAKgM,EAAO1lE,EACxC,EAEDusW,EAAKp1Z,IAAI2yK,KAAK4xD,MAAQ6wL,EAAKgmB,UAAUzoQ,KAErCyiP,EAAKp1Z,IAAI+hJ,QAAU,WACjB,IAAI2yI,EAAK,IAAIpvS,WAjKiB,IAkK1B2qY,EAAK,IAAI3qY,WAjKiB,IAmK9B,OADA+xb,EAAmB3iJ,EAAIu7F,GAChB,CAAClsO,UAAW2wI,EAAI2gI,UAAWplC,EACnC,EAEDmlC,EAAKp1Z,IAAI+hJ,QAAQ6mR,cAAgB,SAASvT,GAExC,GADA0kB,GAAgB1kB,GAvKc,KAwK1BA,EAAU3ib,OACZ,MAAM,IAAI+S,MAAM,uBAClB,IAAIivS,EAAK,IAAIpvS,WA3KiB,IA6K9B,OADA8xb,EAAuB1iJ,EAAI2gI,GACpB,CAACtxQ,UAAW2wI,EAAI2gI,UAAW,IAAI/va,WAAW+va,GAClD,EAEDD,EAAKp1Z,IAAI47a,gBAhLuB,GAiLhCxmB,EAAKp1Z,IAAI67a,gBAhLuB,GAiLhCzmB,EAAKp1Z,IAAI87a,gBAhLsB,GAiL/B1mB,EAAKp1Z,IAAIs7a,YAxLyB,GAyLlClmB,EAAKp1Z,IAAIu7a,eAAiBnmB,EAAKgmB,UAAUG,eAEzCnmB,EAAKhvZ,KAAO,SAASm8G,EAAK8yS,GAExB,GADA0kB,GAAgBx3T,EAAK8yS,GACjBA,EAAU3ib,SAAWmnc,GACvB,MAAM,IAAIp0b,MAAM,uBAClB,IAAIs2b,EAAY,IAAIz2b,WAAWq0b,GAAkBp3T,EAAI7vI,QAErD,OADAsmc,GAAY+C,EAAWx5T,EAAKA,EAAI7vI,OAAQ2ib,GACjC0mB,CACR,EAED3mB,EAAKhvZ,KAAKusK,KAAO,SAASopQ,EAAWh4R,GACnC,GAAyB,IAArB9tK,UAAUvD,OACZ,MAAM,IAAI+S,MAAM,sFAElB,GADAs0b,GAAgBgC,EAAWh4R,GACvBA,EAAUrxK,SAAWknc,GACvB,MAAM,IAAIn0b,MAAM,uBAClB,IAAIqH,EAAM,IAAIxH,WAAWy2b,EAAUrpc,QAC/Bspc,EAAOvC,GAAiB3sb,EAAKivb,EAAWA,EAAUrpc,OAAQqxK,GAC9D,GAAIi4R,EAAO,EAAG,OAAO,KAErB,IADA,IAAIv3b,EAAI,IAAIa,WAAW02b,GACdtqc,EAAI,EAAGA,EAAI+S,EAAE/R,OAAQhB,IAAK+S,EAAE/S,GAAKob,EAAIpb,GAC9C,OAAO+S,CACR,EAED2wa,EAAKhvZ,KAAKkwZ,SAAW,SAAS/zS,EAAK8yS,GAGjC,IAFA,IAAI0mB,EAAY3mB,EAAKhvZ,KAAKm8G,EAAK8yS,GAC3Bv3R,EAAM,IAAIx4I,WAAWq0b,IAChBjoc,EAAI,EAAGA,EAAIosJ,EAAIprJ,OAAQhB,IAAKosJ,EAAIpsJ,GAAKqqc,EAAUrqc,GACxD,OAAOosJ,CACR,EAEDs3R,EAAKhvZ,KAAKkwZ,SAAS31Q,OAAS,SAASp+B,EAAKub,EAAKimB,GAE7C,GADAg2R,GAAgBx3T,EAAKub,EAAKimB,GACtBjmB,EAAIprJ,SAAWinc,GACjB,MAAM,IAAIl0b,MAAM,sBAClB,GAAIs+J,EAAUrxK,SAAWknc,GACvB,MAAM,IAAIn0b,MAAM,uBAClB,IAEI/T,EAFAunc,EAAK,IAAI3zb,WAAWq0b,GAAoBp3T,EAAI7vI,QAC5C+R,EAAI,IAAIa,WAAWq0b,GAAoBp3T,EAAI7vI,QAE/C,IAAKhB,EAAI,EAAGA,EAAIioc,GAAmBjoc,IAAKunc,EAAGvnc,GAAKosJ,EAAIpsJ,GACpD,IAAKA,EAAI,EAAGA,EAAI6wI,EAAI7vI,OAAQhB,IAAKunc,EAAGvnc,EAAEioc,IAAqBp3T,EAAI7wI,GAC/D,OAAQ+nc,GAAiBh1b,EAAGw0b,EAAIA,EAAGvmc,OAAQqxK,IAAc,CAC1D,EAEDqxQ,EAAKhvZ,KAAK27I,QAAU,WAClB,IAAI2yI,EAAK,IAAIpvS,WAAWs0b,IACpB3pD,EAAK,IAAI3qY,WAAWu0b,IAExB,OADAhB,GAAoBnkJ,EAAIu7F,GACjB,CAAClsO,UAAW2wI,EAAI2gI,UAAWplC,EACnC,EAEDmlC,EAAKhvZ,KAAK27I,QAAQ6mR,cAAgB,SAASvT,GAEzC,GADA0kB,GAAgB1kB,GACZA,EAAU3ib,SAAWmnc,GACvB,MAAM,IAAIp0b,MAAM,uBAElB,IADA,IAAIivS,EAAK,IAAIpvS,WAAWs0b,IACfloc,EAAI,EAAGA,EAAIgjT,EAAGhiT,OAAQhB,IAAKgjT,EAAGhjT,GAAK2jb,EAAU,GAAG3jb,GACzD,MAAO,CAACqyK,UAAW2wI,EAAI2gI,UAAW,IAAI/va,WAAW+va,GAClD,EAEDD,EAAKhvZ,KAAK27I,QAAQ8mR,SAAW,SAASvpR,GAEpC,GADAy6R,GAAgBz6R,GA1OU,KA2OtBA,EAAK5sK,OACP,MAAM,IAAI+S,MAAM,iBAGlB,IAFA,IAAIivS,EAAK,IAAIpvS,WAAWs0b,IACpB3pD,EAAK,IAAI3qY,WAAWu0b,IACfnoc,EAAI,EAAGA,EAAI,GAAIA,IAAKu+Y,EAAGv+Y,GAAK4tK,EAAK5tK,GAE1C,OADAmnc,GAAoBnkJ,EAAIu7F,GAAI,GACrB,CAAClsO,UAAW2wI,EAAI2gI,UAAWplC,EACnC,EAEDmlC,EAAKhvZ,KAAKw1a,gBAAkBhC,GAC5BxkB,EAAKhvZ,KAAKy1a,gBAAkBhC,GAC5BzkB,EAAKhvZ,KAAK61a,WAtPkB,GAuP5B7mB,EAAKhvZ,KAAK81a,gBAAkBvC,GAE5BvkB,EAAKnyW,KAAO,SAASs/D,GACnBw3T,GAAgBx3T,GAChB,IAAI/1H,EAAI,IAAIlH,WA1PU,IA4PtB,OADAmzb,EAAYjsb,EAAG+1H,EAAKA,EAAI7vI,QACjB8Z,CACR,EAED4oa,EAAKnyW,KAAKk5X,WA/Pc,GAiQxB/mB,EAAKz0Q,OAAS,SAAS7pK,EAAGC,GAGxB,OAFAgjc,GAAgBjjc,EAAGC,GAEF,IAAbD,EAAEpE,QAA6B,IAAbqE,EAAErE,SACpBoE,EAAEpE,SAAWqE,EAAErE,QACkB,IAA7B82T,EAAG1yT,EAAG,EAAGC,EAAG,EAAGD,EAAEpE,QAC1B,EAED0ib,EAAKgnB,QAAU,SAASp/b,GACtBw3S,EAAcx3S,CACf,EAED,WAGE,IAAIogO,EAAyB,qBAATngO,KAAwBA,KAAKmgO,QAAUngO,KAAKmkQ,SAAY,KAC5E,GAAIhkC,GAAUA,EAAO+jC,gBAAiB,CAGpCi0K,EAAKgnB,SAAQ,SAAStlc,EAAG0N,GACvB,IAAI9S,EAAGkX,EAAI,IAAItD,WAAWd,GAC1B,IAAK9S,EAAI,EAAGA,EAAI8S,EAAG9S,GAHT,MAIR0rO,EAAO+jC,gBAAgBv4P,EAAEokC,SAASt7C,EAAGA,EAAIuI,KAAKC,IAAIsK,EAAI9S,EAJ9C,SAMV,IAAKA,EAAI,EAAGA,EAAI8S,EAAG9S,IAAKoF,EAAEpF,GAAKkX,EAAElX,GACjCkhN,GAAQhqM,EACT,GACF,MAECw0N,EAASlwD,EAAQ,SACHkwD,EAAOikC,aACnB+zK,EAAKgnB,SAAQ,SAAStlc,EAAG0N,GACvB,IAAI9S,EAAGkX,EAAIw0N,EAAOikC,YAAY78P,GAC9B,IAAK9S,EAAI,EAAGA,EAAI8S,EAAG9S,IAAKoF,EAAEpF,GAAKkX,EAAElX,GACjCkhN,GAAQhqM,EACT,GAvBP,GAvzEA,EAm1EoCquJ,EAAOx3B,QAAUw3B,EAAOx3B,QAAWxiI,KAAKm4a,KAAOn4a,KAAKm4a,MAAQ,CAAC,sBC10EjG,IAAiD9sJ,IASxC,WACT,OAAiB,SAAS+zK,GAEhB,IAAIC,EAAmB,CAAC,EAGxB,SAASp/J,EAAoBF,GAG5B,GAAGs/J,EAAiBt/J,GACnB,OAAOs/J,EAAiBt/J,GAAUv9J,QAGnC,IAAIw3B,EAASqlS,EAAiBt/J,GAAY,CACzCv9J,QAAS,CAAC,EACV9qI,GAAIqoS,EACJpoS,QAAQ,GAUT,OANAync,EAAQr/J,GAAU3qS,KAAK4kK,EAAOx3B,QAASw3B,EAAQA,EAAOx3B,QAASy9J,GAG/DjmI,EAAOriK,QAAS,EAGTqiK,EAAOx3B,OACd,CAaD,OATAy9J,EAAoBz4R,EAAI43b,EAGxBn/J,EAAoBv1R,EAAI20b,EAGxBp/J,EAAoB5tR,EAAI,GAGjB4tR,EAAoB,EAC3B,CAxCH,CA0CG,CAEH,SAASjmI,EAAQx3B,EAASy9J,GAEhC,aAEAloS,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAIqkZ,EAAgB,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAIhBwvO,EAAiBr/J,EAAoB,GAErCs/J,EAAgBt/J,EAAoB,GASpC/oS,EAAS,WACX,SAASA,EAAMsoc,EAAW7oc,IAd5B,SAAyBiK,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAerJk/N,CAAgBj+N,KAAMK,GAGtBooc,EAAeG,YAAYj7V,KAAK3tG,KAAMF,EAAS6oc,GAE/C3oc,KAAKy7b,OACN,CAidD,OA1cAz4C,EAAa3iZ,EAAO,CAAC,CACnBY,IAAK,SACLtC,MAAO,WACLqB,KAAKo+Q,MAAMj9M,OAASnhE,KAAKmoC,QAAUnoC,KAAK23C,MACzC,GAMA,CACD12C,IAAK,OACLtC,MAAO,WACDqB,KAAK6oc,gBACL7oc,KAAKo+Q,MAAMj9M,SACfnhE,KAAK8oc,gBAAe,GACpB9oc,KAAKo+Q,MAAMj9M,QAAS,EACpBnhE,KAAKF,QAAQipc,OAAO/oc,KAAKgpc,SAAUhpc,MACpC,GAMA,CACDiB,IAAK,QACLtC,MAAO,WACDqB,KAAK6oc,gBACJ7oc,KAAKo+Q,MAAMj9M,SAChBnhE,KAAKo+Q,MAAMj9M,QAAS,EAChBnhE,KAAKo+Q,MAAM6qL,UACbjpc,KAAKipc,UAAUjpc,KAAKo+Q,MAAM8qL,UAAWlpc,KAAKo+Q,MAAM+qL,WAEhDnpc,KAAKopc,UAAUppc,KAAKo+Q,MAAM8qL,UAAWlpc,KAAKo+Q,MAAM+qL,WAElDnpc,KAAKF,QAAQ0sG,QAAQxsG,KAAKgpc,SAAUhpc,MACrC,GAMA,CACDiB,IAAK,UACLtC,MAAO,WACLqB,KAAKoqD,OAAM,GACXpqD,KAAKF,QAAQupc,UAAUrpc,KACxB,GAOA,CACDiB,IAAK,QACLtC,MAAO,WACL,IAAI2qc,EAAUnnc,UAAUvD,QAAU,QAAsByK,IAAjBlH,UAAU,IAA0BA,UAAU,GAErFmD,cAActF,KAAKo8I,SACnBp8I,KAAKupc,YAAY,IACbvpc,KAAKwpc,QAAUxpc,KAAKwpc,OAAOl0E,aAC7Bt1X,KAAKwpc,OAAOl0E,WAAW3D,YAAY3xX,KAAKwpc,QACxCxpc,KAAKwpc,OAAS,MAEhBxpc,KAAKypc,OAAS,EACdzpc,KAAKgpc,SAAW,EAChBhpc,KAAK0pc,QAAU,EACXJ,IACFtpc,KAAK2pc,eACL3pc,KAAKF,QAAQ8pc,QAAQ5pc,MACrBA,KAAKy7b,QAER,GAMA,CACDx6b,IAAK,QACLtC,MAAO,WACL,IAAIo2F,EAAQ/0F,KAEZA,KAAKF,QAAQ+pc,QAAQ7pc,MACrBA,KAAK6oc,gBAAiB,EACtB7oc,KAAK8pc,uBAAuB9pc,MAC5BA,KAAK2pc,eACD3pc,KAAK+pc,sBAAsB/pc,KAAKgqc,kBACpChqc,KAAKo8I,QAAUpuC,YAAW,WAEnBjZ,EAAMk1W,kBAAsD,IAAlCl1W,EAAMk1W,iBAAiBrrc,OAIpDm2F,EAAMq0W,UAAUr0W,EAAMk1W,iBAAkBl1W,EAAMk1W,iBAAiBrrc,QAH/Dm2F,EAAMk0W,UAAUl0W,EAAMh1F,QAAQg1F,EAAMm1W,SAASn1W,EAAMi0W,WAAYj0W,EAAM00W,OAKxE,GAAEzpc,KAAKmqc,WACT,GAQA,CACDlpc,IAAK,YACLtC,MAAO,SAAmBuqc,EAAWC,GACnC,IAAInlL,EAAShkR,KAETA,KAAK08G,SAAW18G,KAAKM,GAAG8mQ,UAAUx2E,SAAS5wL,KAAKoqc,gBAClDpqc,KAAKM,GAAG8mQ,UAAU/sO,OAAOr6B,KAAKoqc,cAC1Bpqc,KAAKwpc,QAAQxpc,KAAKwpc,OAAOpiM,UAAU/sO,OAAOr6B,KAAKoqc,eAGrD,IAAI16J,EAAW1vS,KAAKqqc,UAAUrqc,KAAKE,WAC/Boqc,EAAW,GAEW,IAAtBtqc,KAAKo+Q,MAAMj9M,OAMfnhE,KAAKo8I,QAAUpuC,YAAW,WAExBm7V,EAAYT,EAAc6B,WAAWC,cAActB,EAAWC,EAAWnlL,GAEzE,IAAIymL,EAAY,EACZ91R,EAASu0R,EAAUv0R,OAAOw0R,GAI9B,GAAyB,MAArBx0R,EAAOl4J,OAAO,IACZ,SAASgB,KAAKk3J,GAAS,CACzB,IAAI0rC,EAAO,EAEXA,IADA1rC,EAAS,MAAMv4J,KAAKu4J,GAAQ,IACb/1K,OACf6rc,EAAYnub,SAASq4J,GACrBqvG,EAAO0mL,gBAAiB,EACxB1mL,EAAOlkR,QAAQ6qc,eAAe3mL,EAAOglL,SAAUhlL,GAE/CklL,EAAYA,EAAUhwV,UAAU,EAAGiwV,GAAaD,EAAUhwV,UAAUiwV,EAAY9oP,GAChF2jE,EAAO8kL,gBAAe,EACvB,CAKH,GAAyB,MAArBn0R,EAAOl4J,OAAO,GAAY,CAC5B,KAA4D,MAArDysb,EAAUv0R,OAAOw0R,EAAYmB,GAAU7tb,OAAO,KACnD6tb,MACInB,EAAYmB,EAAWpB,EAAUtqc,WAGvC,IAAIgsc,EAAmB1B,EAAUhwV,UAAU,EAAGiwV,GAC1C0B,EAAgB3B,EAAUhwV,UAAU0xV,EAAiBhsc,OAAS,EAAGuqc,EAAYmB,GAC7EQ,EAAkB5B,EAAUhwV,UAAUiwV,EAAYmB,EAAW,GACjEpB,EAAY0B,EAAmBC,EAAgBC,EAC/CR,GACD,CAGDtmL,EAAO5nI,QAAUpuC,YAAW,WAE1Bg2K,EAAO8kL,gBAAe,GAGlBK,GAAaD,EAAUtqc,OACzBolR,EAAO+mL,WAAW7B,EAAWC,GAE7BnlL,EAAOgnL,WAAW9B,EAAWC,EAAWmB,GAGtCtmL,EAAO0mL,iBACT1mL,EAAO0mL,gBAAiB,EACxB1mL,EAAOlkR,QAAQmrc,gBAAgBjnL,EAAOglL,SAAUhlL,GAEnD,GAAEymL,EAGJ,GAAE/6J,GA9DD1vS,KAAKkrc,eAAehC,EAAWC,GAAW,EA+D7C,GAQA,CACDloc,IAAK,aACLtC,MAAO,SAAoBuqc,EAAWC,EAAWmB,GAE7B,IAAdnB,IACFnpc,KAAK8oc,gBAAe,GACpB9oc,KAAKF,QAAQqrc,eAAenrc,KAAKgpc,SAAUhpc,OAI7Cmpc,GAAamB,EACb,IAAIc,EAAalC,EAAUv0R,OAAO,EAAGw0R,GACrCnpc,KAAKupc,YAAY6B,GAEjBprc,KAAKipc,UAAUC,EAAWC,EAC3B,GAQA,CACDloc,IAAK,aACLtC,MAAO,SAAoBuqc,EAAWC,GACpC,IAAIttK,EAAS77R,KAGbA,KAAKF,QAAQurc,cAAcrrc,KAAKgpc,SAAUhpc,MAC1CA,KAAK8oc,gBAAe,GAEhB9oc,KAAKgpc,WAAahpc,KAAKD,QAAQnB,OAAS,IAE1CoB,KAAK8/E,YAEa,IAAd9/E,KAAKw7G,MAAkBx7G,KAAK0pc,UAAY1pc,KAAKs+G,aAInDt+G,KAAKo8I,QAAUpuC,YAAW,WACxB6tL,EAAOutK,UAAUF,EAAWC,EAC7B,GAAEnpc,KAAKsrc,WACT,GAQA,CACDrqc,IAAK,YACLtC,MAAO,SAAmBuqc,EAAWC,GACnC,IAAI1rK,EAASz9R,KAEb,IAA0B,IAAtBA,KAAKo+Q,MAAMj9M,OAAf,CAIA,GAAInhE,KAAK08G,QAAS,OAAO18G,KAAKurc,cAE9Bvrc,KAAK8oc,gBAAe,GACpB,IAAIp5J,EAAW1vS,KAAKqqc,UAAUrqc,KAAKG,WAEnCH,KAAKo8I,QAAUpuC,YAAW,WACxBm7V,EAAYT,EAAc6B,WAAWiB,mBAAmBtC,EAAWC,EAAW1rK,GAE9E,IAAIguK,EAAsBvC,EAAUv0R,OAAO,EAAGw0R,GAI9C,GAHA1rK,EAAO8rK,YAAYkC,GAGfhuK,EAAOiuK,eAAgB,CAEzB,IAAIN,EAAa3tK,EAAO19R,QAAQ09R,EAAOurK,SAAW,GAC9CoC,GAAcK,IAAwBL,EAAWz2R,OAAO,EAAGw0R,GAC7D1rK,EAAOkuK,QAAUxC,EAEjB1rK,EAAOkuK,QAAU,CAEpB,CAIGxC,EAAY1rK,EAAOkuK,SAErBxC,IAEA1rK,EAAO2rK,UAAUF,EAAWC,IACnBA,GAAa1rK,EAAOkuK,UAG7BluK,EAAOurK,WAEHvrK,EAAOurK,WAAavrK,EAAO19R,QAAQnB,QACrC6+R,EAAOurK,SAAW,EAClBvrK,EAAO39R,QAAQ8rc,yBACfnuK,EAAOqsK,yBACPrsK,EAAOg+J,SAEPh+J,EAAOwrK,UAAUxrK,EAAO19R,QAAQ09R,EAAOysK,SAASzsK,EAAOurK,WAAYG,GAIxE,GAAEz5J,EA7CF,MAFC1vS,KAAKkrc,eAAehC,EAAWC,GAAW,EAgD7C,GAMA,CACDloc,IAAK,WACLtC,MAAO,WACLqB,KAAKF,QAAQ+rc,WAAW7rc,MACpBA,KAAKw7G,KACPx7G,KAAK0pc,UAEL1pc,KAAK6oc,gBAAiB,CAEzB,GASA,CACD5nc,IAAK,iBACLtC,MAAO,SAAwBuqc,EAAWC,EAAW2C,GACnD9rc,KAAKo+Q,MAAM6qL,UAAY6C,EACvB9rc,KAAKo+Q,MAAM8qL,UAAYA,EACvBlpc,KAAKo+Q,MAAM+qL,UAAYA,CACxB,GAOA,CACDloc,IAAK,iBACLtC,MAAO,SAAwBotc,GACxB/rc,KAAKwpc,SAENxpc,KAAKo+Q,MAAMj9M,QACXnhE,KAAKgsc,iBAAmBD,IAC5B/rc,KAAKgsc,eAAiBD,EAClBA,EACF/rc,KAAKwpc,OAAOpiM,UAAUr7O,IAAI,uBAE1B/rB,KAAKwpc,OAAOpiM,UAAU/sO,OAAO,wBAEhC,GAOA,CACDp5B,IAAK,YACLtC,MAAO,SAAmBstc,GACxB,OAAO9lc,KAAK0L,MAAM1L,KAAKS,SAAWqlc,EAAQ,GAAKA,CAChD,GAMA,CACDhrc,IAAK,yBACLtC,MAAO,WACAqB,KAAKksc,UACVlsc,KAAKkqc,SAAWlqc,KAAKkqc,SAAStwY,MAAK,WACjC,OAAOzzD,KAAKS,SAAW,EACxB,IACF,GAMA,CACD3F,IAAK,cACLtC,MAAO,WACL,IAAI2/R,EAASt+R,KAIb,OAFAA,KAAKM,GAAGnB,WAAa,IAAMa,KAAKoqc,aAC5Bpqc,KAAKwpc,SAAQxpc,KAAKwpc,OAAOrqc,WAAa,IAAMa,KAAKoqc,cAC9Cp8V,YAAW,WAChBswL,EAAO0qK,WACP1qK,EAAOirK,YAAY,IAGfjrK,EAAOv+R,QAAQnB,OAAS0/R,EAAO0qK,SACjC1qK,EAAO2qK,UAAU3qK,EAAOv+R,QAAQu+R,EAAO4rK,SAAS5rK,EAAO0qK,WAAY,IAEnE1qK,EAAO2qK,UAAU3qK,EAAOv+R,QAAQ,GAAI,GACpCu+R,EAAO0qK,SAAW,EAErB,GAAEhpc,KAAKmsc,aACT,GAQA,CACDlrc,IAAK,cACLtC,MAAO,SAAqBizK,GACtB5xK,KAAKosc,KACPpsc,KAAKM,GAAGyoC,aAAa/oC,KAAKosc,KAAMx6R,GAE5B5xK,KAAKqsc,QACPrsc,KAAKM,GAAG3B,MAAQizK,EACc,SAArB5xK,KAAKs4L,YACdt4L,KAAKM,GAAGmxX,UAAY7/M,EAEpB5xK,KAAKM,GAAG8wX,YAAcx/M,CAG3B,GAOA,CACD3wK,IAAK,kBACLtC,MAAO,WACL,IAAI6/R,EAASx+R,KAERA,KAAKqsc,UACVrsc,KAAKM,GAAGmH,iBAAiB,SAAS,SAAUT,GAC1Cw3R,EAAO7mP,MACR,IACD33C,KAAKM,GAAGmH,iBAAiB,QAAQ,SAAUT,GACrCw3R,EAAOl+R,GAAG3B,OAAoC,IAA3B6/R,EAAOl+R,GAAG3B,MAAMC,QAGvC4/R,EAAOr2P,OACR,IACF,GAMA,CACDlnC,IAAK,eACLtC,MAAO,WACAqB,KAAKssc,aACNtsc,KAAKwpc,SACTxpc,KAAKwpc,OAAS/lc,SAASy0O,cAAc,QACrCl4O,KAAKwpc,OAAOrqc,UAAY,eACxBa,KAAKwpc,OAAOzga,aAAa,eAAe,GACxC/oC,KAAKwpc,OAAO/3E,UAAYzxX,KAAKusc,WAC7Bvsc,KAAKM,GAAGg1X,YAAct1X,KAAKM,GAAGg1X,WAAWklB,aAAax6Y,KAAKwpc,OAAQxpc,KAAKM,GAAGsjY,cAC5E,KAGIvjY,CACR,CA1dY,GA4dbsrI,EAAO,QAActrI,EACrB8iK,EAAOx3B,QAAUA,EAAO,OAElB,EAEA,SAASw3B,EAAQx3B,EAASy9J,GAEhC,aAEAloS,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAIgCqC,EAJ5BsiZ,EAAWpiZ,OAAO6iB,QAAU,SAAU7hB,GAAU,IAAK,IAAItE,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IAAK,CAAE,IAAIwE,EAASD,UAAUvE,GAAI,IAAK,IAAIqD,KAAOmB,EAAclB,OAAOgJ,UAAU6jK,eAAexvK,KAAK6D,EAAQnB,KAAQiB,EAAOjB,GAAOmB,EAAOnB,GAAW,CAAC,OAAOiB,CAAS,EAE5P8gZ,EAAgB,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAMhBuzO,EAAcpjK,EAAoB,GAElCqjK,GAN4Bzrc,EAMUwrc,IANWxrc,EAAIszR,WAAatzR,EAAM,CAAE,QAAWA,GAYrF0rc,EAAe,WACjB,SAASA,KAXX,SAAyB3ic,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAYrJk/N,CAAgBj+N,KAAM0sc,EACvB,CAqLD,OAnLA1pD,EAAa0pD,EAAa,CAAC,CACzBzrc,IAAK,OAULtC,MAAO,SAAcwK,EAAMrJ,EAAS6oc,GAiElC,GA9DEx/b,EAAK7I,GADkB,kBAAdqoc,EACCllc,SAASkpc,cAAchE,GAEvBA,EAGZx/b,EAAKrJ,QAAUwjZ,EAAS,CAAC,EAAGmpD,EAAY,QAAa3sc,GAGrDqJ,EAAKkjc,QAA4C,UAAlCljc,EAAK7I,GAAGuwY,QAAQtgY,cAC/BpH,EAAKijc,KAAOjjc,EAAKrJ,QAAQssc,KACzBjjc,EAAK4gc,qBAAuB5gc,EAAKrJ,QAAQiqc,qBAGzC5gc,EAAKmjc,YAAanjc,EAAKkjc,SAAkBljc,EAAKrJ,QAAQwsc,WAGtDnjc,EAAKojc,WAAapjc,EAAKrJ,QAAQysc,WAG/Bpjc,EAAK6ic,gBAAiB,EAGtB7ic,EAAKyjc,UAAYzjc,EAAKijc,KAAOjjc,EAAK7I,GAAGspC,aAAazgC,EAAKijc,MAAQjjc,EAAK7I,GAAG8wX,YAGvEjoX,EAAKmvL,YAAcnvL,EAAKrJ,QAAQw4L,YAGhCnvL,EAAKjJ,UAAYiJ,EAAKrJ,QAAQI,UAG9BiJ,EAAKghc,WAAahhc,EAAKrJ,QAAQqqc,WAG/Bhhc,EAAKhJ,UAAYgJ,EAAKrJ,QAAQK,UAG9BgJ,EAAKuic,eAAiBvic,EAAKrJ,QAAQ4rc,eAGnCvic,EAAKmic,UAAYnic,EAAKrJ,QAAQwrc,UAG9Bnic,EAAKuzG,QAAUvzG,EAAKrJ,QAAQ48G,QAC5BvzG,EAAKihc,aAAejhc,EAAKrJ,QAAQsqc,aACjCjhc,EAAKgjc,aAAehjc,EAAKrJ,QAAQqsc,aAGjChjc,EAAKgzQ,UAAW,EAGhBhzQ,EAAKpJ,QAAUoJ,EAAKrJ,QAAQC,QAAQ6F,KAAI,SAAUyN,GAChD,OAAOA,EAAEkuD,MACV,IAG0C,kBAAhCp4D,EAAKrJ,QAAQ+sc,eACtB1jc,EAAK0jc,eAAiBppc,SAASkpc,cAAcxjc,EAAKrJ,QAAQ+sc,gBAE1D1jc,EAAK0jc,eAAiB1jc,EAAKrJ,QAAQ+sc,eAGjC1jc,EAAK0jc,eAAgB,CACvB1jc,EAAKpJ,QAAU,GACfoJ,EAAK0jc,eAAersc,MAAMgzF,QAAU,OACpC,IAAIzzF,EAAUlC,MAAMqM,UAAUyF,MAAM3N,MAAMmH,EAAK0jc,eAAe5/a,UAC1D6/a,EAAgB/sc,EAAQnB,OAE5B,GAAIkuc,EACF,IAAK,IAAIlvc,EAAI,EAAGA,EAAIkvc,EAAelvc,GAAK,EAAG,CACzC,IAAImvc,EAAWhtc,EAAQnC,GACvBuL,EAAKpJ,QAAQrB,KAAKquc,EAASt7E,UAAUlwT,OACtC,CAEJ,CAgCD,IAAK,IAAI3jE,KA7BTuL,EAAKsgc,OAAS,EAGdtgc,EAAK6/b,SAAW,EAGhB7/b,EAAKwic,QAAU,EAGfxic,EAAKqyG,KAAOryG,EAAKrJ,QAAQ07G,KACzBryG,EAAKm1G,UAAYn1G,EAAKrJ,QAAQw+G,UAC9Bn1G,EAAKugc,QAAU,EAGfvgc,EAAK+ic,QAAU/ic,EAAKrJ,QAAQosc,QAE5B/ic,EAAK+gc,SAAW,GAEhB/gc,EAAKi1Q,MAAQ,CACXj9M,QAAQ,EACR8nY,WAAW,EACXC,UAAW,GACXC,UAAW,GAIbhgc,EAAK0/b,gBAAiB,EAGR1/b,EAAKpJ,QACjBoJ,EAAK+gc,SAAStsc,GAAKA,EAIrBuL,EAAK8gc,iBAAmBjqc,KAAKgtc,oBAAoB7jc,GAEjDA,EAAK8jc,cAAgB9jc,EAAKrJ,QAAQmtc,cAElCjtc,KAAKktc,mBAAmB/jc,EACzB,GACA,CACDlI,IAAK,sBACLtC,MAAO,SAA6BwK,GAWlC,OATIA,EAAKijc,KACKjjc,EAAK7I,GAAGspC,aAAazgC,EAAKijc,MAC7Bjjc,EAAKkjc,QACFljc,EAAK7I,GAAG3B,MACU,SAArBwK,EAAKmvL,YACFnvL,EAAK7I,GAAGmxX,UAERtoX,EAAK7I,GAAG8wX,WAGvB,GACA,CACDnwX,IAAK,qBACLtC,MAAO,SAA4BwK,GACjC,IAAIgkc,EAAc,oBAClB,GAAKhkc,EAAK8jc,gBAGL9jc,EAAKmjc,YAAenjc,EAAKuzG,WAG1Bj5G,SAASkpc,cAAc,IAAMQ,EAAc,KAA/C,CAIA,IAAIC,EAAM3pc,SAASy0O,cAAc,SACjCk1N,EAAI/lc,KAAO,WACX+lc,EAAIrka,aAAaoka,GAAa,GAE9B,IAAIE,EAAW,GACXlkc,EAAKmjc,aACPe,GAAY,qgBAEVlkc,EAAKuzG,UACP2wV,GAAY,6OAEK,IAAfD,EAAIxuc,SAGRwuc,EAAI37E,UAAY47E,EAChB5pc,SAASirG,KAAK82B,YAAY4nU,GAjBzB,CAkBF,KAGIV,CACR,CAzLkB,GA2LnB/gU,EAAO,QAAc+gU,EACrB,IAAI9D,EAAc,IAAI8D,EACtB/gU,EAAQi9T,YAAcA,CAEhB,EAEA,SAASzlS,EAAQx3B,GAQvB,aAEAzqI,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAET,IAAIqkL,EAAW,CAKbjjL,QAAS,CAAC,kCAAmC,+BAAgC,gBAAiB,qBAC9F8sc,eAAgB,KAKhB3sc,UAAW,EAKXiqc,WAAY,EAKZhqc,UAAW,EAKXurc,gBAAgB,EAKhBQ,SAAS,EAKTZ,UAAW,IAOX5uV,SAAS,EACT0tV,aAAc,iBACd+B,aAAc,IAMd3wV,MAAM,EACN8C,UAAWlzF,IAOXkhb,YAAY,EACZC,WAAY,IACZU,eAAe,EAMfb,KAAM,KAKNrC,sBAAsB,EAKtBzxQ,YAAa,OAMbuxQ,QAAS,SAAiB1gc,GAAQ,EAMlC0ic,WAAY,SAAoB1ic,GAAQ,EAOxCgic,eAAgB,SAAwBnC,EAAU7/b,GAAQ,EAO1Dkic,cAAe,SAAuBrC,EAAU7/b,GAAQ,EAMxDyic,uBAAwB,SAAgCzic,GAAQ,EAOhEwhc,eAAgB,SAAwB3B,EAAU7/b,GAAQ,EAO1D8hc,gBAAiB,SAAyBjC,EAAU7/b,GAAQ,EAM5Dygc,QAAS,SAAiBzgc,GAAQ,EAOlC4/b,OAAQ,SAAgBC,EAAU7/b,GAAQ,EAO1CqjG,QAAS,SAAiBw8V,EAAU7/b,GAAQ,EAM5Ckgc,UAAW,SAAmBlgc,GAAQ,GAGxCwiI,EAAO,QAAcq3C,EACrB7f,EAAOx3B,QAAUA,EAAO,OAElB,EAEA,SAASw3B,EAAQx3B,GAOvB,aAEAzqI,OAAOC,eAAewqI,EAAS,aAAc,CAC3ChtI,OAAO,IAGT,IAAIqkZ,EAAgB,WAAc,SAASzgZ,EAAiBL,EAAQjC,GAAS,IAAK,IAAIrC,EAAI,EAAGA,EAAIqC,EAAMrB,OAAQhB,IAAK,CAAE,IAAIsiO,EAAajgO,EAAMrC,GAAIsiO,EAAW9+N,WAAa8+N,EAAW9+N,aAAc,EAAO8+N,EAAW7+N,cAAe,EAAU,UAAW6+N,IAAYA,EAAW5+N,UAAW,GAAMJ,OAAOC,eAAee,EAAQg+N,EAAWj/N,IAAKi/N,EAAc,CAAE,CAAC,OAAO,SAAUjH,EAAamK,EAAYC,GAAiJ,OAA9HD,GAAY7gO,EAAiB02N,EAAY/uN,UAAWk5N,GAAiBC,GAAa9gO,EAAiB02N,EAAaoK,GAAqBpK,CAAc,CAAG,CAA9hB,GAIhBq0O,EAAc,WAChB,SAASA,KAHX,SAAyBvjc,EAAUkvN,GAAe,KAAMlvN,aAAoBkvN,GAAgB,MAAM,IAAIl6N,UAAU,oCAAyC,CAIrJk/N,CAAgBj+N,KAAMstc,EACvB,CAmED,OAjEAtqD,EAAasqD,EAAY,CAAC,CACxBrsc,IAAK,gBAWLtC,MAAO,SAAuBuqc,EAAWC,EAAWhgc,GAClD,GAAyB,SAArBA,EAAKmvL,YAAwB,OAAO6wQ,EACxC,IAAIoE,EAAUrE,EAAUv0R,OAAOw0R,GAAW1sb,OAAO,GACjD,GAAgB,MAAZ8wb,GAA+B,MAAZA,EAAiB,CACtC,IAAIC,EAAS,GAMb,IAJEA,EADc,MAAZD,EACO,IAEA,IAEJrE,EAAUv0R,OAAOw0R,EAAY,GAAG1sb,OAAO,KAAO+wb,KAEnC,KADhBrE,EACoBD,EAAUtqc,UAIhCuqc,GACD,CACD,OAAOA,CACR,GAUA,CACDloc,IAAK,qBACLtC,MAAO,SAA4Buqc,EAAWC,EAAWhgc,GACvD,GAAyB,SAArBA,EAAKmvL,YAAwB,OAAO6wQ,EACxC,IAAIoE,EAAUrE,EAAUv0R,OAAOw0R,GAAW1sb,OAAO,GACjD,GAAgB,MAAZ8wb,GAA+B,MAAZA,EAAiB,CACtC,IAAIC,EAAS,GAMb,IAJEA,EADc,MAAZD,EACO,IAEA,IAEJrE,EAAUv0R,OAAOw0R,EAAY,GAAG1sb,OAAO,KAAO+wb,OACnDrE,EACgB,KAIlBA,GACD,CACD,OAAOA,CACR,KAGImE,CACR,CAvEiB,GAyElB3hU,EAAO,QAAc2hU,EACrB,IAAI/C,EAAa,IAAI+C,EACrB3hU,EAAQ4+T,WAAaA,CAEf,GAEN,EA/gCCpnS,EAAOx3B,QAAU6oJ,mDCXnB,wCAAyBi5K,EAAzB,0CACKA,EAAK7uc,OAAS,EAAG,GACf,GAAK6uc,EAAK,GAAG99b,MAAM,GAAI,WACtBm6U,EAAK2jH,EAAK7uc,OAAS,EAChBoE,EAAI,EAAGA,EAAI8mV,IAAM9mV,IACpBA,GAAKyqc,EAAKzqc,GAAG2M,MAAM,GAAI,YAExBm6U,GAAM2jH,EAAK3jH,GAAIn6U,MAAM,GACnB89b,EAAK5rY,KAAK,GAPlB,QASQ4rY,EAAK,GAId,WAAuB77R,SACf,MAAQA,EAAM,IAGtB,WAAuBpnE,eACTnhG,IAANmhG,EAAkB,YAAqB,OAANA,EAAa,OAAStpG,OAAOgJ,UAAUI,SAAS/L,KAAKisG,GAAG7oC,MAAM,KAAKyL,MAAMzL,MAAM,KAAKy1B,QAAQ7mF,cAGrI,WAA4BqhK,UACpBA,EAAIlwG,cAGZ,WAAwB1gE,eACRqI,IAARrI,GAA6B,OAARA,EAAgBA,aAAenD,MAAQmD,EAA6B,kBAAfA,EAAIpC,QAAuBoC,EAAI2gE,OAAS3gE,EAAIqE,aAAerE,EAAIzC,KAAO,CAACyC,GAAOnD,MAAMqM,UAAUyF,MAAMpR,KAAKyC,GAAS,GAIpM,WAAuBkB,EAAgBE,OAChCpB,EAAMkB,KACRE,MACE,IAAMnB,KAAOmB,IACbnB,GAAOmB,EAAOnB,UAGbD,ECnCR,WAA0B0sc,OAExBC,EAAU,WAEVC,EAAU,QAEVC,EAAWz9Z,EAAMw9Z,EAAS,YAG1BE,EAAeC,EAAOA,EAAO,UAAYF,EAAW,IAAMA,EAAWA,EAAW,IAAMA,EAAWA,GAAY,IAAME,EAAO,cAAgBF,EAAW,IAAMA,EAAWA,GAAY,IAAME,EAAO,IAAMF,EAAWA,IAEhNG,EAAe,sCACfC,EAAa79Z,EAFE,0BAEkB49Z,KAEpBN,EAAQ,oBAAsB,OAC5Bt9Z,EAAMu9Z,EAASC,EAAS,iBAF3BF,EAAQ,8EAAgF,MAGpGQ,EAAUH,EAAOJ,EAAUv9Z,EAAMu9Z,EAASC,EAAS,eAAiB,KACpEO,EAAYJ,EAAOA,EAAOD,EAAe,IAAM19Z,EAAMg+Z,EAAcJ,EAAc,UAAY,KAE7FK,GADaN,EAAOA,EAAO,WAAa,IAAMA,EAAO,SAAWH,GAAW,IAAMG,EAAO,IAAMH,EAAUA,GAAW,IAAMG,EAAO,QAAUH,GAAW,IAAMA,GACtIG,EAAOA,EAAO,WAAa,IAAMA,EAAO,SAAWH,GAAW,IAAMG,EAAO,IAAMH,EAAUA,GAAW,IAAMG,EAAO,UAAYH,GAAW,QAAUA,MAC1JG,EAAOM,EAAqB,MAAQA,EAAqB,MAAQA,EAAqB,MAAQA,GAC7GC,EAAOP,EAAOF,EAAW,SACzBU,EAAQR,EAAOA,EAAOO,EAAO,MAAQA,GAAQ,IAAME,GACnDC,EAAgBV,EAAmEA,EAAOO,EAAO,OAAS,MAAQC,KAClGR,EAAwD,SAAWA,EAAOO,EAAO,OAAS,MAAQC,KAClGR,EAAOA,EAAwCO,GAAQ,UAAYP,EAAOO,EAAO,OAAS,MAAQC,KAClGR,EAAOA,EAAOA,EAAOO,EAAO,OAAS,QAAUA,GAAQ,UAAYP,EAAOO,EAAO,OAAS,MAAQC,KAClGR,EAAOA,EAAOA,EAAOO,EAAO,OAAS,QAAUA,GAAQ,UAAYP,EAAOO,EAAO,OAAS,MAAQC,KAClGR,EAAOA,EAAOA,EAAOO,EAAO,OAAS,QAAUA,GAAQ,UAAmBA,EAAO,MAAiBC,KAClGR,EAAOA,EAAOA,EAAOO,EAAO,OAAS,QAAUA,GAAQ,UAA2CC,KAClGR,EAAOA,EAAOA,EAAOO,EAAO,OAAS,QAAUA,GAAQ,UAA2CA,KAClGP,EAAOA,EAAOA,EAAOO,EAAO,OAAS,QAAUA,GAAQ,aACxDP,EAAO,CAACU,EAAeC,EAAeC,EAAeC,EAAeC,EAAeC,EAAeC,EAAeC,EAAeC,GAAeptY,KAAK,MACnKqtY,EAAUnB,EAAOA,EAAOK,EAAe,IAAMN,GAAgB,QAChDC,EAAOoB,EAAe,QAAUD,GACxBnB,EAAOoB,EAAepB,EAAO,eAAiBF,EAAW,QAAUqB,MAC3EnB,EAAO,OAASF,EAAW,OAASz9Z,EAAMg+Z,EAAcJ,EAAc,SAAW,KAC9FoB,EAAcrB,EAAO,MAAQA,EAAOsB,EAAqB,IAAMF,EAAe,IAAMG,GAAc,SACtFvB,EAAOA,EAAOD,EAAe,IAAM19Z,EAAMg+Z,EAAcJ,IAAiB,KACpFuB,EAAQxB,EAAOqB,EAAc,IAAMZ,EAAe,MAAQgB,EAA3CJ,KAAmEI,GAClFC,EAAQ1B,EAAOH,EAAU,KACzB8B,EAAa3B,EAAOA,EAAOI,EAAY,KAAO,IAAMoB,EAAQxB,EAAO,MAAQ0B,GAAS,KACpFE,EAAS5B,EAAOD,EAAe,IAAM19Z,EAAMg+Z,EAAcJ,EAAc,aACvE4B,EAAW7B,EAAO4B,EAAS,KAC3BE,EAAc9B,EAAO4B,EAAS,KAC9BG,EAAiB/B,EAAOA,EAAOD,EAAe,IAAM19Z,EAAMg+Z,EAAcJ,EAAc,UAAY,KAClG+B,EAAgBhC,EAAOA,EAAO,MAAQ6B,GAAY,KAClDI,EAAiBjC,EAAO,MAAQA,EAAO8B,EAAcE,GAAiB,OACrDhC,EAAO+B,EAAiBC,KACxBhC,EAAO8B,EAAcE,KACxB,MAAQJ,EAAS,IAE/BM,GADQlC,EAAOgC,EAAgB,IAAMC,EAAiB,IAAME,EAAiB,IAAMC,EAAiB,IAAMC,GACjGrC,EAAOA,EAAO4B,EAAS,IAAMv/Z,EAAM,WAAYiga,IAAe,MACvEC,EAAYvC,EAAOA,EAAO4B,EAAS,aAAe,KAClDY,EAAaxC,EAAOA,EAAO,SAAW2B,EAAaK,GAAiB,IAAMC,EAAiB,IAAMG,EAAiB,IAAMC,GACxHI,EAAOzC,EAAOG,EAAU,MAAQqC,EAAaxC,EAAO,MAAQkC,GAAU,IAAMlC,EAAO,MAAQuC,GAAa,KACxGG,EAAiB1C,EAAOA,EAAO,SAAW2B,EAAaK,GAAiB,IAAMC,EAAiB,IAAME,EAAiB,IAAME,GAC5HM,EAAY3C,EAAO0C,EAAiB1C,EAAO,MAAQkC,GAAU,IAAMlC,EAAO,MAAQuC,GAAa,YAC9EvC,EAAOyC,EAAO,IAAME,GACrB3C,EAAOG,EAAU,MAAQqC,EAAaxC,EAAO,MAAQkC,GAAU,KAEtClC,EAAOA,EAAO,UAAYA,EAAO,IAAMI,EAAY,MAAQ,KAAOoB,EAAQ,IAAMxB,EAAO,OAAS0B,EAAQ,KAAO,MAAQ,KAAOM,EAAgB,IAAMC,EAAiB,IAAMG,EAAiB,IAAMC,EAAc,KAAOrC,EAAO,OAASkC,EAAS,KAAalC,EAAO,OAASuC,EAAY,KACvSvC,EAAOA,EAAO,UAAYA,EAAO,IAAMI,EAAY,MAAQ,KAAOoB,EAAQ,IAAMxB,EAAO,OAAS0B,EAAQ,KAAO,MAAQ,KAAOM,EAAgB,IAAMC,EAAiB,IAAME,EAAiB,IAAME,EAAc,KAAOrC,EAAO,OAASkC,EAAS,KAAalC,EAAO,OAASuC,EAAY,KAC1QvC,EAAOA,EAAO,UAAYA,EAAO,IAAMI,EAAY,MAAQ,KAAOoB,EAAQ,IAAMxB,EAAO,OAAS0B,EAAQ,KAAO,MAAQ,KAAOM,EAAgB,IAAMC,EAAiB,IAAMG,EAAiB,IAAMC,EAAc,KAAOrC,EAAO,OAASkC,EAAS,KACrQlC,EAAO,OAASuC,EAAY,KAC1BvC,EAAO,IAAMI,EAAY,MAA6BJ,EAAO,OAAS0B,EAAQ,KAG/F,YACO,IAAI55V,OAAOzlE,EAAM,MAAOu9Z,EAASC,EAAS,eAAgB,kBACxD,IAAI/3V,OAAOzlE,EAAM,YAAag+Z,EAAcJ,GAAe,cAC/D,IAAIn4V,OAAOzlE,EAAM,kBAAmBg+Z,EAAcJ,GAAe,cACjE,IAAIn4V,OAAOzlE,EAAM,kBAAmBg+Z,EAAcJ,GAAe,uBACxD,IAAIn4V,OAAOzlE,EAAM,eAAgBg+Z,EAAcJ,GAAe,eACtE,IAAIn4V,OAAOzlE,EAAM,SAAUg+Z,EAAcJ,EAAc,iBAAkBqC,GAAa,kBACnF,IAAIx6V,OAAOzlE,EAAM,SAAUg+Z,EAAcJ,EAAc,kBAAmB,YAChF,IAAIn4V,OAAOzlE,EAAM,MAAOg+Z,EAAcJ,GAAe,gBACjD,IAAIn4V,OAAOu4V,EAAc,iBACxB,IAAIv4V,OAAOzlE,EAAM,SAAUg+Z,EAAcH,GAAa,iBACtD,IAAIp4V,OAAOi4V,EAAc,iBACzB,IAAIj4V,OAAO,KAAO24V,EAAe,kBACjC,IAAI34V,OAAO,SAAWs5V,EAAe,IAAMpB,EAAOA,EAAO,eAAiBF,EAAW,QAAU,IAAMqB,EAAU,KAAO,WAItI,MAAeyB,GAAU,GCrFzB,EAAeA,GAAU,kiBCAnB7oF,EAAS,WAGT/9M,EAAO,GACP6mS,EAAO,EACPC,EAAO,GACPj+Z,EAAO,GACPrgC,EAAO,IACPu+b,EAAc,GACdC,EAAW,IACX3vF,EAAY,IAGZ2G,EAAgB,QAChBC,EAAgB,aAChBC,EAAkB,4BAGlB5mT,EAAS,UACF,8DACC,iEACI,iBAIZwnT,EAAgB9+M,EAAO6mS,EACvBjqc,EAAQR,KAAKQ,MACbuhX,EAAqBz6U,OAAO2kE,aAUlC,SAASrpG,EAAM1B,SACR,IAAIg9N,WAAWhjK,EAAOh6D,IAW7B,SAASzB,EAAI8J,EAAOxG,WACbkrE,EAAS,GACXx1E,EAAS8Q,EAAM9Q,OACZA,OACCA,GAAUsK,EAAGwG,EAAM9Q,WAEpBw1E,EAaR,SAAS+zS,EAAUjsW,EAAQhT,OACpBzG,EAAQyZ,EAAOylD,MAAM,KACvByS,EAAS,UACT3xE,EAAM7D,OAAS,MAGT6D,EAAM,GAAK,MACXA,EAAM,IAMT2xE,EADSxuE,KAFPsW,EAAOymD,QAAQslT,EAAiB,MACnBtmT,MAAM,KACAz4D,GAAI24D,KAAK,KAiBtC,SAASwmT,EAAWnsW,WACb8C,EAAS,GACXk5J,EAAU,EACRt5K,EAASsd,EAAOtd,OACfs5K,EAAUt5K,GAAQ,KAClBD,EAAQud,EAAO2zI,WAAWqoB,QAC5Bv5K,GAAS,OAAUA,GAAS,OAAUu5K,EAAUt5K,EAAQ,KAErD0pX,EAAQpsW,EAAO2zI,WAAWqoB,KACR,QAAX,MAARowM,KACG5pX,OAAe,KAARC,IAAkB,KAAe,KAAR2pX,GAAiB,UAIjD5pX,KAAKC,OARd,QAYQD,KAAKC,UAGPqgB,EAWR,IAWMgyb,EAAe,SAAS/+R,UACzBA,EAAY,GAAO,GACfA,EAAY,GAEhBA,EAAY,GAAO,GACfA,EAAY,GAEhBA,EAAY,GAAO,GACfA,EAAY,GAEblI,CAVR,EAwBMy+M,EAAe,SAASC,EAAOnsO,UAG7BmsO,EAAQ,GAAK,IAAMA,EAAQ,MAAgB,GAARnsO,IAAc,EAHzD,EAWMosO,EAAQ,SAASzrW,EAAO0rW,EAAWC,OACpC7zS,EAAI,QACA6zS,EAAYjiX,EAAMsW,EAAQ1K,GAAQ0K,GAAS,KAC1CtW,EAAMsW,EAAQ0rW,GACO1rW,EAAQ4rW,EAAgBgoF,GAAQ,EAAG97X,GAAKg1F,IAC7DpjK,EAAMsW,EAAQ4rW,UAEhBliX,EAAMouE,GAAK8zS,EAAgB,GAAK5rW,GAASA,EAAQ21B,GAPzD,EAiBMs9D,EAAS,SAASiyB,OAEjBnjH,EAAS,GACTkjN,EAAc//F,EAAMvjI,OACtBhB,EAAI,EACJ8S,EAAIqgc,EACJhgY,EAAO+/X,EAMPrrZ,EAAQ08E,EAAM5vB,YAAY6uQ,GAC1B37T,EAAQ,MACH,OAGJ,IAAI/2B,EAAI,EAAGA,EAAI+2B,IAAS/2B,EAExByzG,EAAM0tB,WAAWnhI,IAAM,OACpB,eAEAhwB,KAAKyjI,EAAM0tB,WAAWnhI,QAMzB,IAAInf,EAAQk2C,EAAQ,EAAIA,EAAQ,EAAI,EAAGl2C,EAAQ2yN,GAAwC,SAOvF4mJ,EAAOlrX,EACFikB,EAAI,EAAGkzD,EAAIg1F,GAA0Bh1F,GAAKg1F,EAAM,CAEpDx6J,GAAS2yN,KACN,qBAGDumJ,EAAQuoF,EAAa7uU,EAAM0tB,WAAWtgJ,OAExCk5W,GAAS1+M,GAAQ0+M,EAAQ9hX,GAAOmhX,EAASlqX,GAAKikB,OAC3C,eAGF4mW,EAAQ5mW,MACPhR,EAAIkkE,GAAKhE,EAAO6/X,EAAQ77X,GAAKhE,EAAO8/X,EAAOA,EAAO97X,EAAIhE,KAExD03S,EAAQ53W,YAINk4W,EAAah/M,EAAOl5J,EACtBgR,EAAIlb,EAAMmhX,EAASiB,MAChB,eAGFA,MAIAl+L,EAAM7rK,EAAOpgB,OAAS,IACrB8pX,EAAM9qX,EAAIkrX,EAAMj+L,EAAa,GAARi+L,GAIxBniX,EAAM/I,EAAIitL,GAAOi9L,EAASp3W,KACvB,eAGF/J,EAAM/I,EAAIitL,MACVA,IAGEr7K,OAAO5R,IAAK,EAAG8S,UAIhB+8B,OAAOy5R,cAAPz5R,MAAAA,OAAwBzuB,EAjFhC,EA2FMs7H,EAAS,SAASnY,OACjBnjH,EAAS,GAMXkjN,KAHImmJ,EAAWlmP,IAGKvjI,OAGpB8R,EAAIqgc,EACJ9zb,EAAQ,EACR8zD,EAAO+/X,iCAGXG,IAA2B9uU,EAA3B,qBAAA8uU,GAAAA,EAAAA,EAAAA,QAAAA,MAAAA,GAAAA,EAAkC,KAAvBpva,EAAuB,QAC7BA,EAAe,OACXnjC,KAAKwpX,EAAmBrmV,sFAI7BmnV,EAAchqW,EAAOpgB,OACrBqqX,EAAiBD,MAMjBA,KACItqX,KAAK0iX,GAIN6H,EAAiB/mJ,GAAa,KAIhCvxN,EAAIm3W,iCACRopF,IAA2B/uU,EAA3B,qBAAA+uU,GAAAA,EAAAA,EAAAA,QAAAA,MAAAA,GAAAA,EAAkC,KAAvBrva,EAAuB,QAC7BA,GAAgBnxB,GAAKmxB,EAAelxB,MACnCkxB,qFAMAqnV,EAAwBD,EAAiB,EAC3Ct4W,EAAID,EAAI/J,GAAOmhX,EAAS7qW,GAASisW,MAC9B,gBAGGv4W,EAAID,GAAKw4W,IACfv4W,qCAEJwgc,IAA2BhvU,EAA3B,qBAAAgvU,GAAAA,EAAAA,EAAAA,QAAAA,MAAAA,GAAAA,EAAkC,KAAvBtva,EAAuB,WAC7BA,EAAenxB,KAAOuM,EAAQ6qW,KAC3B,YAEHjmV,GAAgBnxB,EAAG,SAElB/N,EAAIsa,EACC83D,EAAIg1F,GAA0Bh1F,GAAKg1F,EAAM,KAC3Cl5J,EAAIkkE,GAAKhE,EAAO6/X,EAAQ77X,GAAKhE,EAAO8/X,EAAOA,EAAO97X,EAAIhE,KACxDpuE,EAAIkO,YAGFs4W,EAAUxmX,EAAIkO,EACdk4W,EAAah/M,EAAOl5J,IACnBnS,KACNwpX,EAAmBM,EAAa33W,EAAIs4W,EAAUJ,EAAY,OAEvDpiX,EAAMwiX,EAAUJ,KAGdrqX,KAAKwpX,EAAmBM,EAAa7lX,EAAG,OACxC+lX,EAAMzrW,EAAOisW,EAAuBD,GAAkBD,KACrD,IACNC,mFAIFhsW,IACAvM,SAGIsO,EAAO6iD,KAAK,GArFpB,EAmGMunT,EAAY,SAASjnP,UACnBgmP,EAAUhmP,GAAO,SAASjmH,UACzB6rW,EAActqW,KAAKvB,GACvBg0F,EAAOh0F,EAAOvM,MAAM,GAAGY,eACvB2L,CAHG,GADR,EAmBM2pW,EAAU,SAAS1jP,UACjBgmP,EAAUhmP,GAAO,SAASjmH,UACzB8rW,EAAcvqW,KAAKvB,GACvB,OAASo+H,EAAOp+H,GAChBA,CAHG,GADR,EAWMmtW,EAAW,SAML,aAQH,QACGhB,SA1SO,SAAA34W,UAAS+9B,OAAOy5R,cAAPz5R,MAAAA,OAAAA,EAAwB/9B,GAApD,UA6SWwgG,SACAoqC,UACCurO,YACEuD,GC5VDgoF,EAA6C,CAAC,EAE3D,WAA2BxxH,OACpB/rU,EAAI+rU,EAAI/vL,WAAW,UAGrBh8I,EAAI,GAAQ,KAAOA,EAAEvJ,SAAS,IAAIo3D,cAC7B7tD,EAAI,IAAS,IAAMA,EAAEvJ,SAAS,IAAIo3D,cAClC7tD,EAAI,KAAU,KAAQA,GAAK,EAAK,KAAKvJ,SAAS,IAAIo3D,cAAgB,KAAY,GAAJ7tD,EAAU,KAAKvJ,SAAS,IAAIo3D,cACtG,KAAQ7tD,GAAK,GAAM,KAAKvJ,SAAS,IAAIo3D,cAAgB,KAAS7tD,GAAK,EAAK,GAAM,KAAKvJ,SAAS,IAAIo3D,cAAgB,KAAY,GAAJ7tD,EAAU,KAAKvJ,SAAS,IAAIo3D,cAK9J,WAA4BkwG,WACvBy/R,EAAS,GACTzzc,EAAI,EACF+tB,EAAKimJ,EAAIhzK,OAERhB,EAAI+tB,GAAI,KACR9X,EAAIyI,SAASs1J,EAAI+C,OAAO/2K,EAAI,EAAG,GAAI,OAErCiW,EAAI,OACG45B,OAAO2kE,aAAav+F,MACzB,OAED,GAAIA,GAAK,KAAOA,EAAI,IAAK,IACxB8X,EAAK/tB,GAAM,EAAG,KACZqW,EAAKqI,SAASs1J,EAAI+C,OAAO/2K,EAAI,EAAG,GAAI,OAChC6vC,OAAO2kE,cAAmB,GAAJv+F,IAAW,EAAW,GAALI,EAFlD,SAIW29J,EAAI+C,OAAO/2K,EAAG,MAEpB,CAPD,MASA,GAAIiW,GAAK,IAAK,IACb8X,EAAK/tB,GAAM,EAAG,KACZqW,EAAKqI,SAASs1J,EAAI+C,OAAO/2K,EAAI,EAAG,GAAI,IACpCqnB,EAAK3I,SAASs1J,EAAI+C,OAAO/2K,EAAI,EAAG,GAAI,OAChC6vC,OAAO2kE,cAAmB,GAAJv+F,IAAW,IAAa,GAALI,IAAY,EAAW,GAALgR,EAHtE,SAKW2sJ,EAAI+C,OAAO/2K,EAAG,MAEpB,CARD,SAWMg0K,EAAI+C,OAAO/2K,EAAG,MACnB,SAIAyzc,EAGR,SAASC,EAA4Bj1b,EAA0BypL,YAC/DyrQ,EAA2B3/R,OACnB4/R,EAASC,EAAY7/R,UAClB4/R,EAAO9uc,MAAMojM,EAAS4rQ,YAAoBF,EAAN5/R,SAG1Cv1J,EAAWoyT,SAAQpyT,EAAWoyT,OAAShhS,OAAOpxB,EAAWoyT,QAAQ9rQ,QAAQmjI,EAAS6rQ,YAAaJ,GAAkBhhc,cAAcoyD,QAAQmjI,EAAS8rQ,WAAY,UACpIvoc,IAAxBgT,EAAWw1b,WAAwBx1b,EAAWw1b,SAAWpka,OAAOpxB,EAAWw1b,UAAUlvY,QAAQmjI,EAAS6rQ,YAAaJ,GAAkB5uY,QAAQmjI,EAASgsQ,aAAcC,GAAYpvY,QAAQmjI,EAAS6rQ,YAAajwY,SAC1Lr4D,IAApBgT,EAAW+pL,OAAoB/pL,EAAW+pL,KAAO34J,OAAOpxB,EAAW+pL,MAAMzjI,QAAQmjI,EAAS6rQ,YAAaJ,GAAkBhhc,cAAcoyD,QAAQmjI,EAASksQ,SAAUD,GAAYpvY,QAAQmjI,EAAS6rQ,YAAajwY,SACxLr4D,IAApBgT,EAAW8jD,OAAoB9jD,EAAW8jD,KAAO1yB,OAAOpxB,EAAW8jD,MAAMwC,QAAQmjI,EAAS6rQ,YAAaJ,GAAkB5uY,QAAStmD,EAAWoyT,OAAS3oI,EAASmsQ,SAAWnsQ,EAASosQ,kBAAoBH,GAAYpvY,QAAQmjI,EAAS6rQ,YAAajwY,SAC5Nr4D,IAArBgT,EAAWuoL,QAAqBvoL,EAAWuoL,MAAQn3J,OAAOpxB,EAAWuoL,OAAOjiI,QAAQmjI,EAAS6rQ,YAAaJ,GAAkB5uY,QAAQmjI,EAASqsQ,UAAWJ,GAAYpvY,QAAQmjI,EAAS6rQ,YAAajwY,SAC1Kr4D,IAAxBgT,EAAW0tI,WAAwB1tI,EAAW0tI,SAAWt8G,OAAOpxB,EAAW0tI,UAAUpnF,QAAQmjI,EAAS6rQ,YAAaJ,GAAkB5uY,QAAQmjI,EAASssQ,aAAcL,GAAYpvY,QAAQmjI,EAAS6rQ,YAAajwY,IAE3MrlD,EAGR,SAASg2b,EAAmBzgS,UACpBA,EAAIjvG,QAAQ,UAAW,OAAS,IAGxC,SAAS2vY,EAAelsQ,EAAaN,OAC9B/sF,EAAUqtF,EAAK1jM,MAAMojM,EAASysQ,cAAgB,GAC3CtyT,IAAWlnC,EAFrB,aAIKknC,EACIA,EAAQt+E,MAAM,KAAK/7D,IAAIysc,GAAoBxwY,KAAK,KAEhDukI,EAIT,SAASosQ,EAAepsQ,EAAaN,OAC9B/sF,EAAUqtF,EAAK1jM,MAAMojM,EAAS2sQ,cAAgB,OAC1B15V,EAF3B,GAEUknC,EAFV,KAEmBq9Q,EAFnB,QAIKr9Q,EAAS,WACUA,EAAQ1vI,cAAcoxD,MAAM,MAAM4iJ,mBAAjDu3C,EADK,KACCh2C,EADD,KAEN4sP,EAAc5sP,EAAQA,EAAMnkJ,MAAM,KAAK/7D,IAAIysc,GAAsB,GACjEM,EAAa72M,EAAKn6L,MAAM,KAAK/7D,IAAIysc,GACjCO,EAAyB9sQ,EAASysQ,YAAY90b,KAAKk1b,EAAWA,EAAW/zc,OAAS,IAClFi0c,EAAaD,EAAyB,EAAI,EAC1CE,EAAkBH,EAAW/zc,OAASi0c,EACtCz/R,EAASv1K,MAAcg1c,GAEpB7vc,EAAI,EAAGA,EAAI6vc,IAAc7vc,IAC1BA,GAAK0vc,EAAY1vc,IAAM2vc,EAAWG,EAAkB9vc,IAAM,GAG9D4vc,MACIC,EAAa,GAAKP,EAAel/R,EAAOy/R,EAAa,GAAI/sQ,QAe3DitQ,EAZgB3/R,EAAOzwB,QAA4C,SAACkf,EAAKuoE,EAAO76N,OAChF66N,GAAmB,MAAVA,EAAe,KACtB4oO,EAAcnxS,EAAIA,EAAIjjK,OAAS,GACjCo0c,GAAeA,EAAYzjc,MAAQyjc,EAAYp0c,SAAW2Q,IACjD3Q,WAERF,KAAK,CAAE6Q,MAAAA,EAAO3Q,OAAS,WAGtBijK,CATc,GAUnB,IAEqCjoG,MAAK,SAAC9vD,EAAG8J,UAAMA,EAAEhV,OAASkL,EAAElL,MAA1C,IAAkD,GAExEq0c,OAAAA,KACAF,GAAqBA,EAAkBn0c,OAAS,EAAG,KAChDs0c,EAAW9/R,EAAOzjK,MAAM,EAAGojc,EAAkBxjc,OAC7C4jc,EAAU//R,EAAOzjK,MAAMojc,EAAkBxjc,MAAQwjc,EAAkBn0c,UAC/Ds0c,EAASrxY,KAAK,KAAO,KAAOsxY,EAAQtxY,KAAK,IAHpD,QAKWuxG,EAAOvxG,KAAK,YAGnBy7V,OACQ,IAAMA,GAGX21C,CA5CR,QA8CQ7sQ,EAIT,IAAMgtQ,EAAY,kIACZC,OAAuEhqc,IAA3B,GAAI3G,MAAM,SAAU,GAEtE,WAAsB4wc,OAAkBxzc,EAAxC,uDAA6D,CAAC,EACvDuc,EAA2B,CAAC,EAC5BypL,GAA4B,IAAhBhmM,EAAQyzc,IAAgBC,EAAeC,EAE/B,WAAtB3zc,EAAQ4zc,YAAwBJ,GAAaxzc,EAAQ2uU,OAAS3uU,EAAQ2uU,OAAS,IAAM,IAAM,KAAO6kI,OAEhGv6V,EAAUu6V,EAAU5wc,MAAM0wc,MAE5Br6V,EAAS,CACRs6V,KAEQ5kI,OAAS11N,EAAQ,KACjB84V,SAAW94V,EAAQ,KACnBqtF,KAAOrtF,EAAQ,KACfutF,KAAOhqL,SAASy8F,EAAQ,GAAI,MAC5B54C,KAAO44C,EAAQ,IAAM,KACrB6rF,MAAQ7rF,EAAQ,KAChBgxC,SAAWhxC,EAAQ,GAG1B3vE,MAAM/sB,EAAWiqL,UACTA,KAAOvtF,EAAQ,QAIhB01N,OAAS11N,EAAQ,SAAM1vG,IACvBwoc,UAAwC,IAA5ByB,EAAUxwc,QAAQ,KAAci2G,EAAQ,QAAK1vG,IACzD+8L,MAAqC,IAA7BktQ,EAAUxwc,QAAQ,MAAei2G,EAAQ,QAAK1vG,IACtDi9L,KAAOhqL,SAASy8F,EAAQ,GAAI,MAC5B54C,KAAO44C,EAAQ,IAAM,KACrB6rF,OAAqC,IAA5B0uQ,EAAUxwc,QAAQ,KAAci2G,EAAQ,QAAK1vG,IACtD0gJ,UAAwC,IAA5BupT,EAAUxwc,QAAQ,KAAci2G,EAAQ,QAAK1vG,EAGhE+/B,MAAM/sB,EAAWiqL,UACTA,KAAQgtQ,EAAU5wc,MAAM,iCAAmCq2G,EAAQ,QAAK1vG,IAIjFgT,EAAW+pL,SAEHA,KAAOosQ,EAAeF,EAAej2b,EAAW+pL,KAAMN,GAAWA,SAInDz8L,IAAtBgT,EAAWoyT,aAAgDplU,IAAxBgT,EAAWw1b,eAA8Cxoc,IAApBgT,EAAW+pL,WAA0C/8L,IAApBgT,EAAWiqL,MAAuBjqL,EAAW8jD,WAA6B92D,IAArBgT,EAAWuoL,WAE5Iv7L,IAAtBgT,EAAWoyT,SACVilI,UAAY,gBACWrqc,IAAxBgT,EAAW0tI,WACV2pT,UAAY,aAEZA,UAAY,QANZA,UAAY,gBAUpB5zc,EAAQ4zc,WAAmC,WAAtB5zc,EAAQ4zc,WAA0B5zc,EAAQ4zc,YAAcr3b,EAAWq3b,cAChF3qc,MAAQsT,EAAWtT,OAAS,gBAAkBjJ,EAAQ4zc,UAAY,mBAIxEC,EAAgBvC,GAAStxc,EAAQ2uU,QAAUpyT,EAAWoyT,QAAU,IAAIl+T,kBAGrEzQ,EAAQ8zc,gBAAoBD,GAAkBA,EAAcC,iBAcpCv3b,EAAYypL,OAdyC,IAE7EzpL,EAAW+pL,OAAStmM,EAAQ+zc,YAAeF,GAAiBA,EAAcE,kBAGjEztQ,KAAOijL,EAASxD,QAAQxpW,EAAW+pL,KAAKzjI,QAAQmjI,EAAS6rQ,YAAaF,GAAalhc,eAC7F,MAAOvJ,KACG+B,MAAQsT,EAAWtT,OAAS,kEAAoE/B,IAIjFqV,EAAYo3b,EAXzC,CAkBIE,GAAiBA,EAAc1yb,SACpBA,MAAM5E,EAAYvc,EA3ElC,QA8EYiJ,MAAQsT,EAAWtT,OAAS,gCAGjCsT,EAGR,SAASy3b,EAAoBz3b,EAA0Bvc,OAChDgmM,GAA4B,IAAhBhmM,EAAQyzc,IAAgBC,EAAeC,EACnDM,EAA0B,eAEJ1qc,IAAxBgT,EAAWw1b,aACJnzc,KAAK2d,EAAWw1b,YAChBnzc,KAAK,WAGQ2K,IAApBgT,EAAW+pL,QAEJ1nM,KAAK8zc,EAAeF,EAAe7ka,OAAOpxB,EAAW+pL,MAAON,GAAWA,GAAUnjI,QAAQmjI,EAAS2sQ,aAAa,SAAChnT,EAAGwkJ,EAAI+jK,SAAO,IAAM/jK,GAAM+jK,EAAK,MAAQA,EAAK,IAAM,GAA7J,KAGe,kBAApB33b,EAAWiqL,MAAgD,kBAApBjqL,EAAWiqL,SAClD5nM,KAAK,OACLA,KAAK+uC,OAAOpxB,EAAWiqL,QAG3BytQ,EAAUn1c,OAASm1c,EAAUlyY,KAAK,SAAMx4D,EAGhD,IAAM4qc,EAAO,WACPC,EAAO,cACPC,EAAO,gBAEPC,GAAO,yBAEb,YAAkCjyU,WAC3BnjH,EAAuB,GAEtBmjH,EAAMvjI,WACRujI,EAAMz/H,MAAMuxc,KACP9xU,EAAMx/D,QAAQsxY,EAAM,SACtB,GAAI9xU,EAAMz/H,MAAMwxc,KACd/xU,EAAMx/D,QAAQuxY,EAAM,UACtB,GAAI/xU,EAAMz/H,MAAMyxc,KACdhyU,EAAMx/D,QAAQwxY,EAAM,OACrB/mY,WACD,GAAc,MAAV+0D,GAA2B,OAAVA,IACnB,OACF,KACAgxF,EAAKhxF,EAAMz/H,MAAM0xc,QACnBjhP,QAKG,IAAIxhN,MAAM,wCAJV0B,EAAI8/M,EAAG,KACLhxF,EAAMxyH,MAAM0D,EAAEzU,UACfF,KAAK2U,UAOR2L,EAAO6iD,KAAK,IAGpB,YAA0BxlD,OAA0Bvc,EAApD,uDAAyE,CAAC,EACnEgmM,EAAYhmM,EAAQyzc,IAAMC,EAAeC,EACzCM,EAA0B,GAG1BJ,EAAgBvC,GAAStxc,EAAQ2uU,QAAUpyT,EAAWoyT,QAAU,IAAIl+T,kBAGtEojc,GAAiBA,EAAcv4a,WAAWu4a,EAAcv4a,UAAU/e,EAAYvc,GAE9Euc,EAAW+pL,QAEVN,EAAS2sQ,YAAYh1b,KAAKpB,EAAW+pL,YAKpC,GAAItmM,EAAQ+zc,YAAeF,GAAiBA,EAAcE,iBAGlDztQ,KAAStmM,EAAQyzc,IAAmGlqF,EAASD,UAAU/sW,EAAW+pL,MAA3HijL,EAASxD,QAAQxpW,EAAW+pL,KAAKzjI,QAAQmjI,EAAS6rQ,YAAaF,GAAalhc,eAC7G,MAAOvJ,KACG+B,MAAQsT,EAAWtT,OAAS,+CAAkDjJ,EAAQyzc,IAAgB,UAAV,SAAuB,kBAAoBvsc,IAMzHqV,EAAYypL,GAEd,WAAtBhmM,EAAQ4zc,WAA0Br3b,EAAWoyT,WACtC/vU,KAAK2d,EAAWoyT,UAChB/vU,KAAK,UAGV21c,EAAYP,EAAoBz3b,EAAYvc,WAChCuJ,IAAdgrc,IACuB,WAAtBv0c,EAAQ4zc,aACDh1c,KAAK,QAGNA,KAAK21c,GAEXh4b,EAAW8jD,MAAsC,MAA9B9jD,EAAW8jD,KAAK1jD,OAAO,MACnC/d,KAAK,WAIO2K,IAApBgT,EAAW8jD,KAAoB,KAC9B9sD,EAAIgJ,EAAW8jD,KAEdrgE,EAAQw0c,cAAkBX,GAAkBA,EAAcW,iBAC1DC,GAAkBlhc,SAGLhK,IAAdgrc,MACChhc,EAAEsvD,QAAQ,QAAS,WAGdjkE,KAAK2U,eAGShK,IAArBgT,EAAWuoL,UACJlmM,KAAK,OACLA,KAAK2d,EAAWuoL,aAGCv7L,IAAxBgT,EAAW0tI,aACJrrJ,KAAK,OACLA,KAAK2d,EAAW0tI,WAGpBgqT,EAAUlyY,KAAK,IAGvB,YAAkCkoG,EAAoB27C,OAAwB5lN,EAA9E,uDAAmG,CAAC,EAC7FoC,EAAuB,CAAC,SAD/B,iBAIS+e,EAAMma,GAAU2uI,EAAMjqK,GAAUA,KAC5BmhB,EAAMma,GAAUsqL,EAAU5lN,GAAUA,QAEtCA,GAAW,CAAC,GAET00c,UAAY9uP,EAAS+oH,UAC1BA,OAAS/oH,EAAS+oH,SAElBojI,SAAWnsP,EAASmsP,WACpBzrQ,KAAOsf,EAAStf,OAChBE,KAAOof,EAASpf,OAChBnmI,KAAOo0Y,GAAkB7uP,EAASvlJ,MAAQ,MAC1CykI,MAAQ8gB,EAAS9gB,aAEEv7L,IAAtBq8M,EAASmsP,eAA4Cxoc,IAAlBq8M,EAAStf,WAAwC/8L,IAAlBq8M,EAASpf,QAEvEurQ,SAAWnsP,EAASmsP,WACpBzrQ,KAAOsf,EAAStf,OAChBE,KAAOof,EAASpf,OAChBnmI,KAAOo0Y,GAAkB7uP,EAASvlJ,MAAQ,MAC1CykI,MAAQ8gB,EAAS9gB,QAEnB8gB,EAASvlJ,MAQmB,MAA5BulJ,EAASvlJ,KAAK1jD,OAAO,KACjB0jD,KAAOo0Y,GAAkB7uP,EAASvlJ,YAElB92D,IAAlB0gK,EAAK8nS,eAAwCxoc,IAAd0gK,EAAKq8B,WAAoC/8L,IAAd0gK,EAAKu8B,MAAwBv8B,EAAK5pG,KAErF4pG,EAAK5pG,OAGTA,KAAO4pG,EAAK5pG,KAAKxwD,MAAM,EAAGo6J,EAAK5pG,KAAKoyC,YAAY,KAAO,GAAKmzG,EAASvlJ,OAFrEA,KAAOulJ,EAASvlJ,OAFhBA,KAAO,IAAMulJ,EAASvlJ,OAMvBA,KAAOo0Y,GAAkBryc,EAAOi+D,SAEjCykI,MAAQ8gB,EAAS9gB,UAnBjBzkI,KAAO4pG,EAAK5pG,UACI92D,IAAnBq8M,EAAS9gB,QACLA,MAAQ8gB,EAAS9gB,QAEjBA,MAAQ76B,EAAK66B,SAkBfitQ,SAAW9nS,EAAK8nS,WAChBzrQ,KAAOr8B,EAAKq8B,OACZE,KAAOv8B,EAAKu8B,QAEbmoI,OAAS1kK,EAAK0kK,UAGf1kL,SAAW27D,EAAS37D,SAEpB7nJ,EAGR,YAAwBuyc,EAAgBC,EAAoB50c,OACrD60c,EAAoB5wb,EAAO,CAAE0qT,OAAS,QAAU3uU,UAC/Cs7B,GAAUw5a,GAAkB3zb,EAAMwzb,EAASE,GAAoB1zb,EAAMyzb,EAAaC,GAAoBA,GAAmB,GAAOA,GAKxI,YAA0B/hV,EAAS9yH,SACf,kBAAR8yH,IACJx3F,GAAUna,EAAM2xG,EAAK9yH,GAAUA,GACX,WAAhBu8b,EAAOzpU,OACX3xG,EAAMma,GAAyBw3F,EAAK9yH,GAAUA,IAG9C8yH,EAKR,YAAsBiiV,EAAUC,EAAUh1c,SACrB,kBAAT+0c,IACHz5a,GAAUna,EAAM4zb,EAAM/0c,GAAUA,GACZ,WAAjBu8b,EAAOwY,OACVz5a,GAAyBy5a,EAAM/0c,IAGnB,kBAATg1c,IACH15a,GAAUna,EAAM6zb,EAAMh1c,GAAUA,GACZ,WAAjBu8b,EAAOyY,OACV15a,GAAyB05a,EAAMh1c,IAGhC+0c,IAASC,EAGjB,YAAgCljS,EAAY9xK,UACpC8xK,GAAOA,EAAItnK,WAAWq4D,QAAU7iE,GAAYA,EAAQyzc,IAA4BC,EAAauB,OAAnCtB,EAAasB,OAA+BhD,GAG9G,YAAkCngS,EAAY9xK,UACtC8xK,GAAOA,EAAItnK,WAAWq4D,QAAU7iE,GAAYA,EAAQyzc,IAAiCC,EAAa7B,YAAxC8B,EAAa9B,YAAyCF,EACvH,CCziBD,IAAM5+U,GAA2B,QACvB,mBAEI,QAEL,SAAUx2G,EAA0Bvc,UAEtCuc,EAAW+pL,SACJr9L,MAAQsT,EAAWtT,OAAS,+BAGjCsT,CAXwB,YAcpB,SAAUA,EAA0Bvc,OACzC83O,EAAqD,UAA5CnqM,OAAOpxB,EAAWoyT,QAAQl+T,qBAGrC8L,EAAWiqL,QAAUsxC,EAAS,IAAM,KAA2B,KAApBv7N,EAAWiqL,SAC9CA,UAAOj9L,GAIdgT,EAAW8jD,SACJA,KAAO,KAOZ9jD,IC9BHw2G,GAA2B,QACvB,mBACI09N,GAAKsjH,iBACVtjH,GAAKtvU,gBACDsvU,GAAKn1T,WCAlB,SAAS45a,GAASC,SACqB,mBAAxBA,EAAar9N,OAAuBq9N,EAAar9N,OAAuD,QAA9CnqM,OAAOwna,EAAaxmI,QAAQl+T,cAIrG,IAAMsiH,GAA2B,QACvB,iBAEI,QAEL,SAAUx2G,EAA0Bvc,OACrCm1c,EAAe54b,WAGRu7N,OAASo9N,GAASC,KAGlBC,cAAgBD,EAAa90Y,MAAQ,MAAQ80Y,EAAarwQ,MAAQ,IAAMqwQ,EAAarwQ,MAAQ,MAC7FzkI,UAAO92D,IACPu7L,WAAQv7L,EAEd4rc,CAhBwB,YAmBpB,SAAUA,EAA2Bn1c,MAE5Cm1c,EAAa3uQ,QAAU0uQ,GAASC,GAAgB,IAAM,KAA6B,KAAtBA,EAAa3uQ,SAChEA,UAAOj9L,GAIc,mBAAxB4rc,EAAar9N,WACV62F,OAAUwmI,EAAar9N,OAAS,MAAQ,OACxCA,YAASvuO,GAInB4rc,EAAaC,aAAc,OACRD,EAAaC,aAAavzY,MAAM,cAA/CxB,EADuB,KACjBykI,EADiB,OAEjBzkI,KAAQA,GAAiB,MAATA,EAAeA,OAAO92D,IACtCu7L,MAAQA,IACRswQ,kBAAe7rc,WAIhB0gJ,cAAW1gJ,EAEjB4rc,ICnDHpiV,GAA2B,QACvB,iBACI2rC,GAAGq1S,iBACRr1S,GAAGv9I,gBACCu9I,GAAGpjI,WCSVo2W,GAAkB,CAAC,EAInB48D,GAAe,mGACfP,GAAW,cACXC,GAAeC,EAAOA,EAAO,UAAYF,GAAW,IAAMA,GAAWA,GAAW,IAAMA,GAAWA,IAAY,IAAME,EAAO,cAAgBF,GAAW,IAAMA,GAAWA,IAAY,IAAME,EAAO,IAAMF,GAAWA,KAahNsH,GAAU,wDAEVC,GAAUhla,EADA,6DACe,aAQzBila,GAAgB,sCAahB3D,GAAa,IAAI77V,OAAOu4V,GAAc,KACtCuD,GAAc,IAAI97V,OAAOi4V,GAAc,KACvCwH,GAAiB,IAAIz/V,OAAOzlE,EAAM,MAAO+ka,GAAS,QAAS,QAASC,IAAU,KAE9EG,GAAa,IAAI1/V,OAAOzlE,EAAM,MAAOg+Z,GAAciH,IAAgB,KACnEG,GAAcD,GACpB,SAGAhE,GAA0B3/R,OACnB4/R,EAASC,EAAY7/R,UAClB4/R,EAAO9uc,MAAMgvc,IAAoBF,EAAN5/R,EAGrC,IAAM/+C,GAA8C,QAC1C,eAED,SAAUx2G,EAA0Bvc,OACrC21c,EAAmBp5b,EACnB7c,EAAKi2c,EAAiBj2c,GAAMi2c,EAAiBt1Y,KAAOs1Y,EAAiBt1Y,KAAKwB,MAAM,KAAO,QAC5ExB,UAAO92D,EAEpBosc,EAAiB7wQ,MAAO,SACvB8wQ,GAAiB,EACfvnW,EAAwB,CAAC,EACzBwnW,EAAUF,EAAiB7wQ,MAAMjjI,MAAM,KAEpC3+D,EAAI,EAAG8mV,EAAK6rH,EAAQ/2c,OAAQoE,EAAI8mV,IAAM9mV,EAAG,KAC3C4yc,EAASD,EAAQ3yc,GAAG2+D,MAAM,YAExBi0Y,EAAO,QACT,aACEC,EAAUD,EAAO,GAAGj0Y,MAAM,KACvB3+D,EAAI,EAAG8mV,EAAK+rH,EAAQj3c,OAAQoE,EAAI8mV,IAAM9mV,IAC3CtE,KAAKm3c,EAAQ7yc,cAGb,YACa47V,QAAUk3G,GAAkBF,EAAO,GAAI91c,aAEpD,SACa4uG,KAAOonW,GAAkBF,EAAO,GAAI91c,oBAGpC,IACTg2c,GAAkBF,EAAO,GAAI91c,IAAYg2c,GAAkBF,EAAO,GAAI91c,IAK7E41c,IAAgBD,EAAiBtnW,QAAUA,KAG/By2F,WAAQv7L,MAEpB,IAAIrG,EAAI,EAAG8mV,EAAKtqV,EAAGZ,OAAQoE,EAAI8mV,IAAM9mV,EAAG,KACtCu4D,EAAO/7D,EAAGwD,GAAG2+D,MAAM,UAEpB,GAAKm0Y,GAAkBv6Y,EAAK,IAE5Bz7D,EAAQ8zc,iBAQP,GAAKkC,GAAkBv6Y,EAAK,GAAIz7D,GAASyQ,yBALxC,GAAK84W,EAASxD,QAAQiwF,GAAkBv6Y,EAAK,GAAIz7D,GAASyQ,eAC9D,MAAOvJ,KACS+B,MAAQ0sc,EAAiB1sc,OAAS,2EAA6E/B,IAM/HhE,GAAKu4D,EAAKsG,KAAK,YAGZ4zY,CA5D2C,YA+DvC,SAAUA,EAAmC31c,OAClDuc,EAAao5b,EACbj2c,EAAK87B,EAAQm6a,EAAiBj2c,OAChCA,EAAI,KACF,IAAIwD,EAAI,EAAG8mV,EAAKtqV,EAAGZ,OAAQoE,EAAI8mV,IAAM9mV,EAAG,KACtC+yc,EAAStoa,OAAOjuC,EAAGwD,IACnBgzc,EAAQD,EAAOxjW,YAAY,KAC3B0jW,EAAaF,EAAOpmc,MAAM,EAAGqmc,GAAQrzY,QAAQgvY,GAAaJ,IAAkB5uY,QAAQgvY,GAAajwY,GAAaiB,QAAQ2yY,GAAgBvD,GACxIh3T,EAASg7T,EAAOpmc,MAAMqmc,EAAQ,SAItBl2c,EAAQyzc,IAA2ElqF,EAASD,UAAUruO,GAAxFsuO,EAASxD,QAAQiwF,GAAkB/6T,EAAQj7I,GAASyQ,eAC5E,MAAOvJ,KACG+B,MAAQsT,EAAWtT,OAAS,wDAA2DjJ,EAAQyzc,IAAgB,UAAV,SAAuB,kBAAoBvsc,IAGzJhE,GAAKizc,EAAY,IAAMl7T,IAGhB56E,KAAO3gE,EAAGqiE,KAAK,SAGrBssC,EAAUsnW,EAAiBtnW,QAAUsnW,EAAiBtnW,SAAW,CAAC,EAEpEsnW,EAAiB72G,UAASzwP,EAAAA,QAAqBsnW,EAAiB72G,SAChE62G,EAAiB/mW,OAAMP,EAAAA,KAAkBsnW,EAAiB/mW,UAExD0kE,EAAS,OACV,IAAM94J,KAAQ6zF,EACdA,EAAQ7zF,KAAUk3X,GAAEl3X,MAChB5b,KACN4b,EAAKqoD,QAAQgvY,GAAaJ,IAAkB5uY,QAAQgvY,GAAajwY,GAAaiB,QAAQ4yY,GAAYxD,GAClG,IACA5jW,EAAQ7zF,GAAMqoD,QAAQgvY,GAAaJ,IAAkB5uY,QAAQgvY,GAAajwY,GAAaiB,QAAQ6yY,GAAazD,WAI3G3+R,EAAOx0K,WACCgmM,MAAQxxB,EAAOvxG,KAAK,MAGzBxlD,IC/JH65b,GAAY,kBAIZrjV,GAAqD,QACjD,YAED,SAAUx2G,EAA0Bvc,OACrCi5G,EAAU18F,EAAW8jD,MAAQ9jD,EAAW8jD,KAAKz9D,MAAMwzc,IACrDC,EAAgB95b,KAEhB08F,EAAS,KACN01N,EAAS3uU,EAAQ2uU,QAAU0nI,EAAc1nI,QAAU,MACnD2nI,EAAMr9V,EAAQ,GAAGxoG,cACjB8lc,EAAMt9V,EAAQ,GACdu9V,EAAe7nI,EAAf,KAAyB3uU,EAAQs2c,KAAOA,GACxCzC,EAAgBvC,EAAQkF,KAEhBF,IAAMA,IACNC,IAAMA,IACNl2Y,UAAO92D,EAEjBsqc,MACaA,EAAc1yb,MAAMk1b,EAAer2c,GAZrD,QAeeiJ,MAAQotc,EAAcptc,OAAS,gCAGvCotc,CAzBkD,YA4B9C,SAAUA,EAA6Br2c,OAC5C2uU,EAAS3uU,EAAQ2uU,QAAU0nI,EAAc1nI,QAAU,MACnD2nI,EAAMD,EAAcC,IACpBE,EAAe7nI,EAAf,KAAyB3uU,EAAQs2c,KAAOA,GACxCzC,EAAgBvC,EAAQkF,GAE1B3C,MACaA,EAAcv4a,UAAU+6a,EAAer2c,QAGlDy2c,EAAgBJ,EAChBE,EAAMF,EAAcE,aACZl2Y,MAAUi2Y,GAAOt2c,EAAQs2c,KAAvC,IAA8CC,EAEvCE,ICxDH31R,GAAO,2DAIP/tD,GAAsE,QAClE,iBAED,SAAUsjV,EAA6Br2c,OACxC02c,EAAiBL,WACRx3b,KAAO63b,EAAeH,MACtBA,SAAMhtc,EAEhBvJ,EAAQ00c,UAAcgC,EAAe73b,MAAS63b,EAAe73b,KAAKjc,MAAMk+K,QAC7D73K,MAAQytc,EAAeztc,OAAS,sBAGzCytc,CAZmE,YAe/D,SAAUA,EAA+B12c,OAC9Cq2c,EAAgBK,WAERH,KAAOG,EAAe73b,MAAQ,IAAIpO,cACzC4lc,IC5BT/E,EAAQ7gH,GAAK9hB,QAAU8hB,GAEvB6gH,EACQ5gH,GAAM/hB,QAAU+hB,GAExB4gH,EACQ5yS,GAAGiwK,QAAUjwK,GAErB4yS,EACQqF,GAAIhoI,QAAUgoI,GAEtBrF,EACQsF,GAAOjoI,QAAUioI,GAEzBtF,EACQuF,GAAIloI,QAAUkoI,GAEtBvF,EACQzyb,GAAK8vT,QAAU9vT,iSCnBvB,IAAI2rK,EAAWlR,EAAQ,OACnBwyM,EAAKxyM,EAAQ,OACbw9R,EAAsB,6EACtBC,EAAS,YACTC,EAAU,gCACVxwQ,EAAO,QACPywQ,EAAa,mDACbC,EAAqB,aAUzB,SAASC,EAASrlS,GAChB,OAAQA,GAAY,IAAItnK,WAAWq4D,QAAQi0Y,EAAqB,GACjE,CAcD,IAAIp9R,EAAQ,CACV,CAAC,IAAK,QACN,CAAC,IAAK,SACN,SAAkBv5B,EAAShhI,GACzB,OAAOi4b,EAAUj4b,EAAI6mL,UAAY7lD,EAAQt9E,QAAQ,MAAO,KAAOs9E,CAChE,EACD,CAAC,IAAK,YACN,CAAC,IAAK,OAAQ,GACd,CAACgxM,IAAK,YAAQ5nV,EAAW,EAAG,GAC5B,CAAC,UAAW,YAAQA,EAAW,GAC/B,CAAC4nV,IAAK,gBAAY5nV,EAAW,EAAG,IAW9B8nK,EAAS,CAAEhiG,KAAM,EAAGy1H,MAAO,GAc/B,SAASuyQ,EAAUC,GACjB,IAYIn2c,EALAiqD,GALkB,qBAAXroD,OAAoCA,OACpB,qBAAXsqG,EAAAA,EAAoCA,EAAAA,EAC3B,qBAAThkG,KAAkCA,KACjC,CAAC,GAEO+hD,UAAY,CAAC,EAGlCmsZ,EAAmB,CAAC,EACpBhwc,SAHJ+vc,EAAMA,GAAOlsZ,GAMb,GAAI,UAAYksZ,EAAItxQ,SAClBuxQ,EAAmB,IAAIC,EAAIxyQ,SAASsyQ,EAAI5wQ,UAAW,CAAC,QAC/C,GAAI,WAAan/L,EAEtB,IAAKpG,KADLo2c,EAAmB,IAAIC,EAAIF,EAAK,CAAC,GACrBjmS,SAAekmS,EAAiBp2c,QACvC,GAAI,WAAaoG,EAAM,CAC5B,IAAKpG,KAAOm2c,EACNn2c,KAAOkwK,IACXkmS,EAAiBp2c,GAAOm2c,EAAIn2c,SAGGoI,IAA7Bguc,EAAiBP,UACnBO,EAAiBP,QAAUA,EAAQr5b,KAAK25b,EAAIxtU,MAE/C,CAED,OAAOytU,CACR,CASD,SAASH,EAAUzoI,GACjB,MACa,UAAXA,GACW,SAAXA,GACW,UAAXA,GACW,WAAXA,GACW,QAAXA,GACW,SAAXA,CAEH,CAkBD,SAAS8oI,EAAgBt3T,EAAS/0F,GAEhC+0F,GADAA,EAAUg3T,EAASh3T,IACDt9E,QAAQk0Y,EAAQ,IAClC3rZ,EAAWA,GAAY,CAAC,EAExB,IAKIs8I,EALA9kM,EAAQq0c,EAAW36b,KAAK6jI,GACxB6lD,EAAWpjM,EAAM,GAAKA,EAAM,GAAG6N,cAAgB,GAC/Cinc,IAAmB90c,EAAM,GACzB+0c,IAAiB/0c,EAAM,GACvBg1c,EAAe,EAkCnB,OA/BIF,EACEC,GACFjwQ,EAAO9kM,EAAM,GAAKA,EAAM,GAAKA,EAAM,GACnCg1c,EAAeh1c,EAAM,GAAG9D,OAAS8D,EAAM,GAAG9D,SAE1C4oM,EAAO9kM,EAAM,GAAKA,EAAM,GACxBg1c,EAAeh1c,EAAM,GAAG9D,QAGtB64c,GACFjwQ,EAAO9kM,EAAM,GAAKA,EAAM,GACxBg1c,EAAeh1c,EAAM,GAAG9D,QAExB4oM,EAAO9kM,EAAM,GAIA,UAAbojM,EACE4xQ,GAAgB,IAClBlwQ,EAAOA,EAAK73L,MAAM,IAEXunc,EAAUpxQ,GACnB0B,EAAO9kM,EAAM,GACJojM,EACL0xQ,IACFhwQ,EAAOA,EAAK73L,MAAM,IAEX+nc,GAAgB,GAAKR,EAAUhsZ,EAAS46I,YACjD0B,EAAO9kM,EAAM,IAGR,CACLojM,SAAUA,EACVgxQ,QAASU,GAAkBN,EAAUpxQ,GACrC4xQ,aAAcA,EACdlwQ,KAAMA,EAET,CAoDD,SAAS8vQ,EAAIr3T,EAAS/0F,EAAU2gE,GAI9B,GAFAo0B,GADAA,EAAUg3T,EAASh3T,IACDt9E,QAAQk0Y,EAAQ,MAE5B72c,gBAAgBs3c,GACpB,OAAO,IAAIA,EAAIr3T,EAAS/0F,EAAU2gE,GAGpC,IAAI65F,EAAUiyP,EAAW12b,EAAO22b,EAAaroc,EAAOtO,EAChD42c,EAAer+R,EAAM7pK,QACrBtI,SAAc6jD,EACdjsC,EAAMjf,KACNpC,EAAI,EA8CR,IAjCI,WAAayJ,GAAQ,WAAaA,IACpCwkH,EAAS3gE,EACTA,EAAW,MAGT2gE,GAAU,oBAAsBA,IAAQA,EAAS+/P,EAAG3qW,OAQxDykM,IADAiyP,EAAYJ,EAAgBt3T,GAAW,GALvC/0F,EAAWisZ,EAAUjsZ,KAMC46I,WAAa6xQ,EAAUb,QAC7C73b,EAAI63b,QAAUa,EAAUb,SAAWpxP,GAAYx6J,EAAS4rZ,QACxD73b,EAAI6mL,SAAW6xQ,EAAU7xQ,UAAY56I,EAAS46I,UAAY,GAC1D7lD,EAAU03T,EAAUnwQ,MAOK,UAAvBmwQ,EAAU7xQ,WACmB,IAA3B6xQ,EAAUD,cAAsBV,EAAmBv5b,KAAKwiI,MACxD03T,EAAUb,UACTa,EAAU7xQ,UACT6xQ,EAAUD,aAAe,IACxBR,EAAUj4b,EAAI6mL,cAEnB+xQ,EAAa,GAAK,CAAC,OAAQ,aAGtBj6c,EAAIi6c,EAAaj5c,OAAQhB,IAGH,oBAF3Bg6c,EAAcC,EAAaj6c,KAO3BqjB,EAAQ22b,EAAY,GACpB32c,EAAM22c,EAAY,GAEd32b,IAAUA,EACZhC,EAAIhe,GAAOg/I,EACF,kBAAoBh/H,IAC7B1R,EAAkB,MAAV0R,EACJg/H,EAAQ1tC,YAAYtxF,GACpBg/H,EAAQn9I,QAAQme,MAGd,kBAAoB22b,EAAY,IAClC34b,EAAIhe,GAAOg/I,EAAQtwI,MAAM,EAAGJ,GAC5B0wI,EAAUA,EAAQtwI,MAAMJ,EAAQqoc,EAAY,MAE5C34b,EAAIhe,GAAOg/I,EAAQtwI,MAAMJ,GACzB0wI,EAAUA,EAAQtwI,MAAM,EAAGJ,MAGrBA,EAAQ0R,EAAM7E,KAAK6jI,MAC7BhhI,EAAIhe,GAAOsO,EAAM,GACjB0wI,EAAUA,EAAQtwI,MAAM,EAAGJ,EAAMA,QAGnC0P,EAAIhe,GAAOge,EAAIhe,IACbykN,GAAYkyP,EAAY,IAAK1sZ,EAASjqD,IAAa,GAOjD22c,EAAY,KAAI34b,EAAIhe,GAAOge,EAAIhe,GAAKsP,gBApCtC0vI,EAAU23T,EAAY33T,EAAShhI,GA4C/B4sG,IAAQ5sG,EAAI2lL,MAAQ/4E,EAAO5sG,EAAI2lL,QAM/B8gB,GACCx6J,EAAS4rZ,SACkB,MAA3B73b,EAAIunL,SAAS/pL,OAAO,KACF,KAAjBwC,EAAIunL,UAAyC,KAAtBt7I,EAASs7I,YAEpCvnL,EAAIunL,SA/JR,SAAiBkf,EAAU37C,GACzB,GAAiB,KAAb27C,EAAiB,OAAO37C,EAQ5B,IANA,IAAI5pG,GAAQ4pG,GAAQ,KAAKpoG,MAAM,KAAKhyD,MAAM,GAAI,GAAGotI,OAAO2oE,EAAS/jJ,MAAM,MACnE/jE,EAAIuiE,EAAKvhE,OACTk9P,EAAO37L,EAAKviE,EAAI,GAChByqD,GAAU,EACV7zB,EAAK,EAEF52B,KACW,MAAZuiE,EAAKviE,GACPuiE,EAAK3wD,OAAO5R,EAAG,GACM,OAAZuiE,EAAKviE,IACduiE,EAAK3wD,OAAO5R,EAAG,GACf42B,KACSA,IACC,IAAN52B,IAASyqD,GAAU,GACvB8X,EAAK3wD,OAAO5R,EAAG,GACf42B,KAOJ,OAHI6zB,GAAS8X,EAAK9X,QAAQ,IACb,MAATyzM,GAAyB,OAATA,GAAe37L,EAAKzhE,KAAK,IAEtCyhE,EAAK0B,KAAK,IAClB,CAqIkBp5D,CAAQwW,EAAIunL,SAAUt7I,EAASs7I,WAOjB,MAA3BvnL,EAAIunL,SAAS/pL,OAAO,IAAcy6b,EAAUj4b,EAAI6mL,YAClD7mL,EAAIunL,SAAW,IAAMvnL,EAAIunL,UAQtBlc,EAASrrK,EAAIqnL,KAAMrnL,EAAI6mL,YAC1B7mL,EAAImnL,KAAOnnL,EAAI0iK,SACf1iK,EAAIqnL,KAAO,IAMbrnL,EAAIumL,SAAWvmL,EAAIwmL,SAAW,GAE1BxmL,EAAI4wN,SACNtgO,EAAQ0P,EAAI4wN,KAAK/sO,QAAQ,OAGvBmc,EAAIumL,SAAWvmL,EAAI4wN,KAAKlgO,MAAM,EAAGJ,GACjC0P,EAAIumL,SAAW5b,mBAAmBv3E,mBAAmBpzF,EAAIumL,WAEzDvmL,EAAIwmL,SAAWxmL,EAAI4wN,KAAKlgO,MAAMJ,EAAQ,GACtC0P,EAAIwmL,SAAW7b,mBAAmBv3E,mBAAmBpzF,EAAIwmL,YAEzDxmL,EAAIumL,SAAW5b,mBAAmBv3E,mBAAmBpzF,EAAI4wN,OAG3D5wN,EAAI4wN,KAAO5wN,EAAIwmL,SAAWxmL,EAAIumL,SAAU,IAAKvmL,EAAIwmL,SAAWxmL,EAAIumL,UAGlEvmL,EAAIoR,OAA0B,UAAjBpR,EAAI6mL,UAAwBoxQ,EAAUj4b,EAAI6mL,WAAa7mL,EAAImnL,KACpEnnL,EAAI6mL,SAAU,KAAM7mL,EAAImnL,KACxB,OAKJnnL,EAAI2qH,KAAO3qH,EAAI3U,UAChB,CA2KDgtc,EAAIptc,UAAY,CAAEO,IA5JlB,SAAam8K,EAAMjoL,EAAOuK,GACxB,IAAI+V,EAAMjf,KAEV,OAAQ4mL,GACN,IAAK,QACC,kBAAoBjoL,GAASA,EAAMC,SACrCD,GAASuK,GAAM0iX,EAAG3qW,OAAOtiB,IAG3BsgB,EAAI2nK,GAAQjoL,EACZ,MAEF,IAAK,OACHsgB,EAAI2nK,GAAQjoL,EAEP2rL,EAAS3rL,EAAOsgB,EAAI6mL,UAGdnnM,IACTsgB,EAAImnL,KAAOnnL,EAAI0iK,SAAU,IAAKhjL,IAH9BsgB,EAAImnL,KAAOnnL,EAAI0iK,SACf1iK,EAAI2nK,GAAQ,IAKd,MAEF,IAAK,WACH3nK,EAAI2nK,GAAQjoL,EAERsgB,EAAIqnL,OAAM3nM,GAAS,IAAKsgB,EAAIqnL,MAChCrnL,EAAImnL,KAAOznM,EACX,MAEF,IAAK,OACHsgB,EAAI2nK,GAAQjoL,EAER2nM,EAAK7oL,KAAK9e,IACZA,EAAQA,EAAMgjE,MAAM,KACpB1iD,EAAIqnL,KAAO3nM,EAAMyuE,MACjBnuD,EAAI0iK,SAAWhjL,EAAMkjE,KAAK,OAE1B5iD,EAAI0iK,SAAWhjL,EACfsgB,EAAIqnL,KAAO,IAGb,MAEF,IAAK,WACHrnL,EAAI6mL,SAAWnnM,EAAM4R,cACrB0O,EAAI63b,SAAW5tc,EACf,MAEF,IAAK,WACL,IAAK,OACH,GAAIvK,EAAO,CACT,IAAIkpY,EAAgB,aAATjhN,EAAsB,IAAM,IACvC3nK,EAAI2nK,GAAQjoL,EAAM8d,OAAO,KAAOorX,EAAOA,EAAOlpY,EAAQA,CACvD,MACCsgB,EAAI2nK,GAAQjoL,EAEd,MAEF,IAAK,WACL,IAAK,WACHsgB,EAAI2nK,GAAQgD,mBAAmBjrL,GAC/B,MAEF,IAAK,OACH,IAAI4Q,EAAQ5Q,EAAMmE,QAAQ,MAErByM,GACH0P,EAAIumL,SAAW7mM,EAAMgR,MAAM,EAAGJ,GAC9B0P,EAAIumL,SAAW5b,mBAAmBv3E,mBAAmBpzF,EAAIumL,WAEzDvmL,EAAIwmL,SAAW9mM,EAAMgR,MAAMJ,EAAQ,GACnC0P,EAAIwmL,SAAW7b,mBAAmBv3E,mBAAmBpzF,EAAIwmL,YAEzDxmL,EAAIumL,SAAW5b,mBAAmBv3E,mBAAmB1zG,IAI3D,IAAK,IAAIf,EAAI,EAAGA,EAAI47K,EAAM56K,OAAQhB,IAAK,CACrC,IAAIk6c,EAAMt+R,EAAM57K,GAEZk6c,EAAI,KAAI74b,EAAI64b,EAAI,IAAM74b,EAAI64b,EAAI,IAAIvnc,cACvC,CAUD,OARA0O,EAAI4wN,KAAO5wN,EAAIwmL,SAAWxmL,EAAIumL,SAAU,IAAKvmL,EAAIwmL,SAAWxmL,EAAIumL,SAEhEvmL,EAAIoR,OAA0B,UAAjBpR,EAAI6mL,UAAwBoxQ,EAAUj4b,EAAI6mL,WAAa7mL,EAAImnL,KACpEnnL,EAAI6mL,SAAU,KAAM7mL,EAAImnL,KACxB,OAEJnnL,EAAI2qH,KAAO3qH,EAAI3U,WAER2U,CACR,EA8D2B3U,SArD5B,SAAkB4W,GACXA,GAAa,oBAAsBA,IAAWA,EAAY0qW,EAAG1qW,WAElE,IAAI0jL,EACA3lL,EAAMjf,KACNomM,EAAOnnL,EAAImnL,KACXN,EAAW7mL,EAAI6mL,SAEfA,GAAqD,MAAzCA,EAASrpL,OAAOqpL,EAASlnM,OAAS,KAAYknM,GAAY,KAE1E,IAAI1xH,EACF0xH,GACE7mL,EAAI6mL,UAAY7mL,EAAI63b,SAAYI,EAAUj4b,EAAI6mL,UAAY,KAAO,IAsCrE,OApCI7mL,EAAIumL,UACNpxH,GAAUn1D,EAAIumL,SACVvmL,EAAIwmL,WAAUrxH,GAAU,IAAKn1D,EAAIwmL,UACrCrxH,GAAU,KACDn1D,EAAIwmL,UACbrxH,GAAU,IAAKn1D,EAAIwmL,SACnBrxH,GAAU,KAEO,UAAjBn1D,EAAI6mL,UACJoxQ,EAAUj4b,EAAI6mL,YACbM,GACgB,MAAjBnnL,EAAIunL,WAMJpyH,GAAU,MAQkB,MAA1BgyH,EAAKA,EAAKxnM,OAAS,IAAe0nM,EAAK7oL,KAAKwB,EAAI0iK,YAAc1iK,EAAIqnL,QACpEF,GAAQ,KAGVhyH,GAAUgyH,EAAOnnL,EAAIunL,UAErB5B,EAAQ,kBAAoB3lL,EAAI2lL,MAAQ1jL,EAAUjC,EAAI2lL,OAAS3lL,EAAI2lL,SACxDxwH,GAAU,MAAQwwH,EAAMnoL,OAAO,GAAK,IAAKmoL,EAAQA,GAExD3lL,EAAIkwD,OAAMiF,GAAUn1D,EAAIkwD,MAErBiF,CACR,GAQDkjY,EAAIC,gBAAkBA,EACtBD,EAAIpsZ,SAAWisZ,EACfG,EAAIL,SAAWA,EACfK,EAAI1rF,GAAKA,EAETzoN,EAAOx3B,QAAU2rU,yBC5kBjB,iBACE,SAASz+V,GAGsC8yB,GAC9CA,EAAQqmP,SACoC7uN,GAC5CA,EAAO6uN,SAHT,IAII5e,EAA8B,iBAAVjmQ,EAAAA,GAAsBA,EAAAA,EAE7CimQ,EAAWjmQ,SAAWimQ,GACtBA,EAAWvwW,SAAWuwW,GACtBA,EAAWjqW,KAUZ,IAAIkgX,EAGJvB,EAAS,WAGT/9M,EAAO,GAUPg+M,EAAgB,QAChBC,EAAgB,eAChBC,EAAkB,4BAGlB5mT,EAAS,CACR,SAAY,kDACZ,YAAa,iDACb,gBAAiB,iBAKlB16D,EAAQR,KAAKQ,MACbuhX,EAAqBz6U,OAAO2kE,aAa5B,SAASrpG,EAAM1B,GACd,MAAMg9N,WAAWhjK,EAAOh6D,GACxB,CAUD,SAASzB,EAAI8J,EAAOxG,GAGnB,IAFA,IAAItK,EAAS8Q,EAAM9Q,OACfw1E,EAAS,GACNx1E,KACNw1E,EAAOx1E,GAAUsK,EAAGwG,EAAM9Q,IAE3B,OAAOw1E,CACP,CAYD,SAAS+zS,EAAUjsW,EAAQhT,GAC1B,IAAIzG,EAAQyZ,EAAOylD,MAAM,KACrByS,EAAS,GAWb,OAVI3xE,EAAM7D,OAAS,IAGlBw1E,EAAS3xE,EAAM,GAAK,IACpByZ,EAASzZ,EAAM,IAMT2xE,EADOxuE,GAFdsW,EAASA,EAAOymD,QAAQslT,EAAiB,MACrBtmT,MAAM,KACAz4D,GAAI24D,KAAK,IAEnC,CAeD,SAASwmT,EAAWnsW,GAMnB,IALA,IAGIvd,EACA2pX,EAJAtpW,EAAS,GACTk5J,EAAU,EACVt5K,EAASsd,EAAOtd,OAGbs5K,EAAUt5K,IAChBD,EAAQud,EAAO2zI,WAAWqoB,OACb,OAAUv5K,GAAS,OAAUu5K,EAAUt5K,EAG3B,QAAX,OADb0pX,EAAQpsW,EAAO2zI,WAAWqoB,OAEzBl5J,EAAOtgB,OAAe,KAARC,IAAkB,KAAe,KAAR2pX,GAAiB,QAIxDtpW,EAAOtgB,KAAKC,GACZu5K,KAGDl5J,EAAOtgB,KAAKC,GAGd,OAAOqgB,CACP,CAUD,SAASupW,EAAW74W,GACnB,OAAO9J,EAAI8J,GAAO,SAAS/Q,GAC1B,IAAIqgB,EAAS,GAOb,OANIrgB,EAAQ,QAEXqgB,GAAUkpW,GADVvpX,GAAS,SAC8B,GAAK,KAAQ,OACpDA,EAAQ,MAAiB,KAARA,GAElBqgB,GAAUkpW,EAAmBvpX,EAE7B,IAAEkjE,KAAK,GACR,CAmCD,SAAS2mT,EAAaC,EAAOnsO,GAG5B,OAAOmsO,EAAQ,GAAK,IAAMA,EAAQ,MAAgB,GAARnsO,IAAc,EACxD,CAOD,SAASosO,EAAMzrW,EAAO0rW,EAAWC,GAChC,IAAI7zS,EAAI,EAGR,IAFA93D,EAAQ2rW,EAAYjiX,EAAMsW,EA1LpB,KA0LoCA,GAAS,EACnDA,GAAStW,EAAMsW,EAAQ0rW,GACO1rW,EAAQ4rW,IAA2B9zS,GAAKg1F,EACrE9sJ,EAAQtW,EAAMsW,EA3KA8sJ,IA6Kf,OAAOpjK,EAAMouE,EAAI,GAAsB93D,GAASA,EAhM1C,IAiMN,CASD,SAASizF,EAAOiyB,GAEf,IAEI0oD,EAIAplI,EACA/2B,EACAnf,EACAu5W,EACAjnW,EACAkzD,EACA0zS,EACA53W,EAEAk4W,EArEiB92M,EAsDjBjzJ,EAAS,GACTkjN,EAAc//F,EAAMvjI,OAEpBhB,EAAI,EACJ8S,EA7MM,IA8MNqgE,EA/MS,GAoOb,KALAtrB,EAAQ08E,EAAM5vB,YA7NH,MA8NC,IACX9sD,EAAQ,GAGJ/2B,EAAI,EAAGA,EAAI+2B,IAAS/2B,EAEpByzG,EAAM0tB,WAAWnhI,IAAM,KAC1B3lB,EAAM,aAEPiW,EAAOtgB,KAAKyjI,EAAM0tB,WAAWnhI,IAM9B,IAAKnf,EAAQk2C,EAAQ,EAAIA,EAAQ,EAAI,EAAGl2C,EAAQ2yN,GAAwC,CAOvF,IAAK4mJ,EAAOlrX,EAAGikB,EAAI,EAAGkzD,EAAIg1F,EAErBx6J,GAAS2yN,GACZn5N,EAAM,mBAGP0/W,GAxGmBx2M,EAwGE9vC,EAAM0tB,WAAWtgJ,MAvGxB,GAAK,GACb0iK,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEblI,IAgGQA,GAAQ0+M,EAAQ9hX,GAAOmhX,EAASlqX,GAAKikB,KACjD9Y,EAAM,YAGPnL,GAAK6qX,EAAQ5mW,IAGT4mW,GAFJ53W,EAAIkkE,GAAKhE,EAvQL,EAuQoBgE,GAAKhE,EAtQzB,MAsQ8CgE,EAAIhE,IAbHgE,GAAKg1F,EAoBpDloJ,EAAIlb,EAAMmhX,GADdiB,EAAah/M,EAAOl5J,KAEnB9H,EAAM,YAGP8Y,GAAKknW,EAKNh4S,EAAO23S,EAAM9qX,EAAIkrX,EADjBj+L,EAAM7rK,EAAOpgB,OAAS,EACc,GAARkqX,GAIxBniX,EAAM/I,EAAIitL,GAAOi9L,EAASp3W,GAC7B3H,EAAM,YAGP2H,GAAK/J,EAAM/I,EAAIitL,GACfjtL,GAAKitL,EAGL7rK,EAAOxP,OAAO5R,IAAK,EAAG8S,EAEtB,CAED,OAAO63W,EAAWvpW,EAClB,CASD,SAASs7H,EAAOnY,GACf,IAAIzxH,EACAuM,EACAgsW,EACAD,EACAj4S,EACAriD,EACA/d,EACAhO,EACAoyE,EACAlkE,EACAgxB,EAGAqgM,EAEAgnJ,EACAH,EACAI,EANAnqW,EAAS,GAoBb,IARAkjN,GAHA//F,EAAQkmP,EAAWlmP,IAGCvjI,OAGpB8R,EAvUU,IAwUVuM,EAAQ,EACR8zD,EA1Ua,GA6URriD,EAAI,EAAGA,EAAIwzM,IAAexzM,GAC9BmT,EAAesgG,EAAMzzG,IACF,KAClB1P,EAAOtgB,KAAKwpX,EAAmBrmV,IAejC,IAXAonV,EAAiBD,EAAchqW,EAAOpgB,OAMlCoqX,GACHhqW,EAAOtgB,KAzVG,KA6VJuqX,EAAiB/mJ,GAAa,CAIpC,IAAKvxN,EAAIm3W,EAAQp5V,EAAI,EAAGA,EAAIwzM,IAAexzM,GAC1CmT,EAAesgG,EAAMzzG,KACDhe,GAAKmxB,EAAelxB,IACvCA,EAAIkxB,GAcN,IAPIlxB,EAAID,EAAI/J,GAAOmhX,EAAS7qW,IAD5BisW,EAAwBD,EAAiB,KAExClgX,EAAM,YAGPkU,IAAUtM,EAAID,GAAKw4W,EACnBx4W,EAAIC,EAEC+d,EAAI,EAAGA,EAAIwzM,IAAexzM,EAO9B,IANAmT,EAAesgG,EAAMzzG,IAEFhe,KAAOuM,EAAQ6qW,GACjC/+W,EAAM,YAGH84B,GAAgBnxB,EAAG,CAEtB,IAAK/N,EAAIsa,EAAO83D,EAAIg1F,IAEfpnK,GADJkO,EAAIkkE,GAAKhE,EAlYP,EAkYsBgE,GAAKhE,EAjY3B,MAiYgDgE,EAAIhE,IADTgE,GAAKg1F,EAKlDo/M,EAAUxmX,EAAIkO,EACdk4W,EAAah/M,EAAOl5J,EACpBmO,EAAOtgB,KACNwpX,EAAmBM,EAAa33W,EAAIs4W,EAAUJ,EAAY,KAE3DpmX,EAAIgE,EAAMwiX,EAAUJ,GAGrB/pW,EAAOtgB,KAAKwpX,EAAmBM,EAAa7lX,EAAG,KAC/CouE,EAAO23S,EAAMzrW,EAAOisW,EAAuBD,GAAkBD,GAC7D/rW,EAAQ,IACNgsW,CACF,GAGAhsW,IACAvM,CAEF,CACD,OAAOsO,EAAO6iD,KAAK,GACnB,CA2CDwnT,EAAW,CAMV,QAAW,QAQX,KAAQ,CACP,OAAUhB,EACV,OAAUE,GAEX,OAAUr4Q,EACV,OAAUoqC,EACV,QA/BD,SAAiBnY,GAChB,OAAOgmP,EAAUhmP,GAAO,SAASjmH,GAChC,OAAO8rW,EAAcvqW,KAAKvB,GACvB,OAASo+H,EAAOp+H,GAChBA,CACH,GACD,EA0BA,UAnDD,SAAmBimH,GAClB,OAAOgmP,EAAUhmP,GAAO,SAASjmH,GAChC,OAAO6rW,EAActqW,KAAKvB,GACvBg0F,EAAOh0F,EAAOvM,MAAM,GAAGY,eACvB2L,CACH,GACD,QAwDM,KAANijM,EAAAA,WACC,OAAOkqK,CADF,+BAjgBN,wCCsBF,IAAIA,EAAWjwM,EAAQ,OACnBM,EAAON,EAAQ,OASnB,SAASk+R,IACPt3c,KAAK8lM,SAAW,KAChB9lM,KAAK82c,QAAU,KACf92c,KAAK6vO,KAAO,KACZ7vO,KAAKomM,KAAO,KACZpmM,KAAKsmM,KAAO,KACZtmM,KAAK2hL,SAAW,KAChB3hL,KAAKmvE,KAAO,KACZnvE,KAAKs+H,OAAS,KACdt+H,KAAK4kM,MAAQ,KACb5kM,KAAKwmM,SAAW,KAChBxmM,KAAKmgE,KAAO,KACZngE,KAAK4pI,KAAO,IACb,CApBD+B,EAAQ1qH,MAAQwxY,EAChB9mR,EAAQljI,QA0ZR,SAAoBrG,EAAQsjN,GAC1B,OAAO+sM,EAASrwZ,GAAQ,GAAO,GAAMqG,QAAQi9M,EAC9C,EA3ZD/5E,EAAQosU,cAiaR,SAA0B31c,EAAQsjN,GAChC,OAAKtjN,EACEqwZ,EAASrwZ,GAAQ,GAAO,GAAM21c,cAAcryP,GAD/BA,CAErB,EAnaD/5E,EAAQ5rH,OAsVR,SAAmB/e,GAKb04K,EAAKy9D,SAASn2O,KAAMA,EAAMyxZ,EAASzxZ,IACvC,OAAMA,aAAes2c,EACdt2c,EAAI+e,SADuBu3b,EAAIptc,UAAU6V,OAAOxhB,KAAKyC,EAE7D,EA5VD2qI,EAAQ2rU,IAAMA,EAqBd,IAAIU,EAAkB,oBAClBC,EAAc,WAGdC,EAAoB,qCAOpBC,EAAS,CAAC,IAAK,IAAK,IAAK,KAAM,IAAK,KAAKp7T,OAHhC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,OAM/Cq7T,EAAa,CAAC,KAAMr7T,OAAOo7T,GAK3BE,EAAe,CAAC,IAAK,IAAK,IAAK,IAAK,KAAKt7T,OAAOq7T,GAChDE,EAAkB,CAAC,IAAK,IAAK,KAE7BC,EAAsB,yBACtBC,EAAoB,+BAEpBC,EAAiB,CACf,YAAc,EACd,eAAe,GAGjBC,EAAmB,CACjB,YAAc,EACd,eAAe,GAGjBC,EAAkB,CAChB,MAAQ,EACR,OAAS,EACT,KAAO,EACP,QAAU,EACV,MAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,GAEXpuO,EAAcnxD,EAAQ,OAE1B,SAASq5O,EAASxzY,EAAK25b,EAAkBC,GACvC,GAAI55b,GAAOy6J,EAAKo9D,SAAS73N,IAAQA,aAAeq4b,EAAK,OAAOr4b,EAE5D,IAAIiM,EAAI,IAAIosb,EAEZ,OADApsb,EAAEjK,MAAMhC,EAAK25b,EAAkBC,GACxB3tb,CACR,CAEDosb,EAAIptc,UAAU+W,MAAQ,SAAShC,EAAK25b,EAAkBC,GACpD,IAAKn/R,EAAKy9D,SAASl4N,GACjB,MAAM,IAAIlgB,UAAU,gDAAkDkgB,GAMxE,IAAI65b,EAAa75b,EAAInc,QAAQ,KACzBi2c,GACqB,IAAhBD,GAAqBA,EAAa75b,EAAInc,QAAQ,KAAQ,IAAM,IACjEk2c,EAAS/5b,EAAI0iD,MAAMo3Y,GAEvBC,EAAO,GAAKA,EAAO,GAAGr2Y,QADL,MACyB,KAG1C,IAAI6kI,EAFJvoL,EAAM+5b,EAAOn3Y,KAAKk3Y,GAQlB,GAFAvxQ,EAAOA,EAAKjmI,QAEPs3Y,GAA+C,IAA1B55b,EAAI0iD,MAAM,KAAK/iE,OAAc,CAErD,IAAIq6c,EAAaf,EAAkB97b,KAAKorL,GACxC,GAAIyxQ,EAeF,OAdAj5c,KAAKmgE,KAAOqnI,EACZxnM,KAAK4pI,KAAO49D,EACZxnM,KAAKwmM,SAAWyyQ,EAAW,GACvBA,EAAW,IACbj5c,KAAKs+H,OAAS26U,EAAW,GAEvBj5c,KAAK4kM,MADHg0Q,EACWruO,EAAYtpN,MAAMjhB,KAAKs+H,OAAOq2C,OAAO,IAErC30K,KAAKs+H,OAAOq2C,OAAO,IAEzBikS,IACT54c,KAAKs+H,OAAS,GACdt+H,KAAK4kM,MAAQ,CAAC,GAET5kM,IAEV,CAED,IAAI04P,EAAQs/M,EAAgB57b,KAAKorL,GACjC,GAAIkxD,EAAO,CAET,IAAIwgN,GADJxgN,EAAQA,EAAM,IACSnoP,cACvBvQ,KAAK8lM,SAAWozQ,EAChB1xQ,EAAOA,EAAK7yB,OAAO+jF,EAAM95P,OAC1B,CAMD,GAAIi6c,GAAqBngN,GAASlxD,EAAK9kM,MAAM,wBAAyB,CACpE,IAAIo0c,EAAgC,OAAtBtvQ,EAAK7yB,OAAO,EAAG,IACzBmiS,GAAap+M,GAASggN,EAAiBhgN,KACzClxD,EAAOA,EAAK7yB,OAAO,GACnB30K,KAAK82c,SAAU,EAElB,CAED,IAAK4B,EAAiBhgN,KACjBo+M,GAAYp+M,IAAUigN,EAAgBjgN,IAAU,CAmBnD,IADA,IASI7oB,EAAMspO,EATNC,GAAW,EACNx7c,EAAI,EAAGA,EAAI06c,EAAgB15c,OAAQhB,IAAK,EAElC,KADTy7c,EAAM7xQ,EAAK1kM,QAAQw1c,EAAgB16c,QACP,IAAbw7c,GAAkBC,EAAMD,KACzCA,EAAUC,EACb,EAgBe,KATdF,GAFe,IAAbC,EAEO5xQ,EAAKj1F,YAAY,KAIjBi1F,EAAKj1F,YAAY,IAAK6mW,MAM/BvpO,EAAOroC,EAAK73L,MAAM,EAAGwpc,GACrB3xQ,EAAOA,EAAK73L,MAAMwpc,EAAS,GAC3Bn5c,KAAK6vO,KAAOx9H,mBAAmBw9H,IAIjCupO,GAAW,EACX,IAASx7c,EAAI,EAAGA,EAAIy6c,EAAaz5c,OAAQhB,IAAK,CAC5C,IAAIy7c,GACS,KADTA,EAAM7xQ,EAAK1kM,QAAQu1c,EAAaz6c,QACJ,IAAbw7c,GAAkBC,EAAMD,KACzCA,EAAUC,EACb,EAEgB,IAAbD,IACFA,EAAU5xQ,EAAK5oM,QAEjBoB,KAAKomM,KAAOoB,EAAK73L,MAAM,EAAGypc,GAC1B5xQ,EAAOA,EAAK73L,MAAMypc,GAGlBp5c,KAAKs5c,YAILt5c,KAAK2hL,SAAW3hL,KAAK2hL,UAAY,GAIjC,IAAI43R,EAAoC,MAArBv5c,KAAK2hL,SAAS,IACe,MAA5C3hL,KAAK2hL,SAAS3hL,KAAK2hL,SAAS/iL,OAAS,GAGzC,IAAK26c,EAEH,IADA,IAAIC,EAAYx5c,KAAK2hL,SAAShgH,MAAM,MACpB/xD,GAAPhS,EAAI,EAAO47c,EAAU56c,QAAQhB,EAAIgS,EAAGhS,IAAK,CAChD,IAAIgpL,EAAO4yR,EAAU57c,GACrB,GAAKgpL,IACAA,EAAKlkL,MAAM61c,GAAsB,CAEpC,IADA,IAAIkB,EAAU,GACL/qb,EAAI,EAAGqmD,EAAI6xG,EAAKhoL,OAAQ8vB,EAAIqmD,EAAGrmD,IAClCk4J,EAAK/2B,WAAWnhI,GAAK,IAIvB+qb,GAAW,IAEXA,GAAW7yR,EAAKl4J,GAIpB,IAAK+qb,EAAQ/2c,MAAM61c,GAAsB,CACvC,IAAImB,EAAaF,EAAU7pc,MAAM,EAAG/R,GAChC+7c,EAAUH,EAAU7pc,MAAM/R,EAAI,GAC9Bq8L,EAAMrT,EAAKlkL,MAAM81c,GACjBv+Q,IACFy/Q,EAAWh7c,KAAKu7L,EAAI,IACpB0/Q,EAAQtxZ,QAAQ4xI,EAAI,KAElB0/Q,EAAQ/6c,SACV4oM,EAAO,IAAMmyQ,EAAQ93Y,KAAK,KAAO2lI,GAEnCxnM,KAAK2hL,SAAW+3R,EAAW73Y,KAAK,KAChC,KACD,CACF,CACF,CAGC7hE,KAAK2hL,SAAS/iL,OAjND,IAkNfoB,KAAK2hL,SAAW,GAGhB3hL,KAAK2hL,SAAW3hL,KAAK2hL,SAASpxK,cAG3Bgpc,IAKHv5c,KAAK2hL,SAAW0nM,EAASxD,QAAQ7lX,KAAK2hL,WAGxC,IAAInmK,EAAIxb,KAAKsmM,KAAO,IAAMtmM,KAAKsmM,KAAO,GAClC5tL,EAAI1Y,KAAK2hL,UAAY,GACzB3hL,KAAKomM,KAAO1tL,EAAI8C,EAChBxb,KAAK4pI,MAAQ5pI,KAAKomM,KAIdmzQ,IACFv5c,KAAK2hL,SAAW3hL,KAAK2hL,SAAShN,OAAO,EAAG30K,KAAK2hL,SAAS/iL,OAAS,GAC/C,MAAZ4oM,EAAK,KACPA,EAAO,IAAMA,GAGlB,CAID,IAAKixQ,EAAeS,GAKlB,IAASt7c,EAAI,EAAGgS,EAAIwoc,EAAWx5c,OAAQhB,EAAIgS,EAAGhS,IAAK,CACjD,IAAIuZ,EAAKihc,EAAWx6c,GACpB,IAA0B,IAAtB4pM,EAAK1kM,QAAQqU,GAAjB,CAEA,IAAIyic,EAAMhwR,mBAAmBzyK,GACzByic,IAAQzic,IACVyic,EAAMtnW,OAAOn7F,IAEfqwL,EAAOA,EAAK7lI,MAAMxqD,GAAI0qD,KAAK+3Y,EALjB,CAMX,CAKH,IAAIzqY,EAAOq4H,EAAK1kM,QAAQ,MACV,IAAVqsE,IAEFnvE,KAAKmvE,KAAOq4H,EAAK7yB,OAAOxlG,GACxBq4H,EAAOA,EAAK73L,MAAM,EAAGw/D,IAEvB,IAAI0qY,EAAKryQ,EAAK1kM,QAAQ,KAoBtB,IAnBY,IAAR+2c,GACF75c,KAAKs+H,OAASkpE,EAAK7yB,OAAOklS,GAC1B75c,KAAK4kM,MAAQ4C,EAAK7yB,OAAOklS,EAAK,GAC1BjB,IACF54c,KAAK4kM,MAAQ2lC,EAAYtpN,MAAMjhB,KAAK4kM,QAEtC4C,EAAOA,EAAK73L,MAAM,EAAGkqc,IACZjB,IAET54c,KAAKs+H,OAAS,GACdt+H,KAAK4kM,MAAQ,CAAC,GAEZ4C,IAAMxnM,KAAKwmM,SAAWgB,GACtBmxQ,EAAgBO,IAChBl5c,KAAK2hL,WAAa3hL,KAAKwmM,WACzBxmM,KAAKwmM,SAAW,KAIdxmM,KAAKwmM,UAAYxmM,KAAKs+H,OAAQ,CAC5B9iH,EAAIxb,KAAKwmM,UAAY,GAAzB,IACInzL,EAAIrT,KAAKs+H,QAAU,GACvBt+H,KAAKmgE,KAAO3kD,EAAInI,CACjB,CAID,OADArT,KAAK4pI,KAAO5pI,KAAK+f,SACV/f,IACR,EAaDs3c,EAAIptc,UAAU6V,OAAS,WACrB,IAAI8vN,EAAO7vO,KAAK6vO,MAAQ,GACpBA,IAEFA,GADAA,EAAOjmD,mBAAmBimD,IACdltK,QAAQ,OAAQ,KAC5BktK,GAAQ,KAGV,IAAI/pC,EAAW9lM,KAAK8lM,UAAY,GAC5BU,EAAWxmM,KAAKwmM,UAAY,GAC5Br3H,EAAOnvE,KAAKmvE,MAAQ,GACpBi3H,GAAO,EACPxB,EAAQ,GAER5kM,KAAKomM,KACPA,EAAOypC,EAAO7vO,KAAKomM,KACVpmM,KAAK2hL,WACdykB,EAAOypC,IAAwC,IAAhC7vO,KAAK2hL,SAAS7+K,QAAQ,KACjC9C,KAAK2hL,SACL,IAAM3hL,KAAK2hL,SAAW,KACtB3hL,KAAKsmM,OACPF,GAAQ,IAAMpmM,KAAKsmM,OAInBtmM,KAAK4kM,OACLlrB,EAAKo9D,SAAS92O,KAAK4kM,QACnB1jM,OAAOQ,KAAK1B,KAAK4kM,OAAOhmM,SAC1BgmM,EAAQ2lC,EAAYrpN,UAAUlhB,KAAK4kM,QAGrC,IAAItmE,EAASt+H,KAAKs+H,QAAWsmE,GAAU,IAAMA,GAAW,GAsBxD,OApBIkB,GAAoC,MAAxBA,EAASnxB,QAAQ,KAAYmxB,GAAY,KAIrD9lM,KAAK82c,WACHhxQ,GAAY6yQ,EAAgB7yQ,MAAuB,IAATM,GAC9CA,EAAO,MAAQA,GAAQ,IACnBI,GAAmC,MAAvBA,EAAS/pL,OAAO,KAAY+pL,EAAW,IAAMA,IACnDJ,IACVA,EAAO,IAGLj3H,GAA2B,MAAnBA,EAAK1yD,OAAO,KAAY0yD,EAAO,IAAMA,GAC7CmvD,GAA+B,MAArBA,EAAO7hH,OAAO,KAAY6hH,EAAS,IAAMA,GAOhDwnE,EAAWM,GALlBI,EAAWA,EAAS7jI,QAAQ,SAAS,SAASjgE,GAC5C,OAAOknL,mBAAmBlnL,EAC3B,MACD47H,EAASA,EAAO37D,QAAQ,IAAK,QAEgBwM,CAC9C,EAMDmoY,EAAIptc,UAAUzB,QAAU,SAASi9M,GAC/B,OAAO1lN,KAAK+3c,cAActlD,EAAS/sM,GAAU,GAAO,IAAO3lM,QAC5D,EAODu3b,EAAIptc,UAAU6tc,cAAgB,SAASryP,GACrC,GAAIhsC,EAAKy9D,SAASzxB,GAAW,CAC3B,IAAI77E,EAAM,IAAIytU,EACdztU,EAAI5oH,MAAMykM,GAAU,GAAO,GAC3BA,EAAW77E,CACZ,CAID,IAFA,IAAIz1D,EAAS,IAAIkjY,EACbwC,EAAQ54c,OAAOQ,KAAK1B,MACfu2K,EAAK,EAAGA,EAAKujS,EAAMl7c,OAAQ23K,IAAM,CACxC,IAAIwjS,EAAOD,EAAMvjS,GACjBniG,EAAO2lY,GAAQ/5c,KAAK+5c,EACrB,CAOD,GAHA3lY,EAAOjF,KAAOu2I,EAASv2I,KAGD,KAAlBu2I,EAAS97E,KAEX,OADAx1D,EAAOw1D,KAAOx1D,EAAOr0D,SACdq0D,EAIT,GAAIsxI,EAASoxP,UAAYpxP,EAAS5f,SAAU,CAG1C,IADA,IAAIk0Q,EAAQ94c,OAAOQ,KAAKgkN,GACfw2L,EAAK,EAAGA,EAAK89D,EAAMp7c,OAAQs9Y,IAAM,CACxC,IAAI+9D,EAAOD,EAAM99D,GACJ,aAAT+9D,IACF7lY,EAAO6lY,GAAQv0P,EAASu0P,GAC3B,CASD,OANItB,EAAgBvkY,EAAO0xH,WACvB1xH,EAAOutG,WAAavtG,EAAOoyH,WAC7BpyH,EAAOjU,KAAOiU,EAAOoyH,SAAW,KAGlCpyH,EAAOw1D,KAAOx1D,EAAOr0D,SACdq0D,CACR,CAED,GAAIsxI,EAAS5f,UAAY4f,EAAS5f,WAAa1xH,EAAO0xH,SAAU,CAS9D,IAAK6yQ,EAAgBjzP,EAAS5f,UAAW,CAEvC,IADA,IAAIpkM,EAAOR,OAAOQ,KAAKgkN,GACd5wM,EAAI,EAAGA,EAAIpT,EAAK9C,OAAQkW,IAAK,CACpC,IAAIigE,EAAIrzE,EAAKoT,GACbs/D,EAAOW,GAAK2wI,EAAS3wI,EACtB,CAED,OADAX,EAAOw1D,KAAOx1D,EAAOr0D,SACdq0D,CACR,CAGD,GADAA,EAAO0xH,SAAW4f,EAAS5f,SACtB4f,EAAStf,MAASsyQ,EAAiBhzP,EAAS5f,UAS/C1xH,EAAOoyH,SAAWkf,EAASlf,aAT+B,CAE1D,IADA,IAAI0zQ,GAAWx0P,EAASlf,UAAY,IAAI7kI,MAAM,KACvCu4Y,EAAQt7c,UAAY8mN,EAAStf,KAAO8zQ,EAAQ9iX,WAC9CsuH,EAAStf,OAAMsf,EAAStf,KAAO,IAC/Bsf,EAAS/jC,WAAU+jC,EAAS/jC,SAAW,IACzB,KAAfu4R,EAAQ,IAAWA,EAAQ7xZ,QAAQ,IACnC6xZ,EAAQt7c,OAAS,GAAGs7c,EAAQ7xZ,QAAQ,IACxC+rB,EAAOoyH,SAAW0zQ,EAAQr4Y,KAAK,IAChC,CAUD,GAPAuS,EAAOkqD,OAASonF,EAASpnF,OACzBlqD,EAAOwwH,MAAQ8gB,EAAS9gB,MACxBxwH,EAAOgyH,KAAOsf,EAAStf,MAAQ,GAC/BhyH,EAAOy7J,KAAOnqB,EAASmqB,KACvBz7J,EAAOutG,SAAW+jC,EAAS/jC,UAAY+jC,EAAStf,KAChDhyH,EAAOkyH,KAAOof,EAASpf,KAEnBlyH,EAAOoyH,UAAYpyH,EAAOkqD,OAAQ,CACpC,IAAI9iH,EAAI44D,EAAOoyH,UAAY,GACvBnzL,EAAI+gE,EAAOkqD,QAAU,GACzBlqD,EAAOjU,KAAO3kD,EAAInI,CACnB,CAGD,OAFA+gE,EAAO0iY,QAAU1iY,EAAO0iY,SAAWpxP,EAASoxP,QAC5C1iY,EAAOw1D,KAAOx1D,EAAOr0D,SACdq0D,CACR,CAED,IAAI+lY,EAAe/lY,EAAOoyH,UAA0C,MAA9BpyH,EAAOoyH,SAAS/pL,OAAO,GACzD29b,EACI10P,EAAStf,MACTsf,EAASlf,UAA4C,MAAhCkf,EAASlf,SAAS/pL,OAAO,GAElD49b,EAAcD,GAAYD,GACX/lY,EAAOgyH,MAAQsf,EAASlf,SACvC8zQ,EAAgBD,EAChBE,EAAUnmY,EAAOoyH,UAAYpyH,EAAOoyH,SAAS7kI,MAAM,MAAQ,GAE3D64Y,GADAN,EAAUx0P,EAASlf,UAAYkf,EAASlf,SAAS7kI,MAAM,MAAQ,GACnDyS,EAAO0xH,WAAa6yQ,EAAgBvkY,EAAO0xH,WA2B3D,GApBI00Q,IACFpmY,EAAOutG,SAAW,GAClBvtG,EAAOkyH,KAAO,KACVlyH,EAAOgyH,OACU,KAAfm0Q,EAAQ,GAAWA,EAAQ,GAAKnmY,EAAOgyH,KACtCm0Q,EAAQlyZ,QAAQ+rB,EAAOgyH,OAE9BhyH,EAAOgyH,KAAO,GACVsf,EAAS5f,WACX4f,EAAS/jC,SAAW,KACpB+jC,EAASpf,KAAO,KACZof,EAAStf,OACQ,KAAf8zQ,EAAQ,GAAWA,EAAQ,GAAKx0P,EAAStf,KACxC8zQ,EAAQ7xZ,QAAQq9J,EAAStf,OAEhCsf,EAAStf,KAAO,MAElBi0Q,EAAaA,IAA8B,KAAfH,EAAQ,IAA4B,KAAfK,EAAQ,KAGvDH,EAEFhmY,EAAOgyH,KAAQsf,EAAStf,MAA0B,KAAlBsf,EAAStf,KAC3Bsf,EAAStf,KAAOhyH,EAAOgyH,KACrChyH,EAAOutG,SAAY+jC,EAAS/jC,UAAkC,KAAtB+jC,EAAS/jC,SAC/B+jC,EAAS/jC,SAAWvtG,EAAOutG,SAC7CvtG,EAAOkqD,OAASonF,EAASpnF,OACzBlqD,EAAOwwH,MAAQ8gB,EAAS9gB,MACxB21Q,EAAUL,OAEL,GAAIA,EAAQt7c,OAGZ27c,IAASA,EAAU,IACxBA,EAAQntY,MACRmtY,EAAUA,EAAQx9T,OAAOm9T,GACzB9lY,EAAOkqD,OAASonF,EAASpnF,OACzBlqD,EAAOwwH,MAAQ8gB,EAAS9gB,WACnB,IAAKlrB,EAAK4xH,kBAAkB5lF,EAASpnF,QAAS,CAInD,GAAIk8U,EACFpmY,EAAOutG,SAAWvtG,EAAOgyH,KAAOm0Q,EAAQnjX,SAIpCqjX,KAAarmY,EAAOgyH,MAAQhyH,EAAOgyH,KAAKtjM,QAAQ,KAAO,IAC1CsxE,EAAOgyH,KAAKzkI,MAAM,QAEjCyS,EAAOy7J,KAAO4qO,EAAWrjX,QACzBhjB,EAAOgyH,KAAOhyH,EAAOutG,SAAW84R,EAAWrjX,SAW/C,OARAhjB,EAAOkqD,OAASonF,EAASpnF,OACzBlqD,EAAOwwH,MAAQ8gB,EAAS9gB,MAEnBlrB,EAAK2xH,OAAOj3N,EAAOoyH,WAAc9sB,EAAK2xH,OAAOj3N,EAAOkqD,UACvDlqD,EAAOjU,MAAQiU,EAAOoyH,SAAWpyH,EAAOoyH,SAAW,KACpCpyH,EAAOkqD,OAASlqD,EAAOkqD,OAAS,KAEjDlqD,EAAOw1D,KAAOx1D,EAAOr0D,SACdq0D,CACR,CAED,IAAKmmY,EAAQ37c,OAWX,OARAw1E,EAAOoyH,SAAW,KAEdpyH,EAAOkqD,OACTlqD,EAAOjU,KAAO,IAAMiU,EAAOkqD,OAE3BlqD,EAAOjU,KAAO,KAEhBiU,EAAOw1D,KAAOx1D,EAAOr0D,SACdq0D,EAcT,IARA,IAAI0nL,EAAOy+M,EAAQ5qc,OAAO,GAAG,GACzB+qc,GACCtmY,EAAOgyH,MAAQsf,EAAStf,MAAQm0Q,EAAQ37c,OAAS,KACxC,MAATk9P,GAAyB,OAATA,IAA2B,KAATA,EAInCtnO,EAAK,EACA52B,EAAI28c,EAAQ37c,OAAQhB,GAAK,EAAGA,IAEtB,OADbk+P,EAAOy+M,EAAQ38c,IAEb28c,EAAQ/qc,OAAO5R,EAAG,GACA,OAATk+P,GACTy+M,EAAQ/qc,OAAO5R,EAAG,GAClB42B,KACSA,IACT+lb,EAAQ/qc,OAAO5R,EAAG,GAClB42B,KAKJ,IAAK6lb,IAAeC,EAClB,KAAO9lb,IAAMA,EACX+lb,EAAQlyZ,QAAQ,OAIhBgyZ,GAA6B,KAAfE,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAG99b,OAAO,IACpC89b,EAAQlyZ,QAAQ,IAGdqyZ,GAAsD,MAAjCH,EAAQ14Y,KAAK,KAAK8yG,QAAQ,IACjD4lS,EAAQ77c,KAAK,IAGf,IAUM+7c,EAVF56F,EAA4B,KAAf06F,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAG99b,OAAO,GAGjC+9b,IACFpmY,EAAOutG,SAAWvtG,EAAOgyH,KAAOy5K,EAAa,GACb06F,EAAQ37c,OAAS27c,EAAQnjX,QAAU,IAI/DqjX,KAAarmY,EAAOgyH,MAAQhyH,EAAOgyH,KAAKtjM,QAAQ,KAAO,IAC1CsxE,EAAOgyH,KAAKzkI,MAAM,QAEjCyS,EAAOy7J,KAAO4qO,EAAWrjX,QACzBhjB,EAAOgyH,KAAOhyH,EAAOutG,SAAW84R,EAAWrjX,UAyB/C,OArBAijX,EAAaA,GAAejmY,EAAOgyH,MAAQm0Q,EAAQ37c,UAEhCihX,GACjB06F,EAAQlyZ,QAAQ,IAGbkyZ,EAAQ37c,OAIXw1E,EAAOoyH,SAAW+zQ,EAAQ14Y,KAAK,MAH/BuS,EAAOoyH,SAAW,KAClBpyH,EAAOjU,KAAO,MAMXu5G,EAAK2xH,OAAOj3N,EAAOoyH,WAAc9sB,EAAK2xH,OAAOj3N,EAAOkqD,UACvDlqD,EAAOjU,MAAQiU,EAAOoyH,SAAWpyH,EAAOoyH,SAAW,KACpCpyH,EAAOkqD,OAASlqD,EAAOkqD,OAAS,KAEjDlqD,EAAOy7J,KAAOnqB,EAASmqB,MAAQz7J,EAAOy7J,KACtCz7J,EAAO0iY,QAAU1iY,EAAO0iY,SAAWpxP,EAASoxP,QAC5C1iY,EAAOw1D,KAAOx1D,EAAOr0D,SACdq0D,CACR,EAEDkjY,EAAIptc,UAAUovc,UAAY,WACxB,IAAIlzQ,EAAOpmM,KAAKomM,KACZE,EAAO2xQ,EAAY77b,KAAKgqL,GACxBE,IAEW,OADbA,EAAOA,EAAK,MAEVtmM,KAAKsmM,KAAOA,EAAK3xB,OAAO,IAE1ByxB,EAAOA,EAAKzxB,OAAO,EAAGyxB,EAAKxnM,OAAS0nM,EAAK1nM,SAEvCwnM,IAAMpmM,KAAK2hL,SAAWykB,EAC3B,kCCztBDjjC,EAAOx3B,QAAU,CACfwrG,SAAU,SAAStuO,GACjB,MAAuB,kBAATA,CACf,EACDiuO,SAAU,SAASjuO,GACjB,MAAuB,kBAATA,GAA6B,OAARA,CACpC,EACDwiS,OAAQ,SAASxiS,GACf,OAAe,OAARA,CACR,EACDyiS,kBAAmB,SAASziS,GAC1B,OAAc,MAAPA,CACR,0BC0CH,SAAS09L,EAAQjsL,GAEf,IACE,IAAK6yF,EAAAA,EAAOijM,aAAc,OAAO,CAGlC,CAFC,MAAO3kJ,GACP,OAAO,CACR,CACD,IAAIkS,EAAMxwD,EAAAA,EAAOijM,aAAa91R,GAC9B,OAAI,MAAQqjJ,GACyB,SAA9BlwH,OAAOkwH,GAAKptJ,aACpB,CA7DD4yJ,EAAOx3B,QAoBP,SAAoBziI,EAAIulI,GACtB,GAAI83D,EAAO,iBACT,OAAOr9L,EAGT,IAAI2zN,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAIt2B,EAAO,oBACT,MAAM,IAAI50L,MAAM88H,GACP83D,EAAO,oBAChB9xL,QAAQ6Q,MAAMmpH,GAEdh6H,QAAQC,KAAK+5H,GAEfouF,GAAS,CACV,CACD,OAAO3zN,EAAGlH,MAAMhC,KAAMmC,UACvB,CAGF,oBC9CDghK,EAAOx3B,QAAU,SAAkB9iI,GACjC,OAAOA,GAAsB,kBAARA,GACI,oBAAbA,EAAIiT,MACS,oBAAbjT,EAAIurD,MACc,oBAAlBvrD,EAAIw7L,SACjB,sCCAD,IAAIs2Q,EAAoBvhS,EAAQ,OAC5BwhS,EAAsBxhS,EAAQ,OAC9ByhS,EAAkBzhS,EAAQ,OAC1Bn2E,EAAem2E,EAAQ,OAE3B,SAAS0rD,EAAYtsN,GACnB,OAAOA,EAAEja,KAAKsL,KAAK2O,EACpB,CAED,IAAIsic,EAAoC,qBAAXtoT,OACzBuoT,EAAoC,qBAAX/8c,OAEzBg9c,EAAiBl2O,EAAY5jO,OAAOgJ,UAAUI,UAE9C2wc,EAAcn2O,EAAYliO,OAAOsH,UAAU+8N,SAC3CouF,EAAcvwF,EAAYr3L,OAAOvjC,UAAU+8N,SAC3Ci0O,EAAep2O,EAAY9N,QAAQ9sN,UAAU+8N,SAEjD,GAAI6zO,EACF,IAAIK,EAAcr2O,EAAYtyE,OAAOtoJ,UAAU+8N,SAGjD,GAAI8zO,EACF,IAAIK,EAAct2O,EAAY9mO,OAAOkM,UAAU+8N,SAGjD,SAASo0O,EAAoB18c,EAAO28c,GAClC,GAAqB,kBAAV38c,EACT,OAAO,EAET,IAEE,OADA28c,EAAiB38c,IACV,CAGR,CAFC,MAAMqI,GACN,OAAO,CACR,CACF,CA4FD,SAASu0c,EAAc58c,GACrB,MAAiC,iBAA1Bq8c,EAAer8c,EACvB,CAiBD,SAAS68c,EAAc78c,GACrB,MAAiC,iBAA1Bq8c,EAAer8c,EACvB,CAgBD,SAAS88c,EAAkB98c,GACzB,MAAiC,qBAA1Bq8c,EAAer8c,EACvB,CAgBD,SAAS+8c,EAAkB/8c,GACzB,MAAiC,qBAA1Bq8c,EAAer8c,EACvB,CAUD,SAASg9c,EAAsBh9c,GAC7B,MAAiC,yBAA1Bq8c,EAAer8c,EACvB,CAKD,SAAS43O,EAAc53O,GACrB,MAA2B,qBAAhBykG,cAIJu4W,EAAsBC,QACzBD,EAAsBh9c,GACtBA,aAAiBykG,YACtB,CAGD,SAASy4W,EAAmBl9c,GAC1B,MAAiC,sBAA1Bq8c,EAAer8c,EACvB,CAMD,SAASm9c,EAAWn9c,GAClB,MAAwB,qBAAb2kG,WAIJu4W,EAAmBD,QACtBC,EAAmBl9c,GACnBA,aAAiB2kG,SACtB,CA/LDqoC,EAAQgvU,kBAAoBA,EAC5BhvU,EAAQivU,oBAAsBA,EAC9BjvU,EAAQ1oC,aAAeA,EAkBvB0oC,EAAQ2wF,UAdR,SAAmBn6F,GAClB,MAEqB,qBAAZn5H,SACPm5H,aAAiBn5H,SAGP,OAAVm5H,GACiB,kBAAVA,GACe,oBAAfA,EAAMl5H,MACU,oBAAhBk5H,EAAMhyB,KAGf,EAaDw7B,EAAQu5F,kBAVR,SAA2BvmO,GACzB,MAA2B,qBAAhBykG,aAA+BA,YAAYC,OAC7CD,YAAYC,OAAO1kG,GAI1BskG,EAAatkG,IACbm9c,EAAWn9c,EAEd,EAODgtI,EAAQ+lS,aAHR,SAAsB/ya,GACpB,MAAkC,eAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQowU,oBAHR,SAA6Bp9c,GAC3B,MAAkC,sBAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQqwU,cAHR,SAAuBr9c,GACrB,MAAkC,gBAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQswU,cAHR,SAAuBt9c,GACrB,MAAkC,gBAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQuwU,YAHR,SAAqBv9c,GACnB,MAAkC,cAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQwwU,aAHR,SAAsBx9c,GACpB,MAAkC,eAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQywU,aAHR,SAAsBz9c,GACpB,MAAkC,eAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQk6F,eAHR,SAAwBlnO,GACtB,MAAkC,iBAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQm6F,eAHR,SAAwBnnO,GACtB,MAAkC,iBAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQ0wU,gBAHR,SAAyB19c,GACvB,MAAkC,kBAA3Bk8c,EAAgBl8c,EACxB,EAMDgtI,EAAQ2wU,iBAHR,SAA0B39c,GACxB,MAAkC,mBAA3Bk8c,EAAgBl8c,EACxB,EAMD48c,EAAcK,QACG,qBAARvxc,KACPkxc,EAAc,IAAIlxc,KAYpBshI,EAAQy5F,MATR,SAAezmO,GACb,MAAmB,qBAAR0L,MAIJkxc,EAAcK,QACjBL,EAAc58c,GACdA,aAAiB0L,IACtB,EAMDmxc,EAAcI,QACG,qBAAR3xY,KACPuxY,EAAc,IAAIvxY,KAWpB0hE,EAAQ05F,MATR,SAAe1mO,GACb,MAAmB,qBAARsrE,MAIJuxY,EAAcI,QACjBJ,EAAc78c,GACdA,aAAiBsrE,IACtB,EAMDwxY,EAAkBG,QACG,qBAAZxja,SACPqja,EAAkB,IAAIrja,SAWxBuzF,EAAQ4wU,UATR,SAAmB59c,GACjB,MAAuB,qBAAZy5C,UAIJqja,EAAkBG,QACrBH,EAAkB98c,GAClBA,aAAiBy5C,QACtB,EAMDsja,EAAkBE,QACG,qBAAZ53H,SACP03H,EAAkB,IAAI13H,SAKxBr4M,EAAQ6wU,UAHR,SAAmB79c,GACjB,OAAO+8c,EAAkB/8c,EAC1B,EAMDg9c,EAAsBC,QACG,qBAAhBx4W,aACPu4W,EAAsB,IAAIv4W,aAW5BuoC,EAAQ4qG,cAAgBA,EAKxBslO,EAAmBD,QACM,qBAAhBx4W,aACa,qBAAbE,UACPu4W,EAAmB,IAAIv4W,SAAS,IAAIF,YAAY,GAAI,EAAG,IAWzDuoC,EAAQmwU,WAAaA,EAGrB,IAAIW,EAAqD,qBAAtB9xL,kBAAoCA,uBAAoBthR,EAC3F,SAASqzc,EAA4B/9c,GACnC,MAAiC,+BAA1Bq8c,EAAer8c,EACvB,CACD,SAASg+c,EAAoBh+c,GAC3B,MAAqC,qBAA1B89c,IAIwC,qBAAxCC,EAA4Bd,UACrCc,EAA4Bd,QAAUc,EAA4B,IAAID,IAGjEC,EAA4Bd,QAC/Bc,EAA4B/9c,GAC5BA,aAAiB89c,EACtB,CA4BD,SAASj3O,EAAe7mO,GACtB,OAAO08c,EAAoB18c,EAAOs8c,EACnC,CAGD,SAASx1O,EAAe9mO,GACtB,OAAO08c,EAAoB18c,EAAO02T,EACnC,CAGD,SAAS3vF,EAAgB/mO,GACvB,OAAO08c,EAAoB18c,EAAOu8c,EACnC,CAGD,SAASv1O,EAAehnO,GACtB,OAAOm8c,GAAmBO,EAAoB18c,EAAOw8c,EACtD,CAGD,SAASv1O,EAAejnO,GACtB,OAAOo8c,GAAmBM,EAAoB18c,EAAOy8c,EACtD,CAjDDzvU,EAAQgxU,oBAAsBA,EAK9BhxU,EAAQixU,gBAHR,SAAyBj+c,GACvB,MAAiC,2BAA1Bq8c,EAAer8c,EACvB,EAMDgtI,EAAQkxU,cAHR,SAAuBl+c,GACrB,MAAiC,0BAA1Bq8c,EAAer8c,EACvB,EAMDgtI,EAAQmxU,cAHR,SAAuBn+c,GACrB,MAAiC,0BAA1Bq8c,EAAer8c,EACvB,EAMDgtI,EAAQoxU,kBAHR,SAA2Bp+c,GACzB,MAAiC,uBAA1Bq8c,EAAer8c,EACvB,EAMDgtI,EAAQqxU,4BAHR,SAAqCr+c,GACnC,MAAiC,gCAA1Bq8c,EAAer8c,EACvB,EAMDgtI,EAAQ65F,eAAiBA,EAKzB75F,EAAQ85F,eAAiBA,EAKzB95F,EAAQ+5F,gBAAkBA,EAK1B/5F,EAAQg6F,eAAiBA,EAKzBh6F,EAAQi6F,eAAiBA,EAWzBj6F,EAAQ45F,iBATR,SAA0B5mO,GACxB,OACE6mO,EAAe7mO,IACf8mO,EAAe9mO,IACf+mO,EAAgB/mO,IAChBgnO,EAAehnO,IACfinO,EAAejnO,EAElB,EASDgtI,EAAQs5F,iBANR,SAA0BtmO,GACxB,MAA6B,qBAAf6S,aACZ+kO,EAAc53O,IACdg+c,EAAoBh+c,GAEvB,EAGD,CAAC,UAAW,aAAc,2BAA2B0D,SAAQ,SAAS22F,GACpE93F,OAAOC,eAAewqI,EAAS3yC,EAAQ,CACrC53F,YAAY,EACZzC,MAAO,WACL,MAAM,IAAIgT,MAAMqnF,EAAS,gCAC1B,GAEJ,yCCxTG12F,EAA4BpB,OAAOoB,2BACrC,SAAmCtB,GAGjC,IAFA,IAAIU,EAAOR,OAAOQ,KAAKV,GACnByzO,EAAc,CAAC,EACV72O,EAAI,EAAGA,EAAI8D,EAAK9C,OAAQhB,IAC/B62O,EAAY/yO,EAAK9D,IAAMsD,OAAOa,yBAAyBf,EAAKU,EAAK9D,IAEnE,OAAO62O,CACR,EAECyoI,EAAe,WACnBvxO,EAAQ5rH,OAAS,SAASvH,GACxB,IAAK2+N,EAAS3+N,GAAI,CAEhB,IADA,IAAImuC,EAAU,GACL/oD,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IACpC+oD,EAAQjoD,KAAKmoK,EAAQ1kK,UAAUvE,KAEjC,OAAO+oD,EAAQkb,KAAK,IACrB,CAEGjkE,EAAI,EAmBR,IAnBA,IACIwL,EAAOjH,UACPmmB,EAAMlf,EAAKxK,OACXgzK,EAAMnkI,OAAOj1B,GAAGmqD,QAAQu6S,GAAc,SAASl6W,GACjD,GAAU,OAANA,EAAY,MAAO,IACvB,GAAIpF,GAAK0qB,EAAK,OAAOtlB,EACrB,OAAQA,GACN,IAAK,KAAM,OAAOyqC,OAAOrkC,EAAKxL,MAC9B,IAAK,KAAM,OAAOgF,OAAOwG,EAAKxL,MAC9B,IAAK,KACH,IACE,OAAOojB,KAAKE,UAAU9X,EAAKxL,KAG5B,CAFC,MAAO6tJ,GACP,MAAO,YACR,CACH,QACE,OAAOzoJ,EAEZ,IACQA,EAAIoG,EAAKxL,GAAIA,EAAI0qB,EAAKtlB,EAAIoG,IAAOxL,GACpCytS,EAAOroS,KAAO8zO,EAAS9zO,GACzB4uK,GAAO,IAAM5uK,EAEb4uK,GAAO,IAAM/K,EAAQ7jK,GAGzB,OAAO4uK,CACR,EAMDjmC,EAAQq0I,UAAY,SAAS92Q,EAAIulI,GAC/B,GAAuB,qBAAZgB,IAAqD,IAA1BA,EAAQ0tO,cAC5C,OAAOj0W,EAIT,GAAuB,qBAAZumI,EACT,OAAO,WACL,OAAO9D,EAAQq0I,UAAU92Q,EAAIulI,GAAKzsI,MAAMhC,KAAMmC,UAC/C,EAGH,IAAI06N,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAIptF,EAAQ2tO,iBACV,MAAM,IAAIzrW,MAAM88H,GACPgB,EAAQ4tO,iBACjB5oW,QAAQ6Q,MAAMmpH,GAEdh6H,QAAQ1L,MAAM0lI,GAEhBouF,GAAS,CACV,CACD,OAAO3zN,EAAGlH,MAAMhC,KAAMmC,UACvB,CAGF,EAGD,IAAIo7W,EAAS,CAAC,EACV0/F,EAAgB,KAEpB,GAAIxtU,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,WAAY,CAC1B,IAAIy+F,EAAWztU,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYgvO,WAC3By+F,EAAWA,EAASv6Y,QAAQ,qBAAsB,QAC/CA,QAAQ,MAAO,MACfA,QAAQ,KAAM,OACdjB,cACHu7Y,EAAgB,IAAIpnW,OAAO,IAAMqnW,EAAW,IAAK,IAClD,CA0BD,SAASr2S,EAAQ7lK,EAAK28K,GAEpB,IAAIo2C,EAAM,CACRssH,KAAM,GACNm9B,QAASC,GAkBX,OAfIt7W,UAAUvD,QAAU,IAAGm1N,EAAI3wM,MAAQjhB,UAAU,IAC7CA,UAAUvD,QAAU,IAAGm1N,EAAIu8E,OAASnuS,UAAU,IAC9CipS,EAAUztH,GAEZo2C,EAAIuN,WAAa3jD,EACRA,GAEThyC,EAAQ+xO,QAAQ3pJ,EAAKp2C,GAGnBwzD,EAAYpd,EAAIuN,cAAavN,EAAIuN,YAAa,GAC9C6P,EAAYpd,EAAI3wM,SAAQ2wM,EAAI3wM,MAAQ,GACpC+tN,EAAYpd,EAAIu8E,UAASv8E,EAAIu8E,QAAS,GACtCn/D,EAAYpd,EAAIqN,iBAAgBrN,EAAIqN,eAAgB,GACpDrN,EAAIu8E,SAAQv8E,EAAIypJ,QAAUG,GACvBC,EAAY7pJ,EAAK/yN,EAAK+yN,EAAI3wM,MAClC,CAmCD,SAASu6V,EAAiB/rM,EAAKisM,GAC7B,IAAIr9W,EAAQqmK,EAAQzjK,OAAOy6W,GAE3B,OAAIr9W,EACK,QAAYqmK,EAAQypI,OAAO9vS,GAAO,GAAK,IAAMoxK,EAC7C,QAAY/K,EAAQypI,OAAO9vS,GAAO,GAAK,IAEvCoxK,CAEV,CAGD,SAAS6rM,EAAe7rM,EAAKisM,GAC3B,OAAOjsM,CACR,CAcD,SAASgsM,EAAY7pJ,EAAKp1N,EAAO8kO,GAG/B,GAAI1P,EAAIqN,eACJziO,GACA06O,EAAW16O,EAAMkoK,UAEjBloK,EAAMkoK,UAAYl7B,EAAQk7B,WAExBloK,EAAMiM,aAAejM,EAAMiM,YAAYV,YAAcvL,GAAQ,CACjE,IAAIqqN,EAAMrqN,EAAMkoK,QAAQ48D,EAAc1P,GAItC,OAHKojB,EAASnuB,KACZA,EAAM40J,EAAY7pJ,EAAK/K,EAAKya,IAEvBza,CACR,CAGD,IAAIv0F,EA+FN,SAAyBs/F,EAAKp1N,GAC5B,GAAIwyO,EAAYxyO,GACd,OAAOo1N,EAAIypJ,QAAQ,YAAa,aAClC,GAAIrmI,EAASx4O,GAAQ,CACnB,IAAIm/W,EAAS,IAAO98V,KAAKE,UAAUviB,GAAOgkE,QAAQ,SAAU,IAClBA,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAAO,IACjE,OAAOoxJ,EAAIypJ,QAAQM,EAAQ,SAC5B,CACD,GAAI70L,EAAStqL,GACX,OAAOo1N,EAAIypJ,QAAQ,GAAK7+W,EAAO,UACjC,GAAIysS,EAAUzsS,GACZ,OAAOo1N,EAAIypJ,QAAQ,GAAK7+W,EAAO,WAEjC,GAAI0sS,EAAO1sS,GACT,OAAOo1N,EAAIypJ,QAAQ,OAAQ,OAC9B,CA/GiBO,CAAgBhqJ,EAAKp1N,GACrC,GAAI81H,EACF,OAAOA,EAIT,IAAI/yH,EAAOR,OAAOQ,KAAK/C,GACnBq/W,EApCN,SAAqBtuW,GACnB,IAAIy/D,EAAO,CAAC,EAMZ,OAJAz/D,EAAMrN,SAAQ,SAASs7J,EAAKmlM,GAC1B3zR,EAAKwuF,IAAO,CACb,IAEMxuF,CACR,CA4BmB8uS,CAAYv8W,GAQ9B,GANIqyN,EAAIuN,aACN5/N,EAAOR,OAAOm4N,oBAAoB16N,IAKhCmjN,EAAQnjN,KACJ+C,EAAKoB,QAAQ,YAAc,GAAKpB,EAAKoB,QAAQ,gBAAkB,GACrE,OAAOo7W,EAAYv/W,GAIrB,GAAoB,IAAhB+C,EAAK9C,OAAc,CACrB,GAAIy6O,EAAW16O,GAAQ,CACrB,IAAI2b,EAAO3b,EAAM2b,KAAO,KAAO3b,EAAM2b,KAAO,GAC5C,OAAOy5M,EAAIypJ,QAAQ,YAAcljW,EAAO,IAAK,UAC9C,CACD,GAAIiiN,EAAS59N,GACX,OAAOo1N,EAAIypJ,QAAQ3nQ,OAAO3rG,UAAUI,SAAS/L,KAAKI,GAAQ,UAE5D,GAAIwmO,EAAOxmO,GACT,OAAOo1N,EAAIypJ,QAAQh5W,KAAK0F,UAAUI,SAAS/L,KAAKI,GAAQ,QAE1D,GAAImjN,EAAQnjN,GACV,OAAOu/W,EAAYv/W,EAEtB,CAED,IA2CIqgB,EA3CA+qJ,EAAO,GAAIr6J,GAAQ,EAAOyuW,EAAS,CAAC,IAAK,MAGzCrgX,EAAQa,KACV+Q,GAAQ,EACRyuW,EAAS,CAAC,IAAK,MAIb9kI,EAAW16O,MAEborK,EAAO,cADCprK,EAAM2b,KAAO,KAAO3b,EAAM2b,KAAO,IACf,KAkB5B,OAdIiiN,EAAS59N,KACXorK,EAAO,IAAMl0D,OAAO3rG,UAAUI,SAAS/L,KAAKI,IAI1CwmO,EAAOxmO,KACTorK,EAAO,IAAMvlK,KAAK0F,UAAU6/N,YAAYxrO,KAAKI,IAI3CmjN,EAAQnjN,KACVorK,EAAO,IAAMm0M,EAAYv/W,IAGP,IAAhB+C,EAAK9C,QAAkB8Q,GAAyB,GAAhB/Q,EAAMC,OAItC6kO,EAAe,EACblH,EAAS59N,GACJo1N,EAAIypJ,QAAQ3nQ,OAAO3rG,UAAUI,SAAS/L,KAAKI,GAAQ,UAEnDo1N,EAAIypJ,QAAQ,WAAY,YAInCzpJ,EAAIssH,KAAK3hV,KAAKC,GAIZqgB,EADEtP,EAsCN,SAAqBqkN,EAAKp1N,EAAO8kO,EAAcu6I,EAAat8W,GAE1D,IADA,IAAIsd,EAAS,GACJphB,EAAI,EAAGgS,EAAIjR,EAAMC,OAAQhB,EAAIgS,IAAKhS,EACrCmwK,EAAepvK,EAAO8uC,OAAO7vC,IAC/BohB,EAAOtgB,KAAK0/W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EACjDvwU,OAAO7vC,IAAI,IAEfohB,EAAOtgB,KAAK,IAShB,OANAgD,EAAKW,SAAQ,SAASpB,GACfA,EAAIyB,MAAM,UACbsc,EAAOtgB,KAAK0/W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EACjD/8W,GAAK,GAEZ,IACM+d,CACR,CAtDYq/V,CAAYtqJ,EAAKp1N,EAAO8kO,EAAcu6I,EAAat8W,GAEnDA,EAAKkE,KAAI,SAAS3E,GACzB,OAAOm9W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EAAa/8W,EAAKyO,EACnE,IAGHqkN,EAAIssH,KAAKjzQ,MA6GX,SAA8BpuD,EAAQ+qJ,EAAMo0M,GAQ1C,GANan/V,EAAO2jI,QAAO,SAASuhE,EAAMye,GAGxC,OADIA,EAAI7/N,QAAQ,OAAS,GAAGw7W,EACrBp6J,EAAOye,EAAIhgK,QAAQ,kBAAmB,IAAI/jE,OAAS,CAC3D,GAAE,GAEU,GACX,OAAOu/W,EAAO,IACG,KAATp0M,EAAc,GAAKA,EAAO,OAC3B,IACA/qJ,EAAO6iD,KAAK,SACZ,IACAs8S,EAAO,GAGhB,OAAOA,EAAO,GAAKp0M,EAAO,IAAM/qJ,EAAO6iD,KAAK,MAAQ,IAAMs8S,EAAO,EAClE,CA7HQI,CAAqBv/V,EAAQ+qJ,EAAMo0M,IAxBjCA,EAAO,GAAKp0M,EAAOo0M,EAAO,EAyBpC,CAsBD,SAASD,EAAYv/W,GACnB,MAAO,IAAMgT,MAAMzH,UAAUI,SAAS/L,KAAKI,GAAS,GACrD,CAuBD,SAASy/W,EAAerqJ,EAAKp1N,EAAO8kO,EAAcu6I,EAAa/8W,EAAKyO,GAClE,IAAI4K,EAAMs3J,EAAKknE,EAsCf,IArCAA,EAAO53O,OAAOa,yBAAyBpD,EAAOsC,IAAQ,CAAEtC,MAAOA,EAAMsC,KAC5DuJ,IAELonK,EADEknE,EAAKruO,IACDspN,EAAIypJ,QAAQ,kBAAmB,WAE/BzpJ,EAAIypJ,QAAQ,WAAY,WAG5B1kI,EAAKruO,MACPmnK,EAAMmiD,EAAIypJ,QAAQ,WAAY,YAG7BzvM,EAAeiwM,EAAa/8W,KAC/BqZ,EAAO,IAAMrZ,EAAM,KAEhB2wK,IACCmiD,EAAIssH,KAAKv9U,QAAQg2O,EAAKn6O,OAAS,GAE/BizK,EADEy5H,EAAO5nE,GACHm6I,EAAY7pJ,EAAK+kB,EAAKn6O,MAAO,MAE7Bi/W,EAAY7pJ,EAAK+kB,EAAKn6O,MAAO8kO,EAAe,IAE5C3gO,QAAQ,OAAS,IAErB8uK,EADEliK,EACIkiK,EAAIjwG,MAAM,MAAM/7D,KAAI,SAASsvC,GACjC,MAAO,KAAOA,CACf,IAAE2sB,KAAK,MAAM8yG,OAAO,GAEf,KAAO/C,EAAIjwG,MAAM,MAAM/7D,KAAI,SAASsvC,GACxC,MAAO,MAAQA,CAChB,IAAE2sB,KAAK,OAIZ+vG,EAAMmiD,EAAIypJ,QAAQ,aAAc,YAGhCrsI,EAAY72N,GAAO,CACrB,GAAI5K,GAASzO,EAAIyB,MAAM,SACrB,OAAOkvK,GAETt3J,EAAO0G,KAAKE,UAAU,GAAKjgB,IAClByB,MAAM,iCACb4X,EAAOA,EAAKq6J,OAAO,EAAGr6J,EAAK1b,OAAS,GACpC0b,EAAOy5M,EAAIypJ,QAAQljW,EAAM,UAEzBA,EAAOA,EAAKqoD,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAChBA,QAAQ,WAAY,KAChCroD,EAAOy5M,EAAIypJ,QAAQljW,EAAM,UAE5B,CAED,OAAOA,EAAO,KAAOs3J,CACtB,CA4BD,SAAS9zK,EAAQ0gX,GACf,OAAO3gX,MAAMC,QAAQ0gX,EACtB,CAGD,SAASpzE,EAAUviS,GACjB,MAAsB,mBAARA,CACf,CAGD,SAASwiS,EAAOxiS,GACd,OAAe,OAARA,CACR,CAQD,SAASogL,EAASpgL,GAChB,MAAsB,kBAARA,CACf,CAGD,SAASsuO,EAAStuO,GAChB,MAAsB,kBAARA,CACf,CAQD,SAASsoO,EAAYtoO,GACnB,YAAe,IAARA,CACR,CAGD,SAAS0zN,EAASnW,GAChB,OAAO0wB,EAAS1wB,IAA8B,oBAAvB4e,EAAe5e,EACvC,CAID,SAAS0wB,EAASjuO,GAChB,MAAsB,kBAARA,GAA4B,OAARA,CACnC,CAGD,SAASs8N,EAAO5sN,GACd,OAAOu+N,EAASv+N,IAA4B,kBAAtBysN,EAAezsN,EACtC,CAID,SAASupM,EAAQ96M,GACf,OAAO8vO,EAAS9vO,KACW,mBAAtBg+N,EAAeh+N,IAA2BA,aAAa2K,MAC7D,CAID,SAAS0nO,EAAWxwO,GAClB,MAAsB,oBAARA,CACf,CAeD,SAASm8N,EAAex6H,GACtB,OAAOtpG,OAAOgJ,UAAUI,SAAS/L,KAAKisG,EACvC,CAGD,SAASuuE,EAAIroK,GACX,OAAOA,EAAI,GAAK,IAAMA,EAAEpG,SAAS,IAAMoG,EAAEpG,SAAS,GACnD,CAxbDqhI,EAAQ6tI,SAAW,SAAS/uQ,GAE1B,GADAA,EAAMA,EAAIi3D,eACL67S,EAAO9yW,GACV,GAAIwyc,EAAcx/b,KAAKhT,GAAM,CAC3B,IAAIi0W,EAAMjvO,EAAQivO,IAClBnB,EAAO9yW,GAAO,WACZ,IAAIgkI,EAAM9C,EAAQ5rH,OAAO/d,MAAM2pI,EAASxpI,WACxCsS,QAAQ1L,MAAM,YAAa0B,EAAKi0W,EAAKjwO,EACtC,CACF,MACC8uO,EAAO9yW,GAAO,WAAa,EAG/B,OAAO8yW,EAAO9yW,EACf,EAmCDkhI,EAAQk7B,QAAUA,EAIlBA,EAAQypI,OAAS,CACf,KAAS,CAAC,EAAG,IACb,OAAW,CAAC,EAAG,IACf,UAAc,CAAC,EAAG,IAClB,QAAY,CAAC,EAAG,IAChB,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,QAAY,CAAC,GAAI,IACjB,IAAQ,CAAC,GAAI,IACb,OAAW,CAAC,GAAI,KAIlBzpI,EAAQzjK,OAAS,CACf,QAAW,OACX,OAAU,SACV,QAAW,SACX,UAAa,OACb,KAAQ,OACR,OAAU,QACV,KAAQ,UAER,OAAU,OA+QZuoI,EAAQiP,MAAQ,EAAhBjP,OAKAA,EAAQ7tI,QAAUA,EAKlB6tI,EAAQy/J,UAAYA,EAKpBz/J,EAAQ0/J,OAASA,EAKjB1/J,EAAQ2/J,kBAHR,SAA2BziS,GACzB,OAAc,MAAPA,CACR,EAMD8iI,EAAQs9C,SAAWA,EAKnBt9C,EAAQwrG,SAAWA,EAKnBxrG,EAAQ4/J,SAHR,SAAkB1iS,GAChB,MAAsB,kBAARA,CACf,EAMD8iI,EAAQwlG,YAAcA,EAKtBxlG,EAAQ4wF,SAAWA,EACnB5wF,EAAQiP,MAAM2hF,SAAWA,EAKzB5wF,EAAQmrG,SAAWA,EAKnBnrG,EAAQw5F,OAASA,EACjBx5F,EAAQiP,MAAMuqF,OAASA,EAMvBx5F,EAAQm2E,QAAUA,EAClBn2E,EAAQiP,MAAM0qF,cAAgBxjB,EAK9Bn2E,EAAQ0tG,WAAaA,EAUrB1tG,EAAQu/H,YARR,SAAqBriQ,GACnB,OAAe,OAARA,GACe,mBAARA,GACQ,kBAARA,GACQ,kBAARA,GACQ,kBAARA,GACQ,qBAARA,CACf,EAGD8iI,EAAQm3D,SAAW,EAAnBn3D,MAYA,IAAIgzO,EAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACxD,MAAO,MAAO,OAG5B,SAAS/lL,IACP,IAAIrgL,EAAI,IAAI/T,KACRE,EAAO,CAACq0K,EAAIxgK,EAAEqmW,YACN7lM,EAAIxgK,EAAEsmW,cACN9lM,EAAIxgK,EAAEumW,eAAej9S,KAAK,KACtC,MAAO,CAACtpD,EAAEg0N,UAAWoyI,EAAOpmW,EAAEwmW,YAAar6W,GAAMm9D,KAAK,IACvD,CAoCD,SAASksG,EAAe/sK,EAAKk9I,GAC3B,OAAOh9I,OAAOgJ,UAAU6jK,eAAexvK,KAAKyC,EAAKk9I,EAClD,CAlCDvS,EAAQz6H,IAAM,WACZuD,QAAQvD,IAAI,UAAW0nL,IAAajtD,EAAQ5rH,OAAO/d,MAAM2pI,EAASxpI,WACnE,EAgBDwpI,EAAQu4B,SAAW,EAAnBv4B,OAEAA,EAAQ+xO,QAAU,SAASrtV,EAAQtE,GAEjC,IAAKA,IAAQ+qN,EAAS/qN,GAAM,OAAOsE,EAInC,IAFA,IAAI3uB,EAAOR,OAAOQ,KAAKqqB,GACnBnuB,EAAI8D,EAAK9C,OACNhB,KACLyyB,EAAO3uB,EAAK9D,IAAMmuB,EAAIrqB,EAAK9D,IAE7B,OAAOyyB,CACR,EAMD,IAAI8sb,EAA6C,qBAAXn/c,OAAyBA,OAAO,8BAA2BqL,EA0DjG,SAAS+zc,EAAsB1yT,EAAQr/G,GAKrC,IAAKq/G,EAAQ,CACX,IAAIizG,EAAY,IAAIhsP,MAAM,2CAC1BgsP,EAAUjzG,OAASA,EACnBA,EAASizG,CACV,CACD,OAAOtyN,EAAGq/G,EACX,CAnED/e,EAAQy4H,UAAY,SAAmBnpI,GACrC,GAAwB,oBAAbA,EACT,MAAM,IAAIl8H,UAAU,oDAEtB,GAAIo+c,GAA4BliV,EAASkiV,GAA2B,CAClE,IAAIj0c,EACJ,GAAkB,oBADdA,EAAK+xH,EAASkiV,IAEhB,MAAM,IAAIp+c,UAAU,iEAKtB,OAHAmC,OAAOC,eAAe+H,EAAIi0c,EAA0B,CAClDx+c,MAAOuK,EAAI9H,YAAY,EAAOE,UAAU,EAAOD,cAAc,IAExD6H,CACR,CAED,SAASA,IAQP,IAPA,IAAIm0c,EAAgBC,EAChB1/U,EAAU,IAAI50H,SAAQ,SAAUP,EAASC,GAC3C20c,EAAiB50c,EACjB60c,EAAgB50c,CACjB,IAEGU,EAAO,GACFxL,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IACpCwL,EAAK1K,KAAKyD,UAAUvE,IAEtBwL,EAAK1K,MAAK,SAAUG,EAAKF,GACnBE,EACFy+c,EAAcz+c,GAEdw+c,EAAe1+c,EAElB,IAED,IACEs8H,EAASj5H,MAAMhC,KAAMoJ,EAGtB,CAFC,MAAOvK,GACPy+c,EAAcz+c,EACf,CAED,OAAO++H,CACR,CAOD,OALA18H,OAAO+I,eAAef,EAAIhI,OAAOyJ,eAAeswH,IAE5CkiV,GAA0Bj8c,OAAOC,eAAe+H,EAAIi0c,EAA0B,CAChFx+c,MAAOuK,EAAI9H,YAAY,EAAOE,UAAU,EAAOD,cAAc,IAExDH,OAAOqB,iBACZ2G,EACA5G,EAA0B24H,GAE7B,EAED0Q,EAAQy4H,UAAU58E,OAAS21R,EAiD3BxxU,EAAQ4xU,YAlCR,SAAqBtiV,GACnB,GAAwB,oBAAbA,EACT,MAAM,IAAIl8H,UAAU,oDAMtB,SAASy+c,IAEP,IADA,IAAIp0c,EAAO,GACFxL,EAAI,EAAGA,EAAIuE,UAAUvD,OAAQhB,IACpCwL,EAAK1K,KAAKyD,UAAUvE,IAGtB,IAAI6/c,EAAUr0c,EAAKgkE,MACnB,GAAuB,oBAAZqwY,EACT,MAAM,IAAI1+c,UAAU,8CAEtB,IAAIoK,EAAOnJ,KACPqrC,EAAK,WACP,OAAOoya,EAAQz7c,MAAMmH,EAAMhH,UAC5B,EAGD84H,EAASj5H,MAAMhC,KAAMoJ,GAClBH,MAAK,SAAS+/M,GAAOv5E,EAAQyuE,SAAS7yK,EAAGxhC,KAAK,KAAM,KAAMm/M,GAAO,IAC5D,SAASzrB,GAAO9tD,EAAQyuE,SAASk/P,EAAsBvzc,KAAK,KAAM0zL,EAAKlyJ,GAAM,GACtF,CAKD,OAHAnqC,OAAO+I,eAAeuzc,EAAet8c,OAAOyJ,eAAeswH,IAC3D/5H,OAAOqB,iBAAiBi7c,EACAl7c,EAA0B24H,IAC3CuiV,CACR,qBCpsBD,IADA,IAAIE,EAAY,GACP9/c,EAAI,EAAGA,EAAI,MAAOA,EACzB8/c,EAAU9/c,IAAMA,EAAI,KAAO0M,SAAS,IAAIqqK,OAAO,GAmBjDxR,EAAOx3B,QAhBP,SAAqBwhC,EAAKxtK,GACxB,IAAI/B,EAAI+B,GAAU,EACdg+c,EAAMD,EAEV,MAAQ,CACNC,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,MACvB+/c,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,MAAO,IAC9B+/c,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,MAAO,IAC9B+/c,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,MAAO,IAC9B+/c,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,MAAO,IAC9B+/c,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,MACvB+/c,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,MACvB+/c,EAAIxwS,EAAIvvK,MAAO+/c,EAAIxwS,EAAIvvK,OACtBikE,KAAK,GACT,qBChBD,IAAIwrM,EAAqC,oBAAX/jC,QAA0BA,OAAO+jC,iBAAmB/jC,OAAO+jC,gBAAgBxjQ,KAAKy/N,SACnE,oBAAbgkC,UAAsE,mBAAnCzqQ,OAAOyqQ,SAASD,iBAAiCC,SAASD,gBAAgBxjQ,KAAKyjQ,UAEhJ,GAAID,EAAiB,CAEnB,IAAIuwM,EAAQ,IAAIpsc,WAAW,IAE3B2xJ,EAAOx3B,QAAU,WAEf,OADA0hI,EAAgBuwM,GACTA,CACR,CACF,KAAM,CAKL,IAAIC,EAAO,IAAIhgd,MAAM,IAErBslK,EAAOx3B,QAAU,WACf,IAAK,IAAWtyH,EAAPzb,EAAI,EAAMA,EAAI,GAAIA,IACN,KAAV,EAAJA,KAAiByb,EAAoB,WAAhBlT,KAAKS,UAC/Bi3c,EAAKjgd,GAAKyb,MAAY,EAAJzb,IAAa,GAAK,IAGtC,OAAOigd,CACR,CACF,yBCjCD,IAAI9vK,EAAM30H,EAAQ,OACd0kS,EAAc1kS,EAAQ,OA2B1BjW,EAAOx3B,QAzBP,SAAY7rI,EAASqtK,EAAKxtK,GACxB,IAAI/B,EAAIuvK,GAAOxtK,GAAU,EAEF,iBAAZG,IACTqtK,EAAkB,WAAZrtK,EAAuB,IAAIjC,MAAM,IAAM,KAC7CiC,EAAU,MAIZ,IAAI+9c,GAFJ/9c,EAAUA,GAAW,CAAC,GAEH8G,SAAW9G,EAAQiuS,KAAOA,KAO7C,GAJA8vK,EAAK,GAAgB,GAAVA,EAAK,GAAa,GAC7BA,EAAK,GAAgB,GAAVA,EAAK,GAAa,IAGzB1wS,EACF,IAAK,IAAIylO,EAAK,EAAGA,EAAK,KAAMA,EAC1BzlO,EAAIvvK,EAAIg1Y,GAAMirE,EAAKjrE,GAIvB,OAAOzlO,GAAO2wS,EAAYD,EAC3B,yBCtBD,IAAIE,EAAiB3kS,EAAQ,OACzBimK,EAAWjmK,EAAQ,OAEnB0nL,EAAiB1nL,EAAQ,OACzB4kS,EAAc5kS,EAAAA,OAAAA,GACd2mK,EAAU+gB,EAAe/gB,QAyC7B,SAASk+H,EAA0B70c,GAElC,IAAI+6W,EAAMrkX,EAASo+c,EAA4BnpY,EAU/C,GARAgpY,EAAev8c,OAAO4H,EAAM,QAC5B20c,EAAe1iP,KAAKjyN,EAAK01N,OAAQ,eACjCi/O,EAAeruc,MAAMtG,EAAK+6W,KAAM,aAMZ,KALpBA,EAAO/6W,EAAK+6W,MAKHvlX,OACRkB,EAAU,CAAC,EACXo+c,EAAe,QACT,GAAIF,EAAY75F,EAAK,IAC3BrkX,EAAU,CAAE,MAASqkX,EAAK,IAC1B+5F,EAAe/5F,EAAKx0W,MAAM,QACpB,GAAyB,kBAAbw0W,EAAK,GAAkB,CAEzC,IAAKpvS,KADLj1E,EAAU,CAAC,EACDqkX,EAAK,GACdrkX,EAAQi1E,GAAKovS,EAAK,GAAGpvS,GAEtBmpY,EAAe/5F,EAAKx0W,MAAM,EAC1B,MACAouc,EAAe7hc,OAAOioW,EAAK,GACvB,8FAEJrkX,EAAU,CAAC,EACXo+c,EAAe/5F,EA2ChB,OAdA45F,EAAev8c,OAAO1B,GACjBA,EAAQg/N,QAAW11N,EAAK01N,SAC5Bo/O,EAAeA,EAAat4c,KAAI,SAAUkE,GACzC,OAAc,OAANA,EAAa,YACXT,IAANS,EAAkB,YAAcA,CACpC,KASM,CACJ,QAAWhK,EACX,aARwB,IAAxBo+c,EAAat/c,OACD,GAEAmhV,EAAQ/9U,MAAM,KAAMk8c,GAOpC,CAKD,SAAS/5G,IAER,IAAI/6V,EAAMpI,EAAK+0J,EAAQoiG,EAAO17F,EAAMplE,EAAStiB,EAS7C,GAPA3rE,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAW,KAOvCnC,gBAAgBmkW,GAGrB,OAFAnjW,EAAME,OAAO2J,OAAOs5V,EAAOj6V,WAC3Bi6V,EAAOniW,MAAMhB,EAAKmB,WACVnB,EAkDT,IA3CA+0J,EAASkoT,EAA0B,CAC/B,KAAQ70c,EACR,QAAU,KAMHtJ,QAAQwa,OAClByjc,EAAe7hc,OAAO65I,EAAOj2J,QAAQwa,KACjC,oCACJta,KAAKsa,KAAOy7I,EAAOj2J,QAAQwa,MAQ5Bta,KAAKm+c,aAAepoT,EAAOqoT,aAC3B/mX,EAAU0+D,EAAOqoT,cAMjBjmN,EAAQpiG,EAAOj2J,QAAQq4P,SAEtB4lN,EAAex8Q,GAAGy8Q,EAAY7lN,GAAQ,yBACtCn4P,KAAKq+c,UAAYlmN,EAEZpiG,EAAOj2J,QAAQw+c,mBACnBjnX,GAAW,KAAO8gK,EAAM9gK,UAU1Br3F,KAAKu+c,SAAW,CAAC,EACbxoT,EAAOj2J,QAAQgJ,KAClB,IAAKisE,KAAKghF,EAAOj2J,QAAQgJ,KACxB9I,KAAKu+c,SAASxpY,GAAKghF,EAAOj2J,QAAQgJ,KAAKisE,GAYzC,OARA/0E,KAAKq3F,QAAUA,EACf1lF,MAAMpT,KAAKyB,KAAMq3F,GAEb1lF,MAAM2yM,oBACT7nD,EAAO1G,EAAOj2J,QAAQ0+c,gBAAkBx+c,KAAK4K,YAC7C+G,MAAM2yM,kBAAkBtkN,KAAMy8J,IAGvBz8J,IACR,CAsID,SAASy+c,IAER,IAAIr1c,EAAMpI,EAAK+0J,EAAQj2J,EAGvB,OADAsJ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAW,GACvCnC,gBAAgBy+c,GAWtB3+c,GALAi2J,EAASkoT,EAA0B,CAC/B,KAAQ70c,EACR,QAAU,KAGGtJ,QACjBqkW,EAAO5lW,KAAKyB,KAAMF,EAAS,KAAMi2J,EAAOqoT,cAEhCp+c,OAbPgB,EAAME,OAAO2J,OAAO4zc,EAAOv0c,WAC3Bu0c,EAAOz8c,MAAMhB,EAAKmB,WACVnB,EAYT,CAeD,SAAS09c,EAAWr9Y,GAEnB08Y,EAAeruc,MAAM2xD,EAAQ,kBAC7B08Y,EAAex8Q,GAAGlgI,EAAOziE,OAAS,EAAG,8BACrCoB,KAAK2+c,WAAat9Y,EAElB8iS,EAAO5lW,KAAKyB,KAAM,CACd,MAASqhE,EAAO,IACjB,sBAAuBA,EAAOziE,OAAyB,GAAjByiE,EAAOziE,OAAc,GAAK,IACnE,CAcD,SAASggd,IAER,IAAIx1c,EAAMpI,EAAK+0J,EAAQj2J,EAGvB,OADAsJ,EAAOvL,MAAMqM,UAAUyF,MAAMpR,KAAK4D,UAAW,GACvCnC,gBAAgB4+c,IAWtB9+c,GALAi2J,EAASkoT,EAA0B,CAC/B,KAAQ70c,EACR,QAAU,KAGGtJ,SACV,kBAAuB,EAC9BqkW,EAAO5lW,KAAKyB,KAAMF,EAAS,KAAMi2J,EAAOqoT,cAEhCp+c,OAdPgB,EAAME,OAAO2J,OAAO+zc,EAAO10c,WAC3B00c,EAAO58c,MAAMhB,EAAKoI,GACVpI,EAaT,CAvZDmiK,EAAOx3B,QAAUw4N,EAEjBA,EAAOA,OAASA,EAEhBA,EAAOs6G,OAASA,EAChBt6G,EAAOy6G,OAASA,EAChBz6G,EAAOu6G,WAAaA,EA8LpBr/H,EAASn7K,SAASigM,EAAQxyV,OAC1BwyV,EAAOj6V,UAAUoQ,KAAO,SAExB6pV,EAAOj6V,UAAUI,SAAW,WAE3B,IAAIsnK,EAAO5xK,KAAK+tK,eAAe,SAAW/tK,KAAKsa,MAC9Cta,KAAK4K,YAAY0P,MAAQta,KAAK4K,YAAYV,UAAUoQ,KAIrD,OAHIta,KAAKq3F,UACRu6E,GAAO,KAAO5xK,KAAKq3F,SAEZu6E,CACR,EAODuyL,EAAOj6V,UAAUiuP,MAAQ,WAExB,IAAIA,EAAQgsG,EAAOhsG,MAAMn4P,MACzB,OAAkB,OAAVm4P,OAAiB9uP,EAAY8uP,CACrC,EAWDgsG,EAAOhsG,MAAQ,SAAUt5P,GAGxB,OADAk/c,EAAex8Q,GAAGy8Q,EAAYn/c,GAAM,wBAC5Bm/c,EAAYn/c,EAAIw/c,WAAax/c,EAAIw/c,UAAY,IACrD,EAEDl6G,EAAOr7V,KAAO,SAAUjK,GAEvB,IAAI6iW,EAAIvpG,EAAOpjL,EAUf,GARAgpY,EAAex8Q,GAAGy8Q,EAAYn/c,GAAM,wBAGnC6iW,EADa,QADdvpG,EAAQgsG,EAAOhsG,MAAMt5P,IAEfslW,EAAOr7V,KAAKqvP,GAEZ,CAAC,EAGsB,iBAAjBt5P,EAAI0/c,UAA0C,OAAjB1/c,EAAI0/c,SAC5C,IAAKxpY,KAAKl2E,EAAI0/c,SACb78G,EAAG3sR,GAAKl2E,EAAI0/c,SAASxpY,GAIvB,OAAQ2sR,CACR,EAEDyC,EAAO06G,gBAAkB,SAAUhgd,EAAKyb,GAEvC,IAAI69O,EAMJ,IAJA4lN,EAAex8Q,GAAGy8Q,EAAYn/c,GAAM,wBACpCk/c,EAAe7hc,OAAO5B,EAAM,QAC5Byjc,EAAex8Q,GAAGjnL,EAAK1b,OAAS,EAAG,wBAE9Bu5P,EAAQt5P,EAAe,OAAVs5P,EAAgBA,EAAQgsG,EAAOhsG,MAAMA,GAEtD,GADA4lN,EAAex8Q,GAAGy8Q,EAAY7lN,IAC1BA,EAAM79O,MAAQA,EACjB,OAAQ69O,EAIV,OAAQ,IACR,EAEDgsG,EAAO26G,iBAAmB,SAAUjgd,EAAKyb,GAExC,OAA8C,OAAtC6pV,EAAO06G,gBAAgBhgd,EAAKyb,EACpC,EAED6pV,EAAO46G,UAAY,SAAUlgd,GAE5Bk/c,EAAex8Q,GAAGy8Q,EAAYn/c,GAAM,wBAEpC,IAAIs5P,EAAQgsG,EAAOhsG,MAAMt5P,GAEzB,OAAIs5P,EACKt5P,EAAIq8L,MAAQ,gBAAkBipK,EAAO46G,UAAU5mN,GAGhDt5P,EAAIq8L,KACZ,EAEDipK,EAAO66G,cAAgB,SAAU39Y,GAIhC,OAFA08Y,EAAer/B,cAAcr9W,EAAQ,UAEf,IAAlBA,EAAOziE,OACF,MAGTyiE,EAAOh/D,SAAQ,SAAU2E,GACxB+2c,EAAex8Q,GAAGy8Q,EAAYh3c,GAC9B,IAEoB,GAAjBq6D,EAAOziE,OACFyiE,EAAO,GAGR,IAAIq9Y,EAAWr9Y,GACvB,EAED8iS,EAAO86G,aAAe,SAAUpgd,EAAKu8H,GAEpC2iV,EAAex8Q,GAAGy8Q,EAAYn/c,GAAM,wBACpCk/c,EAAe3iV,KAAKA,EAAM,QAEtBv8H,aAAe6/c,EAClB7/c,EAAIwiE,SAASh/D,SAAQ,SAAmB2E,GAAKo0H,EAAKp0H,EAAK,IAEvDo0H,EAAKv8H,EAEN,EAiCDwgV,EAASn7K,SAASu6S,EAAQt6G,GAoB1B9kB,EAASn7K,SAASw6S,EAAYv6G,GAC9Bu6G,EAAWx0c,UAAUoQ,KAAO,aAE5Bokc,EAAWx0c,UAAUm3D,OAAS,WAE7B,OAAQrhE,KAAK2+c,WAAWhvc,MAAM,EAC9B,EA6BD0vU,EAASn7K,SAAS06S,EAAQz6G,GAC1By6G,EAAO10c,UAAUoQ,KAAO,SAExBskc,EAAO10c,UAAUI,SAAW,WAE3B,IAAIsnK,EAAO5xK,KAAK+tK,eAAe,SAAW/tK,KAAKsa,MAC9Cta,KAAK4K,YAAY0P,MAAQta,KAAK4K,YAAYV,UAAUoQ,KAMrD,OALIta,KAAKq3F,UACRu6E,GAAO,KAAO5xK,KAAKq3F,SAChBr3F,KAAKq+c,WAAar+c,KAAKq+c,UAAUhnX,UACpCu6E,GAAO,eAAiB5xK,KAAKq+c,UAAU/zc,YAEhCsnK,CACR,EAMDgtS,EAAO10c,UAAUiuP,MAAQ,SAAkBtkP,GAK1C,OAHImqc,EAAYnqc,KACf7T,KAAKq+c,UAAYxqc,GAEV7T,KAAKq+c,SACb,+CC1VD,SAASr5O,EAAex6H,GACtB,OAAOtpG,OAAOgJ,UAAUI,SAAS/L,KAAKisG,EACvC,CArBDmhC,EAAQ,GAHR,SAAiB3kI,GACf,MAA8B,mBAAtBg+N,EAAeh+N,IAA2BA,aAAa2K,KAChE,EAkBkBi7H,EAAOk2D,6CCpG1B,IAAIzgM,EAAU+2K,EAAQ,OAClBu5K,EAAuBv5K,EAAQ,OAC/Bi4K,EAAYj4K,EAAQ,OAEpBg4K,EAAYC,EAAU,6BACtBF,EAAiB/3K,EAAQ,KAARA,GAEjB3gK,EAA0B,qBAAfm6U,WAA6BzlP,EAAAA,EAASylP,WACjDC,EAAcF,IAEdG,EAASzB,EAAU,0BACnB0B,EAAY,CAAC,EACbjU,EAAO1lK,EAAQ,OACfzuK,EAAiBzJ,OAAOyJ,eACxBwmV,GAAkBrS,GAAQn0U,GAC7BtI,EAAQwwV,GAAa,SAAUG,GAC9B,GAA6B,oBAAlBv6U,EAAEu6U,GAA4B,CACxC,IAAIr1V,EAAM,IAAI8a,EAAEu6U,GAChB,GAAIh1V,OAAOgkQ,eAAerkQ,EAAK,CAC9B,IAAI+6P,EAAQ/tP,EAAehN,GACvBuiO,EAAa4+G,EAAKpmF,EAAO16P,OAAOgkQ,aACpC,IAAK9hC,EAAY,CAChB,IAAIgyE,EAAavnS,EAAe+tP,GAChCx4B,EAAa4+G,EAAK5sC,EAAYl0S,OAAOgkQ,YACrC,CACD+wF,EAAUC,GAAc9yH,EAAW11N,GACnC,CACD,CACD,IAGF,IAeIy4F,EAAem2E,EAAQ,OAE3BjW,EAAOx3B,QAAU,SAAyBhtI,GACzC,QAAKskG,EAAatkG,KACbwyV,GAAoBnzV,OAAOgkQ,eAAerjQ,EAnB3B,SAA2BA,GAC/C,IAAIugd,GAAY,EAWhB,OAVA78c,EAAQ0wV,GAAW,SAAUzpG,EAAQ0pG,GACpC,IAAKksH,EACJ,IACC,IAAI5kc,EAAOgvO,EAAO/qP,KAAKI,GACnB2b,IAAS04U,IACZksH,EAAY5kc,EAEA,CAAZ,MAAOtT,GAAK,CAEf,IACMk4c,CACP,CAOOhsH,CAAev0V,GAD0Cm0V,EAAO1B,EAAUzyV,GAAQ,GAAI,GAE7F,sCCpDD,IAAM46R,EAAYngH,EAAQ,OAE1BmgH,EAAU4lL,sBAAwB/lS,EAAQ,OAC1CmgH,EAAU6lL,OAAShmS,EAAQ,OAC3BmgH,EAAU8lL,SAAWjmS,EAAQ,OAC7BmgH,EAAU+lL,OAASlmS,EAAQ,OAE3BmgH,EAAUA,UAAYA,EACtBA,EAAUgmL,gBAAkBhmL,EAAU6lL,OAEtCj8S,EAAOx3B,QAAU4tJ,4DCVTimL,EAAiBpmS,EAAQ,OAAzBomS,aAsCR,SAASC,EAAMr9c,EAAQo1B,EAAMxY,EAAQrf,EAAQf,GAC3C,IAAK,IAAIhB,EAAI,EAAGA,EAAIgB,EAAQhB,IAC1BohB,EAAOrf,EAAS/B,GAAKwE,EAAOxE,GAAK45B,EAAS,EAAJ55B,EAEzC,CASD,SAAS8hd,EAAQpna,EAAQ9gB,GACvB,IAAK,IAAI55B,EAAI,EAAGA,EAAI06C,EAAO15C,OAAQhB,IACjC06C,EAAO16C,IAAM45B,EAAS,EAAJ55B,EAErB,CAqDD,GATAulK,EAAOx3B,QAAU,CACfoR,OA1FF,SAAgBzuE,EAAMm+V,GACpB,GAAoB,IAAhBn+V,EAAK1vE,OAAc,OAAO4gd,EAC9B,GAAoB,IAAhBlxY,EAAK1vE,OAAc,OAAO0vE,EAAK,GAKnC,IAHA,IAAMpsE,EAAS0qI,EAAOigI,YAAY4/J,GAC9B9sa,EAAS,EAEJ/B,EAAI,EAAGA,EAAI0wE,EAAK1vE,OAAQhB,IAAK,CACpC,IAAMuvK,EAAM7+F,EAAK1wE,GACjBsE,EAAOuI,IAAI0iK,EAAKxtK,GAChBA,GAAUwtK,EAAIvuK,MACf,CAED,OAAIe,EAAS8sa,EAAoBvqa,EAAOyN,MAAM,EAAGhQ,GAE1CuC,CACR,EA2ECs1B,KAAMiob,EACNE,cAtCF,SAAuBxyS,GACrB,OAAIA,EAAI99D,aAAe89D,EAAI70H,OAAO+2D,WACzB89D,EAAI70H,OAGN60H,EAAI70H,OAAO3oC,MAAMw9J,EAAI35C,WAAY25C,EAAI35C,WAAa25C,EAAI99D,WAC9D,EAiCC8tC,SAvBF,SAASA,EAAS3+H,GAGhB,OAFA2+H,EAASyiU,UAAW,EAEhBhzU,EAAOk2D,SAAStkL,GAAcA,GAI9BA,aAAgB4kF,YAClB+pE,EAAMvgC,EAAOvtH,KAAKb,GACT4kF,YAAYC,OAAO7kF,GAC5B2uJ,EAAMvgC,EAAOvtH,KAAKb,EAAK85B,OAAQ95B,EAAKg1G,WAAYh1G,EAAK6wF,aAErD89D,EAAMvgC,EAAOvtH,KAAKb,GAClB2+H,EAASyiU,UAAW,GAGfzyS,GAXP,IAAIA,CAYL,EAOC0yS,OAAQH,IAILjwU,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYqwU,kBACf,IACE,IAAMC,EAAa3mS,EAAQ,4GAE3BjW,EAAOx3B,QAAQn0G,KAAO,SAAUp1B,EAAQo1B,EAAMxY,EAAQrf,EAAQf,GACxDA,EAAS,GAAI6gd,EAAMr9c,EAAQo1B,EAAMxY,EAAQrf,EAAQf,GAChDmhd,EAAWvob,KAAKp1B,EAAQo1B,EAAMxY,EAAQrf,EAAQf,EACpD,EAEDukK,EAAOx3B,QAAQk0U,OAAS,SAAUvna,EAAQ9gB,GACpC8gB,EAAO15C,OAAS,GAAI8gd,EAAQpna,EAAQ9gB,GACnCuob,EAAWF,OAAOvna,EAAQ9gB,EAChC,CAGF,CAFC,MAAOxwB,GAER,4DC3HHm8J,EAAOx3B,QAAU,CACfq0U,aAAc,CAAC,aAAc,cAAe,aAC5CR,aAAc5yU,EAAOivD,MAAM,GAC3BokR,KAAM,uCACNC,qBAAsBlid,OAAO,0BAC7Bmid,UAAWnid,OAAO,aAClBoid,YAAapid,OAAO,eACpBqid,WAAYrid,OAAO,aACnBsid,KAAM,WAAQ,yICRhB,EAA4ClnS,EAAQ,OAA5C8mS,EAAR,EAAQA,qBAAsBC,EAA9B,EAA8BA,UAExBI,EAAQvid,OAAO,SACfwid,EAAQxid,OAAO,SACfolR,EAASplR,OAAO,UAChByid,EAAWzid,OAAO,YAClB0id,EAAU1id,OAAO,WACjB2id,EAAU3id,OAAO,WACjB4id,EAAQ5id,OAAO,SACf6id,EAAY7id,OAAO,aAKnBizP,EAAAA,WAOJ,WAAY5pP,GAAM,UAChBrH,KAAK2gd,GAAW,KAChB3gd,KAAK4gd,GAASv5c,CACf,+BAKD,WACE,OAAOrH,KAAK2gd,EACb,mBAKD,WACE,OAAO3gd,KAAK4gd,EACb,OAxBG3vN,GA2BN/vP,OAAOC,eAAe8vP,EAAM/mP,UAAW,SAAU,CAAE9I,YAAY,IAC/DF,OAAOC,eAAe8vP,EAAM/mP,UAAW,OAAQ,CAAE9I,YAAY,QAOvD0/c,EAAAA,SAAAA,qBAcJ,WAAYz5c,GAAoB,MAAdvH,EAAc,uDAAJ,CAAC,EAAG,kBAC9B,cAAMuH,IAEDk5c,QAA0Bl3c,IAAjBvJ,EAAQkqE,KAAqB,EAAIlqE,EAAQkqE,KACvD,EAAK02Y,QAA8Br3c,IAAnBvJ,EAAQ4qJ,OAAuB,GAAK5qJ,EAAQ4qJ,OAC5D,EAAKm2T,QAAkCx3c,IAArBvJ,EAAQihd,UAAiCjhd,EAAQihd,SALrC,CAM/B,6BAKD,WACE,OAAO/gd,KAAKugd,EACb,qBAKD,WACE,OAAOvgd,KAAK0gd,EACb,uBAKD,WACE,OAAO1gd,KAAK6gd,EACb,OAzCGC,CAAmB7vN,GA4CzB/vP,OAAOC,eAAe2/c,EAAW52c,UAAW,OAAQ,CAAE9I,YAAY,IAClEF,OAAOC,eAAe2/c,EAAW52c,UAAW,SAAU,CAAE9I,YAAY,IACpEF,OAAOC,eAAe2/c,EAAW52c,UAAW,WAAY,CAAE9I,YAAY,QAOhE4/c,EAAAA,SAAAA,qBAUJ,WAAY35c,GAAoB,MAAdvH,EAAc,uDAAJ,CAAC,EAAG,kBAC9B,cAAMuH,IAED+7Q,QAA4B/5Q,IAAlBvJ,EAAQiJ,MAAsB,KAAOjJ,EAAQiJ,MAC5D,EAAK03c,QAAgCp3c,IAApBvJ,EAAQu3F,QAAwB,GAAKv3F,EAAQu3F,QAJhC,CAK/B,8BAKD,WACE,OAAOr3F,KAAKojR,EACb,sBAKD,WACE,OAAOpjR,KAAKygd,EACb,OA7BGO,CAAmB/vN,GAgCzB/vP,OAAOC,eAAe6/c,EAAW92c,UAAW,QAAS,CAAE9I,YAAY,IACnEF,OAAOC,eAAe6/c,EAAW92c,UAAW,UAAW,CAAE9I,YAAY,QAO/D6/c,EAAAA,SAAAA,qBASJ,WAAY55c,GAAoB,MAAdvH,EAAc,uDAAJ,CAAC,EAAG,kBAC9B,cAAMuH,IAEDm5c,QAA0Bn3c,IAAjBvJ,EAAQ0e,KAAqB,KAAO1e,EAAQ0e,KAH5B,CAI/B,6BAKD,WACE,OAAOxe,KAAKwgd,EACb,OApBGS,CAAqBhwN,GAuB3B/vP,OAAOC,eAAe8/c,EAAa/2c,UAAW,OAAQ,CAAE9I,YAAY,IAQpE,IAAM8/c,EAAc,CAalBz5c,iBAbkB,SAaDJ,EAAM8H,GAAwB,IACzCgyc,EAD2Brhd,EAAc,uDAAJ,CAAC,EAG1C,GAAa,YAATuH,EACF85c,EAAU,SAAmB3ic,EAAMg0V,GACjC,IAAM/iW,EAAQ,IAAIwxc,EAAa,UAAW,CACxCzic,KAAMg0V,EAAWh0V,EAAOA,EAAKlU,aAG/BmF,EAAMkxc,GAAW3gd,KACjBmP,EAAS5Q,KAAKyB,KAAMyP,EACrB,OACI,GAAa,UAATpI,EACT85c,EAAU,SAAiBn3Y,EAAMqtB,GAC/B,IAAM5nF,EAAQ,IAAIqxc,EAAW,QAAS,CACpC92Y,KAAAA,EACA0gF,OAAQrzD,EAAQ/sF,WAChBy2c,SAAU/gd,KAAKohd,qBAAuBphd,KAAKqhd,kBAG7C5xc,EAAMkxc,GAAW3gd,KACjBmP,EAAS5Q,KAAKyB,KAAMyP,EACrB,OACI,GAAa,UAATpI,EACT85c,EAAU,SAAiBp4c,GACzB,IAAM0G,EAAQ,IAAIuxc,EAAW,QAAS,CACpCj4c,MAAAA,EACAsuF,QAAStuF,EAAMsuF,UAGjB5nF,EAAMkxc,GAAW3gd,KACjBmP,EAAS5Q,KAAKyB,KAAMyP,EACrB,MACI,IAAa,SAATpI,EAQT,OAPA85c,EAAU,WACR,IAAM1xc,EAAQ,IAAIwhP,EAAM,QAExBxhP,EAAMkxc,GAAW3gd,KACjBmP,EAAS5Q,KAAKyB,KAAMyP,EACrB,CAGF,CAED0xc,EAAQjB,KAA0Bpgd,EAAQogd,GAC1CiB,EAAQhB,GAAahxc,EAEjBrP,EAAQo3J,KACVl3J,KAAKk3J,KAAK7vJ,EAAM85c,GAEhBnhd,KAAKuoI,GAAGlhI,EAAM85c,EAEjB,EASDv5c,oBA1EkB,SA0EEP,EAAMwrH,GAAS,UACV7yH,KAAKqP,UAAUhI,IADL,IACjC,IAAK,EAAL,qBAA6C,KAAlC8H,EAAkC,QAC3C,GAAIA,EAASgxc,KAAettV,IAAY1jH,EAAS+wc,GAAuB,CACtElgd,KAAKk2J,eAAe7uJ,EAAM8H,GAC1B,KACD,CACF,CANgC,+BAOlC,GAGHg0J,EAAOx3B,QAAU,CACfm1U,WAAAA,EACAE,WAAAA,EACA/vN,MAAAA,EACAiwN,YAAAA,EACAD,aAAAA,uCCtQF,IAAQK,EAAeloS,EAAQ,OAAvBkoS,WAYR,SAAS5id,EAAK84G,EAAMl9F,EAAM8pM,QACL/6M,IAAfmuG,EAAKl9F,GAAqBk9F,EAAKl9F,GAAQ,CAAC8pM,GACvC5sG,EAAKl9F,GAAM5b,KAAK0lN,EACtB,CAyLDjhD,EAAOx3B,QAAU,CAAE5rH,OAxBnB,SAAgB8wB,GACd,OAAO3vC,OAAOQ,KAAKmvC,GAChBjrC,KAAI,SAAC6iD,GACJ,IAAI84Z,EAAiB1wa,EAAW4X,GAEhC,OADK5qD,MAAMC,QAAQyjd,KAAiBA,EAAiB,CAACA,IAC/CA,EACJ37c,KAAI,SAACytD,GACJ,MAAO,CAAC5K,GACLs0F,OACC77I,OAAOQ,KAAK2xD,GAAQztD,KAAI,SAACmvE,GACvB,IAAIr4C,EAAS22B,EAAO0hB,GAEpB,OADKl3E,MAAMC,QAAQ4+B,KAASA,EAAS,CAACA,IAC/BA,EACJ92B,KAAI,SAACkP,GAAD,OAAc,IAANA,EAAaigE,EAAb,UAAoBA,EAApB,YAAyBjgE,EAAjC,IACJ+sD,KAAK,KACT,KAEFA,KAAK,KACT,IACAA,KAAK,KACT,IACAA,KAAK,KACT,EAE0B5gD,MAhL3B,SAAe8yG,GAab,IAZA,IAKInG,EACA4zV,EANEC,EAASvgd,OAAO2J,OAAO,MACzBwoD,EAASnyD,OAAO2J,OAAO,MACvB62c,GAAe,EACfC,GAAa,EACbC,GAAW,EAGXz5a,GAAS,EACT6hC,GAAQ,EACR30B,GAAO,EACPz3C,EAAI,EAEDA,EAAIm2H,EAAOn1H,OAAQhB,IAGxB,GAFAosE,EAAO+pD,EAAO87B,WAAWjyJ,QAEHyL,IAAlBukH,EACF,IAAa,IAATv4E,GAAmC,IAArBisa,EAAWt3Y,IACZ,IAAX7hC,IAAcA,EAAQvqC,QACrB,GACC,IAANA,GACU,KAATosE,GAAoC,IAATA,EAGvB,IAAa,KAATA,GAAoC,KAATA,EAgBpC,MAAM,IAAIq6K,YAAJ,wCAAiDzmP,IAfvD,IAAe,IAAXuqC,EACF,MAAM,IAAIk8M,YAAJ,wCAAiDzmP,KAG5C,IAATy3C,IAAYA,EAAMz3C,GACtB,IAAM0c,EAAOy5G,EAAOpkH,MAAMw4B,EAAOkN,GACpB,KAAT20B,GACFtrE,EAAK+id,EAAQnnc,EAAM+4C,GACnBA,EAASnyD,OAAO2J,OAAO,OAEvB+iH,EAAgBtzG,EAGlB6tB,EAAQkN,GAAO,CAGhB,MAlBc,IAATA,IAAyB,IAAXlN,IAAckN,EAAMz3C,QAmBnC,QAAkByL,IAAdm4c,EACT,IAAa,IAATnsa,GAAmC,IAArBisa,EAAWt3Y,IACZ,IAAX7hC,IAAcA,EAAQvqC,QACrB,GAAa,KAATosE,GAA0B,IAATA,GACb,IAAT30B,IAAyB,IAAXlN,IAAckN,EAAMz3C,QACjC,GAAa,KAATosE,GAA0B,KAATA,EAAe,CACzC,IAAe,IAAX7hC,EACF,MAAM,IAAIk8M,YAAJ,wCAAiDzmP,KAG5C,IAATy3C,IAAYA,EAAMz3C,GACtBc,EAAK20D,EAAQ0gE,EAAOpkH,MAAMw4B,EAAOkN,IAAM,GAC1B,KAAT20B,IACFtrE,EAAK+id,EAAQ7zV,EAAev6D,GAC5BA,EAASnyD,OAAO2J,OAAO,MACvB+iH,OAAgBvkH,GAGlB8+B,EAAQkN,GAAO,CAChB,KAAM,IAAa,KAAT20B,IAAsC,IAAX7hC,IAAyB,IAATkN,EAIpD,MAAM,IAAIgvM,YAAJ,wCAAiDzmP,IAHvD4jd,EAAYztV,EAAOpkH,MAAMw4B,EAAOvqC,GAChCuqC,EAAQkN,GAAO,CAGhB,MAOD,GAAIssa,EAAY,CACd,GAAyB,IAArBL,EAAWt3Y,GACb,MAAM,IAAIq6K,YAAJ,wCAAiDzmP,KAE1C,IAAXuqC,EAAcA,EAAQvqC,EAChB8jd,IAAcA,GAAe,GACvCC,GAAa,CACd,MAAM,GAAIC,EACT,GAAyB,IAArBN,EAAWt3Y,IACE,IAAX7hC,IAAcA,EAAQvqC,QACrB,GAAa,KAATosE,IAAsC,IAAX7hC,EACpCy5a,GAAW,EACXvsa,EAAMz3C,MACD,IAAa,KAATosE,EAGT,MAAM,IAAIq6K,YAAJ,wCAAiDzmP,IAFvD+jd,GAAa,CAGd,MACI,GAAa,KAAT33Y,GAA8C,KAA7B+pD,EAAO87B,WAAWjyJ,EAAI,GAChDgkd,GAAW,OACN,IAAa,IAATvsa,GAAmC,IAArBisa,EAAWt3Y,IACnB,IAAX7hC,IAAcA,EAAQvqC,QACrB,IAAe,IAAXuqC,GAA0B,KAAT6hC,GAA0B,IAATA,EAEtC,IAAa,KAATA,GAA0B,KAATA,EAqB1B,MAAM,IAAIq6K,YAAJ,wCAAiDzmP,IApBvD,IAAe,IAAXuqC,EACF,MAAM,IAAIk8M,YAAJ,wCAAiDzmP,KAG5C,IAATy3C,IAAYA,EAAMz3C,GACtB,IAAIe,EAAQo1H,EAAOpkH,MAAMw4B,EAAOkN,GAC5Bqsa,IACF/id,EAAQA,EAAMgkE,QAAQ,MAAO,IAC7B++Y,GAAe,GAEjBhjd,EAAK20D,EAAQmuZ,EAAW7id,GACX,KAATqrE,IACFtrE,EAAK+id,EAAQ7zV,EAAev6D,GAC5BA,EAASnyD,OAAO2J,OAAO,MACvB+iH,OAAgBvkH,GAGlBm4c,OAAYn4c,EACZ8+B,EAAQkN,GAAO,CAGhB,MAvBc,IAATA,IAAYA,EAAMz3C,GA2B5B,IAAe,IAAXuqC,GAAgBy5a,GAAqB,KAAT53Y,GAA0B,IAATA,EAC/C,MAAM,IAAIq6K,YAAY,4BAGX,IAAThvM,IAAYA,EAAMz3C,GACtB,IAAM2vI,EAAQxZ,EAAOpkH,MAAMw4B,EAAOkN,GAclC,YAbsBhsC,IAAlBukH,EACFlvH,EAAK+id,EAAQl0U,EAAOl6E,SAEFhqD,IAAdm4c,EACF9id,EAAK20D,EAAQk6E,GAAO,GAEpB7uI,EAAK20D,EAAQmuZ,EADJE,EACen0U,EAAM5qE,QAAQ,MAAO,IAErB4qE,GAE1B7uI,EAAK+id,EAAQ7zV,EAAev6D,IAGvBouZ,CACR,iFCvKKI,EAAQ7jd,OAAO,SACf8jd,EAAO9jd,OAAO,QAMd+jd,EAAAA,WAOJ,WAAYvlN,GAAa,qBACvBx8P,KAAK6hd,GAAS,WACZ,EAAKljW,UACL,EAAKmjW,IACN,EACD9hd,KAAKw8P,YAAcA,GAAepxO,IAClCprB,KAAKgid,KAAO,GACZhid,KAAK2+G,QAAU,CAChB,8BAQD,SAAIsjW,GACFjid,KAAKgid,KAAKtjd,KAAKujd,GACfjid,KAAK8hd,IACN,QAOAA,QAAD,WACE,GAAI9hd,KAAK2+G,UAAY3+G,KAAKw8P,aAEtBx8P,KAAKgid,KAAKpjd,OAAQ,CACpB,IAAMqjd,EAAMjid,KAAKgid,KAAK5qX,QAEtBp3F,KAAK2+G,UACLsjW,EAAIjid,KAAK6hd,GACV,CACF,OA1CGE,GA6CN5+S,EAAOx3B,QAAUo2U,0CChCbG,6EApBE/8C,EAAO/rP,EAAQ,MAEf2mS,EAAa3mS,EAAQ,OACrB2oS,EAAU3oS,EAAQ,OAChBgnS,EAAgBhnS,EAAQ,OAAxBgnS,YAEF+B,EAAUv1U,EAAOvtH,KAAK,CAAC,EAAM,EAAM,IAAM,MACzC+ic,EAAqBpkd,OAAO,sBAC5Bqkd,EAAerkd,OAAO,gBACtBskd,EAAYtkd,OAAO,YACnBukd,EAAWvkd,OAAO,WAClBolR,EAASplR,OAAO,SAchBwkd,EAAAA,WAyBJ,WAAY1id,EAAS2id,EAAUC,GAW7B,GAXyC,UACzC1id,KAAK2id,YAA2B,EAAbD,EACnB1id,KAAKs5N,SAAWx5N,GAAW,CAAC,EAC5BE,KAAK4id,gBACyBv5c,IAA5BrJ,KAAKs5N,SAASh4H,UAA0BthG,KAAKs5N,SAASh4H,UAAY,KACpEthG,KAAK6id,YAAcJ,EACnBzid,KAAK8id,SAAW,KAChB9id,KAAK+id,SAAW,KAEhB/id,KAAKqzD,OAAS,MAET6uZ,EAAa,CAChB,IAAM1lN,OAC+BnzP,IAAnCrJ,KAAKs5N,SAAS0pP,iBACVhjd,KAAKs5N,SAAS0pP,iBACd,GACNd,EAAc,IAAIH,EAAQvlN,EAC3B,CACF,gCAeD,WACE,IAAMnpM,EAAS,CAAC,EAiBhB,OAfIrzD,KAAKs5N,SAAS2pP,0BAChB5vZ,EAAO6vZ,4BAA6B,GAElCljd,KAAKs5N,SAAS6pP,0BAChB9vZ,EAAO+vZ,4BAA6B,GAElCpjd,KAAKs5N,SAAS+pP,sBAChBhwZ,EAAOiwZ,uBAAyBtjd,KAAKs5N,SAAS+pP,qBAE5Crjd,KAAKs5N,SAASiqP,oBAChBlwZ,EAAOmwZ,uBAAyBxjd,KAAKs5N,SAASiqP,oBACA,MAArCvjd,KAAKs5N,SAASiqP,sBACvBlwZ,EAAOmwZ,wBAAyB,GAG3BnwZ,CACR,uBASD,SAAOkuZ,GAOL,OANAA,EAAiBvhd,KAAKyjd,gBAAgBlC,GAEtCvhd,KAAKqzD,OAASrzD,KAAK6id,UACf7id,KAAK0jd,eAAenC,GACpBvhd,KAAK2jd,eAAepC,GAEjBvhd,KAAKqzD,MACb,wBAOD,WAME,GALIrzD,KAAK+id,WACP/id,KAAK+id,SAAS3zW,QACdpvG,KAAK+id,SAAW,MAGd/id,KAAK8id,SAAU,CACjB,IAAMz7b,EAAWrnB,KAAK8id,SAASR,GAE/Btid,KAAK8id,SAAS1zW,QACdpvG,KAAK8id,SAAW,KAEZz7b,GACFA,EACE,IAAI1V,MACF,gEAIP,CACF,+BASD,SAAe8vc,GACb,IAAM9jS,EAAO39K,KAAKs5N,SACZsqP,EAAWnC,EAAOp6I,MAAK,SAACh0Q,GAC5B,SACoC,IAAjCsqH,EAAKslS,yBACJ5vZ,EAAO6vZ,4BACR7vZ,EAAOiwZ,0BACwB,IAA7B3lS,EAAK0lS,qBACiC,kBAA7B1lS,EAAK0lS,qBACX1lS,EAAK0lS,oBAAsBhwZ,EAAOiwZ,yBACH,kBAA7B3lS,EAAK4lS,sBACVlwZ,EAAOmwZ,uBAMb,IAED,IAAKI,EACH,MAAM,IAAIjyc,MAAM,gDAqBlB,OAlBIgsK,EAAKslS,0BACPW,EAASV,4BAA6B,GAEpCvlS,EAAKwlS,0BACPS,EAASR,4BAA6B,GAEA,kBAA7BzlS,EAAK0lS,sBACdO,EAASN,uBAAyB3lS,EAAK0lS,qBAED,kBAA7B1lS,EAAK4lS,oBACdK,EAASJ,uBAAyB7lS,EAAK4lS,qBAEH,IAApCK,EAASJ,yBACoB,IAA7B7lS,EAAK4lS,4BAEEK,EAASJ,uBAGXI,CACR,+BASD,SAAe91W,GACb,IAAMz6C,EAASy6C,EAAS,GAExB,IAC4C,IAA1C9tG,KAAKs5N,SAAS6pP,yBACd9vZ,EAAO+vZ,2BAEP,MAAM,IAAIzxc,MAAM,qDAGlB,GAAK0hD,EAAOmwZ,wBAIL,IACiC,IAAtCxjd,KAAKs5N,SAASiqP,qBACgC,kBAAtCvjd,KAAKs5N,SAASiqP,qBACpBlwZ,EAAOmwZ,uBAAyBxjd,KAAKs5N,SAASiqP,oBAEhD,MAAM,IAAI5xc,MACR,gEAT+C,kBAAtC3R,KAAKs5N,SAASiqP,sBACvBlwZ,EAAOmwZ,uBAAyBxjd,KAAKs5N,SAASiqP,qBAYlD,OAAOlwZ,CACR,gCASD,SAAgBkuZ,GAAgB,WAkD9B,OAjDAA,EAAel/c,SAAQ,SAACgxD,GACtBnyD,OAAOQ,KAAK2xD,GAAQhxD,SAAQ,SAACpB,GAC3B,IAAItC,EAAQ00D,EAAOpyD,GAEnB,GAAItC,EAAMC,OAAS,EACjB,MAAM,IAAI+S,MAAJ,qBAAwB1Q,EAAxB,oCAKR,GAFAtC,EAAQA,EAAM,GAEF,2BAARsC,GACF,IAAc,IAAVtC,EAAgB,CAClB,IAAM0/J,GAAO1/J,EACb,IAAKiE,OAAOmwJ,UAAUsL,IAAQA,EAAM,GAAKA,EAAM,GAC7C,MAAM,IAAIt/J,UAAJ,uCAC4BkC,EAD5B,cACqCtC,IAG7CA,EAAQ0/J,CACT,MAAM,IAAK,EAAKwkT,UACf,MAAM,IAAI9jd,UAAJ,uCAC4BkC,EAD5B,cACqCtC,SAGxC,GAAY,2BAARsC,EAAkC,CAC3C,IAAMo9J,GAAO1/J,EACb,IAAKiE,OAAOmwJ,UAAUsL,IAAQA,EAAM,GAAKA,EAAM,GAC7C,MAAM,IAAIt/J,UAAJ,uCAC4BkC,EAD5B,cACqCtC,IAG7CA,EAAQ0/J,CACT,KAAM,IACG,+BAARp9J,GACQ,+BAARA,EAQA,MAAM,IAAI0Q,MAAJ,6BAAgC1Q,EAAhC,MANN,IAAc,IAAVtC,EACF,MAAM,IAAII,UAAJ,uCAC4BkC,EAD5B,cACqCtC,GAK9C,CAED00D,EAAOpyD,GAAOtC,CACf,GACF,IAEM4id,CACR,2BAUD,SAAW/ic,EAAMqrR,EAAKxiR,GAAU,WAC9B66b,EAAYn2b,KAAI,SAACttB,GACf,EAAKold,YAAYrlc,EAAMqrR,GAAK,SAAChrS,EAAKu1E,GAChC31E,IACA4oB,EAASxoB,EAAKu1E,EACf,GACF,GACF,yBAUD,SAAS51D,EAAMqrR,EAAKxiR,GAAU,WAC5B66b,EAAYn2b,KAAI,SAACttB,GACf,EAAKqld,UAAUtlc,EAAMqrR,GAAK,SAAChrS,EAAKu1E,GAC9B31E,IACA4oB,EAASxoB,EAAKu1E,EACf,GACF,GACF,4BAUD,SAAY51D,EAAMqrR,EAAKxiR,GAAU,WACzB08b,EAAW/jd,KAAK6id,UAAY,SAAW,SAE7C,IAAK7id,KAAK+id,SAAU,CAClB,IAAM9hd,EAAM,GAAH,OAAM8id,EAAN,oBACHC,EACwB,kBAArBhkd,KAAKqzD,OAAOpyD,GACfkka,EAAK8+C,qBACLjkd,KAAKqzD,OAAOpyD,GAElBjB,KAAK+id,SAAW59C,EAAK++C,iBAAL,OACXlkd,KAAKs5N,SAAS6qP,oBADH,IAEdH,WAAAA,KAEFhkd,KAAK+id,SAASX,GAAsBpid,KACpCA,KAAK+id,SAASV,GAAgB,EAC9Brid,KAAK+id,SAASR,GAAY,GAC1Bvid,KAAK+id,SAASx6U,GAAG,QAAS67U,GAC1Bpkd,KAAK+id,SAASx6U,GAAG,OAAQ87U,EAC1B,CAEDrkd,KAAK+id,SAAST,GAAaj7b,EAE3BrnB,KAAK+id,SAASrgR,MAAMlkL,GAChBqrR,GAAK7pS,KAAK+id,SAASrgR,MAAMy/Q,GAE7Bnid,KAAK+id,SAAStwM,OAAM,WAClB,IAAM5zQ,EAAM,EAAKkkd,SAAS3/L,GAE1B,GAAIvkR,EAIF,OAHA,EAAKkkd,SAAS3zW,QACd,EAAK2zW,SAAW,UAChB17b,EAASxoB,GAIX,IAAM2f,EAAOuhc,EAAWhjU,OACtB,EAAKgmU,SAASR,GACd,EAAKQ,SAASV,IAGZ,EAAKU,SAAS/pM,eAAewB,YAC/B,EAAKuoM,SAAS3zW,QACd,EAAK2zW,SAAW,OAEhB,EAAKA,SAASV,GAAgB,EAC9B,EAAKU,SAASR,GAAY,GAEtB14K,GAAO,EAAKx2O,OAAL,UAAe0wZ,EAAf,0BACT,EAAKhB,SAAS34Z,SAIlB/iC,EAAS,KAAM7I,EAChB,GACF,0BAUD,SAAUA,EAAMqrR,EAAKxiR,GAAU,WACvB08b,EAAW/jd,KAAK6id,UAAY,SAAW,SAE7C,IAAK7id,KAAK8id,SAAU,CAClB,IAAM7hd,EAAM,GAAH,OAAM8id,EAAN,oBACHC,EACwB,kBAArBhkd,KAAKqzD,OAAOpyD,GACfkka,EAAK8+C,qBACLjkd,KAAKqzD,OAAOpyD,GAElBjB,KAAK8id,SAAW39C,EAAKm/C,iBAAL,OACXtkd,KAAKs5N,SAASirP,oBADH,IAEdP,WAAAA,KAGFhkd,KAAK8id,SAAST,GAAgB,EAC9Brid,KAAK8id,SAASP,GAAY,GAE1Bvid,KAAK8id,SAASv6U,GAAG,OAAQi8U,EAC1B,CAEDxkd,KAAK8id,SAASR,GAAaj7b,EAE3BrnB,KAAK8id,SAASpgR,MAAMlkL,GACpBxe,KAAK8id,SAASrwM,MAAM0yJ,EAAK6E,cAAc,WACrC,GAAK,EAAK84C,SAAV,CAOA,IAAItkc,EAAOuhc,EAAWhjU,OACpB,EAAK+lU,SAASP,GACd,EAAKO,SAAST,IAGZx4K,IAAKrrR,EAAOA,EAAK7O,MAAM,EAAG6O,EAAK5f,OAAS,IAM5C,EAAKkkd,SAASR,GAAa,KAE3B,EAAKQ,SAAST,GAAgB,EAC9B,EAAKS,SAASP,GAAY,GAEtB14K,GAAO,EAAKx2O,OAAL,UAAe0wZ,EAAf,0BACT,EAAKjB,SAAS14Z,QAGhB/iC,EAAS,KAAM7I,EAtBd,CAuBF,GACF,8BA7XD,WACE,MAAO,oBACR,OAlDGgkc,GAwbN,SAASgC,EAAcn9Q,GACrBrnM,KAAKuid,GAAU7jd,KAAK2oM,GACpBrnM,KAAKqid,IAAiBh7Q,EAAMzoM,MAC7B,CAQD,SAASyld,EAAch9Q,GACrBrnM,KAAKqid,IAAiBh7Q,EAAMzoM,OAG1BoB,KAAKoid,GAAoBO,YAAc,GACvC3id,KAAKqid,IAAiBrid,KAAKoid,GAAoBO,YAE/C3id,KAAKuid,GAAU7jd,KAAK2oM,IAItBrnM,KAAKojR,GAAU,IAAI/+C,WAAW,6BAC9BrkO,KAAKojR,GAAQp5M,KAAO,oCACpBhqE,KAAKojR,GAAQg9L,GAAe,KAC5Bpgd,KAAKk2J,eAAe,OAAQmuT,GAC5Brkd,KAAKoqD,QACN,CAQD,SAASg6Z,EAAevld,GAKtBmB,KAAKoid,GAAoBW,SAAW,KACpClkd,EAAIuhd,GAAe,KACnBpgd,KAAKsid,GAAWzjd,EACjB,CAnDDskK,EAAOx3B,QAAU62U,wICzcTnsM,EAAaj9F,EAAQ,OAArBi9F,SAEFmsM,EAAoBppS,EAAQ,OAClC,EAKIA,EAAQ,OAJV4mS,EADF,EACEA,aACAR,EAFF,EAEEA,aACAY,EAHF,EAGEA,YACAC,EAJF,EAIEA,WAEF,EAA0CjnS,EAAQ,OAA1Cr8B,EAAR,EAAQA,OAAQ4iU,EAAhB,EAAgBA,cAAeE,EAA/B,EAA+BA,OAC/B,EAA2CzmS,EAAQ,OAA3CqrS,EAAR,EAAQA,kBAAmBC,EAA3B,EAA2BA,YAcrBrF,EAAAA,SAAAA,qBAcJ,aAA0B,MAAdv/c,EAAc,uDAAJ,CAAC,EAAG,kBACxB,gBAEK6kd,YAAc7kd,EAAQ67R,YAAcqkL,EAAa,GACtD,EAAK4E,YAAc9kd,EAAQ+wC,YAAc,CAAC,EAC1C,EAAKgya,YAAc/id,EAAQ2id,SAC3B,EAAKE,YAAmC,EAArB7id,EAAQ4id,WAC3B,EAAKmC,sBAAwB/kd,EAAQgld,mBACrC,EAAKzE,QAAch3c,EAEnB,EAAK07c,eAAiB,EACtB,EAAKC,SAAW,GAEhB,EAAKC,aAAc,EACnB,EAAKC,eAAiB,EACtB,EAAKzF,WAAQp2c,EACb,EAAK87c,YAAc,EACnB,EAAKC,SAAU,EACf,EAAKC,MAAO,EACZ,EAAKC,QAAU,EAEf,EAAKC,oBAAsB,EAC3B,EAAKC,eAAiB,EACtB,EAAKlqS,WAAa,GAElB,EAAK/lG,OAnDQ,EAoDb,EAAKmpN,OAAQ,EA1BW,CA2BzB,iCAUD,SAAOr3F,EAAOpnL,EAAUorB,GACtB,GAAqB,IAAjBrrC,KAAKsld,SAhEI,GAgEgBtld,KAAKu1E,OAAoB,OAAOlqC,IAE7DrrC,KAAK+kd,gBAAkB19Q,EAAMzoM,OAC7BoB,KAAKgld,SAAStmd,KAAK2oM,GACnBrnM,KAAKyld,UAAUp6a,EAChB,wBASD,SAAQ36B,GAGN,GAFA1Q,KAAK+kd,gBAAkBr0c,EAEnBA,IAAM1Q,KAAKgld,SAAS,GAAGpmd,OAAQ,OAAOoB,KAAKgld,SAAS5tX,QAExD,GAAI1mF,EAAI1Q,KAAKgld,SAAS,GAAGpmd,OAAQ,CAC/B,IAAMuuK,EAAMntK,KAAKgld,SAAS,GAE1B,OADAhld,KAAKgld,SAAS,GAAK73S,EAAIx9J,MAAMe,GACtBy8J,EAAIx9J,MAAM,EAAGe,EACrB,CAED,IAAM4W,EAAMslH,EAAOigI,YAAYn8P,GAE/B,EAAG,CACD,IAAMy8J,EAAMntK,KAAKgld,SAAS,GACpBrld,EAAS2nB,EAAI1oB,OAAS8R,EAExBA,GAAKy8J,EAAIvuK,OACX0oB,EAAI7c,IAAIzK,KAAKgld,SAAS5tX,QAASz3F,IAE/B2nB,EAAI7c,IAAI,IAAI+G,WAAW27J,EAAI70H,OAAQ60H,EAAI35C,WAAY9iH,GAAI/Q,GACvDK,KAAKgld,SAAS,GAAK73S,EAAIx9J,MAAMe,IAG/BA,GAAKy8J,EAAIvuK,MACV,OAAQ8R,EAAI,GAEb,OAAO4W,CACR,0BAQD,SAAU+jB,GACR,IAAIxsC,EACJmB,KAAK0+R,OAAQ,EAEb,GACE,OAAQ1+R,KAAKu1E,QACX,KAxHS,EAyHP12E,EAAMmB,KAAKk0R,UACX,MACF,KA1HsB,EA2HpBr1R,EAAMmB,KAAK0ld,qBACX,MACF,KA5HsB,EA6HpB7md,EAAMmB,KAAK2ld,qBACX,MACF,KA9HS,EA+HP3ld,KAAK4ld,UACL,MACF,KAhIS,EAiIP/md,EAAMmB,KAAKqpL,QAAQh+I,GACnB,MACF,QAGE,YADArrC,KAAK0+R,OAAQ,UAGV1+R,KAAK0+R,OAEdrzP,EAAGxsC,EACJ,wBAQD,WACE,GAAImB,KAAK+kd,eAAiB,EACxB/kd,KAAK0+R,OAAQ,MADf,CAKA,IAAMvxH,EAAMntK,KAAKwuI,QAAQ,GAEzB,GAAwB,KAAV,GAAT2+B,EAAI,IAEP,OADAntK,KAAK0+R,OAAQ,EACN31R,EACLs7N,WACA,+BACA,EACA,KACA,6BAIJ,IAAM5zD,EAAiC,MAAV,GAATtD,EAAI,IAExB,GAAIsD,IAAezwK,KAAK4kd,YAAYpC,EAAkB50V,eAEpD,OADA5tH,KAAK0+R,OAAQ,EACN31R,EACLs7N,WACA,sBACA,EACA,KACA,2BAQJ,GAJArkO,KAAKqld,KAA2B,OAAV,IAATl4S,EAAI,IACjBntK,KAAKsld,QAAmB,GAATn4S,EAAI,GACnBntK,KAAKkld,eAA0B,IAAT/3S,EAAI,GAEL,IAAjBntK,KAAKsld,QAAkB,CACzB,GAAI70S,EAEF,OADAzwK,KAAK0+R,OAAQ,EACN31R,EACLs7N,WACA,sBACA,EACA,KACA,2BAIJ,IAAKrkO,KAAKmld,YAER,OADAnld,KAAK0+R,OAAQ,EACN31R,EACLs7N,WACA,oBACA,EACA,KACA,yBAIJrkO,KAAKsld,QAAUtld,KAAKmld,WACrB,MAAM,GAAqB,IAAjBnld,KAAKsld,SAAqC,IAAjBtld,KAAKsld,QAAkB,CACzD,GAAItld,KAAKmld,YAEP,OADAnld,KAAK0+R,OAAQ,EACN31R,EACLs7N,WADU,yBAEQrkO,KAAKsld,UACvB,EACA,KACA,yBAIJtld,KAAKild,YAAcx0S,CACpB,KAAM,MAAIzwK,KAAKsld,QAAU,GAAQtld,KAAKsld,QAAU,IAmC/C,OADAtld,KAAK0+R,OAAQ,EACN31R,EACLs7N,WADU,yBAEQrkO,KAAKsld,UACvB,EACA,KACA,yBAvCF,IAAKtld,KAAKqld,KAER,OADArld,KAAK0+R,OAAQ,EACN31R,EACLs7N,WACA,mBACA,EACA,KACA,uBAIJ,GAAI5zD,EAEF,OADAzwK,KAAK0+R,OAAQ,EACN31R,EACLs7N,WACA,sBACA,EACA,KACA,2BAIJ,GAAIrkO,KAAKkld,eAAiB,IAExB,OADAlld,KAAK0+R,OAAQ,EACN31R,EACLs7N,WADU,iCAEgBrkO,KAAKkld,iBAC/B,EACA,KACA,wCAYL,CAKD,GAHKlld,KAAKqld,MAASrld,KAAKmld,cAAanld,KAAKmld,YAAcnld,KAAKsld,SAC7Dtl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","sources":["../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","assets/logoColored.svg","components/Header.js","components/Typer.js","components/Welcome.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","components/Experience.js","components/Education.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","utils/Constants.js","assets/linkedin.svg","assets/phone.svg","assets/mail.svg","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/three/build/three.module.js","../node_modules/three/examples/jsm/controls/OrbitControls.js","../node_modules/three/examples/jsm/loaders/GLTFLoader.js","components/Scene.js","components/Contact.js","App.js","reportWebVitals.js","index.js","../../ClientMessenger/TransactionNotifier.ts","../../ClientMessenger/index.ts","../../RelayerManagerMessenger/RelayerMessenger.ts","../../RelayerManagerMessenger/TransactionNotifier.ts","../../RelayerManagerMessenger/index.ts","../../TransactionHandlerMessenger/index.ts","../../TransactionListenerMessenger/TransactionMessenger.ts","../../TransactionListenerMessenger/index.ts","../../src/index.ts","../node_modules/@biconomy/mexa/src/abis.ts","../node_modules/@biconomy/mexa/src/common/types.ts","../node_modules/@biconomy/mexa/src/config.ts","../node_modules/@biconomy/mexa/src/helpers/client-messaging-helper.ts","../node_modules/@biconomy/mexa/src/helpers/get-system-info-helper.ts","../node_modules/@biconomy/mexa/src/helpers/handle-send-transaction-helper.ts","../node_modules/@biconomy/mexa/src/helpers/meta-transaction-EIP2771-helpers.ts","../node_modules/@biconomy/mexa/src/helpers/meta-transaction-custom-helpers.ts","../node_modules/@biconomy/mexa/src/helpers/send-signed-transaction-helper.ts","../node_modules/@biconomy/mexa/src/helpers/send-transaction-helper.ts","../node_modules/@biconomy/mexa/src/helpers/signature-helpers.ts","../node_modules/@biconomy/mexa/src/index.ts","../node_modules/@biconomy/mexa/src/utils.ts","../node_modules/@ethersproject/abi/src.ts/_version.ts","../node_modules/@ethersproject/abi/src.ts/coders/address.ts","../node_modules/@ethersproject/abi/src.ts/coders/anonymous.ts","../node_modules/@ethersproject/abi/src.ts/coders/array.ts","../node_modules/@ethersproject/abi/src.ts/coders/boolean.ts","../node_modules/@ethersproject/abi/src.ts/coders/bytes.ts","../node_modules/@ethersproject/abi/src.ts/coders/fixed-bytes.ts","../node_modules/@ethersproject/abi/src.ts/coders/null.ts","../node_modules/@ethersproject/abi/src.ts/coders/number.ts","../node_modules/@ethersproject/abi/src.ts/coders/string.ts","../node_modules/@ethersproject/abi/src.ts/coders/tuple.ts","../node_modules/@ethersproject/abi/src.ts/abi-coder.ts","../node_modules/@ethersproject/abi/src.ts/coders/abstract-coder.ts","../node_modules/@ethersproject/abi/src.ts/fragments.ts","../node_modules/@ethersproject/abi/src.ts/interface.ts","../node_modules/@ethersproject/abstract-provider/src.ts/index.ts","../node_modules/@ethersproject/abstract-provider/src.ts/_version.ts","../node_modules/@ethersproject/abstract-signer/src.ts/index.ts","../node_modules/@ethersproject/abstract-signer/src.ts/_version.ts","../node_modules/@ethersproject/address/src.ts/index.ts","../node_modules/@ethersproject/address/src.ts/_version.ts","../node_modules/@ethersproject/bignumber/src.ts/_version.ts","../node_modules/@ethersproject/bignumber/src.ts/bignumber.ts","../node_modules/@ethersproject/bytes/src.ts/index.ts","../node_modules/@ethersproject/bytes/src.ts/_version.ts","../node_modules/@ethersproject/constants/src.ts/bignumbers.ts","../node_modules/@ethersproject/contracts/src.ts/index.ts","../node_modules/@ethersproject/contracts/src.ts/_version.ts","../node_modules/@ethersproject/hash/src.ts/id.ts","../node_modules/@ethersproject/keccak256/src.ts/index.ts","../node_modules/@ethersproject/logger/src.ts/index.ts","../node_modules/@ethersproject/logger/src.ts/_version.ts","../node_modules/@ethersproject/properties/src.ts/index.ts","../node_modules/@ethersproject/properties/src.ts/_version.ts","../node_modules/@ethersproject/rlp/src.ts/index.ts","../node_modules/@ethersproject/rlp/src.ts/_version.ts","../node_modules/node_modules/minimalistic-assert/index.js","../node_modules/node_modules/minimalistic-crypto-utils/lib/utils.js","../node_modules/node_modules/elliptic/lib/elliptic/utils.js","../node_modules/node_modules/elliptic/lib/elliptic/curve/base.js","../node_modules/node_modules/inherits/inherits_browser.js","../node_modules/node_modules/elliptic/lib/elliptic/curve/short.js","../node_modules/node_modules/elliptic/lib/elliptic/curve/index.js","../node_modules/node_modules/elliptic/lib/elliptic/curves.js","../node_modules/node_modules/hmac-drbg/lib/hmac-drbg.js","../node_modules/node_modules/elliptic/lib/elliptic/ec/key.js","../node_modules/node_modules/elliptic/lib/elliptic/ec/signature.js","../node_modules/node_modules/elliptic/lib/elliptic/ec/index.js","../node_modules/@ethersproject/signing-key/lib.esm/elliptic.js","../node_modules/node_modules/elliptic/lib/elliptic.js","../node_modules/@ethersproject/signing-key/src.ts/index.ts","../node_modules/@ethersproject/signing-key/src.ts/_version.ts","../node_modules/@ethersproject/strings/src.ts/utf8.ts","../node_modules/@ethersproject/strings/src.ts/_version.ts","../node_modules/@ethersproject/transactions/src.ts/index.ts","../node_modules/@ethersproject/transactions/src.ts/_version.ts","../node_modules/aes-js/index.js","../node_modules/ajv/lib/ajv.js","../node_modules/ajv/lib/cache.js","../node_modules/ajv/lib/compile/async.js","../node_modules/ajv/lib/compile/error_classes.js","../node_modules/ajv/lib/compile/formats.js","../node_modules/ajv/lib/compile/index.js","../node_modules/ajv/lib/compile/resolve.js","../node_modules/ajv/lib/compile/rules.js","../node_modules/ajv/lib/compile/schema_obj.js","../node_modules/ajv/lib/compile/ucs2length.js","../node_modules/ajv/lib/compile/util.js","../node_modules/ajv/lib/data.js","../node_modules/ajv/lib/definition_schema.js","../node_modules/ajv/lib/dotjs/_limit.js","../node_modules/ajv/lib/dotjs/_limitItems.js","../node_modules/ajv/lib/dotjs/_limitLength.js","../node_modules/ajv/lib/dotjs/_limitProperties.js","../node_modules/ajv/lib/dotjs/allOf.js","../node_modules/ajv/lib/dotjs/anyOf.js","../node_modules/ajv/lib/dotjs/comment.js","../node_modules/ajv/lib/dotjs/const.js","../node_modules/ajv/lib/dotjs/contains.js","../node_modules/ajv/lib/dotjs/custom.js","../node_modules/ajv/lib/dotjs/dependencies.js","../node_modules/ajv/lib/dotjs/enum.js","../node_modules/ajv/lib/dotjs/format.js","../node_modules/ajv/lib/dotjs/if.js","../node_modules/ajv/lib/dotjs/index.js","../node_modules/ajv/lib/dotjs/items.js","../node_modules/ajv/lib/dotjs/multipleOf.js","../node_modules/ajv/lib/dotjs/not.js","../node_modules/ajv/lib/dotjs/oneOf.js","../node_modules/ajv/lib/dotjs/pattern.js","../node_modules/ajv/lib/dotjs/properties.js","../node_modules/ajv/lib/dotjs/propertyNames.js","../node_modules/ajv/lib/dotjs/ref.js","../node_modules/ajv/lib/dotjs/required.js","../node_modules/ajv/lib/dotjs/uniqueItems.js","../node_modules/ajv/lib/dotjs/validate.js","../node_modules/ajv/lib/keyword.js","../node_modules/amqplib/channel_api.js","../node_modules/amqplib/lib/api_args.js","../node_modules/amqplib/lib/bitset.js","../node_modules/amqplib/lib/channel.js","../node_modules/amqplib/lib/channel_model.js","../node_modules/amqplib/lib/codec.js","../node_modules/amqplib/lib/connect.js","../node_modules/amqplib/lib/connection.js","../node_modules/amqplib/lib/credentials.js","../node_modules/amqplib/lib/defs.js","../node_modules/amqplib/lib/error.js","../node_modules/amqplib/lib/format.js","../node_modules/amqplib/lib/frame.js","../node_modules/amqplib/lib/heartbeat.js","../node_modules/amqplib/lib/mux.js","../node_modules/asn1.js/lib/asn1.js","../node_modules/asn1.js/lib/asn1/api.js","../node_modules/asn1.js/lib/asn1/base/buffer.js","../node_modules/asn1.js/lib/asn1/base/index.js","../node_modules/asn1.js/lib/asn1/base/node.js","../node_modules/asn1.js/lib/asn1/base/reporter.js","../node_modules/asn1.js/lib/asn1/constants/der.js","../node_modules/asn1.js/lib/asn1/constants/index.js","../node_modules/asn1.js/lib/asn1/decoders/der.js","../node_modules/asn1.js/lib/asn1/decoders/index.js","../node_modules/asn1.js/lib/asn1/decoders/pem.js","../node_modules/asn1.js/lib/asn1/encoders/der.js","../node_modules/asn1.js/lib/asn1/encoders/index.js","../node_modules/asn1.js/lib/asn1/encoders/pem.js","../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","../node_modules/asn1/lib/ber/errors.js","../node_modules/asn1/lib/ber/index.js","../node_modules/asn1/lib/ber/reader.js","../node_modules/asn1/lib/ber/types.js","../node_modules/asn1/lib/ber/writer.js","../node_modules/asn1/lib/index.js","../node_modules/assert-plus/assert.js","../node_modules/assert/build/assert.js","../node_modules/assert/build/internal/assert/assertion_error.js","../node_modules/assert/build/internal/errors.js","../node_modules/assert/build/internal/util/comparisons.js","../node_modules/aws-sign2/index.js","../node_modules/aws4/aws4.js","../node_modules/aws4/lru.js","../node_modules/axios/index.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/utils.js","../node_modules/base64-js/index.js","../node_modules/bcrypt-pbkdf/index.js","../node_modules/bech32/index.js","../node_modules/bitsyntax/index.js","../node_modules/bitsyntax/lib/compile.js","../node_modules/bitsyntax/lib/constructor.js","../node_modules/bitsyntax/lib/interp.js","../node_modules/bitsyntax/lib/parse.js","../node_modules/bitsyntax/lib/parser.js","../node_modules/bitsyntax/lib/pattern.js","../node_modules/bluebird/js/browser/bluebird.js","../node_modules/bn.js/lib/bn.js","../node_modules/brorand/index.js","../node_modules/browserify-aes/aes.js","../node_modules/browserify-aes/authCipher.js","../node_modules/browserify-aes/browser.js","../node_modules/browserify-aes/decrypter.js","../node_modules/browserify-aes/encrypter.js","../node_modules/browserify-aes/ghash.js","../node_modules/browserify-aes/incr32.js","../node_modules/browserify-aes/modes/cbc.js","../node_modules/browserify-aes/modes/cfb.js","../node_modules/browserify-aes/modes/cfb1.js","../node_modules/browserify-aes/modes/cfb8.js","../node_modules/browserify-aes/modes/ctr.js","../node_modules/browserify-aes/modes/ecb.js","../node_modules/browserify-aes/modes/index.js","../node_modules/browserify-aes/modes/ofb.js","../node_modules/browserify-aes/streamCipher.js","../node_modules/browserify-cipher/browser.js","../node_modules/browserify-des/index.js","../node_modules/browserify-des/modes.js","../node_modules/browserify-rsa/index.js","../node_modules/browserify-sign/algos.js","../node_modules/browserify-sign/browser/index.js","../node_modules/browserify-sign/browser/sign.js","../node_modules/browserify-sign/browser/verify.js","../node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","../node_modules/browserify-sign/node_modules/safe-buffer/index.js","../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js","../node_modules/buffer-equal-constant-time/index.js","../node_modules/buffer-more-ints/buffer-more-ints.js","../node_modules/buffer-xor/index.js","../node_modules/buffer/index.js","../node_modules/builtin-status-codes/browser.js","../node_modules/call-bind/callBound.js","../node_modules/call-bind/index.js","../node_modules/caseless/index.js","../node_modules/cent.js/dist/cent-methods.enum.js","../node_modules/cent.js/dist/cent.client.js","../node_modules/cent.js/dist/cent.exception.js","../node_modules/cent.js/dist/index.js","../node_modules/cent.js/dist/interfaces/cent-options.interface.js","../node_modules/cent.js/dist/interfaces/cent-params.interface.js","../node_modules/cent.js/dist/interfaces/cent-responses.interface.js","../node_modules/cent.js/dist/interfaces/client-info.interface.js","../node_modules/cent.js/dist/interfaces/index.js","../node_modules/cent.js/dist/interfaces/node.interface.js","../node_modules/cent.js/dist/interfaces/publication.interface.js","../node_modules/cent.js/dist/interfaces/stream-position.interface.js","../Centrifuge/webpack/universalModuleDefinition","../Centrifuge/src/centrifuge.js","../Centrifuge/src/index.js","../Centrifuge/src/json.js","../Centrifuge/src/subscription.js","../Centrifuge/src/utils.js","../Centrifuge/node_modules/events/events.js","../Centrifuge/webpack/bootstrap","../Centrifuge/webpack/runtime/global","../Centrifuge/webpack/startup","../node_modules/cipher-base/index.js","../node_modules/combined-stream/lib/combined_stream.js","../node_modules/core-util-is/lib/util.js","../node_modules/create-ecdh/browser.js","../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","../node_modules/create-hash/browser.js","../node_modules/create-hash/md5.js","../node_modules/create-hmac/browser.js","../node_modules/create-hmac/legacy.js","../node_modules/crypto-browserify/index.js","../node_modules/debug/src/browser.js","../node_modules/debug/src/debug.js","../node_modules/define-properties/index.js","../node_modules/delayed-stream/lib/delayed_stream.js","../node_modules/des.js/lib/des.js","../node_modules/des.js/lib/des/cbc.js","../node_modules/des.js/lib/des/cipher.js","../node_modules/des.js/lib/des/des.js","../node_modules/des.js/lib/des/ede.js","../node_modules/des.js/lib/des/utils.js","../node_modules/diffie-hellman/browser.js","../node_modules/diffie-hellman/lib/dh.js","../node_modules/diffie-hellman/lib/generatePrime.js","../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","../node_modules/ecc-jsbn/index.js","../node_modules/ecc-jsbn/lib/ec.js","../node_modules/ecc-jsbn/lib/sec.js","../node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js","../node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js","../node_modules/elliptic/lib/elliptic.js","../node_modules/elliptic/lib/elliptic/curve/base.js","../node_modules/elliptic/lib/elliptic/curve/edwards.js","../node_modules/elliptic/lib/elliptic/curve/index.js","../node_modules/elliptic/lib/elliptic/curve/mont.js","../node_modules/elliptic/lib/elliptic/curve/short.js","../node_modules/elliptic/lib/elliptic/curves.js","../node_modules/elliptic/lib/elliptic/ec/index.js","../node_modules/elliptic/lib/elliptic/ec/key.js","../node_modules/elliptic/lib/elliptic/ec/signature.js","../node_modules/elliptic/lib/elliptic/eddsa/index.js","../node_modules/elliptic/lib/elliptic/eddsa/key.js","../node_modules/elliptic/lib/elliptic/eddsa/signature.js","../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","../node_modules/elliptic/lib/elliptic/utils.js","../node_modules/elliptic/node_modules/bn.js/lib/bn.js","../node_modules/es6-object-assign/index.js","../node_modules/ethereum-cryptography/src/hash-utils.ts","../node_modules/ethereum-cryptography/src/keccak.ts","../node_modules/ethereum-cryptography/src/random.ts","../node_modules/ethereum-cryptography/src/secp256k1.ts","../node_modules/ethereum-tx-decoder/node_modules/bn.js/lib/bn.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/_version.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/constants.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/errors.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/abi-coder.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/address.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/bignumber.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/bytes.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/hash.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/interface.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/keccak256.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/properties.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/rlp.js","../node_modules/ethereum-tx-decoder/node_modules/ethers/utils/utf8.js","../node_modules/ethereum-tx-decoder/node_modules/js-sha3/src/sha3.js","../node_modules/ethereum-tx-decoder/src/FunctionDecoder.js","../node_modules/ethereum-tx-decoder/src/decodeTransaction.js","../node_modules/ethereum-tx-decoder/src/index.js","../node_modules/ethereumjs-abi/index.js","../node_modules/ethereumjs-abi/lib/index.js","../node_modules/ethereumjs-abi/node_modules/bn.js/lib/bn.js","../../src/account.ts","../../src/bytes.ts","../../src/constants.ts","../../src/hash.ts","../../src/object.ts","../../src/secp256k1v3-adapter.ts","../../secp256k1v3-lib/der.ts","../../secp256k1v3-lib/index.ts","../../src/signature.ts","../node_modules/ethereumjs-util/src/account.ts","../node_modules/ethereumjs-util/src/address.ts","../node_modules/ethereumjs-util/src/bytes.ts","../node_modules/ethereumjs-util/src/constants.ts","../node_modules/ethereumjs-util/src/externals.ts","../node_modules/ethereumjs-util/src/hash.ts","../node_modules/ethereumjs-util/src/helpers.ts","../node_modules/ethereumjs-util/src/index.ts","../node_modules/ethereumjs-util/src/internal.ts","../node_modules/ethereumjs-util/src/object.ts","../node_modules/ethereumjs-util/src/signature.ts","../node_modules/ethereumjs-util/src/types.ts","../node_modules/@ethersproject/bignumber/src.ts/fixednumber.ts","../node_modules/@ethersproject/hash/src.ts/message.ts","../node_modules/@ethersproject/hash/src.ts/_version.ts","../node_modules/@ethersproject/hash/src.ts/typed-data.ts","../node_modules/@ethersproject/sha2/src.ts/types.ts","../node_modules/@ethersproject/basex/src.ts/index.ts","../node_modules/@ethersproject/sha2/src.ts/_version.ts","../node_modules/@ethersproject/sha2/src.ts/browser-sha2.ts","../node_modules/@ethersproject/pbkdf2/src.ts/browser-pbkdf2.ts","../node_modules/@ethersproject/wordlists/src.ts/wordlist.ts","../node_modules/@ethersproject/wordlists/src.ts/_version.ts","../node_modules/@ethersproject/wordlists/src.ts/lang-en.ts","../node_modules/@ethersproject/wordlists/src.ts/browser-wordlists.ts","../node_modules/@ethersproject/hdnode/src.ts/index.ts","../node_modules/@ethersproject/hdnode/src.ts/_version.ts","../node_modules/@ethersproject/random/src.ts/_version.ts","../node_modules/@ethersproject/random/src.ts/browser-random.ts","../node_modules/@ethersproject/json-wallets/src.ts/utils.ts","../node_modules/@ethersproject/json-wallets/src.ts/_version.ts","../node_modules/@ethersproject/json-wallets/src.ts/keystore.ts","../node_modules/@ethersproject/json-wallets/src.ts/crowdsale.ts","../node_modules/@ethersproject/json-wallets/src.ts/inspect.ts","../node_modules/@ethersproject/json-wallets/src.ts/index.ts","../node_modules/@ethersproject/wallet/src.ts/_version.ts","../node_modules/@ethersproject/wallet/src.ts/index.ts","../node_modules/@ethersproject/constants/src.ts/addresses.ts","../node_modules/@ethersproject/constants/src.ts/hashes.ts","../node_modules/@ethersproject/constants/src.ts/strings.ts","../node_modules/@ethersproject/networks/src.ts/index.ts","../node_modules/@ethersproject/networks/src.ts/_version.ts","../node_modules/@ethersproject/base64/src.ts/browser-base64.ts","../node_modules/@ethersproject/hash/src.ts/ens-normalize/decoder.ts","../node_modules/@ethersproject/hash/src.ts/ens-normalize/lib.ts","../node_modules/@ethersproject/hash/src.ts/ens-normalize/include.ts","../node_modules/@ethersproject/hash/src.ts/namehash.ts","../node_modules/@ethersproject/web/src.ts/_version.ts","../node_modules/@ethersproject/web/src.ts/browser-geturl.ts","../node_modules/@ethersproject/web/src.ts/index.ts","../node_modules/@ethersproject/providers/src.ts/_version.ts","../node_modules/@ethersproject/providers/src.ts/formatter.ts","../node_modules/@ethersproject/providers/src.ts/base-provider.ts","../node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts","../node_modules/@ethersproject/providers/src.ts/browser-ws.ts","../node_modules/@ethersproject/providers/src.ts/websocket-provider.ts","../node_modules/@ethersproject/providers/src.ts/url-json-rpc-provider.ts","../node_modules/@ethersproject/providers/src.ts/alchemy-provider.ts","../node_modules/@ethersproject/providers/src.ts/ankr-provider.ts","../node_modules/@ethersproject/providers/src.ts/cloudflare-provider.ts","../node_modules/@ethersproject/providers/src.ts/etherscan-provider.ts","../node_modules/@ethersproject/random/src.ts/shuffle.ts","../node_modules/@ethersproject/providers/src.ts/fallback-provider.ts","../node_modules/@ethersproject/providers/src.ts/browser-ipc-provider.ts","../node_modules/@ethersproject/providers/src.ts/infura-provider.ts","../node_modules/@ethersproject/providers/src.ts/json-rpc-batch-provider.ts","../node_modules/@ethersproject/providers/src.ts/nodesmith-provider.ts","../node_modules/@ethersproject/providers/src.ts/pocket-provider.ts","../node_modules/@ethersproject/providers/src.ts/web3-provider.ts","../node_modules/@ethersproject/providers/src.ts/index.ts","../node_modules/@ethersproject/solidity/src.ts/index.ts","../node_modules/@ethersproject/solidity/src.ts/_version.ts","../node_modules/@ethersproject/strings/src.ts/idna.ts","../node_modules/@ethersproject/strings/src.ts/bytes32.ts","../node_modules/@ethersproject/units/src.ts/_version.ts","../node_modules/@ethersproject/units/src.ts/index.ts","../node_modules/ethers/src.ts/_version.ts","../node_modules/ethers/src.ts/ethers.ts","../node_modules/ethers/src.ts/index.ts","../node_modules/ethjs-util/lib/index.js","../node_modules/events/events.js","../node_modules/evp_bytestokey/index.js","../node_modules/extend/index.js","../node_modules/extsprintf/lib/extsprintf.js","../node_modules/fast-deep-equal/index.js","../node_modules/fast-json-stable-stringify/index.js","../node_modules/for-each/index.js","../node_modules/forever-agent/index.js","../node_modules/function-bind/implementation.js","../node_modules/function-bind/index.js","../node_modules/get-intrinsic/index.js","../node_modules/har-schema/lib/index.js","../node_modules/har-validator/lib/error.js","../node_modules/har-validator/lib/promise.js","../node_modules/has-property-descriptors/index.js","../node_modules/has-symbols/index.js","../node_modules/has-symbols/shams.js","../node_modules/has-tostringtag/shams.js","../node_modules/has/src/index.js","../node_modules/hash-base/index.js","../node_modules/hash-base/node_modules/readable-stream/errors-browser.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/hash-base/node_modules/readable-stream/readable-browser.js","../node_modules/hash-base/node_modules/safe-buffer/index.js","../node_modules/hash-base/node_modules/string_decoder/lib/string_decoder.js","../node_modules/hash.js/lib/hash.js","../node_modules/hash.js/lib/hash/common.js","../node_modules/hash.js/lib/hash/hmac.js","../node_modules/hash.js/lib/hash/ripemd.js","../node_modules/hash.js/lib/hash/sha.js","../node_modules/hash.js/lib/hash/sha/1.js","../node_modules/hash.js/lib/hash/sha/224.js","../node_modules/hash.js/lib/hash/sha/256.js","../node_modules/hash.js/lib/hash/sha/384.js","../node_modules/hash.js/lib/hash/sha/512.js","../node_modules/hash.js/lib/hash/sha/common.js","../node_modules/hash.js/lib/hash/utils.js","../node_modules/hmac-drbg/lib/hmac-drbg.js","../node_modules/http-signature/lib/index.js","../node_modules/http-signature/lib/parser.js","../node_modules/http-signature/lib/signer.js","../node_modules/http-signature/lib/utils.js","../node_modules/http-signature/lib/verify.js","../node_modules/https-browserify/index.js","../node_modules/ieee754/index.js","../node_modules/inherits/inherits_browser.js","../node_modules/is-arguments/index.js","../node_modules/is-callable/index.js","../node_modules/is-generator-function/index.js","../node_modules/is-hex-prefixed/src/index.js","../node_modules/is-nan/implementation.js","../node_modules/is-nan/index.js","../node_modules/is-nan/polyfill.js","../node_modules/is-nan/shim.js","../node_modules/is-typed-array/index.js","../node_modules/is-typedarray/index.js","../node_modules/isarray/index.js","../node_modules/isomorphic-ws/browser.js","../node_modules/isstream/isstream.js","../node_modules/js-sha3/src/sha3.js","../node_modules/jsbn/index.js","../node_modules/json-schema-traverse/index.js","../node_modules/json-schema/lib/validate.js","../node_modules/json-stringify-safe/stringify.js","../node_modules/jsonwebtoken/decode.js","../node_modules/jsonwebtoken/index.js","../node_modules/jsonwebtoken/lib/JsonWebTokenError.js","../node_modules/jsonwebtoken/lib/NotBeforeError.js","../node_modules/jsonwebtoken/lib/TokenExpiredError.js","../node_modules/jsonwebtoken/lib/psSupported.js","../node_modules/jsonwebtoken/lib/timespan.js","../node_modules/jsonwebtoken/node_modules/ms/index.js","../node_modules/jsonwebtoken/sign.js","../node_modules/jsonwebtoken/verify.js","../node_modules/jsprim/lib/jsprim.js","../node_modules/jwa/index.js","../node_modules/jws/index.js","../node_modules/jws/lib/data-stream.js","../node_modules/jws/lib/sign-stream.js","../node_modules/jws/lib/tostring.js","../node_modules/jws/lib/verify-stream.js","../node_modules/keccak/js.js","../node_modules/keccak/lib/api/index.js","../node_modules/keccak/lib/api/keccak.js","../node_modules/keccak/lib/api/shake.js","../node_modules/keccak/lib/keccak-state-unroll.js","../node_modules/keccak/lib/keccak.js","../node_modules/keccak/node_modules/readable-stream/errors-browser.js","../node_modules/keccak/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/keccak/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/keccak/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/keccak/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/keccak/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/keccak/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/keccak/node_modules/readable-stream/readable-browser.js","../node_modules/keccak/node_modules/safe-buffer/index.js","../node_modules/keccak/node_modules/string_decoder/lib/string_decoder.js","../node_modules/lodash.includes/index.js","../node_modules/lodash.isboolean/index.js","../node_modules/lodash.isinteger/index.js","../node_modules/lodash.isnumber/index.js","../node_modules/lodash.isplainobject/index.js","../node_modules/lodash.isstring/index.js","../node_modules/lodash.once/index.js","../node_modules/lodash.throttle/index.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_root.js","../node_modules/lodash/isArray.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isString.js","../node_modules/lodash/isUndefined.js","../node_modules/md5.js/index.js","../node_modules/miller-rabin/lib/mr.js","../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","../node_modules/mime-db/index.js","../node_modules/mime-types/index.js","../node_modules/minimalistic-assert/index.js","../node_modules/minimalistic-crypto-utils/lib/utils.js","../node_modules/ms/index.js","../node_modules/net/index.js","../node_modules/oauth-sign/index.js","../node_modules/object-is/implementation.js","../node_modules/object-is/index.js","../node_modules/object-is/polyfill.js","../node_modules/object-is/shim.js","../node_modules/object-keys/implementation.js","../node_modules/object-keys/index.js","../node_modules/object-keys/isArguments.js","../node_modules/os/index.js","../node_modules/parse-asn1/asn1.js","../node_modules/parse-asn1/certificate.js","../node_modules/parse-asn1/fixProc.js","../node_modules/parse-asn1/index.js","../node_modules/path/node_modules/inherits/inherits_browser.js","../node_modules/path/node_modules/util/support/isBufferBrowser.js","../node_modules/path/node_modules/util/util.js","../node_modules/path/path.js","../node_modules/pbkdf2/browser.js","../node_modules/pbkdf2/lib/async.js","../node_modules/pbkdf2/lib/default-encoding.js","../node_modules/pbkdf2/lib/precondition.js","../node_modules/pbkdf2/lib/sync-browser.js","../node_modules/pbkdf2/lib/to-buffer.js","../node_modules/performance-now/src/performance-now.coffee","../node_modules/process/browser.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/psl/index.js","../node_modules/public-encrypt/browser.js","../node_modules/public-encrypt/mgf.js","../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","../node_modules/public-encrypt/privateDecrypt.js","../node_modules/public-encrypt/publicEncrypt.js","../node_modules/public-encrypt/withPublic.js","../node_modules/public-encrypt/xor.js","../node_modules/punycode/punycode.es6.js","../node_modules/qs/lib/formats.js","../node_modules/qs/lib/index.js","../node_modules/qs/lib/parse.js","../node_modules/qs/lib/stringify.js","../node_modules/qs/lib/utils.js","../node_modules/querystring/decode.js","../node_modules/querystring/encode.js","../node_modules/querystring/index.js","../node_modules/querystringify/index.js","../node_modules/randombytes/browser.js","../node_modules/randomfill/browser.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-scroll/modules/components/Button.js","../node_modules/react-scroll/modules/components/Element.js","../node_modules/react-scroll/modules/components/Link.js","../node_modules/react-scroll/modules/index.js","../node_modules/react-scroll/modules/mixins/Helpers.js","../node_modules/react-scroll/modules/mixins/animate-scroll.js","../node_modules/react-scroll/modules/mixins/cancel-events.js","../node_modules/react-scroll/modules/mixins/passive-event-listeners.js","../node_modules/react-scroll/modules/mixins/scroll-element.js","../node_modules/react-scroll/modules/mixins/scroll-events.js","../node_modules/react-scroll/modules/mixins/scroll-hash.js","../node_modules/react-scroll/modules/mixins/scroll-link.js","../node_modules/react-scroll/modules/mixins/scroll-spy.js","../node_modules/react-scroll/modules/mixins/scroller.js","../node_modules/react-scroll/modules/mixins/smooth.js","../node_modules/react-scroll/modules/mixins/utils.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/readable-stream/duplex.js","../node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/readable-stream/lib/_stream_readable.js","../node_modules/readable-stream/lib/_stream_transform.js","../node_modules/readable-stream/lib/_stream_writable.js","../node_modules/readable-stream/passthrough.js","../node_modules/request-promise-core/configure/request2.js","../node_modules/request-promise-core/lib/errors.js","../node_modules/request-promise-core/lib/plumbing.js","../node_modules/request-promise/lib/rp.js","../node_modules/request-promise/node_modules/tough-cookie/lib/cookie.js","../node_modules/request-promise/node_modules/tough-cookie/lib/memstore.js","../node_modules/request-promise/node_modules/tough-cookie/lib/pathMatch.js","../node_modules/request-promise/node_modules/tough-cookie/lib/permuteDomain.js","../node_modules/request-promise/node_modules/tough-cookie/lib/pubsuffix-psl.js","../node_modules/request-promise/node_modules/tough-cookie/lib/store.js","../node_modules/request-promise/node_modules/tough-cookie/lib/version.js","../node_modules/request/index.js","../node_modules/request/lib/auth.js","../node_modules/request/lib/cookies.js","../node_modules/request/lib/getProxyFromURI.js","../node_modules/request/lib/har.js","../node_modules/request/lib/hawk.js","../node_modules/request/lib/helpers.js","../node_modules/request/lib/multipart.js","../node_modules/request/lib/oauth.js","../node_modules/request/lib/querystring.js","../node_modules/request/lib/redirect.js","../node_modules/request/lib/tunnel.js","../node_modules/request/node_modules/form-data/lib/browser.js","../node_modules/request/node_modules/tough-cookie/lib/cookie.js","../node_modules/request/node_modules/tough-cookie/lib/memstore.js","../node_modules/request/node_modules/tough-cookie/lib/pathMatch.js","../node_modules/request/node_modules/tough-cookie/lib/permuteDomain.js","../node_modules/request/node_modules/tough-cookie/lib/pubsuffix-psl.js","../node_modules/request/node_modules/tough-cookie/lib/store.js","../node_modules/request/node_modules/tough-cookie/lib/version.js","../node_modules/request/request.js","../node_modules/requires-port/index.js","../node_modules/ripemd160/index.js","../node_modules/rlp/src/index.ts","../node_modules/safe-buffer/index.js","../node_modules/safer-buffer/safer.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/scrypt-js/scrypt.js","../node_modules/secp256k1/elliptic.js","../node_modules/secp256k1/lib/elliptic.js","../node_modules/secp256k1/lib/index.js","../node_modules/semver/semver.js","../node_modules/serialize-error/index.js","../node_modules/sha.js/hash.js","../node_modules/sha.js/index.js","../node_modules/sha.js/sha.js","../node_modules/sha.js/sha1.js","../node_modules/sha.js/sha224.js","../node_modules/sha.js/sha256.js","../node_modules/sha.js/sha384.js","../node_modules/sha.js/sha512.js","../node_modules/sshpk/lib/algs.js","../node_modules/sshpk/lib/certificate.js","../node_modules/sshpk/lib/dhe.js","../node_modules/sshpk/lib/ed-compat.js","../node_modules/sshpk/lib/errors.js","../node_modules/sshpk/lib/fingerprint.js","../node_modules/sshpk/lib/formats/auto.js","../node_modules/sshpk/lib/formats/dnssec.js","../node_modules/sshpk/lib/formats/openssh-cert.js","../node_modules/sshpk/lib/formats/pem.js","../node_modules/sshpk/lib/formats/pkcs1.js","../node_modules/sshpk/lib/formats/pkcs8.js","../node_modules/sshpk/lib/formats/putty.js","../node_modules/sshpk/lib/formats/rfc4253.js","../node_modules/sshpk/lib/formats/ssh-private.js","../node_modules/sshpk/lib/formats/ssh.js","../node_modules/sshpk/lib/formats/x509-pem.js","../node_modules/sshpk/lib/formats/x509.js","../node_modules/sshpk/lib/identity.js","../node_modules/sshpk/lib/index.js","../node_modules/sshpk/lib/key.js","../node_modules/sshpk/lib/private-key.js","../node_modules/sshpk/lib/signature.js","../node_modules/sshpk/lib/ssh-buffer.js","../node_modules/sshpk/lib/utils.js","../node_modules/stealthy-require/lib/index.js","../node_modules/stream-browserify/index.js","../node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/stream-browserify/node_modules/safe-buffer/index.js","../node_modules/stream-browserify/node_modules/string_decoder/lib/string_decoder.js","../node_modules/stream-http/index.js","../node_modules/stream-http/lib/capability.js","../node_modules/stream-http/lib/request.js","../node_modules/stream-http/lib/response.js","../node_modules/stream-http/node_modules/readable-stream/errors-browser.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/stream-http/node_modules/readable-stream/readable-browser.js","../node_modules/stream-http/node_modules/safe-buffer/index.js","../node_modules/stream-http/node_modules/string_decoder/lib/string_decoder.js","../node_modules/string_decoder/index.js","../node_modules/strip-hex-prefix/src/index.js","../node_modules/tls/index.js","../node_modules/tunnel-agent/index.js","../node_modules/tweetnacl/nacl-fast.js","../node_modules/typed.js/lib/typed.js","../node_modules/uri-js/src/util.ts","../node_modules/uri-js/src/regexps-uri.ts","../node_modules/uri-js/src/regexps-iri.ts","../node_modules/uri-js/node_modules/punycode/punycode.es6.js","../node_modules/uri-js/src/uri.ts","../node_modules/uri-js/src/schemes/http.ts","../node_modules/uri-js/src/schemes/https.ts","../node_modules/uri-js/src/schemes/ws.ts","../node_modules/uri-js/src/schemes/wss.ts","../node_modules/uri-js/src/schemes/mailto.ts","../node_modules/uri-js/src/schemes/urn.ts","../node_modules/uri-js/src/schemes/urn-uuid.ts","../node_modules/uri-js/src/index.ts","../node_modules/url-parse/index.js","../node_modules/url/node_modules/punycode/punycode.js","../node_modules/url/url.js","../node_modules/url/util.js","../node_modules/util-deprecate/browser.js","../node_modules/util/support/isBufferBrowser.js","../node_modules/util/support/types.js","../node_modules/util/util.js","../node_modules/uuid/lib/bytesToUuid.js","../node_modules/uuid/lib/rng-browser.js","../node_modules/uuid/v4.js","../node_modules/verror/lib/verror.js","../node_modules/verror/node_modules/core-util-is/lib/util.js","../node_modules/which-typed-array/index.js","../node_modules/ws/index.js","../node_modules/ws/lib/buffer-util.js","../node_modules/ws/lib/constants.js","../node_modules/ws/lib/event-target.js","../node_modules/ws/lib/extension.js","../node_modules/ws/lib/limiter.js","../node_modules/ws/lib/permessage-deflate.js","../node_modules/ws/lib/receiver.js","../node_modules/ws/lib/sender.js","../node_modules/ws/lib/stream.js","../node_modules/ws/lib/subprotocol.js","../node_modules/ws/lib/validation.js","../node_modules/ws/lib/websocket-server.js","../node_modules/ws/lib/websocket.js","../node_modules/xtend/immutable.js","../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/construct.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/createSuper.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/isNativeFunction.js","../node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/iterableToArray.js","../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/nonIterableRest.js","../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/objectSpread2.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/slicedToArray.js","../node_modules/@babel/runtime/helpers/toConsumableArray.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../node_modules/available-typed-arrays/index.js","../node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../node_modules/@babel/runtime/helpers/esm/get.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../webpack/bootstrap","../webpack/runtime/amd options","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../webpack/startup"],"sourcesContent":["import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","var _defs, _style, _use;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoColored(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n width: 512,\n height: 512,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"logo512\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"image\", {\n width: 441,\n height: 493,\n id: \"img1\",\n href: \"data:image/png;base64,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\"\n }))), _style || (_style = /*#__PURE__*/React.createElement(\"style\", null)), _use || (_use = /*#__PURE__*/React.createElement(\"use\", {\n id: \"Background\",\n href: \"#img1\",\n x: 40,\n y: 7\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoColored);\nexport default __webpack_public_path__ + \"static/media/logoColored.9222b4c401bd17615a8fa18eba62d315.svg\";\nexport { ForwardRef as ReactComponent };","import './Header.scss';\nimport {Link} from 'react-scroll';\nimport {useState} from 'react';\nimport logo from '../assets/logoColored.svg';\n\nconst Header = () => {\n const [navClicked, setnavClicked] = useState(false);\n const handleClick = () => setnavClicked(!navClicked);\n \n return(\n
\n \"Charles\n
\n \n \n
\n \n
\n )\n};\n\nexport default Header;\n","import Typed from 'typed.js';\nimport React from 'react';\n\nclass Typer extends React.Component {\n componentDidMount() {\n const { strings } = this.props;\n const options = {\n strings: strings,\n typeSpeed: 40,\n backSpeed: 40\n };\n this.typed = new Typed(this.el, options);\n }\n \n componentWillUnmount() {\n this.typed.destroy();\n }\n \n render() {\n return (\n { this.el = el; }}\n />\n );\n }\n };\n\n export default Typer;","import './Welcome.scss';\nimport Typer from './Typer';\n\nconst Welcome = ({welcomeProps}) => {\n\n const renderContent = () => {\n if(welcomeProps.loaded){\n return(\n
\n \n
\n )\n } else {\n return
\n }\n }\n\n return(\n
\n {renderContent()}\n
\n )\n};\nexport default Welcome;\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}","import './Experience.scss';\nimport {useEffect, useState, useRef} from 'react';\nimport img01 from '../assets/exp01.jpeg';\nimport img02 from '../assets/exp02.png';\nimport img03 from '../assets/exp03.jpeg';\nimport img04 from '../assets/exp04.jpeg';\nimport img05 from '../assets/exp05.png';\n\nfunction viewportToPixels(value) {\n var parts = value.match(/([0-9\\.]+)(vh|vw)/)\n var q = Number(parts[1])\n var side = window[['innerHeight', 'innerWidth'][['vh', 'vw'].indexOf(parts[2])]]\n return side * (q/100)\n}\n\nconst positions = [\n {id: \"Exp01\", x: viewportToPixels('6vw'), y: viewportToPixels('5vh'), available: 0, lastFloat: 0},\n {id: \"Exp02\", x: viewportToPixels('23vw'), y: viewportToPixels('9vh'), available: 0, lastFloat: 0},\n {id: \"Exp03\", x: viewportToPixels('39vw'), y: viewportToPixels('7vh'), available: 0, lastFloat: 0},\n {id: \"Exp04\", x: viewportToPixels('62vw'), y: viewportToPixels('9vh'), available: 0, lastFloat: 0},\n {id: \"Exp05\", x: viewportToPixels('74vw'), y: viewportToPixels('5vh'), available: 0, lastFloat: 0}\n ];\n\nconst styles = [\n {id: \"Exp01\", z: 5, scale: 1, color: getComputedStyle(document.documentElement).getPropertyValue('--color-1')},\n {id: \"Exp02\", z: 4, scale: 1, color: getComputedStyle(document.documentElement).getPropertyValue('--color-2')},\n {id: \"Exp03\", z: 3, scale: 1, color: getComputedStyle(document.documentElement).getPropertyValue('--color-1')},\n {id: \"Exp04\", z: 2, scale: 1, color: getComputedStyle(document.documentElement).getPropertyValue('--color-2')},\n {id: \"Exp05\", z: 1, scale: 1, color: getComputedStyle(document.documentElement).getPropertyValue('--color-3')}\n ];\n\nconst Experience = () => {\n const [position, setPosition] = useState(positions);\n const [expBoxMax, setexpBoxMax] = useState({minX: 0, minY: 0, maxX: 0, maxY: 0, top: 0, left: 0});\n const [draggedItem, setDraggedItem] = useState({ x: null, y: null});\n const [time, setTime] = useState(Date.now());\n const [style, setStyle] = useState(styles);\n const [dotPosition, setDotPosition] = useState({x: 0, y:0});\n const dragItem = useRef({id: null, x: null, y: null});\n const expBox = useRef(null);\n const exp01 = useRef(null);\n\n useEffect(() => {\n const interval = setInterval(() => setTime(Date.now()), 3000);\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n useEffect(() => {\n // Set up Exp Box borders\n setexpBoxMax(\n { minX : 0.05 * expBox.current.clientWidth,\n minY : expBox.current.style.marginTop, \n maxX : 0.95 * expBox.current.clientWidth - exp01.current.clientWidth, \n maxY : expBox.current.clientHeight - exp01.current.clientHeight,\n top: expBox.current.getBoundingClientRect().top,\n left: expBox.current.getBoundingClientRect().left\n });\n // Change Big Dot\n style.map(item => {\n if (item.z === 5){\n const element = document.getElementById(\"Dot-\"+ item.id);\n const x = element.getBoundingClientRect().left - element.offsetWidth/2;\n document.getElementById(\"BigDot\").style.background = item.color;\n setDotPosition({x: x, y: - 9});\n }\n });\n }, [style,exp01]);\n\n //Use Effect that enables movement\n useEffect(() => {\n var now = Date.now();\n if (dragItem.current.id){\n const current = document.getElementById(dragItem.current.id);\n const rect = document.getElementById(dragItem.current.id).getBoundingClientRect();\n\n setPosition(position.map((item, i) => {\n if (item.id === dragItem.current.id) {\n return {\n ...item,\n x: Math.min(Math.max(draggedItem.x - expBoxMax.left - dragItem.current.x, expBoxMax.minX), expBoxMax.maxX),\n y: Math.min(Math.max(draggedItem.y - expBoxMax.top - dragItem.current.y, expBoxMax.minY), expBoxMax.maxY),\n available: now + 200,\n lastFloat: 0\n };\n } else if ( item.available < now && \n (Math.abs(rect.right - item.x) <= 10 ||\n Math.abs(item.x + current.clientWidth - rect.left) <= 15)){\n document.getElementById(item.id).style.transition = \"transform 0.8s ease-in-out 0s\";\n var border = ( item.x < expBoxMax.minX + current.clientWidth/2 || item.x + current.clientWidth/2 > expBoxMax.maxX) ? (expBoxMax.maxX + current.clientWidth)/2 : item.x;\n var sens = (current.clientWidth/2 + rect.left > border) ? -1 : 1;\n sens = (border === (expBoxMax.maxX + current.clientWidth)/2) ? sens * 2 : sens;\n return {\n ...item,\n x: Math.min(Math.max(item.x + Math.floor(((Math.random() * 101) + current.clientWidth/2) * sens), expBoxMax.minX), expBoxMax.maxX),\n y: Math.min(Math.max(item.y + Math.floor(Math.random() * 101) - 50, expBoxMax.minY), expBoxMax.maxY),\n available: now + 800,\n lastFloat: 0\n };\n } else if (item.available < now && item.lastFloat < now){\n document.getElementById(item.id).style.transition = \"transform 4.5s ease-in-out 0s\";\n return {\n ...item,\n x: Math.min(Math.max(item.x + Math.floor(Math.random() * 21) - 10, expBoxMax.minX || expBox.current.style.paddingLeft), expBoxMax.maxX || expBox.current.clientWidth - document.getElementById(item.id).clientWidth),\n y: Math.min(Math.max(item.y + Math.floor(Math.random() * 21) - 10, expBoxMax.minY || expBox.current.style.paddingTop), expBoxMax.maxY || expBox.current.clientHeight - document.getElementById(item.id).clientHeight),\n available: 0,\n lastFloat: now + 4000\n }\n } else {\n return item;\n }\n }));\n } else {\n setPosition(position.map(item => {\n if (item.available < now && item.lastFloat < now){\n document.getElementById(item.id).style.transition = \"transform 4.5s ease-in-out 0s\";\n return {\n ...item,\n x: Math.min(Math.max(item.x + Math.floor(Math.random() * 21) - 10, expBoxMax.minX || expBox.current.style.paddingLeft), expBoxMax.maxX || expBox.current.clientWidth - document.getElementById(item.id).clientWidth),\n y: Math.min(Math.max(item.y + Math.floor(Math.random() * 21) - 10, expBoxMax.minY || expBox.current.style.paddingTop), expBoxMax.maxY || expBox.current.clientHeight - document.getElementById(item.id).clientHeight),\n available: 0,\n lastFloat: now + 4000\n }\n } else {\n return item;\n }\n }));\n }\n }, [draggedItem, time]);\n\n const dragStart = (e) => {\n const current = e.currentTarget;\n const currZ = current.style.zIndex;\n //Send dragged div to front\n setStyle(style.map(item => {\n if (item.id === current.id){\n return {\n ...item,\n z: 5\n }\n } else {\n var pos = item.z + 5 - currZ;\n return {\n ...item,\n z: (pos > 5) ? pos - 5 : pos\n }\n }\n }));\n current.style.transition = \"transform 0.2s ease-out 0s\";\n\n //Set dragItem coordinatees\n dragItem.current = {\n id: current.id,\n x: (e.type === \"mousedown\") ? e.clientX - current.getBoundingClientRect().x : e.touches[0].clientX - current.getBoundingClientRect().x,\n y: (e.type === \"mousedown\") ? e.clientY - current.getBoundingClientRect().y : e.touches[0].clientY - current.getBoundingClientRect().y\n };\n\n window.addEventListener('mousemove', drag);\n window.addEventListener('touchmove', drag);\n window.addEventListener('mouseup', drop);\n window.addEventListener('touchend', drop);\n };\n\n const drag = (e) =>{\n setDraggedItem({\n x: (e.type === \"mousemove\") ? e.clientX : e.touches[0].clientX,\n y: (e.type === \"mousemove\") ? e.clientY : e.touches[0].clientY\n });\n };\n\n const drop = () => {\n dragItem.current = {id: null, x: 0, y: 0 };\n window.removeEventListener('mousemove', drag);\n window.removeEventListener('touchmove', drag);\n window.removeEventListener('mouseup', drop);\n window.removeEventListener('touchend', drop);\n };\n\n const prev = () =>{\n setStyle(style.map(item => {\n return {\n ...item,\n z: (item.z === 1) ? 5 : item.z - 1\n }\n }));\n };\n\n const next = () =>{\n setStyle(style.map(item => {\n return {\n ...item,\n z: (item.z === 5) ? 1 : item.z + 1\n }\n }));\n };\n\n return(\n
\n

Employment history

\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \"\"/\n
    \n
  • Product
  • \n
  • Strategy
  • \n
\n
\n
\n

Consultant Data Product Owner

\n

Artefact, Paris
Sep. 2021 - Today

\n

\n Orchestrated as a Product Owner a machine learning based solutions that drove Sodexo's North America airlines lounges workforce management.\n

\n
\n
\n
\n
\n \"\"/\n
    \n
  • Product
  • \n
  • Banking
  • \n
\n
\n
\n

Consultant Product Owner

\n

Freelance, Paris
Oct. 2019 - Sep. 2021

\n

\n Founded a consulting firm that supported private banks in their core banking transformation.
\n Aided as a Product Owner SwissLife Banque Privée on a regulatory related project.
\n

\n
\n
\n
\n
\n \"\"/\n
    \n
  • Product
  • \n
  • Banking
  • \n
\n
\n
\n

Consultant Product Owner

\n

Accenture, Paris
Nov. 2017 - Aug. 2019

\n

\n Contributed to the evolution of Societe Generale Private Bank regulatory systems to be compliant with ACPR.
\n Guided the AML and client risk management tool update.\n

\n
\n
\n
\n
\n \"\"/\n
    \n
  • Product
  • \n
  • Healthcare
  • \n
\n
\n
\n

Transformation Engineer

\n

GE Healthcare, Paris
Jul. 2017 - Nov. 2017

\n

\n Developed methodologies and devices to smooth the production lines of the mammograph.
\n Scoped an MVP of a test bench for the new mammograph scanner Pristina.
\n

\n
\n
\n
\n
\n \"\"/\n
    \n
  • Product
  • \n
  • Healthcare
  • \n
\n
\n
\n

Internship R&D Engineer

\n

MyBrain Technologies, Paris
Jul. 2015 - Jul. 2016

\n

\n Headed design and production of electrodes & test bench for an electroencephalogram.
\n Conducted data analysis to determine customers' trends.
\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n );\n};\nexport default Experience;","import './Education.scss';\nimport ed01 from '../assets/ed01.png';\nimport ed02 from '../assets/ed02.jpeg';\nimport ed03 from '../assets/ed03.jpeg';\n\nconst Education = () => (\n
\n

Education

\n
\n
\n
\n \"\"/\n

Corporate Strategy

\n
\n
\n

Master Corporate Stategy

\n

Sciences Po, Paris
Sep. 2020 - Jun. 2021

\n

\n Cool projects I have worked on:
\n
\n ‣ Research on effect of social media on Uyghur situation. Data analysis on Twitter & Facebook API.

\n ‣ Research on the chilean toilet paper collusion.

\n ‣ Strategic roadmap of a Scale-Up company.\n

\n
\n
\n
\n
\n
\n \"\"/\n

Bio Electronic

\n
\n
\n

Exchange Student Electronic

\n

Tampere University, Finland
Jan. 2017 - Jun. 2017

\n

\n Cool projects I have worked on:

\n ‣ Development of eye glasses to monitor the stress and concentration of ADHD children.

\n ‣ Research on brain electrodes for hard of hearing.

\n ‣ Built an electrocardiogram with basic electronics. \n

\n
\n
\n
\n
\n
\n \"\"/\n

Software Engineering

\n
\n
\n

Master Software Engineering

\n

ISEP, Paris
Sep. 2012 - Jun. 2017

\n

\n Cool projects I have worked on:

\n ‣ Development of a web-app to help choose courses.

\n ‣ Development of self communicating robots.

\n ‣ Development of an e-Commerce short-cycle vegetable sales platform.\n

\n
\n
\n
\n
\n
\n );\n \nexport default Education;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","const CONTRACT_ADDRESS = '0x623fEB8aeD0DAe484E7f1DB427465825896eeD64';\nconst API_KEY = '01iK9-ZOM.364a805f-5e51-46ae-a81a-51f36c40eb8c';\n\nexport { CONTRACT_ADDRESS, API_KEY };","var _g, _g2, _g3, _g4, _g5, _g6, _g7, _g8, _g9, _g10, _g11, _g12, _g13, _g14, _g15, _g16;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLinkedin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 310 310\",\n style: {\n enableBackground: \"new 0 0 310 310\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"XMLID_801_\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"XMLID_802_\",\n d: \"M72.16,99.73H9.927c-2.762,0-5,2.239-5,5v199.928c0,2.762,2.238,5,5,5H72.16c2.762,0,5-2.238,5-5V104.73 C77.16,101.969,74.922,99.73,72.16,99.73z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"XMLID_803_\",\n d: \"M41.066,0.341C18.422,0.341,0,18.743,0,41.362C0,63.991,18.422,82.4,41.066,82.4 c22.626,0,41.033-18.41,41.033-41.038C82.1,18.743,63.692,0.341,41.066,0.341z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"XMLID_804_\",\n d: \"M230.454,94.761c-24.995,0-43.472,10.745-54.679,22.954V104.73c0-2.761-2.238-5-5-5h-59.599 c-2.762,0-5,2.239-5,5v199.928c0,2.762,2.238,5,5,5h62.097c2.762,0,5-2.238,5-5v-98.918c0-33.333,9.054-46.319,32.29-46.319 c25.306,0,27.317,20.818,27.317,48.034v97.204c0,2.762,2.238,5,5,5H305c2.762,0,5-2.238,5-5V194.995 C310,145.43,300.549,94.761,230.454,94.761z\"\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null)), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", null)), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", null)), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", null)), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", null)), _g7 || (_g7 = /*#__PURE__*/React.createElement(\"g\", null)), _g8 || (_g8 = /*#__PURE__*/React.createElement(\"g\", null)), _g9 || (_g9 = /*#__PURE__*/React.createElement(\"g\", null)), _g10 || (_g10 = /*#__PURE__*/React.createElement(\"g\", null)), _g11 || (_g11 = /*#__PURE__*/React.createElement(\"g\", null)), _g12 || (_g12 = /*#__PURE__*/React.createElement(\"g\", null)), _g13 || (_g13 = /*#__PURE__*/React.createElement(\"g\", null)), _g14 || (_g14 = /*#__PURE__*/React.createElement(\"g\", null)), _g15 || (_g15 = /*#__PURE__*/React.createElement(\"g\", null)), _g16 || (_g16 = /*#__PURE__*/React.createElement(\"g\", null)));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLinkedin);\nexport default __webpack_public_path__ + \"static/media/linkedin.d09d64fe30b941c2d5dba4695179f496.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _g, _g2, _g3, _g4, _g5, _g6, _g7, _g8, _g9, _g10, _g11, _g12, _g13, _g14, _g15;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPhone(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 53.942 53.942\",\n style: {\n enableBackground: \"new 0 0 53.942 53.942\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M53.364,40.908c-2.008-3.796-8.981-7.912-9.288-8.092c-0.896-0.51-1.831-0.78-2.706-0.78c-1.301,0-2.366,0.596-3.011,1.68 c-1.02,1.22-2.285,2.646-2.592,2.867c-2.376,1.612-4.236,1.429-6.294-0.629L17.987,24.467c-2.045-2.045-2.233-3.928-0.632-6.291 c0.224-0.309,1.65-1.575,2.87-2.596c0.778-0.463,1.312-1.151,1.546-1.995c0.311-1.123,0.082-2.444-0.652-3.731 c-0.173-0.296-4.291-7.27-8.085-9.277c-0.708-0.375-1.506-0.573-2.306-0.573c-1.318,0-2.558,0.514-3.49,1.445L4.7,3.986 c-4.014,4.013-5.467,8.562-4.321,13.52c0.956,4.132,3.742,8.529,8.282,13.068l14.705,14.705c5.746,5.746,11.224,8.66,16.282,8.66 c0,0,0,0,0.001,0c3.72,0,7.188-1.581,10.305-4.698l2.537-2.537C54.033,45.163,54.383,42.833,53.364,40.908z\"\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null)), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null)), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", null)), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", null)), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", null)), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", null)), _g7 || (_g7 = /*#__PURE__*/React.createElement(\"g\", null)), _g8 || (_g8 = /*#__PURE__*/React.createElement(\"g\", null)), _g9 || (_g9 = /*#__PURE__*/React.createElement(\"g\", null)), _g10 || (_g10 = /*#__PURE__*/React.createElement(\"g\", null)), _g11 || (_g11 = /*#__PURE__*/React.createElement(\"g\", null)), _g12 || (_g12 = /*#__PURE__*/React.createElement(\"g\", null)), _g13 || (_g13 = /*#__PURE__*/React.createElement(\"g\", null)), _g14 || (_g14 = /*#__PURE__*/React.createElement(\"g\", null)), _g15 || (_g15 = /*#__PURE__*/React.createElement(\"g\", null)));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPhone);\nexport default __webpack_public_path__ + \"static/media/phone.6c48d180bcaaa1989d9912b35208fc46.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2, _g3, _g4, _g5, _g6, _g7, _g8, _g9, _g10, _g11, _g12, _g13, _g14, _g15, _g16;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgMail(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 330.001 330.001\",\n style: {\n enableBackground: \"new 0 0 330.001 330.001\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"XMLID_348_\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"XMLID_350_\",\n d: \"M173.871,177.097c-2.641,1.936-5.756,2.903-8.87,2.903c-3.116,0-6.23-0.967-8.871-2.903L30,84.602 L0.001,62.603L0,275.001c0.001,8.284,6.716,15,15,15L315.001,290c8.285,0,15-6.716,15-14.999V62.602l-30.001,22L173.871,177.097z\"\n }), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"XMLID_351_\",\n points: \"165.001,146.4 310.087,40.001 19.911,40 \"\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null)), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", null)), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", null)), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", null)), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", null)), _g7 || (_g7 = /*#__PURE__*/React.createElement(\"g\", null)), _g8 || (_g8 = /*#__PURE__*/React.createElement(\"g\", null)), _g9 || (_g9 = /*#__PURE__*/React.createElement(\"g\", null)), _g10 || (_g10 = /*#__PURE__*/React.createElement(\"g\", null)), _g11 || (_g11 = /*#__PURE__*/React.createElement(\"g\", null)), _g12 || (_g12 = /*#__PURE__*/React.createElement(\"g\", null)), _g13 || (_g13 = /*#__PURE__*/React.createElement(\"g\", null)), _g14 || (_g14 = /*#__PURE__*/React.createElement(\"g\", null)), _g15 || (_g15 = /*#__PURE__*/React.createElement(\"g\", null)), _g16 || (_g16 = /*#__PURE__*/React.createElement(\"g\", null)));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMail);\nexport default __webpack_public_path__ + \"static/media/mail.09f59b228b67847fa9c917396a218b25.svg\";\nexport { ForwardRef as ReactComponent };","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","/**\n * @license\n * Copyright 2010-2022 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '144';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022; // @deprecated since r137\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\nconst _SRGBAFormat = 1035; // fallback for WebGL 1\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nvar MathUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n});\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\n// JavaScript RGB-to-RGB transforms, defined as\n// FN[InputColorSpace][OutputColorSpace] callback functions.\nconst FN = {\n\t[ SRGBColorSpace ]: { [ LinearSRGBColorSpace ]: SRGBToLinear },\n\t[ LinearSRGBColorSpace ]: { [ SRGBColorSpace ]: LinearToSRGB },\n};\n\nconst ColorManagement = {\n\n\tlegacyMode: true,\n\n\tget workingColorSpace() {\n\n\t\treturn LinearSRGBColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' );\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.legacyMode || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tif ( FN[ sourceColorSpace ] && FN[ sourceColorSpace ][ targetColorSpace ] !== undefined ) {\n\n\t\t\tconst fn = FN[ sourceColorSpace ][ targetColorSpace ];\n\n\t\t\tcolor.r = fn( color.r );\n\t\t\tcolor.g = fn( color.g );\n\t\t\tcolor.b = fn( color.b );\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tthrow new Error( 'Unsupported color space conversion.' );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this.workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this.workingColorSpace );\n\n\t},\n\n};\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _rgb = { r: 0, g: 0, b: 0 };\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction toComponents( source, target ) {\n\n\ttarget.r = source.r;\n\ttarget.g = source.g;\n\ttarget.b = source.b;\n\n\treturn target;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = LinearSRGBColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = LinearSRGBColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseFloat( color[ 2 ] ) / 100;\n\t\t\t\t\t\tconst l = parseFloat( color[ 3 ] ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l, colorSpace );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\treturn clamp( _rgb.r * 255, 0, 255 ) << 16 ^ clamp( _rgb.g * 255, 0, 255 ) << 8 ^ clamp( _rgb.b * 255, 0, 255 ) << 0;\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = LinearSRGBColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\tconst r = _rgb.r, g = _rgb.g, b = _rgb.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = LinearSRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\ttarget.r = _rgb.r;\n\t\ttarget.g = _rgb.g;\n\t\ttarget.b = _rgb.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ _rgb.r } ${ _rgb.g } ${ _rgb.b })`;\n\n\t\t}\n\n\t\treturn `rgb(${( _rgb.r * 255 ) | 0},${( _rgb.g * 255 ) | 0},${( _rgb.b * 255 ) | 0})`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width, height, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\tthis.texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.flipY = false;\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t\tthis.samples = options.samples !== undefined ? options.samples : 0;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width, height, depth ) {\n\n\t\tsuper( width, height );\n\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width, height, depth ) {\n\n\t\tsuper( width, height );\n\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget {\n\n\tconstructor( width, height, count, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLMultipleRenderTargets = true;\n\n\t\tconst texture = this.texture;\n\n\t\tthis.texture = [];\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.texture[ i ] = texture.clone();\n\t\t\tthis.texture[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.texture.length; i < il; i ++ ) {\n\n\t\t\t\tthis.texture[ i ].image.width = width;\n\t\t\t\tthis.texture[ i ].image.height = height;\n\t\t\t\tthis.texture[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.dispose();\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.set( 0, 0, this.width, this.height );\n\t\tthis.scissor.set( 0, 0, this.width, this.height );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.texture.length = 0;\n\n\t\tfor ( let i = 0, il = source.texture.length; i < il; i ++ ) {\n\n\t\t\tthis.texture[ i ] = source.texture[ i ].clone();\n\t\t\tthis.texture[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// Derived from http://planning.cs.uiuc.edu/node198.html\n\t\t// Note, this source uses w, x, y, z ordering,\n\t\t// so we swap the order below.\n\n\t\tconst u1 = Math.random();\n\t\tconst sqrt1u1 = Math.sqrt( 1 - u1 );\n\t\tconst sqrtu1 = Math.sqrt( u1 );\n\n\t\tconst u2 = 2 * Math.PI * Math.random();\n\n\t\tconst u3 = 2 * Math.PI * Math.random();\n\n\t\treturn this.set(\n\t\t\tsqrt1u1 * Math.cos( u2 ),\n\t\t\tsqrtu1 * Math.sin( u3 ),\n\t\t\tsqrtu1 * Math.cos( u3 ),\n\t\t\tsqrt1u1 * Math.sin( u2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// Derived from https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst u = ( Math.random() - 0.5 ) * 2;\n\t\tconst t = Math.random() * Math.PI * 2;\n\t\tconst f = Math.sqrt( 1 - u ** 2 );\n\n\t\tthis.x = f * Math.cos( t );\n\t\tthis.y = f * Math.sin( t );\n\t\tthis.z = u;\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( precise && geometry.attributes != undefined && geometry.attributes.position !== undefined ) {\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tfor ( let i = 0, l = position.count; i < l; i ++ ) {\n\n\t\t\t\t\t_vector$b.fromBufferAttribute( position, i ).applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t}\n\n\t\t\t\t_box$3.copy( geometry.boundingBox );\n\t\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$3 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$3.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$3, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$3 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$b.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _toFarthestPoint = /*@__PURE__*/ new Vector3();\nconst _toPoint = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$2.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671\n\n\t\t_toPoint.subVectors( point, this.center );\n\n\t\tconst lengthSq = _toPoint.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\t\t\tconst missingRadiusHalf = ( length - this.radius ) * 0.5;\n\n\t\t\t// Nudge this sphere towards the target point. Add half the missing distance to radius,\n\t\t\t// and the other half to position. This gives a tighter enclosure, instead of if\n\t\t\t// the whole missing distance were just added to radius.\n\n\t\t\tthis.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );\n\t\t\tthis.radius += missingRadiusHalf;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769\n\n\t\t// To enclose another sphere into this sphere, we only need to enclose two points:\n\t\t// 1) Enclose the farthest point on the other sphere into this sphere.\n\t\t// 2) Enclose the opposite point of the farthest point into this sphere.\n\n\t\t if ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t _toFarthestPoint.set( 0, 0, 1 ).multiplyScalar( sphere.radius );\n\n\n\t\t} else {\n\n\t\t\t_toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );\n\n\t\t}\n\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _toFarthestPoint ) );\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _toFarthestPoint ) );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$1.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$1, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n\t// @deprecated since r138, 02cf0df1cb4575d5842fef9c85bb5a89fe020d53\n\n\ttoVector3() {\n\n\t\tconsole.error( 'THREE.Euler: .toVector3() has been removed. Use Vector3.setFromEuler() instead' );\n\n\t}\n\n}\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DefaultMatrixWorldAutoUpdate; // checked by the renderer\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.matrixWorldAutoUpdate === true || force === true ) {\n\n\t\t\t\tchild.updateMatrixWorld( force );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null && parent.matrixWorldAutoUpdate === true ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tif ( child.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DefaultUp = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\nObject3D.DefaultMatrixWorldAutoUpdate = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3$1.x );\n\t\ttarget.addScaledVector( uv2, _v3$1.y );\n\t\ttarget.addScaledVector( uv3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n\t// @deprecated\n\n\tcopyColorsArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyColorsArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector2sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector2sArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector3sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector3sArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector4sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector4sArray() was removed in r144.' );\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float64BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$1 = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$1 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$1.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$1.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = this.getAttribute( 'tangent' ).array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t// @deprecated since r144\n\n\tmerge() {\n\n\t\tconsole.error( 'THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeBufferGeometries() instead.' );\n\t\treturn this;\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\t return new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\t// geometry generator parameters\n\n\t\tif ( source.parameters !== undefined ) this.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv2 = geometry.attributes.uv2;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA$1.fromBufferAttribute( position, a );\n\t_vB$1.fromBufferAttribute( position, b );\n\t_vC$1.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA$1 ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB$1 ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC$1 ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA$1.add( _morphA );\n\t\t_vB$1.add( _morphB );\n\t\t_vC$1.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA$1 );\n\t\tobject.boneTransform( b, _vB$1 );\n\t\tobject.boneTransform( c, _vC$1 );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv2, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv2, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst fov = 90, aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst currentToneMapping = renderer.toneMapping;\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.toneMapping = currentToneMapping;\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$2.center.set( 0, 0, 0 );\n\t\t_sphere$2.radius = 0.7071067811865476;\n\t\t_sphere$2.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = 5121;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( V * D );\\n}\\n#ifdef USE_IRIDESCENCE\\n\\tvec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\t return vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat R21 = R12;\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = dFdx( surf_pos.xyz );\\n\\t\\tvec3 vSigmaY = dFdy( surf_pos.xyz );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat luminance( const in vec3 rgb ) {\\n\\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\\n\\treturn dot( weights, rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_v0 0.339\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_v1 0.276\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_v4 0.046\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_v5 0.016\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_v6 0.0038\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"vec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\t}\\n\\t\\treturn distanceFalloff;\\n\\t#else\\n\\t\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\t\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t\\t}\\n\\t\\treturn 1.0;\\n\\t#endif\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\\n\\t#endif\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n};\\nvec3 clearcoatSpecular = vec3( 0.0 );\\nvec3 sheenSpecular = vec3( 0.0 );\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\\n\\t#else\\n\\t\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef USE_CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometry, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\t\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\t\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\t\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t\\tuniform sampler2DArray morphTargetsTexture;\\n\\t\\tuniform ivec2 morphTargetsTextureSize;\\n\\t\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t\\t}\\n\\t#else\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t\\t#else\\n\\t\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\t\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\t\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\t\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar output_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if defined( USE_SHADOWMAP ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_COORDS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tuniform int boneTextureSize;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tfloat j = i * 4.0;\\n\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\ty = dy * ( y + 0.5 );\\n\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\treturn bone;\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmission = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\t#ifdef texture2DLodEXT\\n\\t\\t\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( attenuationDistance == 0.0 ) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$g = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$g = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tgl_FragColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\\n\\t#endif\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\toutput_fragment: output_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$g,\n\tbackground_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tuv2Transform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 } // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene ) {\n\n\t\tlet forceClear = false;\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tdrawBuffers: drawBuffers,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tencoding: LinearEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) {\n\n\t\t\t\t\ttexture.needsPMREMUpdate = false;\n\n\t\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cubeUVmaps.has( texture ) ) {\n\n\t\t\t\t\t\treturn cubeUVmaps.get( texture ).texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\tconst renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tif ( capabilities.isWebGL2 === true ) {\n\n\t\t\t// instead of using attributes, the WebGL 2 code path encodes morph targets\n\t\t\t// into an array of data textures. Each layer represents a single morph target.\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tlet entry = morphTextures.get( geometry );\n\n\t\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\t\tlet vertexDataCount = 0;\n\n\t\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\t\tlet height = 1;\n\n\t\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t\t}\n\n\t\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\t\ttexture.type = FloatType;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t// fill buffer\n\n\t\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tentry = {\n\t\t\t\t\tcount: morphTargetsCount,\n\t\t\t\t\ttexture: texture,\n\t\t\t\t\tsize: new Vector2( width, height )\n\t\t\t\t};\n\n\t\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\t\tfunction disposeTexture() {\n\n\t\t\t\t\ttexture.dispose();\n\n\t\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\n\t\t} else {\n\n\t\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\t\tlet influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined || influences.length !== length ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tworkInfluences.sort( numericalSort );\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\t\t\tconst morphNormals = geometry.morphAttributes.normal;\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tconst influence = workInfluences[ i ];\n\t\t\t\tconst index = influence[ 0 ];\n\t\t\t\tconst value = influence[ 1 ];\n\n\t\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, 35718 );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === 35674 ) locationSize = 2;\n\t\tif ( info.type === 35675 ) locationSize = 3;\n\t\tif ( info.type === 35676 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'precision mediump sampler2DArray;',\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error(\n\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, 35715 ) + '\\n\\n' +\n\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\tfragmentErrors\n\t\t\t);\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst vertexTextures = capabilities.vertexTextures;\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst useAlphaTest = material.alphaTest > 0;\n\t\tconst useClearcoat = material.clearcoat > 0;\n\t\tconst useIridescence = material.iridescence > 0;\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget === null ) ? renderer.outputEncoding : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.encoding : LinearEncoding ),\n\t\t\tmap: !! material.map,\n\t\t\tmatcap: !! material.matcap,\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tdecodeVideoTexture: !! material.map && ( material.map.isVideoTexture === true ) && ( material.map.encoding === sRGBEncoding ),\n\n\t\t\tclearcoat: useClearcoat,\n\t\t\tclearcoatMap: useClearcoat && !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: useClearcoat && !! material.clearcoatNormalMap,\n\n\t\t\tiridescence: useIridescence,\n\t\t\tiridescenceMap: useIridescence && !! material.iridescenceMap,\n\t\t\tiridescenceThicknessMap: useIridescence && !! material.iridescenceThicknessMap,\n\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\tspecularIntensityMap: !! material.specularIntensityMap,\n\t\t\tspecularColorMap: !! material.specularColorMap,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending,\n\n\t\t\talphaMap: !! material.alphaMap,\n\t\t\talphaTest: useAlphaTest,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: material.sheen > 0,\n\t\t\tsheenColorMap: !! material.sheenColorMap,\n\t\t\tsheenRoughnessMap: !! material.sheenRoughnessMap,\n\n\t\t\ttransmission: material.transmission > 0,\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\t\t\tthicknessMap: !! material.thicknessMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( !! material.normalMap && !! geometry.attributes.tangent ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: !! material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: !! material.depthPacking,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputEncoding );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputEncoding );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.vertexUvs );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.isWebGL2 )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.map )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.lightMap )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.aoMap )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.emissiveMap )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.bumpMap )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.normalMap )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.objectSpaceNormalMap )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.tangentSpaceNormalMap )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.clearcoatMap )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.clearcoatRoughnessMap )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.clearcoatNormalMap )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.iridescenceMap )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.iridescenceThicknessMap )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.displacementMap )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.specularMap )\n\t\t\t_programLayers.enable( 22 );\n\t\tif ( parameters.roughnessMap )\n\t\t\t_programLayers.enable( 23 );\n\t\tif ( parameters.metalnessMap )\n\t\t\t_programLayers.enable( 24 );\n\t\tif ( parameters.gradientMap )\n\t\t\t_programLayers.enable( 25 );\n\t\tif ( parameters.alphaMap )\n\t\t\t_programLayers.enable( 26 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 27 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 28 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 29 );\n\t\tif ( parameters.vertexUvs )\n\t\t\t_programLayers.enable( 30 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 31 );\n\t\tif ( parameters.uvsVertexOnly )\n\t\t\t_programLayers.enable( 32 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.physicallyCorrectLights )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.specularIntensityMap )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.specularColorMap )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.transmissionMap )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.thicknessMap )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.sheenColorMap )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.sheenRoughnessMap )\n\t\t\t_programLayers.enable( 22 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 23 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 24 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, physicallyCorrectLights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\t// artist-friendly light intensity scaling factor\n\t\tconst scaleFactor = ( physicallyCorrectLights !== true ) ? Math.PI : 1;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity * scaleFactor;\n\t\t\t\tg += color.g * intensity * scaleFactor;\n\t\t\t\tb += color.b * intensity * scaleFactor;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( physicallyCorrectLights ) {\n\n\t\tlights.setup( lightsArray, physicallyCorrectLights );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, _capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = _capabilities.maxTextureSize;\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t}\n\n\t\tif ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t( material.alphaMap && material.alphaTest > 0 ) ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgamMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( 3088 );\n\tconst viewportParam = gl.getParameter( 2978 );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// 36009 is equivalent to 36160\n\n\t\t\t\tif ( target === 36009 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36160 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === 36160 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36009 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tdrawBuffers[ i ] = 36064 + i;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( drawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\tdrawBuffers[ 0 ] = 36064;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== 1029 ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = 1029;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t\t} else {\n\n\t\t\t\textensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers );\n\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 769, 0, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 769, 0, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( 32926 )\n\t\t\t: disable( 32926 );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgamMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgamMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgamMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( uniformsGroup ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( 3042 );\n\t\tgl.disable( 2884 );\n\t\tgl.disable( 2929 );\n\t\tgl.disable( 32823 );\n\t\tgl.disable( 3089 );\n\t\tgl.disable( 2960 );\n\t\tgl.disable( 32926 );\n\n\t\tgl.blendEquation( 32774 );\n\t\tgl.blendFunc( 1, 0 );\n\t\tgl.blendFuncSeparate( 1, 0, 1, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( 513 );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( 519, 0, 0xffffffff );\n\t\tgl.stencilOp( 7680, 7680, 7680 );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( 1029 );\n\t\tgl.frontFace( 2305 );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( 33984 );\n\n\t\tgl.bindFramebuffer( 36160, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( 36009, null );\n\t\t\tgl.bindFramebuffer( 36008, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo$1( image ) {\n\n\t\treturn isPowerOfTwo( image.width ) && isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, encoding, isVideoTexture = false ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 33319 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33328;\n\t\t\tif ( glType === 5131 ) internalFormat = 33327;\n\t\t\tif ( glType === 5121 ) internalFormat = 33323;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = ( encoding === sRGBEncoding && isVideoTexture === false ) ? 35907 : 32856;\n\t\t\tif ( glType === 32819 ) internalFormat = 32854;\n\t\t\tif ( glType === 32820 ) internalFormat = 32855;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 33327 || internalFormat === 33328 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image, supportsMips ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = texture.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachmentProperties = properties.get( texture[ i ] );\n\n\t\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\t\tinfo.memory.textures --;\n\n\t\t\t\t}\n\n\t\t\t\tproperties.remove( texture[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.encoding );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataArrayTexture ) textureType = 35866;\n\t\tif ( texture.isData3DTexture ) textureType = 32879;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\tif ( source.version !== source.__currentVersion || forceUpload === true ) {\n\n\t\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;\n\t\t\tlet image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst supportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format, texture.encoding );\n\n\t\t\tlet glType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( source.__currentVersion === undefined ) || ( forceUpload === true );\n\t\t\tconst levels = getMipLevels( texture, image, supportsMips );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\t// populate depth texture with dummy data\n\n\t\t\t\tglInternalFormat = 6402;\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// validation checks for WebGL 1\n\n\t\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedIntType;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 3553, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.texSubImage2D( 3553, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( 3553, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 3553, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( 35866, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.texSubImage3D( 35866, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( 32879, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.texSubImage3D( 32879, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 3553, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.texSubImage2D( 3553, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsource.__currentVersion = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\tif ( source.version !== source.__currentVersion || forceUpload === true ) {\n\n\t\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tsupportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format, texture.encoding ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\t\tconst useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( source.__currentVersion === undefined ) || ( forceUpload === true );\n\t\t\tlet levels = getMipLevels( texture, image, supportsMips );\n\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( 34067, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( 34069 + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tstate.texStorage2D( 34067, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( 34067 );\n\n\t\t\t}\n\n\t\t\tsource.__currentVersion = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tif ( textureTarget === 32879 || textureTarget === 35866 ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else {\n\n\t\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample || useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( 36160, 36096, 3553, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( 36160, 33306, 3553, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, 36064, 3553 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets !== true ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tif ( capabilities.drawBuffers ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = isMultipleRenderTargets ? texture : [ texture ];\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064 + i, 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tconst textures = renderTarget.texture;\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( 3553, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( 3553, attachment, supportsMips );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, 36064 + i, 3553 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( 3553 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = 3553;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? 32879 : 35866;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, 36064, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ];\n\t\t\tconst width = renderTarget.width;\n\t\t\tconst height = renderTarget.height;\n\t\t\tlet mask = 16384;\n\t\t\tconst invalidationArray = [];\n\t\t\tconst depthStyle = renderTarget.stencilBuffer ? 33306 : 36096;\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\n\t\t\t// If MRT we need to remove FBO attachments\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064 + i, 36161, null );\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t_gl.framebufferTexture2D( 36009, 36064 + i, 3553, null, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tinvalidationArray.push( 36064 + i );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\tinvalidationArray.push( depthStyle );\n\n\t\t\t\t}\n\n\t\t\t\tconst ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;\n\n\t\t\t\tif ( ignoreDepthValues === false ) {\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36008, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ignoreDepthValues === true ) {\n\n\t\t\t\t\t_gl.invalidateFramebuffer( 36008, [ depthStyle ] );\n\t\t\t\t\t_gl.invalidateFramebuffer( 36009, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t_gl.framebufferTexture2D( 36009, 36064, 3553, webglTexture, 0 );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\tif ( supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\t_gl.invalidateFramebuffer( 36008, invalidationArray );\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\tstate.bindFramebuffer( 36009, null );\n\n\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064 + i, 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t_gl.framebufferTexture2D( 36009, 36064 + i, 3553, webglTexture, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn isWebGL2 && renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst encoding = texture.encoding;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image;\n\n\t\tif ( encoding !== LinearEncoding ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( encoding === sRGBEncoding ) {\n\n\t\t\t\tif ( isWebGL2 === false ) {\n\n\t\t\t\t\t// in WebGL 1, try to use EXT_sRGB extension and unsized formats\n\n\t\t\t\t\tif ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) {\n\n\t\t\t\t\t\ttexture.format = _SRGBAFormat;\n\n\t\t\t\t\t\t// it's not possible to generate mips in WebGL 1 with this extension\n\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// slow fallback (CPU decode)\n\n\t\t\t\t\t\timage = ImageUtils.sRGBToLinear( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture encoding:', encoding );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p, encoding = null ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// @deprecated since r137\n\n\t\tif ( p === RGBFormat ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228' );\n\t\t\treturn 6408;\n\n\t\t}\n\n\t\t// WebGL 1 sRGB fallback\n\n\t\tif ( p === _SRGBAFormat ) {\n\n\t\t\textension = extensions.get( 'EXT_sRGB' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.SRGB_ALPHA_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( encoding === sRGBEncoding ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC1\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC2\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\thand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst joint = hand.joints[ inputjoint.jointName ];\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\t\tconst attributes = gl.getContextAttributes();\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,\n\t\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tencoding: renderer.outputEncoding,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? 35056 : 33190;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: 32856,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tencoding: renderer.outputEncoding,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tconst renderTargetProperties = renderer.properties.get( newRenderTarget );\n\t\t\t\t\trenderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues;\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\t// Set foveation to maximum.\n\t\t\t\tthis.setFoveation( 1.0 );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\tcameraVR.matrixWorld.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale );\n\n\t\t\t// update user camera and its children\n\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\treturn glProjLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\treturn glBaseLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( foveation ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\n\t\t\t// artist-friendly light intensity scaling factor\n\t\t\tconst scaleFactor = ( renderer.physicallyCorrectLights !== true ) ? Math.PI : 1;\n\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\t\t// 13. iridescence map\n\t\t// 14. iridescence thickness map\n\t\t// 15. specular intensity map\n\t\t// 16. specular tint map\n\t\t// 17. transmission map\n\t\t// 18. thickness map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t} else if ( material.iridescenceMap ) {\n\n\t\t\tuvScaleMap = material.iridescenceMap;\n\n\t\t} else if ( material.iridescenceThicknessMap ) {\n\n\t\t\tuvScaleMap = material.iridescenceThicknessMap;\n\n\t\t} else if ( material.specularIntensityMap ) {\n\n\t\t\tuvScaleMap = material.specularIntensityMap;\n\n\t\t} else if ( material.specularColorMap ) {\n\n\t\t\tuvScaleMap = material.specularColorMap;\n\n\t\t} else if ( material.transmissionMap ) {\n\n\t\t\tuvScaleMap = material.transmissionMap;\n\n\t\t} else if ( material.thicknessMap ) {\n\n\t\t\tuvScaleMap = material.thicknessMap;\n\n\t\t} else if ( material.sheenColorMap ) {\n\n\t\t\tuvScaleMap = material.sheenColorMap;\n\n\t\t} else if ( material.sheenRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.sheenRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = ( capabilities.isWebGL2 ) ? gl.getParameter( 35375 ) : 0; // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( 35345, buffer );\n\t\tgl.bufferData( 35345, size, usage );\n\t\tgl.bindBuffer( 35345, null );\n\t\tgl.bindBufferBase( 35345, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( 35345, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniform = uniforms[ i ];\n\n\t\t\t// partly update the buffer if necessary\n\n\t\t\tif ( hasUniformChanged( uniform, i, cache ) === true ) {\n\n\t\t\t\tconst value = uniform.value;\n\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\tgl.bufferSubData( 35345, offset, uniform.__data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( uniform.value.isMatrix3 ) {\n\n\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\tuniform.__data[ 0 ] = uniform.value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 1 ] = uniform.value.elements[ 1 ];\n\t\t\t\t\t\tuniform.__data[ 2 ] = uniform.value.elements[ 2 ];\n\t\t\t\t\t\tuniform.__data[ 3 ] = uniform.value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 4 ] = uniform.value.elements[ 3 ];\n\t\t\t\t\t\tuniform.__data[ 5 ] = uniform.value.elements[ 4 ];\n\t\t\t\t\t\tuniform.__data[ 6 ] = uniform.value.elements[ 5 ];\n\t\t\t\t\t\tuniform.__data[ 7 ] = uniform.value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 8 ] = uniform.value.elements[ 6 ];\n\t\t\t\t\t\tuniform.__data[ 9 ] = uniform.value.elements[ 7 ];\n\t\t\t\t\t\tuniform.__data[ 10 ] = uniform.value.elements[ 8 ];\n\t\t\t\t\t\tuniform.__data[ 11 ] = uniform.value.elements[ 0 ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvalue.toArray( uniform.__data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( 35345, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( 35345, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, cache ) {\n\n\t\tconst value = uniform.value;\n\n\t\tif ( cache[ index ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\tcache[ index ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tcache[ index ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\tif ( cache[ index ] !== value ) {\n\n\t\t\t\t\tcache[ index ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst cachedObject = cache[ index ];\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\t\tlet chunkOffset = 0; // offset within a single chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniform = uniforms[ i ];\n\t\t\tconst info = getUniformSize( uniform );\n\n\t\t\t// the following two properties will be used for partial buffer updates\n\n\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\tuniform.__offset = offset;\n\n\t\t\t//\n\n\t\t\tif ( i > 0 ) {\n\n\t\t\t\tchunkOffset = offset % chunkSize;\n\n\t\t\t\tconst remainingSizeInChunk = chunkSize - chunkOffset;\n\n\t\t\t\t// check for chunk overflow\n\n\t\t\t\tif ( chunkOffset !== 0 && ( remainingSizeInChunk - info.boundary ) < 0 ) {\n\n\t\t\t\t\t// add padding and adjust offset\n\n\t\t\t\t\toffset += ( chunkSize - chunkOffset );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset += info.storage;\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tchunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( uniform ) {\n\n\t\tconst value = uniform.value;\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' ) {\n\n\t\t\t// float/int\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters = {} ) {\n\n\tthis.isWebGLRenderer = true;\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet _alpha;\n\n\tif ( _context !== null ) {\n\n\t\t_alpha = _context.getContextAttributes().alpha;\n\n\t} else {\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false;\n\n\t}\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\tconst renderListStack = [];\n\tconst renderStateStack = [];\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t//\n\n\tObject.defineProperties( this, {\n\n\t\t// @deprecated since r136, 0e21088102b4de7e0a0a33140620b7a3424b9e6d\n\n\t\tgammaFactor: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaFactor has been removed.' );\n\t\t\t\treturn 2;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaFactor has been removed.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// transmission\n\n\tlet _transmissionRenderTarget = null;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector2 = new Vector2();\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: true,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\tif ( 'setAttribute' in _canvas ) _canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t_canvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates, uniformsGroups;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\n\t\tinfo = new WebGLInfo();\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\trenderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _alpha, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.shadowMap = shadowMap;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\treturn target.copy( background.getClearColor() );\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color ) bits |= 16384;\n\t\tif ( depth ) bits |= 256;\n\t\tif ( stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t_canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tcubeuvmaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\t\tuniformsGroups.dispose();\n\t\tprogramCache.dispose();\n\n\t\txr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\tif ( _transmissionRenderTarget ) {\n\n\t\t\t_transmissionRenderTarget.dispose();\n\t\t\t_transmissionRenderTarget = null;\n\n\t\t}\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tconst infoAutoReset = info.autoReset;\n\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\tconst shadowMapType = shadowMap.type;\n\n\t\tinitGLContext();\n\n\t\tinfo.autoReset = infoAutoReset;\n\t\tshadowMap.enabled = shadowMapEnabled;\n\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\tshadowMap.type = shadowMapType;\n\n\t}\n\n\tfunction onContextCreationError( event ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\n\n\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tfunction prepare( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentRenderState = renderStates.get( scene );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tprepare( material2, scene, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprepare( material, scene, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\trenderStateStack.pop();\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tfunction onXRSessionStart() {\n\n\t\tanimation.stop();\n\n\t}\n\n\tfunction onXRSessionEnd() {\n\n\t\tanimation.start();\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// update scene graph\n\n\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\tcurrentRenderList.init();\n\n\t\trenderListStack.push( currentRenderList );\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene );\n\n\t\t// render scene\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tif ( camera.isArrayCamera ) {\n\n\t\t\tconst cameras = camera.cameras;\n\n\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t// _gl.finish();\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\trenderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\trenderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderList = null;\n\n\t\t}\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, scene, camera );\n\n\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t}\n\n\tfunction renderTransmissionPass( opaqueObjects, scene, camera ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\n\t\tif ( _transmissionRenderTarget === null ) {\n\n\t\t\t_transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {\n\t\t\t\tgenerateMipmaps: true,\n\t\t\t\ttype: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,\n\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\tsamples: ( isWebGL2 && _antialias === true ) ? 4 : 0\n\t\t\t} );\n\n\t\t}\n\n\t\t_this.getDrawingBufferSize( _vector2 );\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\t_transmissionRenderTarget.setSize( _vector2.x, _vector2.y );\n\n\t\t} else {\n\n\t\t\t_transmissionRenderTarget.setSize( floorPowerOfTwo( _vector2.x ), floorPowerOfTwo( _vector2.y ) );\n\n\t\t}\n\n\t\t//\n\n\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t_this.setRenderTarget( _transmissionRenderTarget );\n\t\t_this.clear();\n\n\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\tconst currentToneMapping = _this.toneMapping;\n\t\t_this.toneMapping = NoToneMapping;\n\n\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t_this.toneMapping = currentToneMapping;\n\n\t\ttextures.updateMultisampleRenderTarget( _transmissionRenderTarget );\n\t\ttextures.updateRenderTargetMipmap( _transmissionRenderTarget );\n\n\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tmaterial.onBeforeRender( _this, scene, camera, geometry, object, group );\n\n\t\tif ( material.transparent === true && material.side === DoubleSide ) {\n\n\t\t\tmaterial.side = BackSide;\n\t\t\tmaterial.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\tmaterial.side = FrontSide;\n\t\t\tmaterial.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\tmaterial.side = DoubleSide;\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t}\n\n\tfunction getProgram( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet programs = materialProperties.programs;\n\n\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n\t\t\t// new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tprograms = new Map();\n\t\t\tmaterialProperties.programs = programs;\n\n\t\t}\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t// early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\treturn program;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( object, parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.currentProgram = program;\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\treturn program;\n\n\t}\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\tmaterialProperties.instancing = parameters.instancing;\n\t\tmaterialProperties.skinning = parameters.skinning;\n\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t}\n\n\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.encoding : LinearEncoding );\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\tconst vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;\n\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\tconst morphColors = !! geometry.morphAttributes.color;\n\t\tconst toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping;\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tneedsProgramChange = true;\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\t//\n\n\t\tlet program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst p_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tobject.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t// UBOs\n\n\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\tif ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n\t\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tlet useDefaultFramebuffer = true;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t// We need to make sure to rebind the framebuffer.\n\t\t\t\tstate.bindFramebuffer( 36160, null );\n\t\t\t\tuseDefaultFramebuffer = false;\n\n\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet framebuffer = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture ) {\n\n\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t}\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tconst framebufferBound = state.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {\n\n\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t}\n\n\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexSubImage2D( 3553, level, 0, 0, position.x, position.y, width, height );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst width = sourceBox.max.x - sourceBox.min.x + 1;\n\t\tconst height = sourceBox.max.y - sourceBox.min.y + 1;\n\t\tconst depth = sourceBox.max.z - sourceBox.min.z + 1;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\t\tlet glTarget;\n\n\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\tglTarget = 32879;\n\n\t\t} else if ( dstTexture.isDataArrayTexture ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\tglTarget = 35866;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tconst unpackRowLen = _gl.getParameter( 3314 );\n\t\tconst unpackImageHeight = _gl.getParameter( 32878 );\n\t\tconst unpackSkipPixels = _gl.getParameter( 3316 );\n\t\tconst unpackSkipRows = _gl.getParameter( 3315 );\n\t\tconst unpackSkipImages = _gl.getParameter( 32877 );\n\n\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image;\n\n\t\t_gl.pixelStorei( 3314, image.width );\n\t\t_gl.pixelStorei( 32878, image.height );\n\t\t_gl.pixelStorei( 3316, sourceBox.min.x );\n\t\t_gl.pixelStorei( 3315, sourceBox.min.y );\n\t\t_gl.pixelStorei( 32877, sourceBox.min.z );\n\n\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );\n\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.pixelStorei( 3314, unpackRowLen );\n\t\t_gl.pixelStorei( 32878, unpackImageHeight );\n\t\t_gl.pixelStorei( 3316, unpackSkipPixels );\n\t\t_gl.pixelStorei( 3315, unpackSkipRows );\n\t\t_gl.pixelStorei( 32877, unpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t} else {\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t}\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.resetState = function () {\n\n\t\t_currentActiveCubeFace = 0;\n\t\t_currentActiveMipmapLevel = 0;\n\t\t_currentRenderTarget = null;\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t}\n\n}\n\nclass WebGL1Renderer extends WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.isFogExp2 = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.isFog = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\t// @deprecated\n\n\tget autoUpdate() {\n\n\t\tconsole.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' );\n\t\treturn this.matrixWorldAutoUpdate;\n\n\t}\n\n\tset autoUpdate( value ) {\n\n\t\tconsole.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' );\n\t\tthis.matrixWorldAutoUpdate = value;\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tboneTransform( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( target ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = ceilPowerOfTwo( size );\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\t\tthis.boneTextureSize = size;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = /*@__PURE__*/ new Mesh();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.frustumCulled = false;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _start$1.distanceTo( _end$1 );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isVideoTexture = true;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nclass FramebufferTexture extends Texture {\n\n\tconstructor( width, height, format ) {\n\n\t\tsuper( { width, height } );\n\n\t\tthis.isFramebufferTexture = true;\n\n\t\tthis.format = format;\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.isCompressedTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Bezier Curves formulas obtained from\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst tangent = optionalTarget || new Vector2();\n\n\t\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass CapsuleGeometry extends LatheGeometry {\n\n\tconstructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {\n\n\t\tconst path = new Path();\n\t\tpath.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );\n\t\tpath.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );\n\n\t\tsuper( path.getPoints( capSegments ), radialSegments );\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: length,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );\n\n\t}\n\n}\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // doesn't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.isRawShaderMaterial = true;\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = 0.0;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._sheen = 0.0;\n\t\tthis._clearcoat = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineDashedMaterial = true;\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// same as Array.prototype.slice, but also works on typed arrays\nfunction arraySlice( array, from, to ) {\n\n\tif ( isTypedArray( array ) ) {\n\n\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t}\n\n\treturn array.slice( from, to );\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\nvar AnimationUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tarraySlice: arraySlice,\n\tconvertArray: convertArray,\n\tisTypedArray: isTypedArray,\n\tgetKeyframeOrder: getKeyframeOrder,\n\tsortedArray: sortedArray,\n\tflattenJSON: flattenJSON,\n\tsubclip: subclip,\n\tmakeClipAdditive: makeClipAdditive\n});\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = arraySlice( times, from, to );\n\t\t\tthis.values = arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = arraySlice( this.times ),\n\t\t\tvalues = arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = arraySlice( this.times, 0 );\n\t\tconst values = arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\t\t\t\t\tconst contentLength = response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isLightProbe = true;\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = MaterialLoader.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tif ( attribute.updateRange !== undefined ) {\n\n\t\t\t\tbufferAttribute.updateRange.offset = attribute.updateRange.offset;\n\t\t\t\tbufferAttribute.updateRange.count = attribute.updateRange.count;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n}\n\nclass HemisphereLightProbe extends LightProbe {\n\n\tconstructor( skyColor, groundColor, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isHemisphereLightProbe = true;\n\n\t\tconst color1 = new Color().set( skyColor );\n\t\tconst color2 = new Color().set( groundColor );\n\n\t\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n}\n\nclass AmbientLightProbe extends LightProbe {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isAmbientLightProbe = true;\n\n\t\tconst color1 = new Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet id = 0;\n\nclass UniformsGroup extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isUniformsGroup = true;\n\n\t\tObject.defineProperty( this, 'id', { value: id ++ } );\n\n\t\tthis.name = '';\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.uniforms = [];\n\n\t}\n\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== - 1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tthis.uniforms.push( uniformsSource[ i ].clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.isGLBufferAttribute = true;\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be between EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox2 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$4.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttps://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < - 27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < - 14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= ~ 0x00800000; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n// float32 to float16\n\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, - 65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n// float16 to float32\n\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\nvar DataUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\ttoHalfFloat: toHalfFloat,\n\tfromHalfFloat: fromHalfFloat\n});\n\n// r134, d65e0af06644fe5a84a6fc0e372f4318f95a04c0\n\nfunction ImmediateRenderObject() {\n\n\tconsole.error( 'THREE.ImmediateRenderObject has been removed.' );\n\n}\n\n// r138, 48b05d3500acc084df50be9b4c90781ad9b8cb17\n\nclass WebGLMultisampleRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width, height, options ) {\n\n\t\tconsole.error( 'THREE.WebGLMultisampleRenderTarget has been removed. Use a normal render target and set the \"samples\" property to greater 0 to enable multisampling.' );\n\t\tsuper( width, height, options );\n\t\tthis.samples = 4;\n\n\t}\n\n}\n\n// r138, f9cd9cab03b7b64244e304900a3a2eeaa3a588ce\n\nclass DataTexture2DArray extends DataArrayTexture {\n\n\tconstructor( data, width, height, depth ) {\n\n\t\tconsole.warn( 'THREE.DataTexture2DArray has been renamed to DataArrayTexture.' );\n\t\tsuper( data, width, height, depth );\n\n\t}\n\n}\n\n// r138, f9cd9cab03b7b64244e304900a3a2eeaa3a588ce\n\nclass DataTexture3D extends Data3DTexture {\n\n\tconstructor( data, width, height, depth ) {\n\n\t\tconsole.warn( 'THREE.DataTexture3D has been renamed to Data3DTexture.' );\n\t\tsuper( data, width, height, depth );\n\n\t}\n\n}\n\n// r144\n\nclass BoxBufferGeometry extends BoxGeometry {\n\n\tconstructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tconsole.warn( 'THREE.BoxBufferGeometry has been renamed to THREE.BoxGeometry.' );\n\t\tsuper( width, height, depth, widthSegments, heightSegments, depthSegments );\n\n\n\t}\n\n}\n\n// r144\n\nclass CapsuleBufferGeometry extends CapsuleGeometry {\n\n\tconstructor( radius, length, capSegments, radialSegments ) {\n\n\t\tconsole.warn( 'THREE.CapsuleBufferGeometry has been renamed to THREE.CapsuleGeometry.' );\n\t\tsuper( radius, length, capSegments, radialSegments );\n\n\t}\n\n}\n\n// r144\n\nclass CircleBufferGeometry extends CircleGeometry {\n\n\tconstructor( radius, segments, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.CircleBufferGeometry has been renamed to THREE.CircleGeometry.' );\n\t\tsuper( radius, segments, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass ConeBufferGeometry extends ConeGeometry {\n\n\tconstructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.ConeBufferGeometry has been renamed to THREE.ConeGeometry.' );\n\t\tsuper( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass CylinderBufferGeometry extends CylinderGeometry {\n\n\tconstructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.CylinderBufferGeometry has been renamed to THREE.CylinderGeometry.' );\n\t\tsuper( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass DodecahedronBufferGeometry extends DodecahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.DodecahedronBufferGeometry has been renamed to THREE.DodecahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass ExtrudeBufferGeometry extends ExtrudeGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry has been renamed to THREE.ExtrudeGeometry.' );\n\t\tsuper( shapes, options );\n\n\t}\n\n}\n\n// r144\n\nclass IcosahedronBufferGeometry extends IcosahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.IcosahedronBufferGeometry has been renamed to THREE.IcosahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass LatheBufferGeometry extends LatheGeometry {\n\n\tconstructor( points, segments, phiStart, phiLength ) {\n\n\t\tconsole.warn( 'THREE.LatheBufferGeometry has been renamed to THREE.LatheGeometry.' );\n\t\tsuper( points, segments, phiStart, phiLength );\n\n\t}\n\n}\n\n// r144\n\nclass OctahedronBufferGeometry extends OctahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.OctahedronBufferGeometry has been renamed to THREE.OctahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass PlaneBufferGeometry extends PlaneGeometry {\n\n\tconstructor( width, height, widthSegments, heightSegments ) {\n\n\t\tconsole.warn( 'THREE.PlaneBufferGeometry has been renamed to THREE.PlaneGeometry.' );\n\t\tsuper( width, height, widthSegments, heightSegments );\n\n\t}\n\n}\n\n// r144\n\nclass PolyhedronBufferGeometry extends PolyhedronGeometry {\n\n\tconstructor( vertices, indices, radius, detail ) {\n\n\t\tconsole.warn( 'THREE.PolyhedronBufferGeometry has been renamed to THREE.PolyhedronGeometry.' );\n\t\tsuper( vertices, indices, radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass RingBufferGeometry extends RingGeometry {\n\n\tconstructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.RingBufferGeometry has been renamed to THREE.RingGeometry.' );\n\t\tsuper( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass ShapeBufferGeometry extends ShapeGeometry {\n\n\tconstructor( shapes, curveSegments ) {\n\n\t\tconsole.warn( 'THREE.ShapeBufferGeometry has been renamed to THREE.ShapeGeometry.' );\n\t\tsuper( shapes, curveSegments );\n\n\t}\n\n}\n\n// r144\n\nclass SphereBufferGeometry extends SphereGeometry {\n\n\tconstructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.SphereBufferGeometry has been renamed to THREE.SphereGeometry.' );\n\t\tsuper( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass TetrahedronBufferGeometry extends TetrahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.TetrahedronBufferGeometry has been renamed to THREE.TetrahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass TorusBufferGeometry extends TorusGeometry {\n\n\tconstructor( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tconsole.warn( 'THREE.TorusBufferGeometry has been renamed to THREE.TorusGeometry.' );\n\t\tsuper( radius, tube, radialSegments, tubularSegments, arc );\n\n\t}\n\n}\n\n// r144\n\nclass TorusKnotBufferGeometry extends TorusKnotGeometry {\n\n\tconstructor( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\t\tconsole.warn( 'THREE.TorusKnotBufferGeometry has been renamed to THREE.TorusKnotGeometry.' );\n\t\tsuper( radius, tube, tubularSegments, radialSegments, p, q );\n\n\t}\n\n}\n\n// r144\n\nclass TubeBufferGeometry extends TubeGeometry {\n\n\tconstructor( path, tubularSegments, radius, radialSegments, closed ) {\n\n\t\tconsole.warn( 'THREE.TubeBufferGeometry has been renamed to THREE.TubeGeometry.' );\n\t\tsuper( path, tubularSegments, radius, radialSegments, closed );\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleBufferGeometry, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedTexture, CompressedTextureLoader, ConeBufferGeometry, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderBufferGeometry, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeBufferGeometry, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, Float64BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheBufferGeometry, LatheGeometry, Layers, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingBufferGeometry, RingGeometry, SRGBColorSpace, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronBufferGeometry, TetrahedronGeometry, Texture, TextureLoader, TorusBufferGeometry, TorusGeometry, TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeBufferGeometry, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL1Renderer, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, _SRGBAFormat, sRGBEncoding };\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3\n} from 'three';\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\n\nclass OrbitControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\n\t\tthis.getPolarAngle = function () {\n\n\t\t\treturn spherical.phi;\n\n\t\t};\n\n\t\tthis.getAzimuthalAngle = function () {\n\n\t\t\treturn spherical.theta;\n\n\t\t};\n\n\t\tthis.getDistance = function () {\n\n\t\t\treturn this.object.position.distanceTo( this.target );\n\n\t\t};\n\n\t\tthis.listenToKeyEvents = function ( domElement ) {\n\n\t\t\tdomElement.addEventListener( 'keydown', onKeyDown );\n\t\t\tthis._domElementKeyEvents = domElement;\n\n\t\t};\n\n\t\tthis.saveState = function () {\n\n\t\t\tscope.target0.copy( scope.target );\n\t\t\tscope.position0.copy( scope.object.position );\n\t\t\tscope.zoom0 = scope.object.zoom;\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\tscope.update();\n\n\t\t\tstate = STATE.NONE;\n\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\t// so camera.up is the orbit axis\n\t\t\tconst quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\t\tconst quatInverse = quat.clone().invert();\n\n\t\t\tconst lastPosition = new Vector3();\n\t\t\tconst lastQuaternion = new Quaternion();\n\n\t\t\tconst twoPI = 2 * Math.PI;\n\n\t\t\treturn function update() {\n\n\t\t\t\tconst position = scope.object.position;\n\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3( offset );\n\n\t\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t\t}\n\n\t\t\t\t// restrict theta to be between desired limits\n\n\t\t\t\tlet min = scope.minAzimuthAngle;\n\t\t\t\tlet max = scope.maxAzimuthAngle;\n\n\t\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\t\tspherical.makeSafe();\n\n\n\t\t\t\tspherical.radius *= scale;\n\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t\t// move target to panned location\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t\t}\n\n\t\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t\tscale = 1;\n\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\t\tif ( zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\t\tzoomChanged = false;\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t}();\n\n\t\tthis.dispose = function () {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n\t\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\tscope.domElement.removeEventListener( 'pointercancel', onPointerCancel );\n\t\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\n\t\t\tif ( scope._domElementKeyEvents !== null ) {\n\n\t\t\t\tscope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\n\t\t\t}\n\n\t\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t\t};\n\n\t\t//\n\t\t// internals\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tconst STATE = {\n\t\t\tNONE: - 1,\n\t\t\tROTATE: 0,\n\t\t\tDOLLY: 1,\n\t\t\tPAN: 2,\n\t\t\tTOUCH_ROTATE: 3,\n\t\t\tTOUCH_PAN: 4,\n\t\t\tTOUCH_DOLLY_PAN: 5,\n\t\t\tTOUCH_DOLLY_ROTATE: 6\n\t\t};\n\n\t\tlet state = STATE.NONE;\n\n\t\tconst EPS = 0.000001;\n\n\t\t// current position in spherical coordinates\n\t\tconst spherical = new Spherical();\n\t\tconst sphericalDelta = new Spherical();\n\n\t\tlet scale = 1;\n\t\tconst panOffset = new Vector3();\n\t\tlet zoomChanged = false;\n\n\t\tconst rotateStart = new Vector2();\n\t\tconst rotateEnd = new Vector2();\n\t\tconst rotateDelta = new Vector2();\n\n\t\tconst panStart = new Vector2();\n\t\tconst panEnd = new Vector2();\n\t\tconst panDelta = new Vector2();\n\n\t\tconst dollyStart = new Vector2();\n\t\tconst dollyEnd = new Vector2();\n\t\tconst dollyDelta = new Vector2();\n\n\t\tconst pointers = [];\n\t\tconst pointerPositions = {};\n\n\t\tfunction getAutoRotationAngle() {\n\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t\t}\n\n\t\tfunction getZoomScale() {\n\n\t\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t\t}\n\n\t\tfunction rotateLeft( angle ) {\n\n\t\t\tsphericalDelta.theta -= angle;\n\n\t\t}\n\n\t\tfunction rotateUp( angle ) {\n\n\t\t\tsphericalDelta.phi -= angle;\n\n\t\t}\n\n\t\tconst panLeft = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar( - distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\tconst panUp = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t\t}\n\n\t\t\t\tv.multiplyScalar( distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tconst pan = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\t\tconst element = scope.domElement;\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t// perspective\n\t\t\t\t\tconst position = scope.object.position;\n\t\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\t\tlet targetDistance = offset.length();\n\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\t\tscope.enablePan = false;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}();\n\n\t\tfunction dollyOut( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\tscale /= dollyScale;\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction dollyIn( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\tscale *= dollyScale;\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\n\t\tfunction handleMouseDownRotate( event ) {\n\n\t\t\trotateStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownDolly( event ) {\n\n\t\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownPan( event ) {\n\n\t\t\tpanStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseMoveRotate( event ) {\n\n\t\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMoveDolly( event ) {\n\n\t\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale() );\n\n\t\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale() );\n\n\t\t\t}\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMovePan( event ) {\n\n\t\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseWheel( event ) {\n\n\t\t\tif ( event.deltaY < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale() );\n\n\t\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale() );\n\n\t\t\t}\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleKeyDown( event ) {\n\n\t\t\tlet needsUpdate = false;\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tscope.update();\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction handleTouchStartRotate() {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\trotateStart.set( pointers[ 0 ].pageX, pointers[ 0 ].pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst x = 0.5 * ( pointers[ 0 ].pageX + pointers[ 1 ].pageX );\n\t\t\t\tconst y = 0.5 * ( pointers[ 0 ].pageY + pointers[ 1 ].pageY );\n\n\t\t\t\trotateStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartPan() {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\tpanStart.set( pointers[ 0 ].pageX, pointers[ 0 ].pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst x = 0.5 * ( pointers[ 0 ].pageX + pointers[ 1 ].pageX );\n\t\t\t\tconst y = 0.5 * ( pointers[ 0 ].pageY + pointers[ 1 ].pageY );\n\n\t\t\t\tpanStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartDolly() {\n\n\t\t\tconst dx = pointers[ 0 ].pageX - pointers[ 1 ].pageX;\n\t\t\tconst dy = pointers[ 0 ].pageY - pointers[ 1 ].pageY;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyPan() {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly();\n\n\t\t\tif ( scope.enablePan ) handleTouchStartPan();\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyRotate() {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly();\n\n\t\t\tif ( scope.enableRotate ) handleTouchStartRotate();\n\n\t\t}\n\n\t\tfunction handleTouchMoveRotate( event ) {\n\n\t\t\tif ( pointers.length == 1 ) {\n\n\t\t\t\trotateEnd.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\trotateEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMovePan( event ) {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\tpanEnd.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\tpanEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDolly( event ) {\n\n\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyOut( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t\t}\n\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( pointers.length === 0 ) {\n\n\t\t\t\tscope.domElement.setPointerCapture( event.pointerId );\n\n\t\t\t\tscope.domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\taddPointer( event );\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchStart( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseDown( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchMove( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseMove( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerUp( event ) {\n\n\t\t removePointer( event );\n\n\t\t if ( pointers.length === 0 ) {\n\n\t\t scope.domElement.releasePointerCapture( event.pointerId );\n\n\t\t scope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t scope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t }\n\n\t\t scope.dispatchEvent( _endEvent );\n\n\t\t state = STATE.NONE;\n\n\t\t}\n\n\t\tfunction onPointerCancel( event ) {\n\n\t\t\tremovePointer( event );\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tlet mouseAction;\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tmouseAction = - 1;\n\n\t\t\t}\n\n\t\t\tswitch ( mouseAction ) {\n\n\t\t\t\tcase MOUSE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.ROTATE:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.PAN:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseWheel( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\thandleMouseWheel( event );\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enablePan === false ) return;\n\n\t\t\thandleKeyDown( event );\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( pointers.length ) {\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartRotate();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartPan();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyPan();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyRotate();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onContextMenu( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\tfunction addPointer( event ) {\n\n\t\t\tpointers.push( event );\n\n\t\t}\n\n\t\tfunction removePointer( event ) {\n\n\t\t\tdelete pointerPositions[ event.pointerId ];\n\n\t\t\tfor ( let i = 0; i < pointers.length; i ++ ) {\n\n\t\t\t\tif ( pointers[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\t\tpointers.splice( i, 1 );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction trackPointer( event ) {\n\n\t\t\tlet position = pointerPositions[ event.pointerId ];\n\n\t\t\tif ( position === undefined ) {\n\n\t\t\t\tposition = new Vector2();\n\t\t\t\tpointerPositions[ event.pointerId ] = position;\n\n\t\t\t}\n\n\t\t\tposition.set( event.pageX, event.pageY );\n\n\t\t}\n\n\t\tfunction getSecondPointerPosition( event ) {\n\n\t\t\tconst pointer = ( event.pointerId === pointers[ 0 ].pointerId ) ? pointers[ 1 ] : pointers[ 0 ];\n\n\t\t\treturn pointerPositions[ pointer.pointerId ];\n\n\t\t}\n\n\t\t//\n\n\t\tscope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n\t\tscope.domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.addEventListener( 'pointercancel', onPointerCancel );\n\t\tscope.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n\t\t// force an update at start\n\n\t\tthis.update();\n\n\t}\n\n}\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\nclass MapControls extends OrbitControls {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\t\tthis.mouseButtons.LEFT = MOUSE.PAN;\n\t\tthis.mouseButtons.RIGHT = MOUSE.ROTATE;\n\n\t\tthis.touches.ONE = TOUCH.PAN;\n\t\tthis.touches.TWO = TOUCH.DOLLY_ROTATE;\n\n\t}\n\n}\n\nexport { OrbitControls, MapControls };\n","import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTangentSpaceNormalMap,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tsRGBEncoding\n} from 'three';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\tresourcePath = this.path;\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet content;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tcontent = data;\n\n\t\t} else {\n\n\t\t\tconst magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t} else {\n\n\t\t\t\tcontent = LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst json = JSON.parse( content );\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, sRGBEncoding ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenColor.fromArray( extension.sheenColorFactor );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || 0;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = LoaderUtils.decodeText( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV sets in \"' + this.name + '\" extension not yet supported.' );\n\n\t\t}\n\n\t\tif ( transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness\n */\n\n/**\n * A sub class of StandardMaterial with some of the functionality\n * changed via the `onBeforeCompile` callback\n * @pailhead\n */\nclass GLTFMeshStandardSGMaterial extends MeshStandardMaterial {\n\n\tconstructor( params ) {\n\n\t\tsuper();\n\n\t\tthis.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t//various chunks that need replacing\n\t\tconst specularMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst glossinessMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst specularMapFragmentChunk = [\n\t\t\t'vec3 specularFactor = specular;',\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst glossinessMapFragmentChunk = [\n\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst lightPhysicalFragmentChunk = [\n\t\t\t'PhysicalMaterial material;',\n\t\t\t'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );',\n\t\t\t'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );',\n\t\t\t'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );',\n\t\t\t'material.roughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.',\n\t\t\t'material.roughness += geometryRoughness;',\n\t\t\t'material.roughness = min( material.roughness, 1.0 );',\n\t\t\t'material.specularColor = specularFactor;',\n\t\t].join( '\\n' );\n\n\t\tconst uniforms = {\n\t\t\tspecular: { value: new Color().setHex( 0xffffff ) },\n\t\t\tglossiness: { value: 1 },\n\t\t\tspecularMap: { value: null },\n\t\t\tglossinessMap: { value: null }\n\t\t};\n\n\t\tthis._extraUniforms = uniforms;\n\n\t\tthis.onBeforeCompile = function ( shader ) {\n\n\t\t\tfor ( const uniformName in uniforms ) {\n\n\t\t\t\tshader.uniforms[ uniformName ] = uniforms[ uniformName ];\n\n\t\t\t}\n\n\t\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t.replace( '#include ', specularMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', specularMapFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapFragmentChunk )\n\t\t\t\t.replace( '#include ', lightPhysicalFragmentChunk );\n\n\t\t};\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tspecular: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specular.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specular.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tspecularMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specularMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specularMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_SPECULARMAP;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossiness: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossiness.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossiness.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossinessMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossinessMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossinessMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t\tthis.defines.USE_UV = '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_GLOSSINESSMAP;\n\t\t\t\t\t\tdelete this.defines.USE_UV;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\n\t\tthis.setValues( params );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.specular.copy( source.specular );\n\t\tthis.glossinessMap = source.glossinessMap;\n\t\tthis.glossiness = source.glossiness;\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass GLTFMaterialsPbrSpecularGlossinessExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\n\t\tthis.specularGlossinessParams = [\n\t\t\t'color',\n\t\t\t'map',\n\t\t\t'lightMap',\n\t\t\t'lightMapIntensity',\n\t\t\t'aoMap',\n\t\t\t'aoMapIntensity',\n\t\t\t'emissive',\n\t\t\t'emissiveIntensity',\n\t\t\t'emissiveMap',\n\t\t\t'bumpMap',\n\t\t\t'bumpScale',\n\t\t\t'normalMap',\n\t\t\t'normalMapType',\n\t\t\t'displacementMap',\n\t\t\t'displacementScale',\n\t\t\t'displacementBias',\n\t\t\t'specularMap',\n\t\t\t'specular',\n\t\t\t'glossinessMap',\n\t\t\t'glossiness',\n\t\t\t'alphaMap',\n\t\t\t'envMap',\n\t\t\t'envMapIntensity'\n\t\t];\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn GLTFMeshStandardSGMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pbrSpecularGlossiness = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst pending = [];\n\n\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\tconst array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\tmaterialParams.color.fromArray( array );\n\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t}\n\n\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\tmaterialParams.emissive = new Color( 0.0, 0.0, 0.0 );\n\t\tmaterialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\tmaterialParams.specular = new Color( 1.0, 1.0, 1.0 );\n\n\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\tmaterialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t}\n\n\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\tconst specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;\n\t\t\tpending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef, sRGBEncoding ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\tcreateMaterial( materialParams ) {\n\n\t\tconst material = new GLTFMeshStandardSGMaterial( materialParams );\n\t\tmaterial.fog = true;\n\n\t\tmaterial.color = materialParams.color;\n\n\t\tmaterial.map = materialParams.map === undefined ? null : materialParams.map;\n\n\t\tmaterial.lightMap = null;\n\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\tmaterial.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap;\n\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\tmaterial.emissive = materialParams.emissive;\n\t\tmaterial.emissiveIntensity = materialParams.emissiveIntensity === undefined ? 1.0 : materialParams.emissiveIntensity;\n\t\tmaterial.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap;\n\n\t\tmaterial.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap;\n\t\tmaterial.bumpScale = 1;\n\n\t\tmaterial.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap;\n\t\tmaterial.normalMapType = TangentSpaceNormalMap;\n\n\t\tif ( materialParams.normalScale ) material.normalScale = materialParams.normalScale;\n\n\t\tmaterial.displacementMap = null;\n\t\tmaterial.displacementScale = 1;\n\t\tmaterial.displacementBias = 0;\n\n\t\tmaterial.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap;\n\t\tmaterial.specular = materialParams.specular;\n\n\t\tmaterial.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap;\n\t\tmaterial.glossiness = materialParams.glossiness;\n\n\t\tmaterial.alphaMap = null;\n\n\t\tmaterial.envMap = materialParams.envMap === undefined ? null : materialParams.envMap;\n\t\tmaterial.envMapIntensity = 1.0;\n\n\t\treturn material;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv2',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\tlet geometryKey;\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tconst isSafari = /^((?!chrome|android).)*safari/i.test( navigator.userAgent ) === true;\n\t\tconst isFirefox = navigator.userAgent.indexOf( 'Firefox' ) > - 1;\n\t\tconst firefoxVersion = isFirefox ? navigator.userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\tif ( typeof createImageBitmap === 'undefined' || isSafari || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\tPromise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t// compression extension).\n\t\t\treturn Promise.resolve( null );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( textureDef.name ) texture.name = textureDef.name;\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, encoding ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\t// Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured\n\t\t\t// However, we will copy UV set 0 to UV set 1 on demand for aoMap\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' );\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = encoding;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\t// workarounds for mesh and geometry\n\n\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\tgeometry.setAttribute( 'uv2', geometry.attributes.uv );\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\tconst sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\tmaterialType = sgExtension.getMaterialType();\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, sRGBEncoding ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tlet material;\n\n\t\t\tif ( materialType === GLTFMeshStandardSGMaterial ) {\n\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tlet name = sanitizedName;\n\n\t\tfor ( let i = 1; this.nodeNamesUsed[ name ]; ++ i ) {\n\n\t\t\tname = sanitizedName + '_' + i;\n\n\t\t}\n\n\t\tthis.nodeNamesUsed[ name ] = true;\n\n\t\treturn name;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {\n\n\t\t\t\t\t\t// we normalize floating point skin weight array to fix malformed assets (see #15319)\n\t\t\t\t\t\t// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst skinEntry = { joints: skinDef.joints };\n\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t}\n\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\treturn skinEntry;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tnode.updateMatrix();\n\n\t\t\t\tlet TypedKeyframeTrack;\n\n\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tconst targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\t\t\t\tconst targetNames = [];\n\n\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t}\n\n\t\t\t\tlet outputArray = outputAccessor.array;\n\n\t\t\t\tif ( outputAccessor.normalized ) {\n\n\t\t\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutputArray = scaled;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\tinputAccessor.array,\n\t\t\t\t\t\toutputArray,\n\t\t\t\t\t\tinterpolation\n\t\t\t\t\t);\n\n\t\t\t\t\t// Override interpolation with custom factory method.\n\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\t\t\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst name = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\treturn new AnimationClip( name, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\treturn ( function () {\n\n\t\t\tconst pending = [];\n\n\t\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t\t} );\n\n\t\t\tif ( meshPromise ) {\n\n\t\t\t\tpending.push( meshPromise );\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t\t} ) );\n\n\t\t\t}\n\n\t\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t\t} ).forEach( function ( promise ) {\n\n\t\t\t\tpending.push( promise );\n\n\t\t\t} );\n\n\t\t\treturn Promise.all( pending );\n\n\t\t}() ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( buildNodeHierarchy( nodeIds[ i ], scene, json, parser ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n}\n\nfunction buildNodeHierarchy( nodeId, parentObject, json, parser ) {\n\n\tconst nodeDef = json.nodes[ nodeId ];\n\n\treturn parser.getDependency( 'node', nodeId ).then( function ( node ) {\n\n\t\tif ( nodeDef.skin === undefined ) return node;\n\n\t\t// build skeleton here as well\n\n\t\tlet skinEntry;\n\n\t\treturn parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {\n\n\t\t\tskinEntry = skin;\n\n\t\t\tconst pendingJoints = [];\n\n\t\t\tfor ( let i = 0, il = skinEntry.joints.length; i < il; i ++ ) {\n\n\t\t\t\tpendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pendingJoints );\n\n\t\t} ).then( function ( jointNodes ) {\n\n\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\tif ( ! mesh.isMesh ) return;\n\n\t\t\t\tconst bones = [];\n\t\t\t\tconst boneInverses = [];\n\n\t\t\t\tfor ( let j = 0, jl = jointNodes.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst jointNode = jointNodes[ j ];\n\n\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinEntry.joints[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t} );\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t} ).then( function ( node ) {\n\n\t\t// build node hierachy\n\n\t\tparentObject.add( node );\n\n\t\tconst pending = [];\n\n\t\tif ( nodeDef.children ) {\n\n\t\t\tconst children = nodeDef.children;\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tpending.push( buildNodeHierarchy( child, node, json, parser ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t} );\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {Number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tlet index = geometry.getIndex();\n\n\t// generate index if not present\n\n\tif ( index === null ) {\n\n\t\tconst indices = [];\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\tindices.push( i );\n\n\t\t\t}\n\n\t\t\tgeometry.setIndex( indices );\n\t\t\tindex = geometry.getIndex();\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\treturn geometry;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tconst numberOfTriangles = index.count - 2;\n\tconst newIndices = [];\n\n\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t// gl.TRIANGLE_FAN\n\n\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t}\n\n\t} else {\n\n\t\t// gl.TRIANGLE_STRIP\n\n\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\n\t\t\t} else {\n\n\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t}\n\n\t// build final geometry\n\n\tconst newGeometry = geometry.clone();\n\tnewGeometry.setIndex( newIndices );\n\n\treturn newGeometry;\n\n}\n\nexport { GLTFLoader };\n","import {useRef, useEffect} from \"react\";\nimport * as THREE from \"three\";\nimport {OrbitControls} from \"three/examples/jsm/controls/OrbitControls\";\nimport {GLTFLoader} from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport businessCardModel from \"../assets/CharlesCard.glb\";\nimport businessCardAlbedo from \"../assets/CardAlbedo.png\";\nimport businessCardNormalMap from \"../assets/CardNormalMap.png\";\n\nconst modelPath = 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/stacy_lightweight.glb';\n\nconst Scene = ({props}) => {\n const mount = useRef(null);\n const character = (props.type === \"character\" ? true : false);\n const businessCard = (props.type === \"businessCard\" ? true : false);\n\n useEffect(() => {\n // BUILDING THE SCENE\n const width = mount.current.clientWidth;\n const height = mount.current.clientHeight;\n const scene = new THREE.Scene();\n const backgroundColor = \"#1B1B1D\";\n scene.background = new THREE.Color(backgroundColor);\n const camera = new THREE.PerspectiveCamera(\n 50, // fov = field of view\n width / height, // aspect ratio\n 0.1, // near plane\n 1000 // far plane\n );\n camera.position.z = 3; // is used here to set some distance from a cube that is located at z = 0\n\n // OrbitControls allow a camera to orbit around the object\n if(businessCard) {\n const controls = new OrbitControls( camera, mount.current )\n controls.enableZoom = false;\n camera.position.z = 4;\n }; \n\n const clock = new THREE.Clock();\n const renderer = new THREE.WebGLRenderer({antialias: true });\n renderer.setSize( width, height );\n renderer.shadowMap.enabled = true;\n renderer.setPixelRatio(window.devicePixelRatio);\n mount.current.appendChild( renderer.domElement );\n\n //load model\n var mixer;\n var neck;\n var waist;\n var cardModel;\n const loader = new GLTFLoader();\n\n //ADDING ELEMENTS\n if(character){\n let stacy_txt = new THREE.TextureLoader().load('https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/stacy.jpg');\n\n stacy_txt.flipY = false; // we flip the texture so that its the right way up\n \n const stacy_mtl = new THREE.MeshPhongMaterial({\n map: stacy_txt,\n color: 0xffffff\n });\n \n loader.load(\n modelPath,\n ( gltf ) => {\n const model = gltf.scene;\n const fileAnimations = gltf.animations;\n model.traverse(o => {\n if (o.isMesh) {\n o.castShadow = true;\n o.receiveShadow = true;\n o.material = stacy_mtl;\n }\n // Reference the neck and waist bones\n if (o.isBone && o.name === 'mixamorigNeck') { \n neck = o;\n }\n if (o.isBone && o.name === 'mixamorigSpine') { \n waist = o;\n }\n });\n model.position.y = -1;\n scene.add(model);\n mixer = new THREE.AnimationMixer(model);\n const idleAnim = THREE.AnimationClip.findByName(fileAnimations, 'idle');\n idleAnim.tracks.splice(3, 3);\n idleAnim.tracks.splice(9, 3);\n const idle = mixer.clipAction(idleAnim);\n idle.play();\n props.incrementLoaded();\n },\n ( xhr ) => { \n //console.log(xhr);\n }, \n ( error ) => {\n console.error(error);\n }\n );\n } else if(businessCard){\n const card_txt = new THREE.TextureLoader().load(businessCardNormalMap);\n const card_alb = new THREE.TextureLoader().load(businessCardAlbedo);\n card_txt.flipY = false;\n card_alb.flipY = false;\n const card_mtl = new THREE.MeshStandardMaterial({\n normalMap: card_txt,\n map: card_alb,\n color: 0xffffff,\n normalScale: new THREE.Vector2( 0.3, 0.3 )\n });\n\n loader.load(\n businessCardModel,\n ( gltf ) => {\n cardModel = gltf.scene;\n cardModel.traverse(o => {\n if (o.isMesh) {\n o.castShadow = true;\n o.receiveShadow = true;\n o.material = card_mtl;\n }\n });\n cardModel.rotation.z = -1;\n scene.add(cardModel);\n props.incrementLoaded();\n },\n ( xhr ) => { \n //console.log(xhr);\n }, \n ( error ) => {\n console.error(error);\n }\n );\n \n }\n\n const lights = [];\n lights[ 0 ] = new THREE.PointLight( 0xffffff, 1, 0 );\n lights[ 1 ] = new THREE.PointLight( 0xffffff, 1, 0 );\n lights[ 2 ] = new THREE.PointLight( 0xffffff, 1, 0 );\n\n lights[ 0 ].position.set( 0, 200, 0 );\n lights[ 1 ].position.set( 100, 200, 100 );\n lights[ 2 ].position.set( - 100, - 200, - 100 );\n\n scene.add( lights[ 0 ] );\n scene.add( lights[ 1 ] );\n scene.add( lights[ 2 ] );\n\n const startAnimationLoop = () => {\n if(mixer){\n mixer.update(clock.getDelta());\n }\n if(businessCard && cardModel){\n\t\t\t\tcardModel.rotation.y += 0.005;\n }\n renderer.render( scene, camera );\n window.requestAnimationFrame(startAnimationLoop);\n }\n\n const handleWindowResize = () => {\n const width = mount.current.clientWidth ? mount.current.clientWidth : 1;\n const height = mount.current.clientHeight ? mount.current.clientHeight : 1;\n \n renderer.setSize( width, height );\n camera.aspect = width / height;\n \n camera.updateProjectionMatrix();\n }\n\n const follow = (e) => {\n const x = (e.type === \"mousemove\") ? e.clientX : e.touches[0].clientX;\n const y = (e.type === \"mousemove\") ? e.clientY : e.touches[0].clientY;\n if (neck && waist) {\n moveJoint(x, y, neck, 50);\n moveJoint(x, y, waist, 30);\n }\n }\n\n const moveJoint = (x, y, joint, degreeLimit) => {\n const degrees = getMouseDegrees(x, y, degreeLimit);\n joint.rotation.y = degrees.x * Math.PI/180;\n joint.rotation.x = degrees.y * Math.PI/180;\n }\n\n const getMouseDegrees = (x, y, degreeLimit) => {\n let dx = 0,\n dy = 0,\n xdiff,\n xPercentage,\n ydiff,\n yPercentage;\n \n let w = { x: window.innerWidth, y: window.innerHeight };\n\n // Left (Rotates neck left between 0 and -degreeLimit)\n // 1. If cursor is in the left half of screen\n if (x <= w.x / 2) {\n // 2. Get the difference between middle of screen and cursor position\n xdiff = w.x / 2 - x; \n // 3. Find the percentage of that difference (percentage toward edge of screen)\n xPercentage = (xdiff / (w.x / 2)) * 100;\n // 4. Convert that to a percentage of the maximum rotation we allow for the neck\n dx = ((degreeLimit * xPercentage) / 100) * -1; }\n // Right (Rotates neck right between 0 and degreeLimit)\n if (x >= w.x / 2) {\n xdiff = x - w.x / 2;\n xPercentage = (xdiff / (w.x / 2)) * 100;\n dx = (degreeLimit * xPercentage) / 100;\n }\n // Up (Rotates neck up between 0 and -degreeLimit)\n if (y <= w.y / 2) {\n ydiff = w.y / 2 - y;\n yPercentage = (ydiff / (w.y / 2)) * 100;\n // Note that I cut degreeLimit in half when she looks up\n dy = (((degreeLimit * 0.5) * yPercentage) / 100) * -1;\n }\n \n // Down (Rotates neck down between 0 and degreeLimit)\n if (y >= w.y / 2) {\n ydiff = y - w.y / 2;\n yPercentage = (ydiff / (w.y / 2)) * 100;\n dy = (degreeLimit * yPercentage) / 100;\n }\n return { x: dx, y: dy };\n }\n\n window.addEventListener(\"resize\", handleWindowResize, false);\n if(character){\n window.addEventListener('mousemove', follow);\n window.addEventListener('touchmove', follow);\n }\n startAnimationLoop();\n }, []);\n\n return
;\n}\n\nexport default Scene;","import './Contact.scss';\nimport {useState, useEffect} from 'react';\nimport { CONTRACT_ADDRESS, API_KEY } from '../utils/Constants';\nimport businessCard from '../utils/BusinessCard.json';\nimport { ethers } from 'ethers';\nimport { Biconomy } from \"@biconomy/mexa\";\nimport linkedinLogo from '../assets/linkedin.svg';\nimport phoneLogo from '../assets/phone.svg';\nimport emailLogo from '../assets/mail.svg';\nimport Scene from './Scene';\n\nconst Contact = ({incrementLoaded}) => {\n const [contract, setContract] = useState(null);\n const [network, setNetwork] = useState(null);\n const [currentAccount, setCurrentAccount] = useState(null);\n const [hasNFT, setHasNFT] = useState(false);\n const [loading, setLoading] = useState(false);\n const chainId = 137; //80001; to switch to testnet mumbai\n const tokenId = 1;\n const [biconomy, setBiconomy] = useState(false);\n\n const props = {\n incrementLoaded: incrementLoaded,\n type: \"businessCard\"\n };\n\n useEffect(() => {\n setBiconomyContract();\n }, []);\n\n useEffect(() => {\n checkIfWalletIsConnected();\n }, [contract]);\n\n useEffect(() => {\n if (currentAccount && contract && network == chainId){\n checkIfUserHasNFT();\n }\n }, [currentAccount, network, loading]);\n\n const checkIfUserHasNFT = async () => {\n const txn = await contract.balanceOf(currentAccount, tokenId);\n setHasNFT(txn == 0 ? false : true);\n }\n\n const setBiconomyContract = async () => {\n if (!contract) {\n const { ethereum } = window;\n const biconomy = new Biconomy(ethereum, {\n apiKey: API_KEY,\n contractAddresses: [CONTRACT_ADDRESS],\n debug: true\n });\n await biconomy.init();\n const newContract = new ethers.Contract(\n CONTRACT_ADDRESS,\n businessCard.abi,\n biconomy.ethersProvider\n );\n newContract.on(\"CardGiven\", cardGivenEvent);\n setContract(newContract);\n setBiconomy(biconomy);\n };\n }\n\n const cardGivenEvent = () => {\n setHasNFT(true);\n setLoading(false);\n }\n\n const updateNetwork = async () => {\n if (window.ethereum.networkVersion !== chainId) {\n setLoading(true);\n try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: ethers.utils.hexlify(chainId) }]\n });\n setNetwork(chainId);\n } catch (err) {\n if (err.code === 4902) { // This error code indicates that the chain has not been added to MetaMask\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainName: 'Polygon Mainnet',\n chainId: ethers.utils.hexlify(chainId),\n nativeCurrency: { name: 'MATIC', decimals: 18, symbol: 'MATIC' },\n rpcUrls: ['https://polygon-rpc.com/']\n }\n ]\n });\n setNetwork(chainId);\n }\n }\n setLoading(false);\n }\n }\n\n const checkIfWalletIsConnected = async () => {\n try {\n const { ethereum } = window;\n\n if (!ethereum) {\n return;\n } else {\n\n setNetwork(ethereum.networkVersion ? ethereum.networkVersion : 1);\n \n const accounts = await ethereum.request({ method: 'eth_accounts' });\n \n if (accounts.length !== 0) {\n const account = accounts[0];\n console.log('Found an authorized account:', account);\n setCurrentAccount(account);\n if (contract && ethereum.networkVersion == chainId){\n const txn = await contract.balanceOf(account, tokenId);\n setHasNFT(txn == 0 ? false : true);\n }\n } else {\n console.log('No authorized account found');\n }\n }\n } catch (error) {\n console.log(error);\n }\n };\n \n const connectWalletAction = async () => {\n if(!currentAccount){\n setLoading(true);\n try {\n const { ethereum } = window;\n if (!ethereum) {\n alert('Get MetaMask!');\n return;\n }\n const accounts = await ethereum.request({\n method: 'eth_requestAccounts',\n });\n setCurrentAccount(accounts[0]);\n if (contract){\n const txn = await contract.balanceOf(accounts[0], tokenId);\n setHasNFT(txn == 0 ? false : true);\n }\n setLoading(false);\n } catch (error) {\n console.log(error);\n setLoading(false);\n }\n setLoading(false);\n } \n };\n\n const receiveBusinessCard = (tokenId) => async () => {\n try {\n console.log(contract);\n if (contract) {\n setLoading(true);\n const provider = await biconomy.provider;\n const { data } = await contract.populateTransaction.receiveBusinessCard(tokenId);\n const txParams = {\n data: data,\n to: CONTRACT_ADDRESS,\n from: currentAccount,\n signatureType: biconomy.PERSONAL_SIGN,\n };\n await provider.request({\n method: 'eth_sendTransaction',\n params: [txParams]\n });\n }\n } catch (error) {\n console.warn('receiveBusinessCard Error:', error);\n setLoading(false);\n }\n };\n\n const renderContent = () => {\n if (loading){\n return (\n
\n
\n
\n );\n } else if (!network){\n return (\n
\n

To receive your NFT, you'll first need metamask.

\n
\n );\n } else if(!currentAccount) {\n return (\n
\n

Connect your metamask account.

\n
\n );\n } else if (currentAccount && hasNFT) {\n return (\n
\n

You own a business card NFT! Check it out now on opensea .

\n
\n );\n } else if(network != chainId) {\n return (\n
\n

To receive your NFT, connect to the Polygon network.

\n
\n );\n } else if(!hasNFT) {\n return (\n
\n \n
\n );\n } else {\n console.log(\"error on render\")\n }\n }; \n\n return(\n
\n
\n
\n

On my spare time, I like playing piano, riding my motorbike, taking good care of my numerous plants but also shipping blockchain & Web3 related projects. To thank you for your visit, get your free NFT Business Card below.

\n
\n {renderContent()}\n
\n
\n \n
\n
\n

Currently based in Paris 🇫🇷 but open to work anywhere.

\n
\n );\n}\nexport default Contact;","import './App.scss';\nimport Header from './components/Header';\nimport Welcome from './components/Welcome';\nimport Experience from './components/Experience';\nimport Education from './components/Education';\nimport Contact from './components/Contact';\nimport {useState} from 'react';\n\nconst App = () => {\n const [loaded, setLoaded] = useState(false);\n var elementToLoad = 1;\n\n const incrementLoaded = () => {\n elementToLoad = elementToLoad - 1;\n if (elementToLoad === 0) setLoaded(true);\n }\n\n const welcomeProps = {\n loaded: loaded\n };\n\n const renderContent = () => {\n if (!loaded){\n document.body.style.overflow = \"hidden\";\n return(\n
\n
\n Loading...\n
\n )\n } else {\n if(document.body.style.overflow === \"hidden\") document.body.style.overflow = \"auto\";\n }\n }\n\n return(\n
\n {renderContent()}\n
\n \n \n \n \n
\n );\n}\nexport default App;","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n //\n \n //\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n",null,null,null,null,null,null,null,null,null,"export const biconomyForwarderAbi = [{ inputs: [{ internalType: 'address', name: '_owner', type: 'address' }], stateMutability: 'nonpayable', type: 'constructor' }, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'bytes32', name: 'domainSeparator', type: 'bytes32',\n }, {\n indexed: false, internalType: 'bytes', name: 'domainValue', type: 'bytes',\n }],\n name: 'DomainRegistered',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'previousOwner', type: 'address',\n }, {\n indexed: true, internalType: 'address', name: 'newOwner', type: 'address',\n }],\n name: 'OwnershipTransferred',\n type: 'event',\n}, {\n inputs: [], name: 'EIP712_DOMAIN_TYPE', outputs: [{ internalType: 'string', name: '', type: 'string' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'REQUEST_TYPEHASH', outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], name: 'domains', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'from', type: 'address' }, { internalType: 'address', name: 'to', type: 'address' }, { internalType: 'address', name: 'token', type: 'address' }, { internalType: 'uint256', name: 'txGas', type: 'uint256' }, { internalType: 'uint256', name: 'tokenGasPrice', type: 'uint256' }, { internalType: 'uint256', name: 'batchId', type: 'uint256' }, { internalType: 'uint256', name: 'batchNonce', type: 'uint256' }, { internalType: 'uint256', name: 'deadline', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }], internalType: 'structERC20ForwardRequestTypes.ERC20ForwardRequest', name: 'req', type: 'tuple',\n }, { internalType: 'bytes32', name: 'domainSeparator', type: 'bytes32' }, { internalType: 'bytes', name: 'sig', type: 'bytes' }],\n name: 'executeEIP712',\n outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }, { internalType: 'bytes', name: 'ret', type: 'bytes' }],\n stateMutability: 'nonpayable',\n type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'from', type: 'address' }, { internalType: 'address', name: 'to', type: 'address' }, { internalType: 'address', name: 'token', type: 'address' }, { internalType: 'uint256', name: 'txGas', type: 'uint256' }, { internalType: 'uint256', name: 'tokenGasPrice', type: 'uint256' }, { internalType: 'uint256', name: 'batchId', type: 'uint256' }, { internalType: 'uint256', name: 'batchNonce', type: 'uint256' }, { internalType: 'uint256', name: 'deadline', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }], internalType: 'structERC20ForwardRequestTypes.ERC20ForwardRequest', name: 'req', type: 'tuple',\n }, { internalType: 'bytes', name: 'sig', type: 'bytes' }],\n name: 'executePersonalSign',\n outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }, { internalType: 'bytes', name: 'ret', type: 'bytes' }],\n stateMutability: 'nonpayable',\n type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'from', type: 'address' }, { internalType: 'uint256', name: 'batchId', type: 'uint256' }], name: 'getNonce', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'isOwner', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'owner', outputs: [{ internalType: 'address', name: '', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'string', name: 'name', type: 'string' }, { internalType: 'string', name: 'version', type: 'string' }], name: 'registerDomainSeparator', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [], name: 'renounceOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'newOwner', type: 'address' }], name: 'transferOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'from', type: 'address' }, { internalType: 'address', name: 'to', type: 'address' }, { internalType: 'address', name: 'token', type: 'address' }, { internalType: 'uint256', name: 'txGas', type: 'uint256' }, { internalType: 'uint256', name: 'tokenGasPrice', type: 'uint256' }, { internalType: 'uint256', name: 'batchId', type: 'uint256' }, { internalType: 'uint256', name: 'batchNonce', type: 'uint256' }, { internalType: 'uint256', name: 'deadline', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }], internalType: 'structERC20ForwardRequestTypes.ERC20ForwardRequest', name: 'req', type: 'tuple',\n }, { internalType: 'bytes32', name: 'domainSeparator', type: 'bytes32' }, { internalType: 'bytes', name: 'sig', type: 'bytes' }],\n name: 'verifyEIP712',\n outputs: [],\n stateMutability: 'view',\n type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'from', type: 'address' }, { internalType: 'address', name: 'to', type: 'address' }, { internalType: 'address', name: 'token', type: 'address' }, { internalType: 'uint256', name: 'txGas', type: 'uint256' }, { internalType: 'uint256', name: 'tokenGasPrice', type: 'uint256' }, { internalType: 'uint256', name: 'batchId', type: 'uint256' }, { internalType: 'uint256', name: 'batchNonce', type: 'uint256' }, { internalType: 'uint256', name: 'deadline', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }], internalType: 'structERC20ForwardRequestTypes.ERC20ForwardRequest', name: 'req', type: 'tuple',\n }, { internalType: 'bytes', name: 'sig', type: 'bytes' }],\n name: 'verifyPersonalSign',\n outputs: [],\n stateMutability: 'view',\n type: 'function',\n}];\nexport const eip2771BaseAbi = [{\n inputs: [{ internalType: 'address', name: 'forwarder', type: 'address' }], name: 'isTrustedForwarder', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'trustedForwarder', outputs: [{ internalType: 'address', name: '', type: 'address' }], stateMutability: 'view', type: 'function',\n}];\n\nexport const baseWalletAbi = [{\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'handler', type: 'address',\n }],\n name: 'ChangedFallbackHandler',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'DisabledModule',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: '_scw', type: 'address',\n }, {\n indexed: true, internalType: 'address', name: '_oldEOA', type: 'address',\n }, {\n indexed: true, internalType: 'address', name: '_newEOA', type: 'address',\n }],\n name: 'EOAChanged',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'EnabledModule',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'oldEntryPoint', type: 'address',\n }, {\n indexed: false, internalType: 'address', name: 'newEntryPoint', type: 'address',\n }],\n name: 'EntryPointChanged',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'bytes32', name: 'txHash', type: 'bytes32',\n }, {\n indexed: false, internalType: 'uint256', name: 'payment', type: 'uint256',\n }],\n name: 'ExecutionFailure',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'ExecutionFromModuleFailure',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'ExecutionFromModuleSuccess',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'bytes32', name: 'txHash', type: 'bytes32',\n }, {\n indexed: false, internalType: 'uint256', name: 'payment', type: 'uint256',\n }],\n name: 'ExecutionSuccess',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'newImplementation', type: 'address',\n }],\n name: 'ImplementationUpdated',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'uint8', name: 'version', type: 'uint8',\n }],\n name: 'Initialized',\n type: 'event',\n}, { stateMutability: 'nonpayable', type: 'fallback' }, {\n inputs: [], name: 'VERSION', outputs: [{ internalType: 'string', name: '', type: 'string' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'bytes32', name: 'dataHash', type: 'bytes32' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'bytes', name: 'signatures', type: 'bytes' }], name: 'checkSignatures', outputs: [], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'prevModule', type: 'address' }, { internalType: 'address', name: 'module', type: 'address' }], name: 'disableModule', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [], name: 'domainSeparator', outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'module', type: 'address' }], name: 'enableModule', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }, { internalType: 'uint256', name: 'safeTxGas', type: 'uint256' }, { internalType: 'uint256', name: 'baseGas', type: 'uint256' }, { internalType: 'uint256', name: 'gasPrice', type: 'uint256' }, { internalType: 'address', name: 'gasToken', type: 'address' }, { internalType: 'address', name: 'refundReceiver', type: 'address' }, { internalType: 'uint256', name: '_nonce', type: 'uint256' }], name: 'encodeTransactionData', outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'entryPoint', outputs: [{ internalType: 'address', name: '', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'dest', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'func', type: 'bytes' }], name: 'exec', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address[]', name: 'dest', type: 'address[]' }, { internalType: 'bytes[]', name: 'func', type: 'bytes[]' }], name: 'execBatch', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'dest', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'func', type: 'bytes' }], name: 'execFromEntryPoint', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }, { internalType: 'uint256', name: 'safeTxGas', type: 'uint256' }, { internalType: 'uint256', name: 'baseGas', type: 'uint256' }, { internalType: 'uint256', name: 'gasPrice', type: 'uint256' }, { internalType: 'address', name: 'gasToken', type: 'address' }, { internalType: 'address payable', name: 'refundReceiver', type: 'address' }, { internalType: 'bytes', name: 'signatures', type: 'bytes' }], name: 'execTransaction', outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }], stateMutability: 'payable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }], name: 'execTransactionFromModule', outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }], name: 'execTransactionFromModuleReturnData', outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }, { internalType: 'bytes', name: 'returnData', type: 'bytes' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [], name: 'getChainId', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'start', type: 'address' }, { internalType: 'uint256', name: 'pageSize', type: 'uint256' }], name: 'getModulesPaginated', outputs: [{ internalType: 'address[]', name: 'array', type: 'address[]' }, { internalType: 'address', name: 'next', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'uint256', name: 'batchId', type: 'uint256' }], name: 'getNonce', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }, { internalType: 'uint256', name: 'safeTxGas', type: 'uint256' }, { internalType: 'uint256', name: 'baseGas', type: 'uint256' }, { internalType: 'uint256', name: 'gasPrice', type: 'uint256' }, { internalType: 'address', name: 'gasToken', type: 'address' }, { internalType: 'address', name: 'refundReceiver', type: 'address' }, { internalType: 'uint256', name: '_nonce', type: 'uint256' }], name: 'getTransactionHash', outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_owner', type: 'address' }, { internalType: 'address', name: '_entryPoint', type: 'address' }, { internalType: 'address', name: '_handler', type: 'address' }], name: 'init', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'module', type: 'address' }], name: 'isModuleEnabled', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], name: 'nonces', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'owner', outputs: [{ internalType: 'address', name: '', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'token', type: 'address' }, { internalType: 'address', name: 'dest', type: 'address' }, { internalType: 'uint256', name: 'amount', type: 'uint256' }], name: 'pullTokens', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'handler', type: 'address' }], name: 'setFallbackHandler', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_newOwner', type: 'address' }], name: 'setOwner', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'bytes4', name: 'interfaceId', type: 'bytes4' }], name: 'supportsInterface', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address payable', name: 'dest', type: 'address' }, { internalType: 'uint256', name: 'amount', type: 'uint256' }], name: 'transfer', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_entryPoint', type: 'address' }], name: 'updateEntryPoint', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_implementation', type: 'address' }], name: 'updateImplementation', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'sender', type: 'address' }, { internalType: 'uint256', name: 'nonce', type: 'uint256' }, { internalType: 'bytes', name: 'initCode', type: 'bytes' }, { internalType: 'bytes', name: 'callData', type: 'bytes' }, { internalType: 'uint256', name: 'callGas', type: 'uint256' }, { internalType: 'uint256', name: 'verificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' }, { internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'bytes', name: 'paymasterData', type: 'bytes' }, { internalType: 'bytes', name: 'signature', type: 'bytes' }], internalType: 'struct UserOperation', name: 'userOp', type: 'tuple',\n }, { internalType: 'bytes32', name: 'requestId', type: 'bytes32' }, { internalType: 'uint256', name: 'requiredPrefund', type: 'uint256' }],\n name: 'validateUserOp',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n}];\nexport const walletFactoryAbi = [{ inputs: [{ internalType: 'address', name: '_baseImpl', type: 'address' }], stateMutability: 'nonpayable', type: 'constructor' }, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: '_proxy', type: 'address',\n }, {\n indexed: true, internalType: 'address', name: '_implementation', type: 'address',\n }, {\n indexed: true, internalType: 'address', name: '_owner', type: 'address',\n }],\n name: 'WalletCreated',\n type: 'event',\n}, {\n inputs: [{ internalType: 'address', name: '_owner', type: 'address' }, { internalType: 'address', name: '_entryPoint', type: 'address' }, { internalType: 'address', name: '_handler', type: 'address' }, { internalType: 'uint256', name: '_index', type: 'uint256' }], name: 'deployCounterFactualWallet', outputs: [{ internalType: 'address', name: 'proxy', type: 'address' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_owner', type: 'address' }, { internalType: 'address', name: '_entryPoint', type: 'address' }, { internalType: 'address', name: '_handler', type: 'address' }], name: 'deployWallet', outputs: [{ internalType: 'address', name: 'proxy', type: 'address' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_owner', type: 'address' }, { internalType: 'uint256', name: '_index', type: 'uint256' }], name: 'getAddressForCounterfactualWallet', outputs: [{ internalType: 'address', name: '_wallet', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '', type: 'address' }], name: 'isWalletExist', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}];\nexport const entryPointAbi = [{\n inputs: [{ internalType: 'address', name: 'account', type: 'address' }, { internalType: 'uint32', name: '_unstakeDelaySec', type: 'uint32' }], name: 'addStakeTo', outputs: [], stateMutability: 'payable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'account', type: 'address' }], name: 'depositTo', outputs: [], stateMutability: 'payable', type: 'function',\n}, { inputs: [{ internalType: 'address', name: '_create2factory', type: 'address' }, { internalType: 'uint256', name: '_paymasterStake', type: 'uint256' }, { internalType: 'uint32', name: '_unstakeDelaySec', type: 'uint32' }], stateMutability: 'nonpayable', type: 'constructor' }, { inputs: [{ internalType: 'uint256', name: 'opIndex', type: 'uint256' }, { internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'string', name: 'reason', type: 'string' }], name: 'FailedOp', type: 'error' }, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'account', type: 'address',\n }, {\n indexed: false, internalType: 'uint256', name: 'withdrawTime', type: 'uint256',\n }],\n name: 'DepositUnstaked',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'account', type: 'address',\n }, {\n indexed: false, internalType: 'uint256', name: 'totalDeposit', type: 'uint256',\n }, {\n indexed: false, internalType: 'uint256', name: 'unstakeDelaySec', type: 'uint256',\n }],\n name: 'Deposited',\n type: 'event',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'sender', type: 'address' }, { internalType: 'uint256', name: 'nonce', type: 'uint256' }, { internalType: 'bytes', name: 'initCode', type: 'bytes' }, { internalType: 'bytes', name: 'callData', type: 'bytes' }, { internalType: 'uint256', name: 'callGas', type: 'uint256' }, { internalType: 'uint256', name: 'verificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' }, { internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'bytes', name: 'paymasterData', type: 'bytes' }, { internalType: 'bytes', name: 'signature', type: 'bytes' }], internalType: 'struct UserOperation', name: 'op', type: 'tuple',\n }, { internalType: 'address payable', name: 'beneficiary', type: 'address' }],\n name: 'handleOp',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'sender', type: 'address' }, { internalType: 'uint256', name: 'nonce', type: 'uint256' }, { internalType: 'bytes', name: 'initCode', type: 'bytes' }, { internalType: 'bytes', name: 'callData', type: 'bytes' }, { internalType: 'uint256', name: 'callGas', type: 'uint256' }, { internalType: 'uint256', name: 'verificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' }, { internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'bytes', name: 'paymasterData', type: 'bytes' }, { internalType: 'bytes', name: 'signature', type: 'bytes' }], internalType: 'struct UserOperation[]', name: 'ops', type: 'tuple[]',\n }, { internalType: 'address payable', name: 'beneficiary', type: 'address' }],\n name: 'handleOps',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'sender', type: 'address' }, { internalType: 'uint256', name: 'nonce', type: 'uint256' }, { internalType: 'bytes', name: 'initCode', type: 'bytes' }, { internalType: 'bytes', name: 'callData', type: 'bytes' }, { internalType: 'uint256', name: 'callGas', type: 'uint256' }, { internalType: 'uint256', name: 'verificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' }, { internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'bytes', name: 'paymasterData', type: 'bytes' }, { internalType: 'bytes', name: 'signature', type: 'bytes' }], internalType: 'struct UserOperation', name: 'op', type: 'tuple',\n }, {\n components: [{ internalType: 'bytes32', name: 'requestId', type: 'bytes32' }, { internalType: 'uint256', name: 'prefund', type: 'uint256' }, { internalType: 'enum EntryPoint.PaymentMode', name: 'paymentMode', type: 'uint8' }, { internalType: 'uint256', name: '_context', type: 'uint256' }, { internalType: 'uint256', name: 'preOpGas', type: 'uint256' }], internalType: 'struct EntryPoint.UserOpInfo', name: 'opInfo', type: 'tuple',\n }, { internalType: 'bytes', name: 'context', type: 'bytes' }],\n name: 'internalHandleOp',\n outputs: [{ internalType: 'uint256', name: 'actualGasCost', type: 'uint256' }],\n stateMutability: 'nonpayable',\n type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'sender', type: 'address' }, { internalType: 'uint256', name: 'nonce', type: 'uint256' }, { internalType: 'bytes', name: 'initCode', type: 'bytes' }, { internalType: 'bytes', name: 'callData', type: 'bytes' }, { internalType: 'uint256', name: 'callGas', type: 'uint256' }, { internalType: 'uint256', name: 'verificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' }, { internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'bytes', name: 'paymasterData', type: 'bytes' }, { internalType: 'bytes', name: 'signature', type: 'bytes' }], internalType: 'struct UserOperation', name: 'userOp', type: 'tuple',\n }],\n name: 'simulateValidation',\n outputs: [{ internalType: 'uint256', name: 'preOpGas', type: 'uint256' }, { internalType: 'uint256', name: 'prefund', type: 'uint256' }],\n stateMutability: 'nonpayable',\n type: 'function',\n}, {\n inputs: [], name: 'unstakeDeposit', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32',\n }, {\n indexed: true, internalType: 'address', name: 'sender', type: 'address',\n }, {\n indexed: true, internalType: 'address', name: 'paymaster', type: 'address',\n }, {\n indexed: false, internalType: 'uint256', name: 'nonce', type: 'uint256',\n }, {\n indexed: false, internalType: 'uint256', name: 'actualGasCost', type: 'uint256',\n }, {\n indexed: false, internalType: 'uint256', name: 'actualGasPrice', type: 'uint256',\n }, {\n indexed: false, internalType: 'bool', name: 'success', type: 'bool',\n }],\n name: 'UserOperationEvent',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32',\n }, {\n indexed: true, internalType: 'address', name: 'sender', type: 'address',\n }, {\n indexed: false, internalType: 'uint256', name: 'nonce', type: 'uint256',\n }, {\n indexed: false, internalType: 'bytes', name: 'revertReason', type: 'bytes',\n }],\n name: 'UserOperationRevertReason',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'account', type: 'address',\n }, {\n indexed: false, internalType: 'address', name: 'withdrawAddress', type: 'address',\n }, {\n indexed: false, internalType: 'uint256', name: 'withdrawAmount', type: 'uint256',\n }],\n name: 'Withdrawn',\n type: 'event',\n}, {\n inputs: [{ internalType: 'address payable', name: 'withdrawAddress', type: 'address' }, { internalType: 'uint256', name: 'withdrawAmount', type: 'uint256' }], name: 'withdrawTo', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, { stateMutability: 'payable', type: 'receive' }, {\n inputs: [{ internalType: 'address', name: 'account', type: 'address' }], name: 'balanceOf', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'create2factory', outputs: [{ internalType: 'address', name: '', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '', type: 'address' }], name: 'deposits', outputs: [{ internalType: 'uint112', name: 'amount', type: 'uint112' }, { internalType: 'uint32', name: 'unstakeDelaySec', type: 'uint32' }, { internalType: 'uint64', name: 'withdrawTime', type: 'uint64' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'account', type: 'address' }],\n name: 'getDepositInfo',\n outputs: [{\n components: [{ internalType: 'uint112', name: 'amount', type: 'uint112' }, { internalType: 'uint32', name: 'unstakeDelaySec', type: 'uint32' }, { internalType: 'uint64', name: 'withdrawTime', type: 'uint64' }], internalType: 'struct StakeManager.DepositInfo', name: 'info', type: 'tuple',\n }],\n stateMutability: 'view',\n type: 'function',\n}, {\n inputs: [{\n components: [{ internalType: 'address', name: 'sender', type: 'address' }, { internalType: 'uint256', name: 'nonce', type: 'uint256' }, { internalType: 'bytes', name: 'initCode', type: 'bytes' }, { internalType: 'bytes', name: 'callData', type: 'bytes' }, { internalType: 'uint256', name: 'callGas', type: 'uint256' }, { internalType: 'uint256', name: 'verificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' }, { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' }, { internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'bytes', name: 'paymasterData', type: 'bytes' }, { internalType: 'bytes', name: 'signature', type: 'bytes' }], internalType: 'struct UserOperation', name: 'userOp', type: 'tuple',\n }],\n name: 'getRequestId',\n outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n stateMutability: 'view',\n type: 'function',\n}, {\n inputs: [{ internalType: 'bytes', name: 'initCode', type: 'bytes' }, { internalType: 'uint256', name: '_salt', type: 'uint256' }], name: 'getSenderAddress', outputs: [{ internalType: 'address', name: '', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'paymaster', type: 'address' }, { internalType: 'uint256', name: 'stake', type: 'uint256' }], name: 'isPaymasterStaked', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'account', type: 'address' }, { internalType: 'uint256', name: 'requiredStake', type: 'uint256' }, { internalType: 'uint256', name: 'requiredDelaySec', type: 'uint256' }], name: 'isStaked', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'paymasterStake', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'unstakeDelaySec', outputs: [{ internalType: 'uint32', name: '', type: 'uint32' }], stateMutability: 'view', type: 'function',\n}];\nexport const gnosisSafeAbi = [{ inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'owner', type: 'address',\n }],\n name: 'AddedOwner',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'bytes32', name: 'approvedHash', type: 'bytes32',\n }, {\n indexed: true, internalType: 'address', name: 'owner', type: 'address',\n }],\n name: 'ApproveHash',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'handler', type: 'address',\n }],\n name: 'ChangedFallbackHandler',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'guard', type: 'address',\n }],\n name: 'ChangedGuard',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'uint256', name: 'threshold', type: 'uint256',\n }],\n name: 'ChangedThreshold',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'DisabledModule',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'EnabledModule',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'bytes32', name: 'txHash', type: 'bytes32',\n }, {\n indexed: false, internalType: 'uint256', name: 'payment', type: 'uint256',\n }],\n name: 'ExecutionFailure',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'ExecutionFromModuleFailure',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'module', type: 'address',\n }],\n name: 'ExecutionFromModuleSuccess',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'bytes32', name: 'txHash', type: 'bytes32',\n }, {\n indexed: false, internalType: 'uint256', name: 'payment', type: 'uint256',\n }],\n name: 'ExecutionSuccess',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'address', name: 'owner', type: 'address',\n }],\n name: 'RemovedOwner',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'sender', type: 'address',\n }, {\n indexed: false, internalType: 'uint256', name: 'value', type: 'uint256',\n }],\n name: 'SafeReceived',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'address', name: 'initiator', type: 'address',\n }, {\n indexed: false, internalType: 'address[]', name: 'owners', type: 'address[]',\n }, {\n indexed: false, internalType: 'uint256', name: 'threshold', type: 'uint256',\n }, {\n indexed: false, internalType: 'address', name: 'initializer', type: 'address',\n }, {\n indexed: false, internalType: 'address', name: 'fallbackHandler', type: 'address',\n }],\n name: 'SafeSetup',\n type: 'event',\n}, {\n anonymous: false,\n inputs: [{\n indexed: true, internalType: 'bytes32', name: 'msgHash', type: 'bytes32',\n }],\n name: 'SignMsg',\n type: 'event',\n}, { stateMutability: 'nonpayable', type: 'fallback' }, {\n inputs: [], name: 'VERSION', outputs: [{ internalType: 'string', name: '', type: 'string' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'owner', type: 'address' }, { internalType: 'uint256', name: '_threshold', type: 'uint256' }], name: 'addOwnerWithThreshold', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'bytes32', name: 'hashToApprove', type: 'bytes32' }], name: 'approveHash', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '', type: 'address' }, { internalType: 'bytes32', name: '', type: 'bytes32' }], name: 'approvedHashes', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'uint256', name: '_threshold', type: 'uint256' }], name: 'changeThreshold', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'bytes32', name: 'dataHash', type: 'bytes32' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'bytes', name: 'signatures', type: 'bytes' }, { internalType: 'uint256', name: 'requiredSignatures', type: 'uint256' }], name: 'checkNSignatures', outputs: [], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'bytes32', name: 'dataHash', type: 'bytes32' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'bytes', name: 'signatures', type: 'bytes' }], name: 'checkSignatures', outputs: [], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'prevModule', type: 'address' }, { internalType: 'address', name: 'module', type: 'address' }], name: 'disableModule', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [], name: 'domainSeparator', outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'module', type: 'address' }], name: 'enableModule', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }, { internalType: 'uint256', name: 'safeTxGas', type: 'uint256' }, { internalType: 'uint256', name: 'baseGas', type: 'uint256' }, { internalType: 'uint256', name: 'gasPrice', type: 'uint256' }, { internalType: 'address', name: 'gasToken', type: 'address' }, { internalType: 'address', name: 'refundReceiver', type: 'address' }, { internalType: 'uint256', name: '_nonce', type: 'uint256' }], name: 'encodeTransactionData', outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }, { internalType: 'uint256', name: 'safeTxGas', type: 'uint256' }, { internalType: 'uint256', name: 'baseGas', type: 'uint256' }, { internalType: 'uint256', name: 'gasPrice', type: 'uint256' }, { internalType: 'address', name: 'gasToken', type: 'address' }, { internalType: 'address payable', name: 'refundReceiver', type: 'address' }, { internalType: 'bytes', name: 'signatures', type: 'bytes' }], name: 'execTransaction', outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }], stateMutability: 'payable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }], name: 'execTransactionFromModule', outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }], name: 'execTransactionFromModuleReturnData', outputs: [{ internalType: 'bool', name: 'success', type: 'bool' }, { internalType: 'bytes', name: 'returnData', type: 'bytes' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [], name: 'getChainId', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'start', type: 'address' }, { internalType: 'uint256', name: 'pageSize', type: 'uint256' }], name: 'getModulesPaginated', outputs: [{ internalType: 'address[]', name: 'array', type: 'address[]' }, { internalType: 'address', name: 'next', type: 'address' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'getOwners', outputs: [{ internalType: 'address[]', name: '', type: 'address[]' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'uint256', name: 'offset', type: 'uint256' }, { internalType: 'uint256', name: 'length', type: 'uint256' }], name: 'getStorageAt', outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'getThreshold', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }, { internalType: 'uint256', name: 'safeTxGas', type: 'uint256' }, { internalType: 'uint256', name: 'baseGas', type: 'uint256' }, { internalType: 'uint256', name: 'gasPrice', type: 'uint256' }, { internalType: 'address', name: 'gasToken', type: 'address' }, { internalType: 'address', name: 'refundReceiver', type: 'address' }, { internalType: 'uint256', name: '_nonce', type: 'uint256' }], name: 'getTransactionHash', outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'module', type: 'address' }], name: 'isModuleEnabled', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'owner', type: 'address' }], name: 'isOwner', outputs: [{ internalType: 'bool', name: '', type: 'bool' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [], name: 'nonce', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'prevOwner', type: 'address' }, { internalType: 'address', name: 'owner', type: 'address' }, { internalType: 'uint256', name: '_threshold', type: 'uint256' }], name: 'removeOwner', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'to', type: 'address' }, { internalType: 'uint256', name: 'value', type: 'uint256' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'enum Enum.Operation', name: 'operation', type: 'uint8' }], name: 'requiredTxGas', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'handler', type: 'address' }], name: 'setFallbackHandler', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'guard', type: 'address' }], name: 'setGuard', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address[]', name: '_owners', type: 'address[]' }, { internalType: 'uint256', name: '_threshold', type: 'uint256' }, { internalType: 'address', name: 'to', type: 'address' }, { internalType: 'bytes', name: 'data', type: 'bytes' }, { internalType: 'address', name: 'fallbackHandler', type: 'address' }, { internalType: 'address', name: 'paymentToken', type: 'address' }, { internalType: 'uint256', name: 'payment', type: 'uint256' }, { internalType: 'address payable', name: 'paymentReceiver', type: 'address' }], name: 'setup', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], name: 'signedMessages', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'targetContract', type: 'address' }, { internalType: 'bytes', name: 'calldataPayload', type: 'bytes' }], name: 'simulateAndRevert', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'prevOwner', type: 'address' }, { internalType: 'address', name: 'oldOwner', type: 'address' }, { internalType: 'address', name: 'newOwner', type: 'address' }], name: 'swapOwner', outputs: [], stateMutability: 'nonpayable', type: 'function',\n}, { stateMutability: 'payable', type: 'receive' }];\nexport const gnosisSafeProxyFactoryAbi = [{\n anonymous: false,\n inputs: [{\n indexed: false, internalType: 'contract GnosisSafeProxy', name: 'proxy', type: 'address',\n }, {\n indexed: false, internalType: 'address', name: 'singleton', type: 'address',\n }],\n name: 'ProxyCreation',\n type: 'event',\n}, {\n inputs: [{ internalType: 'address', name: '_singleton', type: 'address' }, { internalType: 'bytes', name: 'initializer', type: 'bytes' }, { internalType: 'uint256', name: 'saltNonce', type: 'uint256' }], name: 'calculateCreateProxyWithNonceAddress', outputs: [{ internalType: 'contract GnosisSafeProxy', name: 'proxy', type: 'address' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: 'singleton', type: 'address' }, { internalType: 'bytes', name: 'data', type: 'bytes' }], name: 'createProxy', outputs: [{ internalType: 'contract GnosisSafeProxy', name: 'proxy', type: 'address' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_singleton', type: 'address' }, { internalType: 'bytes', name: 'initializer', type: 'bytes' }, { internalType: 'uint256', name: 'saltNonce', type: 'uint256' }, { internalType: 'contract IProxyCreationCallback', name: 'callback', type: 'address' }], name: 'createProxyWithCallback', outputs: [{ internalType: 'contract GnosisSafeProxy', name: 'proxy', type: 'address' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [{ internalType: 'address', name: '_singleton', type: 'address' }, { internalType: 'bytes', name: 'initializer', type: 'bytes' }, { internalType: 'uint256', name: 'saltNonce', type: 'uint256' }], name: 'createProxyWithNonce', outputs: [{ internalType: 'contract GnosisSafeProxy', name: 'proxy', type: 'address' }], stateMutability: 'nonpayable', type: 'function',\n}, {\n inputs: [], name: 'proxyCreationCode', outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }], stateMutability: 'pure', type: 'function',\n}, {\n inputs: [], name: 'proxyRuntimeCode', outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }], stateMutability: 'pure', type: 'function',\n}];\n","import { Types } from 'mongoose';\nimport { ethers } from 'ethers';\n\nexport type OptionsType = {\n apiKey: string,\n debug?: boolean,\n strictMode?: boolean,\n jsonRpcUrl?: string,\n contractAddresses: string[],\n};\n\nexport type SignatureParametersPerContractAddressType = {\n [key: string]: {\n r: string,\n s: string,\n v : number\n }\n};\n\nexport type DappApiMapType = {\n [key: string]: MetaApiType\n};\n\nexport type InterfaceMapType = {\n [key: string]: ethers.utils.Interface\n};\n\nexport type SmartContractMapType = {\n [key: string]: ethers.ContractInterface\n};\n\nexport type SmartContractMetaTransactionMapType = {\n [key: string]: string\n};\n\nexport type SmartContractTrustedForwarderMapType = {\n [key: string]: string\n};\n\nexport type ForwarderDomainData = {\n name: string,\n version: string,\n verifyingContract: string,\n salt: string\n};\n\nexport type SystemInfoResponse = {\n code: string,\n data: any\n};\n\nexport enum ContractMetaTransactionType {\n DEFAULT = 'CUSTOM',\n EIP2771 = 'TRUSTED_FORWARDER',\n}\n\nexport type ForwardRequestType = Array<{\n name: string,\n type: string,\n}>;\n\nexport type ForwarderDomainType = ForwardRequestType;\n\nexport type HandleSendTransactionParamsType = {\n params?: Array\n fallback: () => Promise | void | undefined\n};\n\nexport type FindRightForwarderParamsType = {\n to: string,\n smartContractTrustedForwarderMap: SmartContractTrustedForwarderMapType,\n provider: any,\n forwarderAddresses: Array\n forwarderAddress: string\n};\nexport type SendSingedTransactionParamsType = HandleSendTransactionParamsType;\n\nexport interface JsonRpcRequest {\n id: string | undefined;\n jsonrpc: '2.0';\n method: string;\n params?: Array;\n}\n\nexport interface JsonRpcResponse {\n id: string | undefined;\n jsonrpc: '2.0';\n method: string;\n result?: unknown;\n error?: Error;\n}\n\nexport type JsonRpcCallback = (error: Error, response: JsonRpcResponse) => unknown;\n\nexport type SmartContractType = {\n _id?: Object,\n dappId: Types.ObjectId,\n name: string,\n abi: JSON,\n type: string,\n walletType: string,\n metaTransactionType: string,\n address: string,\n createdOn: number,\n createdBy: Types.ObjectId,\n};\n\nexport type MetaApiType = {\n apiId: string,\n name: string,\n dappId: Types.ObjectId,\n contractId: Types.ObjectId,\n method: string,\n methodType: string,\n apiType: string,\n createdOn: number,\n createdBy: Types.ObjectId,\n contractAddress: string\n};\n\nexport type DomainDataType = {\n name: string,\n version: string,\n verifyingContract: string,\n salt: string\n};\n","export const config = {\n PACKAGE_VERSION: process.env.npm_package_version || '1.0.4',\n SCW: 'SCW',\n metaEntryPointBaseUrl: 'https://gasless-meta.prod.biconomy.io',\n webSocketConnectionUrl: 'wss://gasless-ws.prod.biconomy.io/connection/websocket',\n JSON_RPC_VERSION: '2.0',\n eip712SigVersion: '1',\n eip712DomainName: 'Biconomy Meta Transaction',\n eip712VerifyingContract: '0x3457dC2A8Ff1d3FcC45eAd532CA1740f5c477160',\n DEFAULT_RELAYER_PAYMENT_TOKEN_ADDRESS: '0x0000000000000000000000000000000000000000',\n DEFAULT_RELAYER_PAYMENT_AMOUNT: 0,\n ZERO_ADDRESS: '0x0000000000000000000000000000000000000000',\n NONCE_BATCH_ID: 0,\n EXPIRY: 0,\n BASE_GAS: 0,\n EIP712_WALLET_TX_TYPE: { // Biconomy Wallet\n WalletTx: [\n { type: 'address', name: 'to' },\n { type: 'uint256', name: 'value' },\n { type: 'bytes', name: 'data' },\n { type: 'uint8', name: 'operation' },\n { type: 'uint256', name: 'targetTxGas' },\n { type: 'uint256', name: 'baseGas' },\n { type: 'uint256', name: 'gasPrice' },\n { type: 'address', name: 'gasToken' },\n { type: 'address', name: 'refundReceiver' },\n { type: 'uint256', name: 'nonce' },\n ],\n },\n EIP712_SAFE_TX_TYPE: { // Gnosis Wallet\n SafeTx: [\n { type: 'address', name: 'to' },\n { type: 'uint256', name: 'value' },\n { type: 'bytes', name: 'data' },\n { type: 'uint8', name: 'operation' },\n { type: 'uint256', name: 'safeTxGas' },\n { type: 'uint256', name: 'baseGas' },\n { type: 'uint256', name: 'gasPrice' },\n { type: 'address', name: 'gasToken' },\n { type: 'address', name: 'refundReceiver' },\n { type: 'uint256', name: 'nonce' },\n ],\n },\n};\n\nexport const EVENTS = {\n SMART_CONTRACT_DATA_READY: 'smart_contract_data_ready',\n DAPP_API_DATA_READY: 'dapp_api_data_ready',\n LOGIN_CONFIRMATION: 'login_confirmation',\n BICONOMY_ERROR: 'biconomy_error',\n HELPER_CLENTS_READY: 'permit_and_ercforwarder_clients_ready',\n};\n\nexport const RESPONSE_CODES = {\n ERROR_RESPONSE: 'B500',\n API_NOT_FOUND: 'B501',\n USER_CONTRACT_NOT_FOUND: 'B502',\n USER_NOT_LOGGED_IN: 'B503',\n USER_ACCOUNT_NOT_FOUND: 'B504',\n NETWORK_ID_MISMATCH: 'B505',\n BICONOMY_NOT_INITIALIZED: 'B506',\n NETWORK_ID_NOT_FOUND: 'B507',\n SMART_CONTRACT_NOT_FOUND: 'B508',\n DAPP_NOT_FOUND: 'B509',\n INVALID_PAYLOAD: 'B510',\n DASHBOARD_DATA_MISMATCH: 'B511',\n SUCCESS_RESPONSE: 'B200',\n USER_CONTRACT_CREATION_FAILED: 'B512',\n EVENT_NOT_SUPPORTED: 'B513',\n INVALID_DATA: 'B514',\n INVALID_OPERATION: 'B515',\n WRONG_ABI: 'B516',\n INTERFACE_MAP_UNDEFINED: 'B517',\n DAPP_API_MAP_UNDEFINED: 'B518',\n SMART_CONTRACT_METATRANSACTION_MAP_UNDEFINED: 'B519',\n SMART_CONTRACT_MAP_UNDEFINED: 'B520',\n FORWARDER_DOMAIN_DATA_UNDEFINED: 'B521',\n FORWARDER_DOMAIN_DETAILS_UNDEFINED: 'B522',\n BICONOMY_FORWARDER_UNDEFINED: 'B523',\n SMART_CONTRACT_TRSUTED_FORWARDER_MAP_UNDEFINED: 'B524',\n DAPP_ID_UNDEFINED: 'B525',\n FORWARDER_ADDRESSES_ARRAY_UNDEFINED: 'B526',\n FORWARDER_ADDRESS_UNDEFINED: 'B527',\n CONTRACT_ABI_UNDEFINED: 'B528',\n FORWARDER_DOMAIN_TYPE_UNDEFINED: 'B529',\n FORWARDER_REQUEST_TYPE_UNDEFINED: 'B530',\n};\n\nexport const BICONOMY_RESPONSE_CODES = {\n SUCCESS: 200,\n ACTION_COMPLETE: 143,\n USER_CONTRACT_NOT_FOUND: 148,\n ERROR_RESPONSE: 144,\n BAD_REQUEST: 400,\n};\n\nexport const HTTP_CODES = {\n OK: 200,\n INTERNAL_SERVER_ERROR: 500,\n NOT_FOUND: 404,\n CONFLICT: 409,\n EXPECTATION_FAILED: 417,\n};\n\nexport const RESPONSE_BODY_CODES = {\n OK: 200,\n DAPP_LIMIT_REACHED: 150,\n USER_LIMIT_REACHED: 151,\n API_LIMIT_REACHED: 152,\n GAS_ESTIMATION_FAILED: 417,\n INTERNAL_ERROR: 500,\n NOT_FOUND: 404,\n};\n\nexport const STATUS = {\n INIT: 'init',\n BICONOMY_READY: 'biconomy_ready',\n NO_DATA: 'no_data',\n};\n\nexport const domainType = [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'verifyingContract', type: 'address' },\n { name: 'salt', type: 'bytes32' },\n];\n\nexport const metaTransactionType = [\n { name: 'nonce', type: 'uint256' },\n { name: 'from', type: 'address' },\n { name: 'functionSignature', type: 'bytes' },\n];\n","/* eslint-disable consistent-return */\nimport { logErrorMessage, logMessage } from '../utils';\nimport type { Biconomy } from '..';\n\nexport const mexaSdkClientMessenger = async (\n engine: Biconomy,\n transactionData: { transactionId: string },\n) => {\n try {\n const { transactionId } = transactionData;\n\n engine.clientMessenger.createTransactionNotifier(transactionId, {\n onMined: (tx: { transactionId: string; transactionHash: string; receipt: any }) => {\n logMessage(`Tx Hash mined message received at client with id ${tx.transactionId} and hash ${tx.transactionHash}`);\n engine.emit('txMined', {\n msg: 'txn mined',\n id: tx.transactionId,\n hash: tx.transactionHash,\n receipt: tx.receipt,\n });\n },\n onHashGenerated: (tx: { transactionId: string; transactionHash: string; }) => {\n logMessage(`Tx Hash generated message received at client ${tx.transactionId} and hash ${tx.transactionHash}`);\n\n engine.emit('txHashGenerated', {\n msg: 'txn hash generated',\n id: tx.transactionId,\n hash: tx.transactionHash,\n });\n },\n onError: (errorResponseData: { error: any; transactionId: string; }) => {\n logMessage(`Error message received at client\\n ${errorResponseData.error}`);\n engine.emit('onError', {\n error: errorResponseData.error,\n transactionId: errorResponseData.transactionId,\n });\n },\n onHashChanged: (tx: { transactionId: string; transactionHash: string; }) => {\n logMessage(`Tx Hash changed message received at client ${tx.transactionId} and hash ${tx.transactionHash}`);\n\n engine.emit('txHashChanged', {\n msg: 'txn hash changed',\n id: tx.transactionId,\n hash: tx.transactionHash,\n });\n },\n });\n } catch (error) {\n logErrorMessage(error);\n }\n};\n","/* eslint-disable consistent-return */\nimport { ethers } from 'ethers';\nimport axios from 'axios';\nimport {\n config,\n} from '../config';\nimport { logErrorMessage, logMessage } from '../utils';\n\nimport { biconomyForwarderAbi } from '../abis';\nimport type { Biconomy } from '..';\nimport { ContractMetaTransactionType, SystemInfoResponse } from '../common/types';\n\nconst domainData = {\n name: config.eip712DomainName,\n version: config.eip712SigVersion,\n verifyingContract: config.eip712VerifyingContract,\n chainId: 0,\n};\n\nexport async function getSystemInfo(\n this: Biconomy,\n providerNetworkId: number,\n) {\n try {\n domainData.chainId = providerNetworkId;\n logMessage('Making system info call to get contract addresses');\n const response: SystemInfoResponse = await axios.get(\n `${config.metaEntryPointBaseUrl}/api/v1/systemInfo/?networkId=${providerNetworkId}`,\n {\n headers: {\n 'Content-Type': 'application/json;charset=utf-8',\n version: config.PACKAGE_VERSION,\n },\n },\n );\n const systemInfoResponse = response.data.response;\n if (systemInfoResponse.code === '200' && systemInfoResponse.data) {\n const systemInfo = systemInfoResponse.data;\n this.forwarderDomainType = systemInfo.forwarderDomainType;\n this.defaultMetaTransaction = ContractMetaTransactionType.DEFAULT;\n this.trustedForwarderMetaTransaction = ContractMetaTransactionType.EIP2771;\n this.forwardRequestType = systemInfo.forwardRequestType;\n this.forwarderDomainData = systemInfo.forwarderDomainData;\n this.forwarderDomainDetails = systemInfo.forwarderDomainDetails;\n this.forwarderAddress = systemInfo.biconomyForwarderAddress;\n this.forwarderAddresses = systemInfo.biconomyForwarderAddresses;\n this.eip712Sign = systemInfo.eip712Sign;\n this.personalSign = systemInfo.personalSign;\n this.walletFactoryAddress = systemInfo.walletFactoryAddress;\n this.baseWalletAddress = systemInfo.baseWalletAddress;\n this.entryPointAddress = systemInfo.entryPointAddress;\n this.handlerAddress = systemInfo.handlerAddress;\n this.gnosisSafeProxyFactoryAddress = systemInfo.gnosisSafeProxyFactoryAddress;\n this.gnosisSafeAddress = systemInfo.gnosisSafeAddress;\n\n if (this.forwarderAddress && this.forwarderAddress !== '') {\n this.biconomyForwarder = new ethers.Contract(\n this.forwarderAddress,\n biconomyForwarderAbi,\n this.ethersProvider,\n );\n }\n } else {\n logMessage(`System info response: ${JSON.stringify(systemInfoResponse)}`);\n throw new Error('System info API call failed');\n }\n } catch (error) {\n logErrorMessage(error);\n }\n}\n","import { ethers } from 'ethers';\nimport { HandleSendTransactionParamsType } from '../common/types';\nimport { decodeMethod, logErrorMessage, logMessage } from '../utils';\nimport { buildForwardTxRequest, findTheRightForwarder, getDomainSeperator } from './meta-transaction-EIP2771-helpers';\nimport type { Biconomy } from '..';\n\n/**\n * Function decodes the parameter in payload and gets the user signature using eth_signTypedData_v4\n * method and send the request to biconomy for processing and call the callback method 'end'\n * with transaction hash.\n * This is an internal function that is called\n * while intercepting eth_sendTransaction RPC method call.\n* */\nexport async function handleSendTransaction(\n this: Biconomy,\n handleSendTransactionParams: HandleSendTransactionParamsType,\n) {\n try {\n if (!this.interfaceMap) {\n throw new Error('Interface Map is undefined');\n }\n\n if (!this.dappApiMap) {\n throw new Error('Dapp Api Map is undefined');\n }\n\n if (!this.smartContractMetaTransactionMap) {\n throw new Error('Smart contract meta transaction map is undefined');\n }\n\n if (!this.smartContractTrustedForwarderMap) {\n throw new Error('Smart contract trusted forwarder map is undefined');\n }\n\n if (!this.smartContractMap) {\n throw new Error('Smart contract map is undefined');\n }\n\n if (!this.forwarderDomainData) {\n throw new Error('Forwarder domain data is undefined');\n }\n\n if (!this.forwarderDomainDetails) {\n throw new Error('Forwarder domain details is undefined');\n }\n\n if (!this.biconomyForwarder) {\n throw new Error('Biconomy forwarder contract is undefined');\n }\n\n if (!this.forwarderAddresses) {\n throw new Error('Forwarder Addresses array is undefined');\n }\n\n if (!this.forwarderAddress) {\n throw new Error('Forwarder Address is undefined');\n }\n\n const {\n params, fallback,\n } = handleSendTransactionParams;\n if (params && params[0] && params[0].to) {\n const to = params[0].to.toLowerCase();\n if (this.interfaceMap[to]) {\n const methodInfo = decodeMethod(to, params[0].data, this.interfaceMap);\n\n if (!methodInfo) {\n throw new Error('Can\\'t decode method information from payload. Make sure you have uploaded correct ABI on Biconomy Dashboard');\n }\n const methodName = methodInfo.name;\n const api = this.dappApiMap[`${to}-${methodName}`];\n // Information we get here is contractAddress, methodName, methodType, ApiId\n let customBatchId;\n let customDomainName;\n let customDomainVersion;\n let signTypedDataType;\n\n const contractAddress = api.contractAddress.toLowerCase();\n const metaTxApproach = this.smartContractMetaTransactionMap[contractAddress];\n\n // Sanitise gas limit here. big number / hex / number -> hex\n let gasLimit = params[0].gas || params[0].gasLimit;\n if (gasLimit) {\n gasLimit = ethers.BigNumber.from(gasLimit.toString()).toHexString();\n }\n let { txGas } = params[0];\n const { signatureType } = params[0];\n if (params[0].batchId) {\n customBatchId = Number(params[0].batchId);\n }\n\n if (params[0].domainName) {\n customDomainName = params[0].domainName;\n }\n\n if (params[0].domainVersion) {\n customDomainVersion = params[0].domainVersion;\n }\n\n if (params[0].signTypedDataType) {\n signTypedDataType = params[0].signTypedDataType;\n }\n\n logMessage(params[0]);\n logMessage(`gas limit : ${gasLimit}`);\n if (txGas) {\n logMessage(`tx gas supplied : ${txGas}`);\n }\n\n if (!api) {\n logMessage(`API not found for method ${methodName}`);\n logMessage(`Strict mode ${this.strictMode}`);\n if (this.strictMode) {\n throw new Error(`Biconomy strict mode is on. No registered API found for method ${methodName}. Please register API from developer dashboard.`);\n }\n logMessage(\n 'Falling back to default provider as strict mode is false in biconomy',\n );\n return await fallback();\n }\n logMessage('API found');\n\n logMessage('Getting user account');\n const account = params[0].from;\n\n if (!account) {\n throw new Error('Not able to get user account');\n }\n logMessage('User account fetched');\n\n logMessage(methodInfo.args);\n\n const paramArray:Array = [];\n\n if (metaTxApproach === this.trustedForwarderMetaTransaction) {\n let gasLimitNum;\n logMessage('Smart contract is configured to use Trusted Forwarder as meta transaction type');\n const forwardedData = params[0].data;\n const signatureFromPayload = params[0].signature;\n // Check if txGas is present, if not calculate gas limit for txGas\n\n if (!txGas || parseInt(txGas, 10) === 0) {\n const contractAbi = this.smartContractMap[to];\n if (contractAbi) {\n const contract = new ethers.Contract(\n to,\n contractAbi,\n this.readOnlyProvider ? this.readOnlyProvider : this.ethersProvider,\n );\n txGas = await contract.estimateGas[methodInfo.signature](\n ...methodInfo.args,\n { from: account },\n );\n // do not send this value in API call. only meant for txGas\n gasLimitNum = ethers.BigNumber.from(txGas.toString())\n .add(ethers.BigNumber.from(5000))\n .toNumber();\n\n logMessage(`Gas limit (txGas) calculated for method ${methodName} in SDK: ${gasLimitNum}`);\n } else {\n throw new Error('Smart contract ABI not found!');\n }\n } else {\n logMessage(`txGas supplied for this Trusted Forwarder call is ${Number(txGas)}`);\n gasLimitNum = ethers.BigNumber.from(\n txGas.toString(),\n ).toNumber();\n logMessage(`gas limit number for txGas ${gasLimitNum}`);\n }\n\n const forwarderToAttach = ethers.utils.getAddress(await findTheRightForwarder({\n to,\n smartContractTrustedForwarderMap: this.smartContractTrustedForwarderMap,\n provider: this.readOnlyProvider ? this.readOnlyProvider : this.ethersProvider,\n forwarderAddresses: this.forwarderAddresses,\n forwarderAddress: this.forwarderAddress,\n }));\n\n const { request } = await buildForwardTxRequest(\n account,\n to,\n gasLimitNum, // txGas\n forwardedData,\n this.biconomyForwarder.attach(forwarderToAttach),\n customBatchId,\n );\n logMessage(JSON.stringify(request));\n\n paramArray.push(request);\n\n this.forwarderDomainData.verifyingContract = forwarderToAttach;\n const domainDataToUse = this.forwarderDomainData;\n\n if (customDomainName) {\n domainDataToUse.name = customDomainName.toString();\n }\n\n if (customDomainVersion) {\n domainDataToUse.version = customDomainVersion.toString();\n }\n\n if (signatureType && signatureType === this.eip712Sign) {\n logMessage('EIP712 signature flow');\n // Update the verifyingContract field of domain data based on the current request\n const domainSeparator = getDomainSeperator(\n domainDataToUse,\n );\n logMessage('Domain separator to be used:');\n logMessage(domainSeparator);\n paramArray.push(domainSeparator);\n let signatureEIP712;\n if (signatureFromPayload) {\n signatureEIP712 = signatureFromPayload;\n logMessage(`EIP712 signature from payload is ${signatureEIP712}`);\n } else {\n signatureEIP712 = await this.getSignatureEIP712(\n account,\n request,\n domainDataToUse,\n signTypedDataType,\n );\n logMessage(`EIP712 signature is ${signatureEIP712}`);\n }\n paramArray.push(signatureEIP712);\n } else {\n logMessage('Personal signature flow');\n let signaturePersonal;\n if (signatureFromPayload) {\n signaturePersonal = signatureFromPayload;\n logMessage(`Personal signature from payload is ${signaturePersonal}`);\n } else {\n signaturePersonal = await this.getSignaturePersonal(\n request,\n );\n logMessage(`Personal signature is ${signaturePersonal}`);\n }\n if (signaturePersonal) {\n paramArray.push(signaturePersonal);\n } else {\n throw new Error('Could not get personal signature while processing transaction in Mexa SDK. Please check the providers you have passed to Biconomy');\n }\n }\n\n const data = {\n from: account,\n apiId: api.apiId,\n params: paramArray,\n to,\n gasLimit,\n signatureType: signatureType && signatureType === this.eip712Sign\n ? this.eip712Sign : this.personalSign,\n };\n\n return await this.sendTransaction(account, data, fallback);\n }\n paramArray.push(...methodInfo.args);\n\n const data = {\n from: account,\n apiId: api.apiId,\n params: paramArray,\n gasLimit,\n to,\n };\n\n return await this.sendTransaction(account, data, fallback);\n }\n if (this.strictMode) {\n throw new Error(`Make sure your have smart contract with address ${to} is registered on the dashboard`);\n }\n logMessage(\n `Smart contract with address ${to} not found on dashbaord. Strict mode is off, so falling back to normal transaction mode`,\n );\n return await fallback();\n }\n throw new Error(`Invalid payload data ${JSON.stringify(\n params,\n )}. Expecting params key to be an array with first element having a 'to' property`);\n } catch (error) {\n logErrorMessage(error);\n return error;\n }\n}\n","// import txDecoder from 'ethereum-tx-decoder';\nimport { ethers } from 'ethers';\nimport { eip2771BaseAbi } from '../abis';\nimport { config } from '../config';\nimport { logMessage } from '../utils';\nimport { FindRightForwarderParamsType } from '../common/types';\n\nexport const findTheRightForwarder = async (\n findTheRightForwarderParams: FindRightForwarderParamsType,\n) => {\n const {\n to,\n smartContractTrustedForwarderMap,\n provider,\n forwarderAddresses,\n forwarderAddress,\n } = findTheRightForwarderParams;\n let forwarderToUse;\n if (smartContractTrustedForwarderMap[to]) {\n forwarderToUse = smartContractTrustedForwarderMap[to];\n } else {\n const contract = new ethers.Contract(to, eip2771BaseAbi, provider);\n const supportedForwarders = forwarderAddresses;\n forwarderToUse = forwarderAddress; // default forwarder\n\n // Attempt to find out forwarder that 'to' contract trusts\n let forwarder;\n try {\n forwarder = await contract.trustedForwarder();\n } catch (error) {\n logMessage(\"Could not find read method 'trustedForwarder' in the contract abi\");\n logMessage(JSON.stringify(error));\n }\n\n for (let i = 0; i < supportedForwarders.length; i += 1) {\n // Check if it matches above forwarder\n if (forwarder) {\n if (supportedForwarders[i].toString() === forwarder.toString()) {\n forwarderToUse = supportedForwarders[i];\n break;\n }\n }\n // Another way to find out is isTrustedForwarder read method\n try {\n // eslint-disable-next-line no-await-in-loop\n const isTrustedForwarder = await contract.isTrustedForwarder(supportedForwarders[i]);\n if (isTrustedForwarder) {\n forwarderToUse = supportedForwarders[i];\n break;\n }\n } catch (error) {\n logMessage(\"Could not find read method 'isTrustedForwarder' in the contract abi\");\n logMessage(JSON.stringify(error));\n }\n }\n }\n return forwarderToUse;\n};\n\nexport const buildForwardTxRequest = async (\n account: string,\n to: string,\n gasLimitNum: number,\n data: any,\n biconomyForwarder: ethers.Contract,\n batchId = 0,\n) => {\n if (!biconomyForwarder) {\n throw new Error('Biconomy Forwarder is not defined for current network');\n }\n const batchNonce = await biconomyForwarder.getNonce(account, batchId);\n const req = {\n from: account,\n to,\n token: config.ZERO_ADDRESS,\n txGas: gasLimitNum,\n tokenGasPrice: '0',\n batchId,\n batchNonce: parseInt(batchNonce, 10),\n deadline: Math.floor(Date.now() / 1000 + 3600),\n data,\n };\n return { request: req };\n};\n\nexport const getDomainSeperator = (biconomyForwarderDomainData: any) => {\n const domainSeparator = ethers.utils.keccak256(ethers.utils.defaultAbiCoder.encode([\n 'bytes32',\n 'bytes32',\n 'bytes32',\n 'address',\n 'bytes32',\n ], [\n ethers.utils.id('EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)'),\n ethers.utils.id(biconomyForwarderDomainData.name),\n ethers.utils.id(biconomyForwarderDomainData.version),\n biconomyForwarderDomainData.verifyingContract,\n biconomyForwarderDomainData.salt,\n ]));\n return domainSeparator;\n};\n\n// TODO discuss if we are to expose\n/* export async function getForwardRequestAndMessageToSign(\n this: Biconomy,\n rawTransaction,\n customBatchId,\n customDomainName,\n customDomainVersion,\n) {\n try {\n if (!this.interfaceMap) {\n return {\n error: 'Interface Map is undefined',\n code: RESPONSE_CODES.INTERFACE_MAP_UNDEFINED,\n };\n }\n\n// if (!this.dappApiMap) {\n// return {\n// error: 'Dapp Api Map is undefined',\n// code: RESPONSE_CODES.DAPP_API_MAP_UNDEFINED,\n// };\n// }\n\n// if (!this.smartContractMetaTransactionMap) {\n// return {\n// error: 'Smart contract meta transaction map is undefined',\n// code: RESPONSE_CODES.SMART_CONTRACT_METATRANSACTION_MAP_UNDEFINED,\n// };\n// }\n\n// if (!this.smartContractTrustedForwarderMap) {\n// return {\n// error: 'Smart contract trusted forwarder map is undefined',\n// code: RESPONSE_CODES.SMART_CONTRACT_TRSUTED_FORWARDER_MAP_UNDEFINED,\n// };\n// }\n\n// if (!this.smartContractMap) {\n// return {\n// error: 'Smart contract map is undefined',\n// code: RESPONSE_CODES.SMART_CONTRACT_MAP_UNDEFINED,\n// };\n// }\n\n// if (!this.forwarderDomainData) {\n// return {\n// error: 'Forwarder domain data is undefined',\n// code: RESPONSE_CODES.FORWARDER_DOMAIN_DATA_UNDEFINED,\n// };\n// }\n\n// if (!this.forwarderDomainDetails) {\n// return {\n// error: 'Forwarder domain details is undefined',\n// code: RESPONSE_CODES.FORWARDER_DOMAIN_DETAILS_UNDEFINED,\n// };\n// }\n\n// if (!this.biconomyForwarder) {\n// return {\n// error: 'Biconomy forwarder contract is undefined',\n// code: RESPONSE_CODES.BICONOMY_FORWARDER_UNDEFINED,\n// };\n// }\n\n// if (!this.forwarderAddresses) {\n// return {\n// error: 'Forwarder Addresses array is undefined',\n// code: RESPONSE_CODES.FORWARDER_ADDRESSES_ARRAY_UNDEFINED,\n// };\n// }\n\n// if (!this.forwarderAddress) {\n// return {\n// error: 'Forwarder Address is undefined',\n// code: RESPONSE_CODES.FORWARDER_ADDRESS_UNDEFINED,\n// };\n// }\n\n let request; let cost; let\n forwarderToUse;\n if (metaTxApproach === this.trustedForwarderMetaTransaction) {\n forwarderToUse = await findTheRightForwarder({\n to,\n smartContractTrustedForwarderMap: this.smartContractTrustedForwarderMap,\n ethersProvider: this.ethersProvider,\n forwarderAddresses: this.forwarderAddresses,\n forwarderAddress: this.forwarderAddress,\n });\n\n // Attach the forwarder with right address\n\n request = (\n await buildForwardTxRequest(\n account,\n to,\n gasLimitNum,\n decodedTx.data,\n this.biconomyForwarder.attach(forwarderToUse),\n customBatchId,\n )\n ).request;\n } else {\n const error = formatMessage(\n RESPONSE_CODES.INVALID_OPERATION,\n 'Smart contract is not registered\n in the dashboard for this meta transaction approach.\n Kindly use biconomy.getUserMessageToSign',\n );\n return error;\n }\n\n// const methodName = methodInfo.name;\n\n// const api = this.dappApiMap[to][methodName];\n\n// const contractAddress = api.contractAddress.toLowerCase();\n// const metaTxApproach = this.smartContractMetaTransactionMap[contractAddress];\n\n const eip712DataToSign = {\n types: {\n EIP712Domain: this.forwarderDomainType,\n ERC20ForwardRequest: this.forwardRequestType,\n },\n domain: domainDataToUse,\n primaryType: 'ERC20ForwardRequest',\n message: request,\n };\n\n const hashToSign = abi.soliditySHA3(\n [\n 'address',\n 'address',\n 'address',\n 'uint256',\n 'uint256',\n 'uint256',\n 'uint256',\n 'uint256',\n 'bytes32',\n ],\n [\n request.from,\n request.to,\n request.token,\n request.txGas,\n request.tokenGasPrice,\n request.batchId,\n request.batchNonce,\n request.deadline,\n ethers.utils.keccak256(request.data),\n ],\n );\n\n const dataToSign = {\n eip712Format: eip712DataToSign,\n personalSignatureFormat: hashToSign,\n request,\n cost,\n };\n return dataToSign;\n }\n const error = formatMessage(\n RESPONSE_CODES.BICONOMY_NOT_INITIALIZED,\n 'Decoders not initialized properly in mexa sdk.\n Make sure your have smart contracts registered on Mexa Dashboard',\n );\n return error;\n }\n } catch (error) {\n throw new Error(`Something went wrong in\n getForwardRequestAndMessageToSign(). Error message: ${JSON.stringify(error)}`);\n }\n} */\n","import type { Biconomy } from '..';\nimport { DomainDataType, SignatureParametersPerContractAddressType } from '../common/types';\nimport { domainType, metaTransactionType } from '../config';\nimport { getSignatureParameters, getPersonalCustomMessageToSign } from './signature-helpers';\n\nexport async function buildSignatureCustomEIP712MetaTransaction(\n this: Biconomy,\n userAddress: string,\n nonce: number,\n functionSignature: string,\n domainData: DomainDataType,\n) {\n const message = {\n userAddress,\n nonce,\n functionSignature,\n };\n const dataToSign = JSON.stringify({\n types: {\n EIP712Domain: domainType,\n MetaTransaction: metaTransactionType,\n },\n domain: domainData,\n primaryType: 'MetaTransaction',\n message,\n });\n\n // Review provider\n const signature = await this.ethersProvider.send('eth_signTypedData_v4', [\n userAddress,\n dataToSign,\n ]);\n return getSignatureParameters(signature);\n}\n\nexport async function buildSignatureCustomPersonalSignMetaTransaction(\n this: Biconomy,\n nonce: number,\n functionSignature: string,\n) {\n if (!this.contractAddresses) {\n throw new Error('Contract Addresses array is undefined');\n }\n\n const signatureParamtersPerContractAddress: SignatureParametersPerContractAddressType = {};\n\n this.contractAddresses.forEach(async (contractAddress: string) => {\n if (!this.networkId) {\n throw new Error('NetworkId is undefined');\n }\n if (!this.signer) {\n throw new Error('Signer not found');\n }\n const messageToSign = getPersonalCustomMessageToSign(\n {\n nonce,\n functionSignature,\n chainId: this.networkId,\n contractAddress,\n },\n );\n\n const signature = await this.signer.signMessage(\n `0x${messageToSign.toString('hex')}`,\n );\n signatureParamtersPerContractAddress[contractAddress] = getSignatureParameters(signature);\n });\n}\n","/* eslint-disable consistent-return */\nimport txDecoder from 'ethereum-tx-decoder';\nimport { ethers } from 'ethers';\nimport type { Biconomy } from '..';\nimport { SendSingedTransactionParamsType } from '../common/types';\nimport { config, RESPONSE_CODES } from '../config';\nimport {\n decodeMethod, logMessage, formatMessage,\n} from '../utils';\nimport { findTheRightForwarder, getDomainSeperator } from './meta-transaction-EIP2771-helpers';\n\n/**\n * Method used to handle transaction initiated using web3.eth.sendSignedTransaction method\n * It extracts rawTransaction from payload and decode it to get required information like from, to,\n * data, gasLimit to create the payload for biconomy meta transaction API.\n * In case of Native meta transaction, payload just contains rawTransaction\n * In case of contract based meta transaction, payload contains rawTransaction and signature wrapped\n * in a json object.\n *\n * @param {Object} this Reference to this SDK instance\n * @param {Object} payload Payload data\n */\nexport async function sendSignedTransaction(\n this: Biconomy,\n sendSignedTransactionParams: SendSingedTransactionParamsType,\n) {\n try {\n if (!this.interfaceMap) {\n return {\n error: 'Interface Map is undefined',\n code: RESPONSE_CODES.INTERFACE_MAP_UNDEFINED,\n };\n }\n\n if (!this.dappApiMap) {\n return {\n error: 'Dapp Api Map is undefined',\n code: RESPONSE_CODES.DAPP_API_MAP_UNDEFINED,\n };\n }\n\n if (!this.smartContractMetaTransactionMap) {\n return {\n error: 'Smart contract meta transaction map is undefined',\n code: RESPONSE_CODES.SMART_CONTRACT_METATRANSACTION_MAP_UNDEFINED,\n };\n }\n\n if (!this.smartContractMap) {\n return {\n error: 'Smart contract map is undefined',\n code: RESPONSE_CODES.SMART_CONTRACT_MAP_UNDEFINED,\n };\n }\n\n if (!this.smartContractTrustedForwarderMap) {\n return {\n error: 'Smart contract trusted forwarder map is undefined',\n code: RESPONSE_CODES.SMART_CONTRACT_TRSUTED_FORWARDER_MAP_UNDEFINED,\n };\n }\n\n if (!this.forwarderDomainData) {\n return {\n error: 'Forwarder domain data is undefined',\n code: RESPONSE_CODES.FORWARDER_DOMAIN_DATA_UNDEFINED,\n };\n }\n\n if (!this.forwarderDomainDetails) {\n return {\n error: 'Forwarder domain details is undefined',\n code: RESPONSE_CODES.FORWARDER_DOMAIN_DETAILS_UNDEFINED,\n };\n }\n\n if (!this.forwarderAddresses) {\n return {\n error: 'Forwarder Addresses array is undefined',\n code: RESPONSE_CODES.FORWARDER_ADDRESSES_ARRAY_UNDEFINED,\n };\n }\n\n if (!this.forwarderAddress) {\n return {\n error: 'Forwarder Address is undefined',\n code: RESPONSE_CODES.FORWARDER_ADDRESS_UNDEFINED,\n };\n }\n\n const { fallback } = sendSignedTransactionParams;\n let { params } = sendSignedTransactionParams;\n if (params && params[0]) {\n const data = params[0];\n let rawTransaction;\n let signature;\n let request;\n let signatureType;\n let customDomainName;\n let customDomainVersion;\n\n if (typeof data === 'string') {\n rawTransaction = data;\n } else if (typeof data === 'object') {\n // Here user wrapped raw Transaction in json object along with signature\n signature = data.signature;\n rawTransaction = data.rawTransaction;\n signatureType = data.signatureType;\n request = data.forwardRequest;\n customDomainName = data.domainName;\n customDomainVersion = data.domainVersion;\n }\n\n if (rawTransaction) {\n const decodedTx = txDecoder.decodeTx(rawTransaction);\n\n if (decodedTx.to && decodedTx.data && decodedTx.value) {\n const to = decodedTx.to.toLowerCase();\n let methodInfo = decodeMethod(to, decodedTx.data, this.interfaceMap);\n if (!methodInfo) {\n methodInfo = decodeMethod(config.SCW, decodedTx.data, this.interfaceMap);\n if (!methodInfo) {\n if (this.strictMode) {\n const error = formatMessage(\n RESPONSE_CODES.DASHBOARD_DATA_MISMATCH,\n `No smart contract wallet or smart contract registered on dashboard with address (${decodedTx.to})`,\n );\n return error;\n }\n logMessage(\n 'Strict mode is off so falling back to default provider for handling transaction',\n );\n if (typeof data === 'object' && data.rawTransaction) {\n params = [data.rawTransaction];\n }\n }\n }\n const methodName = methodInfo.name;\n const api = this.dappApiMap[`${to}-${methodName}`];\n const contractAddress = api.contractAddress.toLowerCase();\n const metaTxApproach = this.smartContractMetaTransactionMap[contractAddress];\n\n if (!api) {\n logMessage(`API not found for method ${methodName}`);\n logMessage(`Strict mode ${this.strictMode}`);\n if (this.strictMode) {\n const error = formatMessage(\n RESPONSE_CODES.API_NOT_FOUND,\n `Biconomy strict mode is on. No registered API found for method ${methodName}. Please register API from developer dashboard.`,\n );\n return error;\n }\n logMessage(\n 'Falling back to default provider as strict mode is false in biconomy',\n );\n if (typeof data === 'object' && data.rawTransaction) {\n params = [data.rawTransaction];\n }\n await fallback();\n }\n logMessage('API found');\n const paramArray = [];\n const parsedTransaction = ethers.utils.parseTransaction(\n rawTransaction,\n );\n const account = parsedTransaction ? parsedTransaction.from : undefined;\n\n logMessage(`signer is ${account}`);\n if (!account) {\n const error = formatMessage(\n RESPONSE_CODES.ERROR_RESPONSE,\n 'Not able to get user account from signed transaction',\n );\n return error;\n }\n\n /**\n * based on the api check contract meta transaction type\n * change paramArray accordingly\n * build request EDIT :\n * do not build the request again it will result in signature mismatch\n * create domain separator based on signature type\n * use already available signature\n * send API call with appropriate parameters based on signature type\n *\n */\n let gasLimitNum;\n let { gasLimit } = decodedTx;\n if (metaTxApproach !== this.defaultMetaTransaction) {\n if (!gasLimit || parseInt(gasLimit, 10) === 0) {\n const contractABI = this.smartContractMap[to];\n if (contractABI) {\n const contract = new ethers.Contract(\n to,\n contractABI,\n this.readOnlyProvider ? this.readOnlyProvider : this.ethersProvider,\n );\n gasLimit = await contract.estimateGas[methodInfo.signature](\n ...methodInfo.args,\n { from: account },\n );\n\n // do not send this value in API call. only meant for txGas\n gasLimitNum = ethers.BigNumber.from(gasLimit.toString())\n .add(ethers.BigNumber.from(5000))\n .toNumber();\n logMessage(`gas limit number${gasLimitNum}`);\n }\n } else {\n gasLimitNum = ethers.BigNumber.from(\n gasLimit.toString(),\n ).toNumber();\n }\n logMessage(request);\n\n paramArray.push(request);\n\n const forwarderToUse = await findTheRightForwarder({\n to,\n smartContractTrustedForwarderMap: this.smartContractTrustedForwarderMap,\n provider: this.readOnlyProvider ? this.readOnlyProvider : this.ethersProvider,\n forwarderAddresses: this.forwarderAddresses,\n forwarderAddress: this.forwarderAddress,\n });\n this.smartContractTrustedForwarderMap[to] = forwarderToUse;\n\n // Update the verifyingContract in domain data\n this.forwarderDomainData.verifyingContract = forwarderToUse;\n const domainDataToUse = this.forwarderDomainDetails[parseInt(forwarderToUse, 10)];\n\n if (customDomainName) {\n domainDataToUse.name = customDomainName.toString();\n }\n\n if (customDomainVersion) {\n domainDataToUse.version = customDomainVersion.toString();\n }\n\n // Update the verifyingContract field of domain data based on the current request\n if (signatureType && signatureType === this.eip712Sign) {\n const domainSeparator = getDomainSeperator(\n domainDataToUse,\n );\n logMessage(domainSeparator);\n paramArray.push(domainSeparator);\n }\n\n paramArray.push(signature);\n\n const trustedForwarderMetaTransactionData = {\n from: account,\n apiId: api?.apiId,\n params: paramArray,\n to,\n signatureType: signatureType ? this.eip712Sign : this.personalSign,\n };\n return await this.sendTransaction(\n account,\n trustedForwarderMetaTransactionData,\n fallback,\n );\n }\n paramArray.push(...methodInfo.args);\n\n const defaultMetaTransactionData = {\n from: account,\n apiId: api?.apiId,\n params: paramArray,\n gasLimit: decodedTx.gasLimit.toString(), // verify\n to: decodedTx.to.toLowerCase(),\n };\n\n return await this.sendTransaction(account, defaultMetaTransactionData, fallback);\n }\n const error = formatMessage(\n RESPONSE_CODES.INVALID_PAYLOAD,\n 'Not able to decode the data in rawTransaction using ethereum-tx-decoder. Please check the data sent.',\n );\n return error;\n }\n const error = formatMessage(\n RESPONSE_CODES.INVALID_PAYLOAD,\n `Invalid payload data ${JSON.stringify(\n params[0],\n )}.rawTransaction is required in param object`,\n );\n return error;\n }\n const error = formatMessage(\n RESPONSE_CODES.INVALID_PAYLOAD,\n `Invalid payload data ${JSON.stringify(\n params,\n )}. Non empty Array expected in params key`,\n );\n return error;\n } catch (error) {\n logMessage(error);\n return error;\n }\n}\n","import { post } from 'request-promise';\nimport type { Biconomy } from '..';\nimport { BICONOMY_RESPONSE_CODES, config } from '../config';\nimport { logErrorMessage, logMessage } from '../utils';\nimport { mexaSdkClientMessenger } from './client-messaging-helper';\n\n/**\n * Method to send the transaction to biconomy server and call the callback method\n * to pass the result of meta transaction to web3 function call.\n * @param this Object representing biconomy provider this\n * @param account User selected account on current wallet\n * @param data Data to be sent to biconomy server having transaction data\n * */\nexport async function sendTransaction(\n this: Biconomy,\n account: string,\n data: any,\n fallback: () => Promise | void | undefined,\n) {\n try {\n if (!this || !account || !data) {\n return undefined;\n }\n\n const options = {\n uri: `${config.metaEntryPointBaseUrl}/api/v1/native`,\n headers: {\n 'x-api-key': this.apiKey,\n 'Content-Type': 'application/json;charset=utf-8',\n version: config.PACKAGE_VERSION,\n },\n timeout: 600000, // 10 min\n body: JSON.stringify(data),\n };\n\n logMessage('request body');\n logMessage(JSON.stringify(data));\n\n const response = await post(options);\n logMessage(response);\n const result = JSON.parse(response);\n\n if (\n result.data\n && result.data.transactionId\n && result.flag === BICONOMY_RESPONSE_CODES.SUCCESS\n ) {\n mexaSdkClientMessenger(\n this,\n {\n transactionId: result.data.transactionId,\n },\n );\n return {\n transactionId: result.data.transactionId,\n };\n } if (result.flag === BICONOMY_RESPONSE_CODES.BAD_REQUEST) {\n await fallback();\n return {\n transactionId: result.data.transactionId,\n };\n }\n const error: any = {};\n error.code = result.flag || result.code;\n error.message = result.log || result.message || 'Error in native meta api call';\n return {\n error: error.toString(),\n transcionId: result.data.transactionId,\n };\n } catch (error) {\n logErrorMessage(error);\n return error;\n }\n}\n","import { ethers } from 'ethers';\nimport abi from 'ethereumjs-abi';\nimport { toBuffer, ToBufferInputTypes } from 'ethereumjs-util';\nimport type { Biconomy } from '..';\nimport { ForwarderDomainData, ForwarderDomainType, ForwardRequestType } from '../common/types';\nimport { RESPONSE_CODES } from '../config';\nimport { logMessage } from '../utils';\n/**\n * Method to get the signature parameters.\n * @param signature String representing a signature\n * */\nexport const getSignatureParameters = (signature: string) => {\n if (!ethers.utils.isHexString(signature)) {\n throw new Error(\n 'Given value \"'.concat(signature, '\" is not a valid hex string.'),\n );\n }\n const r = signature.slice(0, 66);\n const s = '0x'.concat(signature.slice(66, 130));\n let v: string | number = '0x'.concat(signature.slice(130, 132));\n v = ethers.BigNumber.from(v).toNumber();\n if (![27, 28].includes(v)) v += 27;\n return {\n r,\n s,\n v,\n };\n};\n\nexport async function getEIP712ForwardMessageToSign(\n forwarderDomainDetails: ForwarderDomainData[],\n forwarderDomainType: ForwarderDomainType,\n forwardRequestType: ForwardRequestType,\n request: any,\n domainData: any,\n) {\n if (\n !forwarderDomainDetails\n || Object.keys(forwarderDomainDetails).length === 0\n ) {\n throw new Error('Biconomy is not properly initialized');\n }\n\n // Override domainData\n const domainDataToUse = domainData;\n // Might update version as well\n\n const dataToSign = JSON.stringify({\n types: {\n EIP712Domain: forwarderDomainType,\n ERC20ForwardRequest: forwardRequestType,\n },\n domain: domainDataToUse,\n primaryType: 'ERC20ForwardRequest',\n message: request,\n });\n return dataToSign;\n}\n\n// take parameter for chosen signature type V3 or V4\nexport async function getSignatureEIP712(\n this: Biconomy,\n account: string,\n request: any,\n domainData: any,\n type: string,\n) {\n if (!this.forwarderDomainDetails) {\n return {\n error: 'Forwarder domain details is undefined',\n code: RESPONSE_CODES.FORWARDER_DOMAIN_DETAILS_UNDEFINED,\n };\n }\n\n if (!this.forwarderDomainType) {\n return {\n error: 'Forwarder domain type is undefined',\n code: RESPONSE_CODES.FORWARDER_DOMAIN_TYPE_UNDEFINED,\n };\n }\n\n if (!this.forwardRequestType) {\n return {\n error: 'Forwarder request type is undefined',\n code: RESPONSE_CODES.FORWARDER_REQUEST_TYPE_UNDEFINED,\n };\n }\n\n // default V4 now\n let signTypedDataType = 'eth_signTypedData_v4';\n if (type === 'v3' || type === 'V3') {\n signTypedDataType = 'eth_signTypedData_v3';\n }\n const dataToSign = await getEIP712ForwardMessageToSign(\n this.forwarderDomainDetails,\n this.forwarderDomainType,\n this.forwardRequestType,\n request,\n domainData,\n );\n\n const { ethersProvider } = this;\n try {\n const signature = await ethersProvider.send(signTypedDataType, [\n account,\n dataToSign,\n ]);\n const { r, s, v } = getSignatureParameters(signature);\n const vNum = ethers.BigNumber.from(v).toHexString();\n const newSignature = r + s.slice(2) + vNum.slice(2);\n return newSignature;\n } catch (error) {\n logMessage('error inside signature');\n logMessage(error);\n return '';\n }\n}\n\nexport function getPersonalForwardMessageToSign(request:\n{\n from: string;\n to: string;\n token: string;\n txGas: number;\n tokenGasPrice: number;\n batchId: number;\n batchNonce: number;\n deadline: number;\n data: ethers.utils.BytesLike;\n}) {\n return abi.soliditySHA3(\n [\n 'address',\n 'address',\n 'address',\n 'uint256',\n 'uint256',\n 'uint256',\n 'uint256',\n 'uint256',\n 'bytes32',\n ],\n [\n request.from,\n request.to,\n request.token,\n request.txGas,\n request.tokenGasPrice,\n request.batchId,\n request.batchNonce,\n request.deadline,\n ethers.utils.keccak256(request.data),\n ],\n );\n}\n\nexport function getPersonalCustomMessageToSign(request:\n{\n nonce: number;\n contractAddress: string;\n chainId: number;\n functionSignature: ToBufferInputTypes;\n}) {\n return abi.soliditySHA3(\n ['uint256', 'address', 'uint256', 'bytes'],\n [request.nonce, request.contractAddress, request.chainId, toBuffer(request.functionSignature)],\n );\n}\n\n/**\n * Method to get the signature parameters.\n * @param engine Object containing the signer, walletprovider and originalprovider\n * @param request Object containing the request parameters\n * */\nexport async function getSignaturePersonal(this: Biconomy, request: any) {\n const hashToSign = getPersonalForwardMessageToSign(request);\n let signature;\n\n // eslint-disable-next-line no-async-promise-executor\n const promise = new Promise(async (resolve, reject) => {\n try {\n if (!this.signer) {\n throw new Error('Signer not found');\n }\n signature = await this.signer.signMessage(ethers.utils.arrayify(hashToSign));\n const { r, s, v } = getSignatureParameters(signature);\n const vNum = ethers.BigNumber.from(v).toHexString();\n const newSignature = r + s.slice(2) + vNum.slice(2);\n resolve(newSignature);\n } catch (error) {\n reject(error);\n }\n });\n return promise;\n}\n","/* eslint-disable consistent-return */\n/**\n * @dev Biconomy class that is the entry point\n */\nimport EventEmitter from 'events';\nimport { ExternalProvider } from '@ethersproject/providers';\nimport { ethers } from 'ethers';\nimport axios from 'axios';\nimport { ClientMessenger } from '@biconomy/gasless-messaging-sdk';\nimport WebSocket from 'isomorphic-ws';\nimport { serializeError } from 'serialize-error';\nimport {\n DappApiMapType,\n ForwarderDomainData,\n ForwarderDomainType,\n ForwardRequestType,\n InterfaceMapType,\n JsonRpcCallback,\n JsonRpcRequest,\n MetaApiType,\n OptionsType,\n SmartContractMapType,\n SmartContractMetaTransactionMapType,\n SmartContractTrustedForwarderMapType,\n SmartContractType,\n} from './common/types';\nimport {\n logErrorMessage,\n logMessage, validateOptions,\n} from './utils';\nimport { BICONOMY_RESPONSE_CODES, config, HTTP_CODES } from './config';\nimport { handleSendTransaction } from './helpers/handle-send-transaction-helper';\nimport { sendSignedTransaction } from './helpers/send-signed-transaction-helper';\nimport { getSystemInfo } from './helpers/get-system-info-helper';\nimport {\n getSignatureEIP712, getSignaturePersonal,\n} from './helpers/signature-helpers';\nimport { sendTransaction } from './helpers/send-transaction-helper';\nimport { buildSignatureCustomEIP712MetaTransaction, buildSignatureCustomPersonalSignMetaTransaction } from './helpers/meta-transaction-custom-helpers';\n\nexport class Biconomy extends EventEmitter {\n apiKey: string;\n\n private externalProvider: ExternalProvider;\n\n readOnlyProvider?: ethers.providers.JsonRpcProvider;\n\n provider: ExternalProvider;\n\n dappApiMap: DappApiMapType = {};\n\n interfaceMap: InterfaceMapType = {};\n\n smartContractMap: SmartContractMapType = {};\n\n smartContractMetaTransactionMap: SmartContractMetaTransactionMapType = {};\n\n smartContractTrustedForwarderMap: SmartContractTrustedForwarderMapType = {};\n\n strictMode = false;\n\n signer?: ethers.providers.JsonRpcSigner;\n\n forwarderDomainType?: ForwarderDomainType;\n\n defaultMetaTransaction?: string;\n\n trustedForwarderMetaTransaction?: string;\n\n forwardRequestType?: ForwardRequestType;\n\n forwarderDomainData?: ForwarderDomainData;\n\n forwarderDomainDetails?: Array;\n\n eip712Sign?: string;\n\n personalSign?: string;\n\n biconomyForwarder?: ethers.Contract;\n\n forwarderAddresses?: string[];\n\n forwarderAddress?: string;\n\n walletFactoryAddress?: string;\n\n baseWalletAddress?: string;\n\n entryPointAddress?: string;\n\n handlerAddress?: string;\n\n gnosisSafeProxyFactoryAddress?: string;\n\n gnosisSafeAddress?: string;\n\n ethersProvider: ethers.providers.Web3Provider;\n\n networkId?: number;\n\n dappId?: string;\n\n getSystemInfo = getSystemInfo;\n\n handleSendTransaction = handleSendTransaction;\n\n sendTransaction = sendTransaction;\n\n sendSignedTransaction = sendSignedTransaction;\n\n getSignatureEIP712 = getSignatureEIP712;\n\n getSignaturePersonal = getSignaturePersonal;\n\n contractAddresses?: string[];\n\n buildSignatureCustomEIP712MetaTransaction = buildSignatureCustomEIP712MetaTransaction;\n\n buildSignatureCustomPersonalSignMetaTransaction = buildSignatureCustomPersonalSignMetaTransaction;\n\n clientMessenger: any;\n\n /**\n * constructor would initiliase providers and set values passed in options\n * strictMode true would return error, strictMode false would fallback to default provider\n * externalProvider is the provider dev passes (ex. window.ethereum)\n * this.provider is the proxy provider object that would intercept all rpc calls for the SDK\n */\n constructor(provider: ExternalProvider, options: OptionsType) {\n super();\n validateOptions(options);\n this.apiKey = options.apiKey;\n this.strictMode = options.strictMode || false;\n this.externalProvider = provider;\n this.provider = this.proxyFactory();\n this.contractAddresses = options.contractAddresses;\n this.ethersProvider = new ethers.providers.Web3Provider(provider);\n this.clientMessenger = new ClientMessenger(\n config.webSocketConnectionUrl,\n WebSocket,\n );\n\n if (options.jsonRpcUrl) {\n this.readOnlyProvider = new ethers.providers.JsonRpcProvider(options.jsonRpcUrl);\n }\n }\n\n private proxyFactory() {\n return new Proxy(this.externalProvider, this.proxyProvider);\n }\n\n proxyProvider = {\n // Difference between send and request\n get: (target: ExternalProvider, prop: string, ...args: any[]) => {\n switch (prop) {\n case 'send':\n return this.handleRpcSend.bind(this);\n case 'sendAsync':\n return this.handleRpcSendAsync.bind(this);\n case 'request':\n return this.handleRpcRequest.bind(this);\n default:\n break;\n }\n return Reflect.get(target, prop, ...args);\n },\n };\n\n async handleRpcSendType1(payload: JsonRpcRequest, callback: JsonRpcCallback) {\n const fallback = () => this.externalProvider.send?.(payload, callback);\n const { method, params } = payload;\n try {\n switch (method) {\n case 'eth_sendTransaction':\n return await this.handleSendTransaction({ params, fallback });\n case 'eth_sendRawTransaction':\n return await this.sendSignedTransaction({ params, fallback });\n default:\n return fallback();\n }\n } catch (e) {\n return fallback();\n }\n }\n\n async handleRpcSendType2(method: string, params?: Array) {\n // @ts-ignore\n const fallback = () => this.externalProvider.send?.(method, params);\n try {\n switch (method) {\n case 'eth_sendTransaction':\n return await this.handleSendTransaction({ params, fallback });\n case 'eth_sendRawTransaction':\n return await this.sendSignedTransaction({ params, fallback });\n default:\n return fallback();\n }\n } catch (e) {\n return fallback();\n }\n }\n\n async handleRpcSendType3(payload: JsonRpcRequest) {\n // @ts-ignore\n const fallback = () => this.externalProvider.send?.(payload);\n const { method, params } = payload;\n try {\n switch (method) {\n case 'eth_sendTransaction':\n return await this.handleSendTransaction({ params, fallback });\n case 'eth_sendRawTransaction':\n return await this.sendSignedTransaction({ params, fallback });\n default:\n return fallback();\n }\n } catch (e) {\n return fallback();\n }\n }\n\n handleRpcSend(...args: any[]) {\n // provider.send is deprecated, but it is still commonly used, so we need to handle it\n // it has three signatures, and we need to support all of them.\n\n // ethereum.send(\n // methodOrPayload: string | JsonRpcRequest,\n // paramsOrCallback: Array | JsonRpcCallback,\n // ): Promise | void;\n\n // Type 1:\n // ethereum.send(payload: JsonRpcRequest, callback: JsonRpcCallback): void;\n\n // Type 2:\n // ethereum.send(method: string, params?: Array): Promise;\n\n // Type 3:\n // ethereum.send(payload: JsonRpcRequest): unknown;\n\n if (typeof args[0] === 'string') {\n // this is type 2\n return this.handleRpcSendType2(args[0] as string, args[1] as Array);\n }\n\n if (!args[1]) {\n // this is type 3\n return this.handleRpcSendType3(args[0] as JsonRpcRequest);\n }\n\n // this is type 1\n return this.handleRpcSendType1(args[0] as JsonRpcRequest, args[1] as JsonRpcCallback);\n }\n\n async handleRpcSendAsync(payload: JsonRpcRequest, callback: JsonRpcCallback) {\n const fallback = () => this.externalProvider.sendAsync?.(payload, callback);\n\n const { method, params } = payload;\n try {\n switch (method) {\n case 'eth_sendTransaction':\n return await this.handleSendTransaction({ params, fallback });\n case 'eth_sendRawTransaction':\n return await this.sendSignedTransaction({ params, fallback });\n default:\n return fallback();\n }\n } catch (e) {\n logMessage(`Request failed with error: ${JSON.stringify(e)}. Falling back to default provider`);\n return fallback();\n }\n }\n\n async handleRpcRequest({ method, params } : { method: string, params: string[] }) {\n const fallback = () => this.externalProvider.request?.({ method, params });\n\n try {\n switch (method) {\n case 'eth_sendTransaction':\n return await this.handleSendTransaction({ params, fallback });\n case 'eth_sendRawTransaction':\n return await this.sendSignedTransaction({ params, fallback });\n default:\n return await fallback();\n }\n } catch (e) {\n logMessage(`Request failed with error: ${JSON.stringify(e)}. Falling back to default provider`);\n return fallback();\n }\n }\n\n /**\n * Function to initialize the biconomy object with DApp information.\n * It fetches the dapp's smart contract from biconomy database\n * and initialize the decoders for each smart\n * contract which will be used to decode information during function calls.\n * */\n async init() {\n try {\n this.signer = this.ethersProvider.getSigner();\n await this.getDappData();\n try {\n if (!this.clientMessenger.socketClient.isConnected()) {\n await this.clientMessenger.connect();\n }\n } catch (error) {\n logMessage(`Error while connecting to socket server ${JSON.stringify(error)}`);\n }\n const providerNetworkId = (await this.ethersProvider.getNetwork()).chainId;\n\n if (providerNetworkId) {\n if (providerNetworkId !== this.networkId) {\n throw new Error(`Current networkId ${providerNetworkId} is different from dapp network id registered on mexa dashboard ${this.networkId}`);\n }\n await this.getSystemInfo(providerNetworkId);\n } else {\n throw new Error('Could not get network version');\n }\n } catch (error) {\n logMessage(error);\n return error;\n }\n }\n\n async getDappData() {\n try {\n const response = await axios.get(\n `${config.metaEntryPointBaseUrl}/api/v1/sdk/dapp/`,\n {\n params: {\n contractAddresses: this.contractAddresses,\n },\n headers: {\n 'x-api-key': this.apiKey,\n 'Content-Type': 'application/json;charset=utf-8',\n version: config.PACKAGE_VERSION,\n },\n },\n );\n const { data } = response.data;\n const { dapp, smartContracts, metaApis } = data;\n\n this.networkId = parseInt(dapp.networkId, 10);\n this.dappId = dapp._id;\n\n if (smartContracts && smartContracts.length > 0) {\n smartContracts.forEach((contract: SmartContractType) => {\n const contractInterface = new ethers.utils.Interface(JSON.parse(contract.abi.toString()));\n this.smartContractMetaTransactionMap[\n contract.address.toLowerCase()\n ] = contract.metaTransactionType;\n this.interfaceMap[\n contract.address.toLowerCase()\n ] = contractInterface;\n this.smartContractMap[\n contract.address.toLowerCase()\n ] = contract.abi.toString();\n });\n }\n if (metaApis && metaApis.length > 0) {\n metaApis.forEach((metaApi: MetaApiType) => {\n const { contractAddress, method } = metaApi;\n this.dappApiMap[`${contractAddress.toLowerCase()}-${method}`] = metaApi;\n });\n }\n } catch (error) {\n logErrorMessage(error);\n throw error;\n }\n }\n\n async getTransactionStatus(transactionId: string) {\n try {\n const response = await axios.get(\n `${config.metaEntryPointBaseUrl}/api/v1/sdk/transaction-status`,\n {\n params: {\n transactionId,\n },\n headers: {\n 'x-api-key': this.apiKey,\n 'Content-Type': 'application/json;charset=utf-8',\n version: config.PACKAGE_VERSION,\n },\n },\n );\n const { data } = response.data;\n return {\n flag: BICONOMY_RESPONSE_CODES.SUCCESS,\n ...data,\n };\n } catch (error) {\n logErrorMessage(error);\n return {\n flag: BICONOMY_RESPONSE_CODES.ERROR_RESPONSE,\n code: HTTP_CODES.INTERNAL_SERVER_ERROR,\n error: serializeError(error),\n };\n }\n }\n}\n","import { serializeError } from 'serialize-error';\nimport { OptionsType } from './common/types';\n\nexport const logMessage = (message: any) => {\n console.log(message);\n};\n\nexport const logErrorMessage = (errorMessage: any) => {\n console.error(serializeError(errorMessage));\n};\n\nexport const getFetchOptions = (method: string, apiKey: string, data?: string) => ({\n method,\n headers: {\n 'x-api-key': apiKey,\n 'Content-Type': 'application/json;charset=utf-8',\n },\n body: data,\n});\n\nexport const formatMessage = (code: string, message: string) => ({ code, message });\n\n/**\n * Validate parameters passed to biconomy object. Dapp id and api key are mandatory.\n * */\nexport const validateOptions = (options: OptionsType) => {\n if (!options) {\n throw new Error(\n 'Options object needs to be passed to Biconomy Object with apiKey as mandatory key',\n );\n }\n if (!options.apiKey) {\n throw new Error(\n 'apiKey is required in options object when creating Biconomy object',\n );\n }\n\n if (!options.contractAddresses) {\n throw new Error(\n 'contractAddresses is required in options object when creating Biconomy object',\n );\n }\n};\n\nexport const decodeMethod = (to: string, data: any, interfaceMap: any) => {\n if (to && data && interfaceMap[to]) {\n return interfaceMap[to].parseTransaction({ data });\n }\n throw new Error(\n 'to, data or interfaceMap are undefined',\n );\n};\n","export const version = \"abi/5.7.0\";\n","\"use strict\";\n\nimport { getAddress } from \"@ethersproject/address\";\nimport { hexZeroPad } from \"@ethersproject/bytes\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class AddressCoder extends Coder {\n\n constructor(localName: string) {\n super(\"address\", \"address\", localName, false);\n }\n\n defaultValue(): string {\n return \"0x0000000000000000000000000000000000000000\";\n }\n\n encode(writer: Writer, value: string): number {\n try {\n value = getAddress(value)\n } catch (error) {\n this._throwError(error.message, value);\n }\n return writer.writeValue(value);\n }\n\n decode(reader: Reader): any {\n return getAddress(hexZeroPad(reader.readValue().toHexString(), 20));\n }\n}\n\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n private coder: Coder;\n\n constructor(coder: Coder) {\n super(coder.name, coder.type, undefined, coder.dynamic);\n this.coder = coder;\n }\n\n defaultValue(): any {\n return this.coder.defaultValue();\n }\n\n encode(writer: Writer, value: any): number {\n return this.coder.encode(writer, value);\n }\n\n decode(reader: Reader): any {\n return this.coder.decode(reader);\n }\n}\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"../_version\";\nconst logger = new Logger(version);\n\nimport { Coder, Reader, Result, Writer } from \"./abstract-coder\";\nimport { AnonymousCoder } from \"./anonymous\";\n\nexport function pack(writer: Writer, coders: ReadonlyArray, values: Array | { [ name: string ]: any }): number {\n let arrayValues: Array = null;\n\n if (Array.isArray(values)) {\n arrayValues = values;\n\n } else if (values && typeof(values) === \"object\") {\n let unique: { [ name: string ]: boolean } = { };\n\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"values\",\n coder: coder,\n value: values\n });\n }\n\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"values\",\n coder: coder,\n value: values\n });\n }\n\n unique[name] = true;\n\n return values[name];\n });\n\n } else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n\n let staticWriter = new Writer(writer.wordSize);\n let dynamicWriter = new Writer(writer.wordSize);\n\n let updateFuncs: Array<(baseOffset: number) => void> = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset: number) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n\n } else {\n coder.encode(staticWriter, value);\n }\n });\n\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\n\nexport function unpack(reader: Reader, coders: Array): Result {\n let values: any = [];\n\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n\n coders.forEach((coder) => {\n let value: any = null;\n\n if (coder.dynamic) {\n let offset = reader.readValue();\n let offsetReader = baseReader.subReader(offset.toNumber());\n try {\n value = coder.decode(offsetReader);\n } catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.BUFFER_OVERRUN) { throw error; }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n\n } else {\n try {\n value = coder.decode(reader);\n } catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.BUFFER_OVERRUN) { throw error; }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n\n if (value != undefined) {\n values.push(value);\n }\n });\n\n // We only output named properties for uniquely named coders\n const uniqueNames = coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) { accum[name] = 0; }\n accum[name]++;\n }\n return accum;\n }, <{ [ name: string ]: number }>{ });\n\n // Add any named parameters (i.e. tuples)\n coders.forEach((coder: Coder, index: number) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) { return; }\n\n if (name === \"length\") { name = \"_length\"; }\n\n if (values[name] != null) { return; }\n\n const value = values[index];\n\n if (value instanceof Error) {\n Object.defineProperty(values, name, {\n enumerable: true,\n get: () => { throw value; }\n });\n } else {\n values[name] = value;\n }\n });\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (value instanceof Error) {\n Object.defineProperty(values, i, {\n enumerable: true,\n get: () => { throw value; }\n });\n }\n }\n\n return Object.freeze(values);\n}\n\n\nexport class ArrayCoder extends Coder {\n readonly coder: Coder;\n readonly length: number;\n\n constructor(coder: Coder, length: number, localName: string) {\n const type = (coder.type + \"[\" + (length >= 0 ? length: \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n\n this.coder = coder;\n this.length = length;\n }\n\n defaultValue(): Array {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n\n const result: Array = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n\n encode(writer: Writer, value: Array): number {\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n\n let count = this.length;\n\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n\n logger.checkArgumentCount(value.length, count, \"coder array\" + (this.localName? (\" \"+ this.localName): \"\"));\n\n let coders = [];\n for (let i = 0; i < value.length; i++) { coders.push(this.coder); }\n\n return pack(writer, coders, value);\n }\n\n decode(reader: Reader): any {\n let count = this.length;\n if (count === -1) {\n count = reader.readValue().toNumber();\n\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * 32 > reader._data.length) {\n logger.throwError(\"insufficient data length\", Logger.errors.BUFFER_OVERRUN, {\n length: reader._data.length,\n count: count\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); }\n\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class BooleanCoder extends Coder {\n\n constructor(localName: string) {\n super(\"bool\", \"bool\", localName, false);\n }\n\n defaultValue(): boolean {\n return false;\n }\n\n encode(writer: Writer, value: boolean): number {\n return writer.writeValue(value ? 1: 0);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.type, !reader.readValue().isZero());\n }\n}\n\n","\"use strict\";\n\nimport { arrayify, hexlify } from \"@ethersproject/bytes\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class DynamicBytesCoder extends Coder {\n constructor(type: string, localName: string) {\n super(type, type, localName, true);\n }\n\n defaultValue(): string {\n return \"0x\";\n }\n\n encode(writer: Writer, value: any): number {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n\n decode(reader: Reader): any {\n return reader.readBytes(reader.readValue().toNumber(), true);\n }\n}\n\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName: string) {\n super(\"bytes\", localName);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n\n\n","\"use strict\";\n\nimport { arrayify, BytesLike, hexlify } from \"@ethersproject/bytes\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\n// @TODO: Merge this with bytes\nexport class FixedBytesCoder extends Coder {\n readonly size: number;\n\n constructor(size: number, localName: string) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n this.size = size;\n }\n\n defaultValue(): string {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n\n encode(writer: Writer, value: BytesLike): number {\n let data = arrayify(value);\n if (data.length !== this.size) { this._throwError(\"incorrect data length\", value); }\n return writer.writeBytes(data);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class NullCoder extends Coder {\n\n constructor(localName: string) {\n super(\"null\", \"\", localName, false);\n }\n\n defaultValue(): null {\n return null;\n }\n\n encode(writer: Writer, value: any): number {\n if (value != null) { this._throwError(\"not null\", value); }\n return writer.writeBytes([ ]);\n }\n\n decode(reader: Reader): any {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n","\"use strict\";\n\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { MaxUint256, NegativeOne, One, Zero } from \"@ethersproject/constants\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class NumberCoder extends Coder {\n readonly size: number;\n readonly signed: boolean;\n\n constructor(size: number, signed: boolean, localName: string) {\n const name = ((signed ? \"int\": \"uint\") + (size * 8));\n super(name, name, localName, false);\n\n this.size = size;\n this.signed = signed;\n }\n\n defaultValue(): number {\n return 0;\n }\n\n encode(writer: Writer, value: BigNumberish): number {\n let v = BigNumber.from(value);\n\n // Check bounds are safe for encoding\n let maxUintValue = MaxUint256.mask(writer.wordSize * 8);\n if (this.signed) {\n let bounds = maxUintValue.mask(this.size * 8 - 1);\n if (v.gt(bounds) || v.lt(bounds.add(One).mul(NegativeOne))) {\n this._throwError(\"value out-of-bounds\", value);\n }\n } else if (v.lt(Zero) || v.gt(maxUintValue.mask(this.size * 8))) {\n this._throwError(\"value out-of-bounds\", value);\n }\n\n v = v.toTwos(this.size * 8).mask(this.size * 8);\n\n if (this.signed) {\n v = v.fromTwos(this.size * 8).toTwos(8 * writer.wordSize);\n }\n\n return writer.writeValue(v);\n }\n\n decode(reader: Reader): any {\n let value = reader.readValue().mask(this.size * 8);\n\n if (this.signed) {\n value = value.fromTwos(this.size * 8);\n }\n\n return reader.coerce(this.name, value);\n }\n}\n\n","\"use strict\";\n\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\n\nimport { Reader, Writer } from \"./abstract-coder\";\nimport { DynamicBytesCoder } from \"./bytes\";\n\nexport class StringCoder extends DynamicBytesCoder {\n\n constructor(localName: string) {\n super(\"string\", localName);\n }\n\n defaultValue(): string {\n return \"\";\n }\n\n encode(writer: Writer, value: any): number {\n return super.encode(writer, toUtf8Bytes(value));\n }\n\n decode(reader: Reader): any {\n return toUtf8String(super.decode(reader));\n }\n}\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\nimport { pack, unpack } from \"./array\";\n\nexport class TupleCoder extends Coder {\n readonly coders: Array;\n\n constructor(coders: Array, localName: string) {\n let dynamic = false;\n const types: Array = [];\n coders.forEach((coder) => {\n if (coder.dynamic) { dynamic = true; }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n\n super(\"tuple\", type, localName, dynamic);\n this.coders = coders;\n }\n\n defaultValue(): any {\n const values: any = [ ];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) { accum[name] = 0; }\n accum[name]++;\n }\n return accum;\n }, <{ [ name: string ]: number }>{ });\n\n // Add named values\n this.coders.forEach((coder: Coder, index: number) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) { return; }\n\n if (name === \"length\") { name = \"_length\"; }\n\n if (values[name] != null) { return; }\n\n values[name] = values[index];\n });\n\n return Object.freeze(values);\n }\n\n encode(writer: Writer, value: Array | { [ name: string ]: any }): number {\n return pack(writer, this.coders, value);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n\n","\"use strict\";\n\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { Coder, Reader, Result, Writer } from \"./coders/abstract-coder\";\nimport { AddressCoder } from \"./coders/address\";\nimport { ArrayCoder } from \"./coders/array\";\nimport { BooleanCoder } from \"./coders/boolean\";\nimport { BytesCoder } from \"./coders/bytes\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes\";\nimport { NullCoder } from \"./coders/null\";\nimport { NumberCoder } from \"./coders/number\";\nimport { StringCoder } from \"./coders/string\";\nimport { TupleCoder } from \"./coders/tuple\";\n\nimport { ParamType } from \"./fragments\";\n\n\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\n\n\nexport type CoerceFunc = (type: string, value: any) => any;\n\nexport class AbiCoder {\n readonly coerceFunc: CoerceFunc;\n\n constructor(coerceFunc?: CoerceFunc) {\n defineReadOnly(this, \"coerceFunc\", coerceFunc || null);\n }\n\n _getCoder(param: ParamType): Coder {\n\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"array\":\n return new ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);\n case \"tuple\":\n return new TupleCoder((param.components || []).map((component) => {\n return this._getCoder(component);\n }), param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n }\n\n _getWordSize(): number { return 32; }\n\n _getReader(data: Uint8Array, allowLoose?: boolean): Reader {\n return new Reader(data, this._getWordSize(), this.coerceFunc, allowLoose);\n }\n\n _getWriter(): Writer {\n return new Writer(this._getWordSize());\n }\n\n getDefaultValue(types: ReadonlyArray): Result {\n const coders: Array = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n\n encode(types: ReadonlyArray, values: ReadonlyArray): string {\n if (types.length !== values.length) {\n logger.throwError(\"types/values length mismatch\", Logger.errors.INVALID_ARGUMENT, {\n count: { types: types.length, values: values.length },\n value: { types: types, values: values }\n });\n }\n\n const coders = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n\n const writer = this._getWriter();\n coder.encode(writer, values);\n return writer.data;\n }\n\n decode(types: ReadonlyArray, data: BytesLike, loose?: boolean): Result {\n const coders: Array = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(this._getReader(arrayify(data), loose));\n }\n}\n\nexport const defaultAbiCoder: AbiCoder = new AbiCoder();\n\n","\"use strict\";\n\nimport { arrayify, BytesLike, concat, hexConcat, hexlify } from \"@ethersproject/bytes\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"../_version\";\nconst logger = new Logger(version);\n\nexport interface Result extends ReadonlyArray {\n readonly [key: string]: any;\n}\n\nexport function checkResultErrors(result: Result): Array<{ path: Array, error: Error }> {\n // Find the first error (if any)\n const errors: Array<{ path: Array, error: Error }> = [ ];\n\n const checkErrors = function(path: Array, object: any): void {\n if (!Array.isArray(object)) { return; }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n\n try {\n checkErrors(childPath, object[key]);\n } catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n }\n checkErrors([ ], result);\n\n return errors;\n\n}\n\nexport type CoerceFunc = (type: string, value: any) => any;\n\nexport abstract class Coder {\n\n // The coder name:\n // - address, uint256, tuple, array, etc.\n readonly name: string;\n\n // The fully expanded type, including composite types:\n // - address, uint256, tuple(address,bytes), uint256[3][4][], etc.\n readonly type: string;\n\n // The localName bound in the signature, in this example it is \"baz\":\n // - tuple(address foo, uint bar) baz\n readonly localName: string;\n\n // Whether this type is dynamic:\n // - Dynamic: bytes, string, address[], tuple(boolean[]), etc.\n // - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8)\n readonly dynamic: boolean;\n\n constructor(name: string, type: string, localName: string, dynamic: boolean) {\n // @TODO: defineReadOnly these\n this.name = name;\n this.type = type;\n this.localName = localName;\n this.dynamic = dynamic;\n }\n\n _throwError(message: string, value: any): void {\n logger.throwArgumentError(message, this.localName, value);\n }\n\n abstract encode(writer: Writer, value: any): number;\n abstract decode(reader: Reader): any;\n\n abstract defaultValue(): any;\n}\n\nexport class Writer {\n readonly wordSize: number;\n\n _data: Array;\n _dataLength: number;\n _padding: Uint8Array;\n\n constructor(wordSize?: number) {\n defineReadOnly(this, \"wordSize\", wordSize || 32);\n this._data = [ ];\n this._dataLength = 0;\n this._padding = new Uint8Array(wordSize);\n }\n\n get data(): string {\n return hexConcat(this._data);\n }\n get length(): number { return this._dataLength; }\n\n _writeData(data: Uint8Array): number {\n this._data.push(data);\n this._dataLength += data.length;\n return data.length;\n }\n\n appendWriter(writer: Writer): number {\n return this._writeData(concat(writer._data));\n }\n\n // Arrayish items; padded on the right to wordSize\n writeBytes(value: BytesLike): number {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % this.wordSize;\n if (paddingOffset) {\n bytes = concat([ bytes, this._padding.slice(paddingOffset) ])\n }\n return this._writeData(bytes);\n }\n\n _getValue(value: BigNumberish): Uint8Array {\n let bytes = arrayify(BigNumber.from(value));\n if (bytes.length > this.wordSize) {\n logger.throwError(\"value out-of-bounds\", Logger.errors.BUFFER_OVERRUN, {\n length: this.wordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % this.wordSize) {\n bytes = concat([ this._padding.slice(bytes.length % this.wordSize), bytes ]);\n }\n return bytes;\n }\n\n // BigNumberish items; padded on the left to wordSize\n writeValue(value: BigNumberish): number {\n return this._writeData(this._getValue(value));\n }\n\n writeUpdatableValue(): (value: BigNumberish) => void {\n const offset = this._data.length;\n this._data.push(this._padding);\n this._dataLength += this.wordSize;\n return (value: BigNumberish) => {\n this._data[offset] = this._getValue(value);\n };\n }\n}\n\nexport class Reader {\n readonly wordSize: number;\n readonly allowLoose: boolean;\n\n readonly _data: Uint8Array;\n readonly _coerceFunc: CoerceFunc;\n\n _offset: number;\n\n constructor(data: BytesLike, wordSize?: number, coerceFunc?: CoerceFunc, allowLoose?: boolean) {\n defineReadOnly(this, \"_data\", arrayify(data));\n defineReadOnly(this, \"wordSize\", wordSize || 32);\n defineReadOnly(this, \"_coerceFunc\", coerceFunc);\n defineReadOnly(this, \"allowLoose\", allowLoose);\n\n this._offset = 0;\n }\n\n get data(): string { return hexlify(this._data); }\n get consumed(): number { return this._offset; }\n\n // The default Coerce function\n static coerce(name: string, value: any): any {\n let match = name.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) { value = value.toNumber(); }\n return value;\n }\n\n coerce(name: string, value: any): any {\n if (this._coerceFunc) { return this._coerceFunc(name, value); }\n return Reader.coerce(name, value);\n }\n\n _peekBytes(offset: number, length: number, loose?: boolean): Uint8Array {\n let alignedLength = Math.ceil(length / this.wordSize) * this.wordSize;\n if (this._offset + alignedLength > this._data.length) {\n if (this.allowLoose && loose && this._offset + length <= this._data.length) {\n alignedLength = length;\n } else {\n logger.throwError(\"data out-of-bounds\", Logger.errors.BUFFER_OVERRUN, {\n length: this._data.length,\n offset: this._offset + alignedLength\n });\n }\n }\n return this._data.slice(this._offset, this._offset + alignedLength)\n }\n\n subReader(offset: number): Reader {\n return new Reader(this._data.slice(this._offset + offset), this.wordSize, this._coerceFunc, this.allowLoose);\n }\n\n readBytes(length: number, loose?: boolean): Uint8Array {\n let bytes = this._peekBytes(0, length, !!loose);\n this._offset += bytes.length;\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n\n readValue(): BigNumber {\n return BigNumber.from(this.readBytes(this.wordSize));\n }\n}\n","\"use strict\";\n\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport interface JsonFragmentType {\n readonly name?: string;\n readonly indexed?: boolean;\n readonly type?: string;\n readonly internalType?: any; // @TODO: in v6 reduce type\n readonly components?: ReadonlyArray;\n}\n\nexport interface JsonFragment {\n readonly name?: string;\n readonly type?: string;\n\n readonly anonymous?: boolean;\n\n readonly payable?: boolean;\n readonly constant?: boolean;\n readonly stateMutability?: string;\n\n readonly inputs?: ReadonlyArray;\n readonly outputs?: ReadonlyArray;\n\n readonly gas?: string;\n};\n\nconst _constructorGuard = { };\n\n// AST Node parser state\ntype ParseState = {\n allowArray?: boolean,\n allowName?: boolean,\n allowParams?: boolean,\n allowType?: boolean,\n readArray?: boolean,\n};\n\n// AST Node\ntype ParseNode = {\n parent?: any,\n type?: string,\n name?: string,\n state?: ParseState,\n indexed?: boolean,\n components?: Array\n};\n\nlet ModifiersBytes: { [ name: string ]: boolean } = { calldata: true, memory: true, storage: true };\nlet ModifiersNest: { [ name: string ]: boolean } = { calldata: true, memory: true };\nfunction checkModifier(type: string, name: string): boolean {\n if (type === \"bytes\" || type === \"string\") {\n if (ModifiersBytes[name]) { return true; }\n } else if (type === \"address\") {\n if (name === \"payable\") { return true; }\n } else if (type.indexOf(\"[\") >= 0 || type === \"tuple\") {\n if (ModifiersNest[name]) { return true; }\n }\n if (ModifiersBytes[name] || name === \"payable\") {\n logger.throwArgumentError(\"invalid modifier\", \"name\", name);\n }\n return false;\n}\n\n// @TODO: Make sure that children of an indexed tuple are marked with a null indexed\nfunction parseParamType(param: string, allowIndexed: boolean): ParseNode {\n\n let originalParam = param;\n function throwError(i: number) {\n logger.throwArgumentError(`unexpected character at position ${ i }`, \"param\", param);\n }\n param = param.replace(/\\s/g, \" \");\n\n function newNode(parent: ParseNode): ParseNode {\n let node: ParseNode = { type: \"\", name: \"\", parent: parent, state: { allowType: true } };\n if (allowIndexed) { node.indexed = false; }\n return node\n }\n\n let parent: ParseNode = { type: \"\", name: \"\", state: { allowType: true } };\n let node = parent;\n\n for (let i = 0; i < param.length; i++) {\n let c = param[i];\n switch (c) {\n case \"(\":\n if (node.state.allowType && node.type === \"\") {\n node.type = \"tuple\";\n } else if (!node.state.allowParams) {\n throwError(i);\n }\n node.state.allowType = false;\n node.type = verifyType(node.type);\n node.components = [ newNode(node) ];\n node = node.components[0];\n break;\n\n case \")\":\n delete node.state;\n\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(i); }\n node.indexed = true;\n node.name = \"\";\n }\n\n if (checkModifier(node.type, node.name)) { node.name = \"\"; }\n\n node.type = verifyType(node.type);\n\n let child = node;\n node = node.parent;\n if (!node) { throwError(i); }\n delete child.parent;\n node.state.allowParams = false;\n node.state.allowName = true;\n node.state.allowArray = true;\n break;\n\n case \",\":\n delete node.state;\n\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(i); }\n node.indexed = true;\n node.name = \"\";\n }\n\n if (checkModifier(node.type, node.name)) { node.name = \"\"; }\n\n node.type = verifyType(node.type);\n\n let sibling: ParseNode = newNode(node.parent);\n //{ type: \"\", name: \"\", parent: node.parent, state: { allowType: true } };\n node.parent.components.push(sibling);\n delete node.parent;\n node = sibling;\n break;\n\n // Hit a space...\n case \" \":\n\n // If reading type, the type is done and may read a param or name\n if (node.state.allowType) {\n if (node.type !== \"\") {\n node.type = verifyType(node.type);\n delete node.state.allowType;\n node.state.allowName = true;\n node.state.allowParams = true;\n }\n }\n\n // If reading name, the name is done\n if (node.state.allowName) {\n if (node.name !== \"\") {\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(i); }\n if (node.indexed) { throwError(i); }\n node.indexed = true;\n node.name = \"\";\n } else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n } else {\n node.state.allowName = false;\n }\n }\n }\n\n break;\n\n case \"[\":\n if (!node.state.allowArray) { throwError(i); }\n\n node.type += c;\n\n node.state.allowArray = false;\n node.state.allowName = false;\n node.state.readArray = true;\n break;\n\n case \"]\":\n if (!node.state.readArray) { throwError(i); }\n\n node.type += c;\n\n node.state.readArray = false;\n node.state.allowArray = true;\n node.state.allowName = true;\n break;\n\n default:\n if (node.state.allowType) {\n node.type += c;\n node.state.allowParams = true;\n node.state.allowArray = true;\n } else if (node.state.allowName) {\n node.name += c;\n delete node.state.allowArray;\n } else if (node.state.readArray) {\n node.type += c;\n } else {\n throwError(i);\n }\n }\n }\n\n if (node.parent) { logger.throwArgumentError(\"unexpected eof\", \"param\", param); }\n\n delete parent.state;\n\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(originalParam.length - 7); }\n if (node.indexed) { throwError(originalParam.length - 7); }\n node.indexed = true;\n node.name = \"\";\n } else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n\n parent.type = verifyType(parent.type);\n\n return parent;\n}\n\nfunction populate(object: any, params: any) {\n for (let key in params) { defineReadOnly(object, key, params[key]); }\n}\n\nexport const FormatTypes: { [ name: string ]: string } = Object.freeze({\n // Bare formatting, as is needed for computing a sighash of an event or function\n sighash: \"sighash\",\n\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n minimal: \"minimal\",\n\n // Human-Readable with nice spacing, including all names\n full: \"full\",\n\n // JSON-format a la Solidity\n json: \"json\"\n});\n\nconst paramTypeArray = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\n\nexport class ParamType {\n\n // The local name of the parameter (of null if unbound)\n readonly name: string;\n\n // The fully qualified type (e.g. \"address\", \"tuple(address)\", \"uint256[3][]\"\n readonly type: string;\n\n // The base type (e.g. \"address\", \"tuple\", \"array\")\n readonly baseType: string;\n\n // Indexable Paramters ONLY (otherwise null)\n readonly indexed: boolean;\n\n // Tuples ONLY: (otherwise null)\n // - sub-components\n readonly components: Array;\n\n // Arrays ONLY: (otherwise null)\n // - length of the array (-1 for dynamic length)\n // - child type\n readonly arrayLength: number;\n readonly arrayChildren: ParamType;\n\n readonly _isParamType: boolean;\n\n constructor(constructorGuard: any, params: any) {\n if (constructorGuard !== _constructorGuard) { logger.throwError(\"use fromString\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new ParamType()\"\n }); }\n populate(this, params);\n\n let match = this.type.match(paramTypeArray);\n if (match) {\n populate(this, {\n arrayLength: parseInt(match[2] || \"-1\"),\n arrayChildren: ParamType.fromObject({\n type: match[1],\n components: this.components\n }),\n baseType: \"array\"\n });\n } else {\n populate(this, {\n arrayLength: null,\n arrayChildren: null,\n baseType: ((this.components != null) ? \"tuple\": this.type)\n });\n }\n\n this._isParamType = true;\n\n Object.freeze(this);\n }\n\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n let result: any = {\n type: ((this.baseType === \"tuple\") ? \"tuple\": this.type),\n name: (this.name || undefined)\n };\n if (typeof(this.indexed) === \"boolean\") { result.indexed = this.indexed; }\n if (this.components) {\n result.components = this.components.map((comp) => JSON.parse(comp.format(format)));\n }\n return JSON.stringify(result);\n }\n\n let result = \"\";\n\n // Array\n if (this.baseType === \"array\") {\n result += this.arrayChildren.format(format);\n result += \"[\" + (this.arrayLength < 0 ? \"\": String(this.arrayLength)) + \"]\";\n } else {\n if (this.baseType === \"tuple\") {\n if (format !== FormatTypes.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map(\n (comp) => comp.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \")\";\n } else {\n result += this.type;\n }\n }\n\n if (format !== FormatTypes.sighash) {\n if (this.indexed === true) { result += \" indexed\"; }\n if (format === FormatTypes.full && this.name) {\n result += \" \" + this.name;\n }\n }\n\n return result;\n }\n\n static from(value: string | JsonFragmentType | ParamType, allowIndexed?: boolean): ParamType {\n if (typeof(value) === \"string\") {\n return ParamType.fromString(value, allowIndexed);\n }\n return ParamType.fromObject(value);\n }\n\n static fromObject(value: JsonFragmentType | ParamType): ParamType {\n if (ParamType.isParamType(value)) { return value; }\n\n return new ParamType(_constructorGuard, {\n name: (value.name || null),\n type: verifyType(value.type),\n indexed: ((value.indexed == null) ? null: !!value.indexed),\n components: (value.components ? value.components.map(ParamType.fromObject): null)\n });\n }\n\n static fromString(value: string, allowIndexed?: boolean): ParamType {\n function ParamTypify(node: ParseNode): ParamType {\n return ParamType.fromObject({\n name: node.name,\n type: node.type,\n indexed: node.indexed,\n components: node.components\n });\n }\n\n return ParamTypify(parseParamType(value, !!allowIndexed));\n }\n\n static isParamType(value: any): value is ParamType {\n return !!(value != null && value._isParamType);\n }\n};\n\nfunction parseParams(value: string, allowIndex: boolean): Array {\n return splitNesting(value).map((param) => ParamType.fromString(param, allowIndex));\n}\n\ntype TypeCheck = { -readonly [ K in keyof T ]: T[K] };\n\ninterface _Fragment {\n readonly type: string;\n readonly name: string;\n readonly inputs: ReadonlyArray;\n}\n\nexport abstract class Fragment {\n\n readonly type: string;\n readonly name: string;\n readonly inputs: Array;\n\n readonly _isFragment: boolean;\n\n constructor(constructorGuard: any, params: any) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"use a static from method\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new Fragment()\"\n });\n }\n populate(this, params);\n\n this._isFragment = true;\n\n Object.freeze(this);\n }\n\n abstract format(format?: string): string;\n\n static from(value: Fragment | JsonFragment | string): Fragment {\n if (Fragment.isFragment(value)) { return value; }\n\n if (typeof(value) === \"string\") {\n return Fragment.fromString(value);\n }\n\n return Fragment.fromObject(value);\n }\n\n static fromObject(value: Fragment | JsonFragment): Fragment {\n if (Fragment.isFragment(value)) { return value; }\n\n switch (value.type) {\n case \"function\":\n return FunctionFragment.fromObject(value);\n case \"event\":\n return EventFragment.fromObject(value);\n case \"constructor\":\n return ConstructorFragment.fromObject(value);\n case \"error\":\n return ErrorFragment.fromObject(value);\n case \"fallback\":\n case \"receive\":\n // @TODO: Something? Maybe return a FunctionFragment? A custom DefaultFunctionFragment?\n return null;\n }\n\n return logger.throwArgumentError(\"invalid fragment object\", \"value\", value);\n }\n\n static fromString(value: string): Fragment {\n // Make sure the \"returns\" is surrounded by a space and all whitespace is exactly one space\n value = value.replace(/\\s/g, \" \");\n value = value.replace(/\\(/g, \" (\").replace(/\\)/g, \") \").replace(/\\s+/g, \" \");\n value = value.trim();\n\n if (value.split(\" \")[0] === \"event\") {\n return EventFragment.fromString(value.substring(5).trim());\n } else if (value.split(\" \")[0] === \"function\") {\n return FunctionFragment.fromString(value.substring(8).trim());\n } else if (value.split(\"(\")[0].trim() === \"constructor\") {\n return ConstructorFragment.fromString(value.trim());\n } else if (value.split(\" \")[0] === \"error\") {\n return ErrorFragment.fromString(value.substring(5).trim());\n }\n\n return logger.throwArgumentError(\"unsupported fragment\", \"value\", value);\n }\n\n static isFragment(value: any): value is Fragment {\n return !!(value && value._isFragment);\n }\n}\n\ninterface _EventFragment extends _Fragment {\n readonly anonymous: boolean;\n}\n\nexport class EventFragment extends Fragment {\n readonly anonymous: boolean;\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n\n let result = \"\";\n\n if (format !== FormatTypes.sighash) {\n result += \"event \";\n }\n\n result += this.name + \"(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n if (format !== FormatTypes.sighash) {\n if (this.anonymous) {\n result += \"anonymous \";\n }\n }\n\n return result.trim();\n }\n\n static from(value: EventFragment | JsonFragment | string): EventFragment {\n if (typeof(value) === \"string\") {\n return EventFragment.fromString(value);\n }\n return EventFragment.fromObject(value);\n }\n\n static fromObject(value: JsonFragment | EventFragment): EventFragment {\n if (EventFragment.isEventFragment(value)) { return value; }\n\n if (value.type !== \"event\") {\n logger.throwArgumentError(\"invalid event object\", \"value\", value);\n }\n\n const params: TypeCheck<_EventFragment> = {\n name: verifyIdentifier(value.name),\n anonymous: value.anonymous,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n type: \"event\"\n };\n\n return new EventFragment(_constructorGuard, params);\n }\n\n static fromString(value: string): EventFragment {\n\n let match = value.match(regexParen);\n if (!match) {\n logger.throwArgumentError(\"invalid event string\", \"value\", value);\n }\n\n let anonymous = false;\n match[3].split(\" \").forEach((modifier) => {\n switch(modifier.trim()) {\n case \"anonymous\":\n anonymous = true;\n break;\n case \"\":\n break;\n default:\n logger.warn(\"unknown modifier: \" + modifier);\n }\n });\n\n return EventFragment.fromObject({\n name: match[1].trim(),\n anonymous: anonymous,\n inputs: parseParams(match[2], true),\n type: \"event\"\n });\n }\n\n static isEventFragment(value: any): value is EventFragment {\n return (value && value._isFragment && value.type === \"event\");\n }\n}\n\nfunction parseGas(value: string, params: any): string {\n params.gas = null;\n\n let comps = value.split(\"@\");\n if (comps.length !== 1) {\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid human-readable ABI signature\", \"value\", value);\n }\n if (!comps[1].match(/^[0-9]+$/)) {\n logger.throwArgumentError(\"invalid human-readable ABI signature gas\", \"value\", value);\n }\n params.gas = BigNumber.from(comps[1]);\n return comps[0];\n }\n\n return value;\n}\n\nfunction parseModifiers(value: string, params: any): void {\n params.constant = false;\n params.payable = false;\n params.stateMutability = \"nonpayable\";\n\n value.split(\" \").forEach((modifier) => {\n switch (modifier.trim()) {\n case \"constant\":\n params.constant = true;\n break;\n case \"payable\":\n params.payable = true;\n params.stateMutability = \"payable\";\n break;\n case \"nonpayable\":\n params.payable = false;\n params.stateMutability = \"nonpayable\";\n break;\n case \"pure\":\n params.constant = true;\n params.stateMutability = \"pure\";\n break;\n case \"view\":\n params.constant = true;\n params.stateMutability = \"view\";\n break;\n case \"external\":\n case \"public\":\n case \"\":\n break;\n default:\n console.log(\"unknown modifier: \" + modifier);\n }\n });\n}\n\ntype StateInputValue = {\n constant?: boolean;\n payable?: boolean;\n stateMutability?: string;\n type?: string;\n};\n\ntype StateOutputValue = {\n constant: boolean;\n payable: boolean;\n stateMutability: string;\n};\n\nfunction verifyState(value: StateInputValue): StateOutputValue {\n let result: any = {\n constant: false,\n payable: true,\n stateMutability: \"payable\"\n };\n\n if (value.stateMutability != null) {\n result.stateMutability = value.stateMutability;\n\n // Set (and check things are consistent) the constant property\n result.constant = (result.stateMutability === \"view\" || result.stateMutability === \"pure\");\n if (value.constant != null) {\n if ((!!value.constant) !== result.constant) {\n logger.throwArgumentError(\"cannot have constant function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n\n // Set (and check things are consistent) the payable property\n result.payable = (result.stateMutability === \"payable\");\n if (value.payable != null) {\n if ((!!value.payable) !== result.payable) {\n logger.throwArgumentError(\"cannot have payable function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n\n } else if (value.payable != null) {\n result.payable = !!value.payable;\n\n // If payable we can assume non-constant; otherwise we can't assume\n if (value.constant == null && !result.payable && value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n\n result.constant = !!value.constant;\n\n if (result.constant) {\n result.stateMutability = \"view\";\n } else {\n result.stateMutability = (result.payable ? \"payable\": \"nonpayable\");\n }\n\n if (result.payable && result.constant) {\n logger.throwArgumentError(\"cannot have constant payable function\", \"value\", value);\n }\n\n } else if (value.constant != null) {\n result.constant = !!value.constant;\n result.payable = !result.constant;\n result.stateMutability = (result.constant ? \"view\": \"payable\");\n\n } else if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n\n return result;\n}\n\ninterface _ConstructorFragment extends _Fragment {\n stateMutability: string;\n payable: boolean;\n gas?: BigNumber;\n}\n\nexport class ConstructorFragment extends Fragment {\n stateMutability: string;\n payable: boolean;\n gas?: BigNumber;\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability: undefined),\n payable: this.payable,\n gas: (this.gas ? this.gas.toNumber(): undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n\n if (format === FormatTypes.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"format(sighash)\"\n });\n }\n\n let result = \"constructor(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n if (this.stateMutability && this.stateMutability !== \"nonpayable\") {\n result += this.stateMutability + \" \";\n }\n\n return result.trim();\n }\n\n static from(value: ConstructorFragment | JsonFragment | string): ConstructorFragment {\n if (typeof(value) === \"string\") {\n return ConstructorFragment.fromString(value);\n }\n return ConstructorFragment.fromObject(value);\n }\n\n static fromObject(value: ConstructorFragment | JsonFragment): ConstructorFragment {\n if (ConstructorFragment.isConstructorFragment(value)) { return value; }\n\n if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor object\", \"value\", value);\n }\n\n let state = verifyState(value);\n if (state.constant) {\n logger.throwArgumentError(\"constructor cannot be constant\", \"value\", value);\n }\n\n const params: TypeCheck<_ConstructorFragment> = {\n name: null,\n type: value.type,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject): []),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas): null)\n };\n\n return new ConstructorFragment(_constructorGuard, params);\n }\n\n static fromString(value: string): ConstructorFragment {\n let params: any = { type: \"constructor\" };\n\n value = parseGas(value, params);\n\n let parens = value.match(regexParen);\n if (!parens || parens[1].trim() !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor string\", \"value\", value);\n }\n\n params.inputs = parseParams(parens[2].trim(), false);\n\n parseModifiers(parens[3].trim(), params);\n\n return ConstructorFragment.fromObject(params);\n }\n\n static isConstructorFragment(value: any): value is ConstructorFragment {\n return (value && value._isFragment && value.type === \"constructor\");\n }\n}\n\ninterface _FunctionFragment extends _ConstructorFragment {\n constant: boolean;\n outputs?: Array;\n}\n\nexport class FunctionFragment extends ConstructorFragment {\n constant: boolean;\n outputs?: Array;\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability: undefined),\n payable: this.payable,\n gas: (this.gas ? this.gas.toNumber(): undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n outputs: this.outputs.map((output) => JSON.parse(output.format(format))),\n });\n }\n\n let result = \"\";\n\n if (format !== FormatTypes.sighash) {\n result += \"function \";\n }\n\n result += this.name + \"(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n if (format !== FormatTypes.sighash) {\n if (this.stateMutability) {\n if (this.stateMutability !== \"nonpayable\") {\n result += (this.stateMutability + \" \");\n }\n } else if (this.constant) {\n result += \"view \";\n }\n\n if (this.outputs && this.outputs.length) {\n result += \"returns (\" + this.outputs.map(\n (output) => output.format(format)\n ).join(\", \") + \") \";\n }\n\n if (this.gas != null) {\n result += \"@\" + this.gas.toString() + \" \";\n }\n }\n\n return result.trim();\n }\n\n static from(value: FunctionFragment | JsonFragment | string): FunctionFragment {\n if (typeof(value) === \"string\") {\n return FunctionFragment.fromString(value);\n }\n return FunctionFragment.fromObject(value);\n }\n\n static fromObject(value: FunctionFragment | JsonFragment): FunctionFragment {\n if (FunctionFragment.isFunctionFragment(value)) { return value; }\n\n if (value.type !== \"function\") {\n logger.throwArgumentError(\"invalid function object\", \"value\", value);\n }\n\n let state = verifyState(value);\n\n const params: TypeCheck<_FunctionFragment> = {\n type: value.type,\n name: verifyIdentifier(value.name),\n constant: state.constant,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject): []),\n outputs: (value.outputs ? value.outputs.map(ParamType.fromObject): [ ]),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas): null)\n };\n\n return new FunctionFragment(_constructorGuard, params);\n }\n\n static fromString(value: string): FunctionFragment {\n let params: any = { type: \"function\" };\n value = parseGas(value, params);\n\n let comps = value.split(\" returns \");\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid function string\", \"value\", value);\n }\n\n let parens = comps[0].match(regexParen);\n if (!parens) {\n logger.throwArgumentError(\"invalid function signature\", \"value\", value);\n }\n\n params.name = parens[1].trim();\n if (params.name) { verifyIdentifier(params.name); }\n\n params.inputs = parseParams(parens[2], false);\n\n parseModifiers(parens[3].trim(), params);\n\n // We have outputs\n if (comps.length > 1) {\n let returns = comps[1].match(regexParen);\n if (returns[1].trim() != \"\" || returns[3].trim() != \"\") {\n logger.throwArgumentError(\"unexpected tokens\", \"value\", value);\n }\n params.outputs = parseParams(returns[2], false);\n } else {\n params.outputs = [ ];\n }\n\n return FunctionFragment.fromObject(params);\n }\n\n static isFunctionFragment(value: any): value is FunctionFragment {\n return (value && value._isFragment && value.type === \"function\");\n }\n}\n\n//export class StructFragment extends Fragment {\n//}\n\nfunction checkForbidden(fragment: ErrorFragment): ErrorFragment {\n const sig = fragment.format();\n if (sig === \"Error(string)\" || sig === \"Panic(uint256)\") {\n logger.throwArgumentError(`cannot specify user defined ${ sig } error`, \"fragment\", fragment);\n }\n return fragment;\n}\n\nexport class ErrorFragment extends Fragment {\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n\n let result = \"\";\n\n if (format !== FormatTypes.sighash) {\n result += \"error \";\n }\n\n result += this.name + \"(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n return result.trim();\n }\n\n static from(value: ErrorFragment | JsonFragment | string): ErrorFragment {\n if (typeof(value) === \"string\") {\n return ErrorFragment.fromString(value);\n }\n return ErrorFragment.fromObject(value);\n }\n\n static fromObject(value: ErrorFragment | JsonFragment): ErrorFragment {\n if (ErrorFragment.isErrorFragment(value)) { return value; }\n\n if (value.type !== \"error\") {\n logger.throwArgumentError(\"invalid error object\", \"value\", value);\n }\n\n const params: TypeCheck<_Fragment> = {\n type: value.type,\n name: verifyIdentifier(value.name),\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject): [])\n };\n\n return checkForbidden(new ErrorFragment(_constructorGuard, params));\n }\n\n static fromString(value: string): ErrorFragment {\n let params: any = { type: \"error\" };\n\n let parens = value.match(regexParen);\n if (!parens) {\n logger.throwArgumentError(\"invalid error signature\", \"value\", value);\n }\n\n params.name = parens[1].trim();\n if (params.name) { verifyIdentifier(params.name); }\n\n params.inputs = parseParams(parens[2], false);\n\n return checkForbidden(ErrorFragment.fromObject(params));\n }\n\n static isErrorFragment(value: any): value is ErrorFragment {\n return (value && value._isFragment && value.type === \"error\");\n }\n}\n\nfunction verifyType(type: string): string {\n\n // These need to be transformed to their full description\n if (type.match(/^uint($|[^1-9])/)) {\n type = \"uint256\" + type.substring(4);\n } else if (type.match(/^int($|[^1-9])/)) {\n type = \"int256\" + type.substring(3);\n }\n\n // @TODO: more verification\n\n return type;\n}\n\n// See: https://github.com/ethereum/solidity/blob/1f8f1a3db93a548d0555e3e14cfc55a10e25b60e/docs/grammar/SolidityLexer.g4#L234\nconst regexIdentifier = new RegExp(\"^[a-zA-Z$_][a-zA-Z0-9$_]*$\");\nfunction verifyIdentifier(value: string): string {\n if (!value || !value.match(regexIdentifier)) {\n logger.throwArgumentError(`invalid identifier \"${ value }\"`, \"value\", value);\n }\n return value;\n}\n\nconst regexParen = new RegExp(\"^([^)(]*)\\\\((.*)\\\\)([^)(]*)$\");\n\nfunction splitNesting(value: string): Array {\n value = value.trim();\n\n let result = [];\n let accum = \"\";\n let depth = 0;\n for (let offset = 0; offset < value.length; offset++) {\n let c = value[offset];\n if (c === \",\" && depth === 0) {\n result.push(accum);\n accum = \"\";\n } else {\n accum += c;\n if (c === \"(\") {\n depth++;\n } else if (c === \")\") {\n depth--;\n if (depth === -1) {\n logger.throwArgumentError(\"unbalanced parenthesis\", \"value\", value);\n }\n }\n }\n }\n if (accum) { result.push(accum); }\n\n return result;\n}\n\n","\"use strict\";\n\nimport { getAddress } from \"@ethersproject/address\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { arrayify, BytesLike, concat, hexDataSlice, hexlify, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { id } from \"@ethersproject/hash\";\nimport { keccak256 } from \"@ethersproject/keccak256\"\nimport { defineReadOnly, Description, getStatic } from \"@ethersproject/properties\";\n\nimport { AbiCoder, defaultAbiCoder } from \"./abi-coder\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatTypes, Fragment, FunctionFragment, JsonFragment, ParamType } from \"./fragments\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport { checkResultErrors, Result };\n\nexport class LogDescription extends Description {\n readonly eventFragment: EventFragment;\n readonly name: string;\n readonly signature: string;\n readonly topic: string;\n readonly args: Result\n}\n\nexport class TransactionDescription extends Description {\n readonly functionFragment: FunctionFragment;\n readonly name: string;\n readonly args: Result;\n readonly signature: string;\n readonly sighash: string;\n readonly value: BigNumber;\n}\n\nexport class ErrorDescription extends Description {\n readonly errorFragment: ErrorFragment;\n readonly name: string;\n readonly args: Result;\n readonly signature: string;\n readonly sighash: string;\n}\n\nexport class Indexed extends Description {\n readonly hash: string;\n readonly _isIndexed: boolean;\n\n static isIndexed(value: any): value is Indexed {\n return !!(value && value._isIndexed);\n }\n}\n\nconst BuiltinErrors: Record, name: string, reason?: boolean }> = {\n \"0x08c379a0\": { signature: \"Error(string)\", name: \"Error\", inputs: [ \"string\" ], reason: true },\n \"0x4e487b71\": { signature: \"Panic(uint256)\", name: \"Panic\", inputs: [ \"uint256\" ] }\n}\n\nfunction wrapAccessError(property: string, error: Error): Error {\n const wrap = new Error(`deferred error during ABI decoding triggered accessing ${ property }`);\n (wrap).error = error;\n return wrap;\n}\n\n/*\nfunction checkNames(fragment: Fragment, type: \"input\" | \"output\", params: Array): void {\n params.reduce((accum, param) => {\n if (param.name) {\n if (accum[param.name]) {\n logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format(\"full\") }`, \"fragment\", fragment);\n }\n accum[param.name] = true;\n }\n return accum;\n }, <{ [ name: string ]: boolean }>{ });\n}\n*/\nexport class Interface {\n readonly fragments: ReadonlyArray;\n\n readonly errors: { [ name: string ]: ErrorFragment };\n readonly events: { [ name: string ]: EventFragment };\n readonly functions: { [ name: string ]: FunctionFragment };\n readonly structs: { [ name: string ]: any };\n\n readonly deploy: ConstructorFragment;\n\n readonly _abiCoder: AbiCoder;\n\n readonly _isInterface: boolean;\n\n constructor(fragments: string | ReadonlyArray) {\n let abi: ReadonlyArray = [ ];\n if (typeof(fragments) === \"string\") {\n abi = JSON.parse(fragments);\n } else {\n abi = fragments;\n }\n\n defineReadOnly(this, \"fragments\", abi.map((fragment) => {\n return Fragment.from(fragment);\n }).filter((fragment) => (fragment != null)));\n\n defineReadOnly(this, \"_abiCoder\", getStatic<() => AbiCoder>(new.target, \"getAbiCoder\")());\n\n defineReadOnly(this, \"functions\", { });\n defineReadOnly(this, \"errors\", { });\n defineReadOnly(this, \"events\", { });\n defineReadOnly(this, \"structs\", { });\n\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket: { [ name: string ]: Fragment } = null;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineReadOnly(this, \"deploy\", fragment);\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = this.functions;\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = this.events;\n break;\n case \"error\":\n bucket = this.errors;\n break;\n default:\n return;\n }\n\n let signature = fragment.format();\n if (bucket[signature]) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n\n bucket[signature] = fragment;\n });\n\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineReadOnly(this, \"deploy\", ConstructorFragment.from({\n payable: false,\n type: \"constructor\"\n }));\n }\n\n defineReadOnly(this, \"_isInterface\", true);\n }\n\n format(format?: string): string | Array {\n if (!format) { format = FormatTypes.full; }\n if (format === FormatTypes.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n\n const abi = this.fragments.map((fragment) => fragment.format(format));\n\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatTypes.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n\n return abi;\n }\n\n // Sub-classes can override these to handle other blockchains\n static getAbiCoder(): AbiCoder {\n return defaultAbiCoder;\n }\n\n static getAddress(address: string): string {\n return getAddress(address);\n }\n\n static getSighash(fragment: ErrorFragment | FunctionFragment): string {\n return hexDataSlice(id(fragment.format()), 0, 4);\n }\n\n static getEventTopic(eventFragment: EventFragment): string {\n return id(eventFragment.format());\n }\n\n // Find a function definition by any means necessary (unless it is ambiguous)\n getFunction(nameOrSignatureOrSighash: string): FunctionFragment {\n if (isHexString(nameOrSignatureOrSighash)) {\n for (const name in this.functions) {\n if (nameOrSignatureOrSighash === this.getSighash(name)) {\n return this.functions[name];\n }\n }\n logger.throwArgumentError(\"no matching function\", \"sighash\", nameOrSignatureOrSighash);\n }\n\n // It is a bare name, look up the function (will return null if ambiguous)\n if (nameOrSignatureOrSighash.indexOf(\"(\") === -1) {\n const name = nameOrSignatureOrSighash.trim();\n const matching = Object.keys(this.functions).filter((f) => (f.split(\"(\"/* fix:) */)[0] === name));\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", name);\n } else if (matching.length > 1) {\n logger.throwArgumentError(\"multiple matching functions\", \"name\", name);\n }\n\n return this.functions[matching[0]];\n }\n\n // Normalize the signature and lookup the function\n const result = this.functions[FunctionFragment.fromString(nameOrSignatureOrSighash).format()];\n if (!result) {\n logger.throwArgumentError(\"no matching function\", \"signature\", nameOrSignatureOrSighash);\n }\n return result;\n }\n\n // Find an event definition by any means necessary (unless it is ambiguous)\n getEvent(nameOrSignatureOrTopic: string): EventFragment {\n if (isHexString(nameOrSignatureOrTopic)) {\n const topichash = nameOrSignatureOrTopic.toLowerCase();\n for (const name in this.events) {\n if (topichash === this.getEventTopic(name)) {\n return this.events[name];\n }\n }\n logger.throwArgumentError(\"no matching event\", \"topichash\", topichash);\n }\n\n // It is a bare name, look up the function (will return null if ambiguous)\n if (nameOrSignatureOrTopic.indexOf(\"(\") === -1) {\n const name = nameOrSignatureOrTopic.trim();\n const matching = Object.keys(this.events).filter((f) => (f.split(\"(\"/* fix:) */)[0] === name));\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", name);\n } else if (matching.length > 1) {\n logger.throwArgumentError(\"multiple matching events\", \"name\", name);\n }\n\n return this.events[matching[0]];\n }\n\n // Normalize the signature and lookup the function\n const result = this.events[EventFragment.fromString(nameOrSignatureOrTopic).format()];\n if (!result) {\n logger.throwArgumentError(\"no matching event\", \"signature\", nameOrSignatureOrTopic);\n }\n return result;\n }\n\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(nameOrSignatureOrSighash: string): ErrorFragment {\n if (isHexString(nameOrSignatureOrSighash)) {\n const getSighash = getStatic<(f: ErrorFragment | FunctionFragment) => string>(this.constructor, \"getSighash\");\n for (const name in this.errors) {\n const error = this.errors[name];\n if (nameOrSignatureOrSighash === getSighash(error)) {\n return this.errors[name];\n }\n }\n logger.throwArgumentError(\"no matching error\", \"sighash\", nameOrSignatureOrSighash);\n }\n\n // It is a bare name, look up the function (will return null if ambiguous)\n if (nameOrSignatureOrSighash.indexOf(\"(\") === -1) {\n const name = nameOrSignatureOrSighash.trim();\n const matching = Object.keys(this.errors).filter((f) => (f.split(\"(\"/* fix:) */)[0] === name));\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", name);\n } else if (matching.length > 1) {\n logger.throwArgumentError(\"multiple matching errors\", \"name\", name);\n }\n\n return this.errors[matching[0]];\n }\n\n // Normalize the signature and lookup the function\n const result = this.errors[FunctionFragment.fromString(nameOrSignatureOrSighash).format()];\n if (!result) {\n logger.throwArgumentError(\"no matching error\", \"signature\", nameOrSignatureOrSighash);\n }\n return result;\n }\n\n // Get the sighash (the bytes4 selector) used by Solidity to identify a function\n getSighash(fragment: ErrorFragment | FunctionFragment | string): string {\n if (typeof(fragment) === \"string\") {\n try {\n fragment = this.getFunction(fragment);\n } catch (error) {\n try {\n fragment = this.getError(fragment);\n } catch (_) {\n throw error;\n }\n }\n }\n\n return getStatic<(f: ErrorFragment | FunctionFragment) => string>(this.constructor, \"getSighash\")(fragment);\n }\n\n // Get the topic (the bytes32 hash) used by Solidity to identify an event\n getEventTopic(eventFragment: EventFragment | string): string {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n return getStatic<(e: EventFragment) => string>(this.constructor, \"getEventTopic\")(eventFragment);\n }\n\n\n _decodeParams(params: ReadonlyArray, data: BytesLike): Result {\n return this._abiCoder.decode(params, data)\n }\n\n _encodeParams(params: ReadonlyArray, values: ReadonlyArray): string {\n return this._abiCoder.encode(params, values)\n }\n\n encodeDeploy(values?: ReadonlyArray): string {\n return this._encodeParams(this.deploy.inputs, values || [ ]);\n }\n\n decodeErrorResult(fragment: ErrorFragment | string, data: BytesLike): Result {\n if (typeof(fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n\n const bytes = arrayify(data);\n\n if (hexlify(bytes.slice(0, 4)) !== this.getSighash(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${ fragment.name }.`, \"data\", hexlify(bytes));\n }\n\n return this._decodeParams(fragment.inputs, bytes.slice(4));\n }\n\n encodeErrorResult(fragment: ErrorFragment | string, values?: ReadonlyArray): string {\n if (typeof(fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n\n return hexlify(concat([\n this.getSighash(fragment),\n this._encodeParams(fragment.inputs, values || [ ])\n ]));\n }\n\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(functionFragment: FunctionFragment | string, data: BytesLike): Result {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n const bytes = arrayify(data);\n\n if (hexlify(bytes.slice(0, 4)) !== this.getSighash(functionFragment)) {\n logger.throwArgumentError(`data signature does not match function ${ functionFragment.name }.`, \"data\", hexlify(bytes));\n }\n\n return this._decodeParams(functionFragment.inputs, bytes.slice(4));\n }\n\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(functionFragment: FunctionFragment | string, values?: ReadonlyArray): string {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n return hexlify(concat([\n this.getSighash(functionFragment),\n this._encodeParams(functionFragment.inputs, values || [ ])\n ]));\n }\n\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(functionFragment: FunctionFragment | string, data: BytesLike): Result {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n let bytes = arrayify(data);\n\n let reason: string = null;\n let message = \"\";\n let errorArgs: Result = null;\n let errorName: string = null;\n let errorSignature: string = null;\n switch (bytes.length % this._abiCoder._getWordSize()) {\n case 0:\n try {\n return this._abiCoder.decode(functionFragment.outputs, bytes);\n } catch (error) { }\n break;\n\n case 4: {\n const selector = hexlify(bytes.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n errorArgs = this._abiCoder.decode(builtin.inputs, bytes.slice(4));\n errorName = builtin.name;\n errorSignature = builtin.signature;\n if (builtin.reason) { reason = errorArgs[0]; }\n if (errorName === \"Error\") {\n message = `; VM Exception while processing transaction: reverted with reason string ${ JSON.stringify(errorArgs[0]) }`;\n } else if (errorName === \"Panic\") {\n message = `; VM Exception while processing transaction: reverted with panic code ${ errorArgs[0] }`;\n }\n } else {\n try {\n const error = this.getError(selector);\n errorArgs = this._abiCoder.decode(error.inputs, bytes.slice(4));\n errorName = error.name;\n errorSignature = error.format();\n } catch (error) { }\n }\n break;\n }\n }\n\n return logger.throwError(\"call revert exception\" + message, Logger.errors.CALL_EXCEPTION, {\n method: functionFragment.format(),\n data: hexlify(data), errorArgs, errorName, errorSignature, reason\n });\n }\n\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment: FunctionFragment | string, values?: ReadonlyArray): string {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n return hexlify(this._abiCoder.encode(functionFragment.outputs, values || [ ]));\n }\n\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment: EventFragment | string, values: ReadonlyArray): Array> {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), Logger.errors.UNEXPECTED_ARGUMENT, {\n argument: \"values\",\n value: values\n })\n }\n\n let topics: Array> = [];\n if (!eventFragment.anonymous) { topics.push(this.getEventTopic(eventFragment)); }\n\n const encodeTopic = (param: ParamType, value: any): string => {\n if (param.type === \"string\") {\n return id(value);\n } else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n\n if (param.type === \"bool\" && typeof(value) === \"boolean\") {\n value = (value ? \"0x01\": \"0x00\");\n }\n\n if (param.type.match(/^u?int/)) {\n value = BigNumber.from(value).toHexString();\n }\n\n // Check addresses are valid\n if (param.type === \"address\") { this._abiCoder.encode( [ \"address\" ], [ value ]); }\n return hexZeroPad(hexlify(value), 32);\n };\n\n values.forEach((value, index) => {\n\n let param = (eventFragment).inputs[index];\n\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n\n return topics;\n }\n\n encodeEventLog(eventFragment: EventFragment | string, values: ReadonlyArray): { data: string, topics: Array } {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n const topics: Array = [ ];\n\n const dataTypes: Array = [ ];\n const dataValues: Array = [ ];\n\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value))\n } else if (param.type === \"bytes\") {\n topics.push(keccak256(value))\n } else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n } else {\n topics.push(this._abiCoder.encode([ param.type] , [ value ]));\n }\n } else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n\n return {\n data: this._abiCoder.encode(dataTypes , dataValues),\n topics: topics\n };\n }\n\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment: EventFragment | string, data: BytesLike, topics?: ReadonlyArray): Result {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n if (topics != null && !eventFragment.anonymous) {\n let topicHash = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== topicHash) {\n logger.throwError(\"fragment/topic mismatch\", Logger.errors.INVALID_ARGUMENT, { argument: \"topics[0]\", expected: topicHash, value: topics[0] });\n }\n topics = topics.slice(1);\n }\n\n let indexed: Array = [];\n let nonIndexed: Array = [];\n let dynamic: Array = [];\n\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n } else {\n indexed.push(param);\n dynamic.push(false);\n }\n } else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n\n let resultIndexed = (topics != null) ? this._abiCoder.decode(indexed, concat(topics)): null;\n let resultNonIndexed = this._abiCoder.decode(nonIndexed, data, true);\n\n let result: (Array & { [ key: string ]: any }) = [ ];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (resultIndexed == null) {\n result[index] = new Indexed({ _isIndexed: true, hash: null });\n\n } else if (dynamic[index]) {\n result[index] = new Indexed({ _isIndexed: true, hash: resultIndexed[indexedIndex++] });\n\n } else {\n try {\n result[index] = resultIndexed[indexedIndex++];\n } catch (error) {\n result[index] = error;\n }\n }\n } else {\n try {\n result[index] = resultNonIndexed[nonIndexedIndex++];\n } catch (error) {\n result[index] = error;\n }\n }\n\n // Add the keyword argument if named and safe\n if (param.name && result[param.name] == null) {\n const value = result[index];\n\n // Make error named values throw on access\n if (value instanceof Error) {\n Object.defineProperty(result, param.name, {\n enumerable: true,\n get: () => { throw wrapAccessError(`property ${ JSON.stringify(param.name) }`, value); }\n });\n } else {\n result[param.name] = value;\n }\n }\n });\n\n // Make all error indexed values throw on access\n for (let i = 0; i < result.length; i++) {\n const value = result[i];\n if (value instanceof Error) {\n Object.defineProperty(result, i, {\n enumerable: true,\n get: () => { throw wrapAccessError(`index ${ i }`, value); }\n });\n }\n }\n\n return Object.freeze(result);\n }\n\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx: { data: string, value?: BigNumberish }): TransactionDescription {\n let fragment = this.getFunction(tx.data.substring(0, 10).toLowerCase())\n\n if (!fragment) { return null; }\n\n return new TransactionDescription({\n args: this._abiCoder.decode(fragment.inputs, \"0x\" + tx.data.substring(10)),\n functionFragment: fragment,\n name: fragment.name,\n signature: fragment.format(),\n sighash: this.getSighash(fragment),\n value: BigNumber.from(tx.value || \"0\"),\n });\n }\n\n // @TODO\n //parseCallResult(data: BytesLike): ??\n\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log: { topics: Array, data: string}): LogDescription {\n let fragment = this.getEvent(log.topics[0]);\n\n if (!fragment || fragment.anonymous) { return null; }\n\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n\n\n return new LogDescription({\n eventFragment: fragment,\n name: fragment.name,\n signature: fragment.format(),\n topic: this.getEventTopic(fragment),\n args: this.decodeEventLog(fragment, log.data, log.topics)\n });\n }\n\n parseError(data: BytesLike): ErrorDescription {\n const hexData = hexlify(data);\n let fragment = this.getError(hexData.substring(0, 10).toLowerCase())\n\n if (!fragment) { return null; }\n\n return new ErrorDescription({\n args: this._abiCoder.decode(fragment.inputs, \"0x\" + hexData.substring(10)),\n errorFragment: fragment,\n name: fragment.name,\n signature: fragment.format(),\n sighash: this.getSighash(fragment),\n });\n }\n\n\n /*\n static from(value: Array | string | Interface) {\n if (Interface.isInterface(value)) {\n return value;\n }\n if (typeof(value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n return new Interface(value);\n }\n */\n\n static isInterface(value: any): value is Interface {\n return !!(value && value._isInterface);\n }\n}\n\n","\"use strict\";\n\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { BytesLike, isHexString } from \"@ethersproject/bytes\";\nimport { Network } from \"@ethersproject/networks\";\nimport { Deferrable, Description, defineReadOnly, resolveProperties } from \"@ethersproject/properties\";\nimport { AccessListish, Transaction } from \"@ethersproject/transactions\";\nimport { OnceBlockable } from \"@ethersproject/web\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n///////////////////////////////\n// Exported Types\n\n\nexport type TransactionRequest = {\n to?: string,\n from?: string,\n nonce?: BigNumberish,\n\n gasLimit?: BigNumberish,\n gasPrice?: BigNumberish,\n\n data?: BytesLike,\n value?: BigNumberish,\n chainId?: number\n\n type?: number;\n accessList?: AccessListish;\n\n maxPriorityFeePerGas?: BigNumberish;\n maxFeePerGas?: BigNumberish;\n\n customData?: Record;\n ccipReadEnabled?: boolean;\n}\n\nexport interface TransactionResponse extends Transaction {\n hash: string;\n\n // Only if a transaction has been mined\n blockNumber?: number,\n blockHash?: string,\n timestamp?: number,\n\n confirmations: number,\n\n // Not optional (as it is in Transaction)\n from: string;\n\n // The raw transaction\n raw?: string,\n\n // This function waits until the transaction has been mined\n wait: (confirmations?: number) => Promise\n};\n\nexport type BlockTag = string | number;\n\nexport interface _Block {\n hash: string;\n parentHash: string;\n number: number;\n\n timestamp: number;\n nonce: string;\n difficulty: number;\n _difficulty: BigNumber;\n\n gasLimit: BigNumber;\n gasUsed: BigNumber;\n\n miner: string;\n extraData: string;\n\n baseFeePerGas?: null | BigNumber;\n}\n\nexport interface Block extends _Block {\n transactions: Array;\n}\n\nexport interface BlockWithTransactions extends _Block {\n transactions: Array;\n}\n\n\nexport interface Log {\n blockNumber: number;\n blockHash: string;\n transactionIndex: number;\n\n removed: boolean;\n\n address: string;\n data: string;\n\n topics: Array;\n\n transactionHash: string;\n logIndex: number;\n}\n\nexport interface TransactionReceipt {\n to: string;\n from: string;\n contractAddress: string,\n transactionIndex: number,\n root?: string,\n gasUsed: BigNumber,\n logsBloom: string,\n blockHash: string,\n transactionHash: string,\n logs: Array,\n blockNumber: number,\n confirmations: number,\n cumulativeGasUsed: BigNumber,\n effectiveGasPrice: BigNumber,\n byzantium: boolean,\n type: number;\n status?: number\n};\n\nexport interface FeeData {\n lastBaseFeePerGas: null | BigNumber;\n maxFeePerGas: null | BigNumber;\n maxPriorityFeePerGas: null | BigNumber;\n gasPrice: null | BigNumber;\n}\n\nexport interface EventFilter {\n address?: string;\n topics?: Array | null>;\n}\n\nexport interface Filter extends EventFilter {\n fromBlock?: BlockTag,\n toBlock?: BlockTag,\n}\n\nexport interface FilterByBlockHash extends EventFilter {\n blockHash?: string;\n}\n\n//export type CallTransactionable = {\n// call(transaction: TransactionRequest): Promise;\n//};\n\nexport abstract class ForkEvent extends Description {\n readonly expiry: number;\n\n readonly _isForkEvent?: boolean;\n\n static isForkEvent(value: any): value is ForkEvent {\n return !!(value && value._isForkEvent);\n }\n}\n\nexport class BlockForkEvent extends ForkEvent {\n readonly blockHash: string;\n\n readonly _isBlockForkEvent?: boolean;\n\n constructor(blockHash: string, expiry?: number) {\n if (!isHexString(blockHash, 32)) {\n logger.throwArgumentError(\"invalid blockHash\", \"blockHash\", blockHash);\n }\n\n super({\n _isForkEvent: true,\n _isBlockForkEvent: true,\n expiry: (expiry || 0),\n blockHash: blockHash\n });\n }\n}\n\nexport class TransactionForkEvent extends ForkEvent {\n readonly hash: string;\n\n readonly _isTransactionOrderForkEvent?: boolean;\n\n constructor(hash: string, expiry?: number) {\n if (!isHexString(hash, 32)) {\n logger.throwArgumentError(\"invalid transaction hash\", \"hash\", hash);\n }\n\n super({\n _isForkEvent: true,\n _isTransactionForkEvent: true,\n expiry: (expiry || 0),\n hash: hash\n });\n }\n}\n\nexport class TransactionOrderForkEvent extends ForkEvent {\n readonly beforeHash: string;\n readonly afterHash: string;\n\n constructor(beforeHash: string, afterHash: string, expiry?: number) {\n if (!isHexString(beforeHash, 32)) {\n logger.throwArgumentError(\"invalid transaction hash\", \"beforeHash\", beforeHash);\n }\n if (!isHexString(afterHash, 32)) {\n logger.throwArgumentError(\"invalid transaction hash\", \"afterHash\", afterHash);\n }\n\n super({\n _isForkEvent: true,\n _isTransactionOrderForkEvent: true,\n expiry: (expiry || 0),\n beforeHash: beforeHash,\n afterHash: afterHash\n });\n }\n}\n\nexport type EventType = string | Array> | EventFilter | ForkEvent;\n\nexport type Listener = (...args: Array) => void;\n\n///////////////////////////////\n// Exported Abstracts\nexport abstract class Provider implements OnceBlockable {\n\n // Network\n abstract getNetwork(): Promise;\n\n // Latest State\n abstract getBlockNumber(): Promise;\n abstract getGasPrice(): Promise;\n async getFeeData(): Promise {\n const { block, gasPrice } = await resolveProperties({\n block: this.getBlock(\"latest\"),\n gasPrice: this.getGasPrice().catch((error) => {\n // @TODO: Why is this now failing on Calaveras?\n //console.log(error);\n return null;\n })\n });\n\n let lastBaseFeePerGas = null, maxFeePerGas = null, maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n lastBaseFeePerGas = block.baseFeePerGas;\n maxPriorityFeePerGas = BigNumber.from(\"1500000000\");\n maxFeePerGas = block.baseFeePerGas.mul(2).add(maxPriorityFeePerGas);\n }\n\n return { lastBaseFeePerGas, maxFeePerGas, maxPriorityFeePerGas, gasPrice };\n }\n\n // Account\n abstract getBalance(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise;\n abstract getTransactionCount(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise;\n abstract getCode(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise ;\n abstract getStorageAt(addressOrName: string | Promise, position: BigNumberish | Promise, blockTag?: BlockTag | Promise): Promise;\n\n // Execution\n abstract sendTransaction(signedTransaction: string | Promise): Promise;\n abstract call(transaction: Deferrable, blockTag?: BlockTag | Promise): Promise;\n abstract estimateGas(transaction: Deferrable): Promise;\n\n // Queries\n abstract getBlock(blockHashOrBlockTag: BlockTag | string | Promise): Promise;\n abstract getBlockWithTransactions(blockHashOrBlockTag: BlockTag | string | Promise): Promise;\n abstract getTransaction(transactionHash: string): Promise;\n abstract getTransactionReceipt(transactionHash: string): Promise;\n\n // Bloom-filter Queries\n abstract getLogs(filter: Filter): Promise>;\n\n // ENS\n abstract resolveName(name: string | Promise): Promise;\n abstract lookupAddress(address: string | Promise): Promise;\n\n // Event Emitter (ish)\n abstract on(eventName: EventType, listener: Listener): Provider;\n abstract once(eventName: EventType, listener: Listener): Provider;\n abstract emit(eventName: EventType, ...args: Array): boolean\n abstract listenerCount(eventName?: EventType): number;\n abstract listeners(eventName?: EventType): Array;\n abstract off(eventName: EventType, listener?: Listener): Provider;\n abstract removeAllListeners(eventName?: EventType): Provider;\n\n // Alias for \"on\"\n addListener(eventName: EventType, listener: Listener): Provider {\n return this.on(eventName, listener);\n }\n\n // Alias for \"off\"\n removeListener(eventName: EventType, listener: Listener): Provider {\n return this.off(eventName, listener);\n }\n\n // @TODO: This *could* be implemented here, but would pull in events...\n abstract waitForTransaction(transactionHash: string, confirmations?: number, timeout?: number): Promise;\n\n readonly _isProvider: boolean;\n\n constructor() {\n logger.checkAbstract(new.target, Provider);\n defineReadOnly(this, \"_isProvider\", true);\n }\n\n static isProvider(value: any): value is Provider {\n return !!(value && value._isProvider);\n }\n\n/*\n static getResolver(network: Network, callable: CallTransactionable, namehash: string): string {\n // No ENS...\n if (!network.ensAddress) {\n errors.throwError(\n \"network does support ENS\",\n errors.UNSUPPORTED_OPERATION,\n { operation: \"ENS\", network: network.name }\n );\n }\n\n // Not a namehash\n if (!isHexString(namehash, 32)) {\n errors.throwArgumentError(\"invalid name hash\", \"namehash\", namehash);\n }\n\n // keccak256(\"resolver(bytes32)\")\n let data = \"0x0178b8bf\" + namehash.substring(2);\n let transaction = { to: network.ensAddress, data: data };\n\n return provider.call(transaction).then((data) => {\n return provider.formatter.callAddress(data);\n });\n }\n\n static resolveNamehash(network: Network, callable: CallTransactionable, namehash: string): string {\n return this.getResolver(network, callable, namehash).then((resolverAddress) => {\n if (!resolverAddress) { return null; }\n\n // keccak256(\"addr(bytes32)\")\n let data = \"0x3b3b57de\" + namehash(name).substring(2);\n let transaction = { to: resolverAddress, data: data };\n return callable.call(transaction).then((data) => {\n return this.formatter.callAddress(data);\n });\n\n })\n }\n*/\n}\n","export const version = \"abstract-provider/5.7.0\";\n","\"use strict\";\n\nimport { BlockTag, FeeData, Provider, TransactionRequest, TransactionResponse } from \"@ethersproject/abstract-provider\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { Bytes, BytesLike } from \"@ethersproject/bytes\";\nimport { Deferrable, defineReadOnly, resolveProperties, shallowCopy } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nconst allowedTransactionKeys: Array = [\n \"accessList\", \"ccipReadEnabled\", \"chainId\", \"customData\", \"data\", \"from\", \"gasLimit\", \"gasPrice\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"to\", \"type\", \"value\"\n];\n\nconst forwardErrors = [\n Logger.errors.INSUFFICIENT_FUNDS,\n Logger.errors.NONCE_EXPIRED,\n Logger.errors.REPLACEMENT_UNDERPRICED,\n];\n\n// EIP-712 Typed Data\n// See: https://eips.ethereum.org/EIPS/eip-712\n\nexport interface TypedDataDomain {\n name?: string;\n version?: string;\n chainId?: BigNumberish;\n verifyingContract?: string;\n salt?: BytesLike;\n};\n\nexport interface TypedDataField {\n name: string;\n type: string;\n};\n\n// Sub-classes of Signer may optionally extend this interface to indicate\n// they have a private key available synchronously\nexport interface ExternallyOwnedAccount {\n readonly address: string;\n readonly privateKey: string;\n}\n\n// Sub-Class Notes:\n// - A Signer MUST always make sure, that if present, the \"from\" field\n// matches the Signer, before sending or signing a transaction\n// - A Signer SHOULD always wrap private information (such as a private\n// key or mnemonic) in a function, so that console.log does not leak\n// the data\n\n// @TODO: This is a temporary measure to preserve backwards compatibility\n// In v6, the method on TypedDataSigner will be added to Signer\nexport interface TypedDataSigner {\n _signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise;\n}\n\nexport abstract class Signer {\n readonly provider?: Provider;\n\n ///////////////////\n // Sub-classes MUST implement these\n\n // Returns the checksum address\n abstract getAddress(): Promise\n\n // Returns the signed prefixed-message. This MUST treat:\n // - Bytes as a binary message\n // - string as a UTF8-message\n // i.e. \"0x1234\" is a SIX (6) byte string, NOT 2 bytes of data\n abstract signMessage(message: Bytes | string): Promise;\n\n // Signs a transaction and returns the fully serialized, signed transaction.\n // The EXACT transaction MUST be signed, and NO additional properties to be added.\n // - This MAY throw if signing transactions is not supports, but if\n // it does, sentTransaction MUST be overridden.\n abstract signTransaction(transaction: Deferrable): Promise;\n\n // Returns a new instance of the Signer, connected to provider.\n // This MAY throw if changing providers is not supported.\n abstract connect(provider: Provider): Signer;\n\n readonly _isSigner: boolean;\n\n\n ///////////////////\n // Sub-classes MUST call super\n constructor() {\n logger.checkAbstract(new.target, Signer);\n defineReadOnly(this, \"_isSigner\", true);\n }\n\n\n ///////////////////\n // Sub-classes MAY override these\n\n async getBalance(blockTag?: BlockTag): Promise {\n this._checkProvider(\"getBalance\");\n return await this.provider.getBalance(this.getAddress(), blockTag);\n }\n\n async getTransactionCount(blockTag?: BlockTag): Promise {\n this._checkProvider(\"getTransactionCount\");\n return await this.provider.getTransactionCount(this.getAddress(), blockTag);\n }\n\n // Populates \"from\" if unspecified, and estimates the gas for the transaction\n async estimateGas(transaction: Deferrable): Promise {\n this._checkProvider(\"estimateGas\");\n const tx = await resolveProperties(this.checkTransaction(transaction));\n return await this.provider.estimateGas(tx);\n }\n\n // Populates \"from\" if unspecified, and calls with the transaction\n async call(transaction: Deferrable, blockTag?: BlockTag): Promise {\n this._checkProvider(\"call\");\n const tx = await resolveProperties(this.checkTransaction(transaction));\n return await this.provider.call(tx, blockTag);\n }\n\n // Populates all fields in a transaction, signs it and sends it to the network\n async sendTransaction(transaction: Deferrable): Promise {\n this._checkProvider(\"sendTransaction\");\n const tx = await this.populateTransaction(transaction);\n const signedTx = await this.signTransaction(tx);\n return await this.provider.sendTransaction(signedTx);\n }\n\n async getChainId(): Promise {\n this._checkProvider(\"getChainId\");\n const network = await this.provider.getNetwork();\n return network.chainId;\n }\n\n async getGasPrice(): Promise {\n this._checkProvider(\"getGasPrice\");\n return await this.provider.getGasPrice();\n }\n\n async getFeeData(): Promise {\n this._checkProvider(\"getFeeData\");\n return await this.provider.getFeeData();\n }\n\n\n async resolveName(name: string): Promise {\n this._checkProvider(\"resolveName\");\n return await this.provider.resolveName(name);\n }\n\n\n\n // Checks a transaction does not contain invalid keys and if\n // no \"from\" is provided, populates it.\n // - does NOT require a provider\n // - adds \"from\" is not present\n // - returns a COPY (safe to mutate the result)\n // By default called from: (overriding these prevents it)\n // - call\n // - estimateGas\n // - populateTransaction (and therefor sendTransaction)\n checkTransaction(transaction: Deferrable): Deferrable {\n for (const key in transaction) {\n if (allowedTransactionKeys.indexOf(key) === -1) {\n logger.throwArgumentError(\"invalid transaction key: \" + key, \"transaction\", transaction);\n }\n }\n\n const tx = shallowCopy(transaction);\n\n if (tx.from == null) {\n tx.from = this.getAddress();\n\n } else {\n // Make sure any provided address matches this signer\n tx.from = Promise.all([\n Promise.resolve(tx.from),\n this.getAddress()\n ]).then((result) => {\n if (result[0].toLowerCase() !== result[1].toLowerCase()) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", transaction);\n }\n return result[0];\n });\n }\n\n return tx;\n }\n\n // Populates ALL keys for a transaction and checks that \"from\" matches\n // this Signer. Should be used by sendTransaction but NOT by signTransaction.\n // By default called from: (overriding these prevents it)\n // - sendTransaction\n //\n // Notes:\n // - We allow gasPrice for EIP-1559 as long as it matches maxFeePerGas\n async populateTransaction(transaction: Deferrable): Promise {\n\n const tx: Deferrable = await resolveProperties(this.checkTransaction(transaction))\n\n if (tx.to != null) {\n tx.to = Promise.resolve(tx.to).then(async (to) => {\n if (to == null) { return null; }\n const address = await this.resolveName(to);\n if (address == null) {\n logger.throwArgumentError(\"provided ENS name resolves to null\", \"tx.to\", to);\n }\n return address;\n });\n\n // Prevent this error from causing an UnhandledPromiseException\n tx.to.catch((error) => { });\n }\n\n // Do not allow mixing pre-eip-1559 and eip-1559 properties\n const hasEip1559 = (tx.maxFeePerGas != null || tx.maxPriorityFeePerGas != null);\n if (tx.gasPrice != null && (tx.type === 2 || hasEip1559)) {\n logger.throwArgumentError(\"eip-1559 transaction do not support gasPrice\", \"transaction\", transaction);\n } else if ((tx.type === 0 || tx.type === 1) && hasEip1559) {\n logger.throwArgumentError(\"pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas\", \"transaction\", transaction);\n }\n\n if ((tx.type === 2 || tx.type == null) && (tx.maxFeePerGas != null && tx.maxPriorityFeePerGas != null)) {\n // Fully-formed EIP-1559 transaction (skip getFeeData)\n tx.type = 2;\n\n } else if (tx.type === 0 || tx.type === 1) {\n // Explicit Legacy or EIP-2930 transaction\n\n // Populate missing gasPrice\n if (tx.gasPrice == null) { tx.gasPrice = this.getGasPrice(); }\n\n } else {\n\n // We need to get fee data to determine things\n const feeData = await this.getFeeData();\n\n if (tx.type == null) {\n // We need to auto-detect the intended type of this transaction...\n\n if (feeData.maxFeePerGas != null && feeData.maxPriorityFeePerGas != null) {\n // The network supports EIP-1559!\n\n // Upgrade transaction from null to eip-1559\n tx.type = 2;\n\n if (tx.gasPrice != null) {\n // Using legacy gasPrice property on an eip-1559 network,\n // so use gasPrice as both fee properties\n const gasPrice = tx.gasPrice;\n delete tx.gasPrice;\n tx.maxFeePerGas = gasPrice;\n tx.maxPriorityFeePerGas = gasPrice;\n\n } else {\n // Populate missing fee data\n if (tx.maxFeePerGas == null) { tx.maxFeePerGas = feeData.maxFeePerGas; }\n if (tx.maxPriorityFeePerGas == null) { tx.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas; }\n }\n\n } else if (feeData.gasPrice != null) {\n // Network doesn't support EIP-1559...\n\n // ...but they are trying to use EIP-1559 properties\n if (hasEip1559) {\n logger.throwError(\"network does not support EIP-1559\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"populateTransaction\"\n });\n }\n\n // Populate missing fee data\n if (tx.gasPrice == null) { tx.gasPrice = feeData.gasPrice; }\n\n // Explicitly set untyped transaction to legacy\n tx.type = 0;\n\n } else {\n // getFeeData has failed us.\n logger.throwError(\"failed to get consistent fee data\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"signer.getFeeData\"\n });\n }\n\n } else if (tx.type === 2) {\n // Explicitly using EIP-1559\n\n // Populate missing fee data\n if (tx.maxFeePerGas == null) { tx.maxFeePerGas = feeData.maxFeePerGas; }\n if (tx.maxPriorityFeePerGas == null) { tx.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas; }\n }\n }\n\n if (tx.nonce == null) { tx.nonce = this.getTransactionCount(\"pending\"); }\n\n if (tx.gasLimit == null) {\n tx.gasLimit = this.estimateGas(tx).catch((error) => {\n if (forwardErrors.indexOf(error.code) >= 0) {\n throw error;\n }\n\n return logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n error: error,\n tx: tx\n });\n });\n }\n\n if (tx.chainId == null) {\n tx.chainId = this.getChainId();\n } else {\n tx.chainId = Promise.all([\n Promise.resolve(tx.chainId),\n this.getChainId()\n ]).then((results) => {\n if (results[1] !== 0 && results[0] !== results[1]) {\n logger.throwArgumentError(\"chainId address mismatch\", \"transaction\", transaction);\n }\n return results[0];\n });\n }\n\n return await resolveProperties(tx);\n }\n\n\n ///////////////////\n // Sub-classes SHOULD leave these alone\n\n _checkProvider(operation?: string): void {\n if (!this.provider) { logger.throwError(\"missing provider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: (operation || \"_checkProvider\") });\n }\n }\n\n static isSigner(value: any): value is Signer {\n return !!(value && value._isSigner);\n }\n}\n\nexport class VoidSigner extends Signer implements TypedDataSigner {\n readonly address: string;\n\n constructor(address: string, provider?: Provider) {\n super();\n defineReadOnly(this, \"address\", address);\n defineReadOnly(this, \"provider\", provider || null);\n }\n\n getAddress(): Promise {\n return Promise.resolve(this.address);\n }\n\n _fail(message: string, operation: string): Promise {\n return Promise.resolve().then(() => {\n logger.throwError(message, Logger.errors.UNSUPPORTED_OPERATION, { operation: operation });\n });\n }\n\n signMessage(message: Bytes | string): Promise {\n return this._fail(\"VoidSigner cannot sign messages\", \"signMessage\");\n }\n\n signTransaction(transaction: Deferrable): Promise {\n return this._fail(\"VoidSigner cannot sign transactions\", \"signTransaction\");\n }\n\n _signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise {\n return this._fail(\"VoidSigner cannot sign typed data\", \"signTypedData\");\n }\n\n connect(provider: Provider): VoidSigner {\n return new VoidSigner(this.address, provider);\n }\n}\n\n","export const version = \"abstract-signer/5.7.0\";\n","\"use strict\";\n\nimport { arrayify, BytesLike, concat, hexDataLength, hexDataSlice, isHexString, stripZeros } from \"@ethersproject/bytes\";\nimport { BigNumber, BigNumberish, _base16To36, _base36To16 } from \"@ethersproject/bignumber\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { encode } from \"@ethersproject/rlp\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nfunction getChecksumAddress(address: string): string {\n if (!isHexString(address, 20)) {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n\n address = address.toLowerCase();\n\n const chars = address.substring(2).split(\"\");\n\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n\n const hashed = arrayify(keccak256(expanded));\n\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return \"0x\" + chars.join(\"\");\n}\n\n// Shims for environments that are missing some required constants and functions\nconst MAX_SAFE_INTEGER: number = 0x1fffffffffffff;\n\nfunction log10(x: number): number {\n if (Math.log10) { return Math.log10(x); }\n return Math.log(x) / Math.LN10;\n}\n\n\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n\n// Create lookup table\nconst ibanLookup: { [character: string]: string } = { };\nfor (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }\nfor (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }\n\n// How many decimal digits can we process? (for 64-bit float, this is 15)\nconst safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\n\nfunction ibanChecksum(address: string): string {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits){\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) { checksum = \"0\" + checksum; }\n\n return checksum;\n};\n\nexport function getAddress(address: string): string {\n let result = null;\n\n if (typeof(address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") { address = \"0x\" + address; }\n\n result = getChecksumAddress(address);\n\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n\n // Maybe ICAP? (we only support direct mode)\n } else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n\n result = _base36To16(address.substring(4));\n while (result.length < 40) { result = \"0\" + result; }\n result = getChecksumAddress(\"0x\" + result);\n\n } else {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n\n return result;\n}\n\nexport function isAddress(address: string): boolean {\n try {\n getAddress(address);\n return true;\n } catch (error) { }\n return false;\n}\n\nexport function getIcapAddress(address: string): string {\n let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n while (base36.length < 30) { base36 = \"0\" + base36; }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getContractAddress(transaction: { from: string, nonce: BigNumberish }) {\n let from: string = null;\n try {\n from = getAddress(transaction.from);\n } catch (error) {\n logger.throwArgumentError(\"missing from address\", \"transaction\", transaction);\n }\n\n const nonce = stripZeros(arrayify(BigNumber.from(transaction.nonce).toHexString()));\n\n return getAddress(hexDataSlice(keccak256(encode([ from, nonce ])), 12));\n}\n\nexport function getCreate2Address(from: string, salt: BytesLike, initCodeHash: BytesLike): string {\n if (hexDataLength(salt) !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", salt);\n }\n if (hexDataLength(initCodeHash) !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", initCodeHash);\n }\n return getAddress(hexDataSlice(keccak256(concat([ \"0xff\", getAddress(from), salt, initCodeHash ])), 12))\n}\n","export const version = \"address/5.7.0\";\n","export const version = \"bignumber/5.7.0\";\n","\"use strict\";\n\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardless.\n *\n */\n\nimport _BN from \"bn.js\";\nimport BN = _BN.BN;\n\nimport { Bytes, Hexable, hexlify, isBytes, isHexString } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nconst _constructorGuard = { };\n\nconst MAX_SAFE = 0x1fffffffffffff;\n\n\nexport type BigNumberish = BigNumber | Bytes | bigint | string | number;\n\nexport function isBigNumberish(value: any): value is BigNumberish {\n return (value != null) && (\n BigNumber.isBigNumber(value) ||\n (typeof(value) === \"number\" && (value % 1) === 0) ||\n (typeof(value) === \"string\" && !!value.match(/^-?[0-9]+$/)) ||\n isHexString(value) ||\n (typeof(value) === \"bigint\") ||\n isBytes(value)\n );\n}\n\n// Only warn about passing 10 into radix once\nlet _warnedToStringRadix = false;\n\nexport class BigNumber implements Hexable {\n readonly _hex: string;\n readonly _isBigNumber: boolean;\n\n constructor(constructorGuard: any, hex: string) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot call constructor directly; use BigNumber.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new (BigNumber)\"\n });\n }\n\n this._hex = hex;\n this._isBigNumber = true;\n\n Object.freeze(this);\n }\n\n fromTwos(value: number): BigNumber {\n return toBigNumber(toBN(this).fromTwos(value));\n }\n\n toTwos(value: number): BigNumber {\n return toBigNumber(toBN(this).toTwos(value));\n }\n\n abs(): BigNumber {\n if (this._hex[0] === \"-\") {\n return BigNumber.from(this._hex.substring(1));\n }\n return this;\n }\n\n add(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).add(toBN(other)));\n }\n\n sub(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).sub(toBN(other)));\n }\n\n div(other: BigNumberish): BigNumber {\n const o = BigNumber.from(other);\n if (o.isZero()) {\n throwFault(\"division-by-zero\", \"div\");\n }\n return toBigNumber(toBN(this).div(toBN(other)));\n }\n\n mul(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).mul(toBN(other)));\n }\n\n mod(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"division-by-zero\", \"mod\");\n }\n return toBigNumber(toBN(this).umod(value));\n }\n\n pow(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"negative-power\", \"pow\");\n }\n return toBigNumber(toBN(this).pow(value));\n }\n\n and(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"and\");\n }\n return toBigNumber(toBN(this).and(value));\n }\n\n or(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"or\");\n }\n return toBigNumber(toBN(this).or(value));\n }\n\n xor(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"xor\");\n }\n return toBigNumber(toBN(this).xor(value));\n }\n\n mask(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"mask\");\n }\n return toBigNumber(toBN(this).maskn(value));\n }\n\n shl(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"shl\");\n }\n return toBigNumber(toBN(this).shln(value));\n }\n\n shr(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"shr\");\n }\n return toBigNumber(toBN(this).shrn(value));\n }\n\n eq(other: BigNumberish): boolean {\n return toBN(this).eq(toBN(other));\n }\n\n lt(other: BigNumberish): boolean {\n return toBN(this).lt(toBN(other));\n }\n\n lte(other: BigNumberish): boolean {\n return toBN(this).lte(toBN(other));\n }\n\n gt(other: BigNumberish): boolean {\n return toBN(this).gt(toBN(other));\n }\n\n gte(other: BigNumberish): boolean {\n return toBN(this).gte(toBN(other));\n }\n\n isNegative(): boolean {\n return (this._hex[0] === \"-\");\n }\n\n isZero(): boolean {\n return toBN(this).isZero();\n }\n\n toNumber(): number {\n try {\n return toBN(this).toNumber();\n } catch (error) {\n throwFault(\"overflow\", \"toNumber\", this.toString());\n }\n return null;\n }\n\n toBigInt(): bigint {\n try {\n return BigInt(this.toString());\n } catch (e) { }\n\n return logger.throwError(\"this platform does not support BigInt\", Logger.errors.UNSUPPORTED_OPERATION, {\n value: this.toString()\n });\n }\n\n toString(): string {\n // Lots of people expect this, which we do not support, so check (See: #889)\n if (arguments.length > 0) {\n if (arguments[0] === 10) {\n if (!_warnedToStringRadix) {\n _warnedToStringRadix = true;\n logger.warn(\"BigNumber.toString does not accept any parameters; base-10 is assumed\");\n }\n } else if (arguments[0] === 16) {\n logger.throwError(\"BigNumber.toString does not accept any parameters; use bigNumber.toHexString()\", Logger.errors.UNEXPECTED_ARGUMENT, { });\n } else {\n logger.throwError(\"BigNumber.toString does not accept parameters\", Logger.errors.UNEXPECTED_ARGUMENT, { });\n }\n }\n return toBN(this).toString(10);\n }\n\n toHexString(): string {\n return this._hex;\n }\n\n toJSON(key?: string): any {\n return { type: \"BigNumber\", hex: this.toHexString() };\n }\n\n static from(value: any): BigNumber {\n if (value instanceof BigNumber) { return value; }\n\n if (typeof(value) === \"string\") {\n if (value.match(/^-?0x[0-9a-f]+$/i)) {\n return new BigNumber(_constructorGuard, toHex(value));\n }\n\n if (value.match(/^-?[0-9]+$/)) {\n return new BigNumber(_constructorGuard, toHex(new BN(value)));\n }\n\n return logger.throwArgumentError(\"invalid BigNumber string\", \"value\", value);\n }\n\n if (typeof(value) === \"number\") {\n if (value % 1) {\n throwFault(\"underflow\", \"BigNumber.from\", value);\n }\n\n if (value >= MAX_SAFE || value <= -MAX_SAFE) {\n throwFault(\"overflow\", \"BigNumber.from\", value);\n }\n\n return BigNumber.from(String(value));\n }\n\n const anyValue = value;\n\n if (typeof(anyValue) === \"bigint\") {\n return BigNumber.from(anyValue.toString());\n }\n\n if (isBytes(anyValue)) {\n return BigNumber.from(hexlify(anyValue));\n }\n\n if (anyValue) {\n\n // Hexable interface (takes priority)\n if (anyValue.toHexString) {\n const hex = anyValue.toHexString();\n if (typeof(hex) === \"string\") {\n return BigNumber.from(hex);\n }\n\n } else {\n // For now, handle legacy JSON-ified values (goes away in v6)\n let hex = anyValue._hex;\n\n // New-form JSON\n if (hex == null && anyValue.type === \"BigNumber\") {\n hex = anyValue.hex;\n }\n\n if (typeof(hex) === \"string\") {\n if (isHexString(hex) || (hex[0] === \"-\" && isHexString(hex.substring(1)))) {\n return BigNumber.from(hex);\n }\n }\n }\n }\n\n return logger.throwArgumentError(\"invalid BigNumber value\", \"value\", value);\n }\n\n static isBigNumber(value: any): value is BigNumber {\n return !!(value && value._isBigNumber);\n }\n}\n\n// Normalize the hex string\nfunction toHex(value: string | BN): string {\n\n // For BN, call on the hex string\n if (typeof(value) !== \"string\") {\n return toHex(value.toString(16));\n }\n\n // If negative, prepend the negative sign to the normalized positive value\n if (value[0] === \"-\") {\n // Strip off the negative sign\n value = value.substring(1);\n\n // Cannot have multiple negative signs (e.g. \"--0x04\")\n if (value[0] === \"-\") { logger.throwArgumentError(\"invalid hex\", \"value\", value); }\n\n // Call toHex on the positive component\n value = toHex(value);\n\n // Do not allow \"-0x00\"\n if (value === \"0x00\") { return value; }\n\n // Negate the value\n return \"-\" + value;\n }\n\n // Add a \"0x\" prefix if missing\n if (value.substring(0, 2) !== \"0x\") { value = \"0x\" + value; }\n\n // Normalize zero\n if (value === \"0x\") { return \"0x00\"; }\n\n // Make the string even length\n if (value.length % 2) { value = \"0x0\" + value.substring(2); }\n\n // Trim to smallest even-length string\n while (value.length > 4 && value.substring(0, 4) === \"0x00\") {\n value = \"0x\" + value.substring(4);\n }\n\n return value;\n}\n\nfunction toBigNumber(value: BN): BigNumber {\n return BigNumber.from(toHex(value));\n}\n\nfunction toBN(value: BigNumberish): BN {\n const hex = BigNumber.from(value).toHexString();\n if (hex[0] === \"-\") {\n return (new BN(\"-\" + hex.substring(3), 16));\n }\n return new BN(hex.substring(2), 16);\n}\n\nfunction throwFault(fault: string, operation: string, value?: any): never {\n const params: any = { fault: fault, operation: operation };\n if (value != null) { params.value = value; }\n\n return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);\n}\n\n// value should have no prefix\nexport function _base36To16(value: string): string {\n return (new BN(value, 36)).toString(16);\n}\n\n// value should have no prefix\nexport function _base16To36(value: string): string {\n return (new BN(value, 16)).toString(36);\n}\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n///////////////////////////////\n// Exported Types\n\nexport type Bytes = ArrayLike;\n\nexport type BytesLike = Bytes | string;\n\nexport type DataOptions = {\n allowMissingPrefix?: boolean;\n hexPad?: \"left\" | \"right\" | null;\n};\n\nexport interface Hexable {\n toHexString(): string;\n}\n\n\n/*\nexport interface HexString {\n length: number;\n substring: (start: number, end?: number) => string;\n\n [index: number]: string;\n}\n*/\n\nexport type SignatureLike = {\n r: string;\n s?: string;\n _vs?: string,\n recoveryParam?: number;\n v?: number;\n} | BytesLike;\n\nexport interface Signature {\n r: string;\n\n s: string;\n _vs: string,\n\n recoveryParam: number;\n v: number;\n\n yParityAndS: string\n compact: string;\n}\n\n///////////////////////////////\n\n\nfunction isHexable(value: any): value is Hexable {\n return !!(value.toHexString);\n}\n\nfunction addSlice(array: Uint8Array): Uint8Array {\n if (array.slice) { return array; }\n\n array.slice = function() {\n const args = Array.prototype.slice.call(arguments);\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\n }\n\n return array;\n}\n\nexport function isBytesLike(value: any): value is BytesLike {\n return ((isHexString(value) && !(value.length % 2)) || isBytes(value));\n}\n\nfunction isInteger(value: number) {\n return (typeof(value) === \"number\" && value == value && (value % 1) === 0);\n}\n\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value.constructor === Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n if (!isInteger(value.length) || value.length < 0) { return false; }\n\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n if (!isInteger(v) || v < 0 || v >= 256) { return false; }\n }\n return true;\n}\n\n\nexport function arrayify(value: BytesLike | Hexable | number, options?: DataOptions): Uint8Array {\n if (!options) { options = { }; }\n\n if (typeof(value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid arrayify value\");\n\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value = parseInt(String(value / 256));\n }\n if (result.length === 0) { result.push(0); }\n\n return addSlice(new Uint8Array(result));\n }\n\n if (options.allowMissingPrefix && typeof(value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n\n if (isHexable(value)) { value = value.toHexString(); }\n\n if (isHexString(value)) {\n let hex = (value).substring(2);\n if (hex.length % 2) {\n if (options.hexPad === \"left\") {\n hex = \"0\" + hex;\n } else if (options.hexPad === \"right\") {\n hex += \"0\";\n } else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n\n const result = [];\n for (let i = 0; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n\n return addSlice(new Uint8Array(result));\n }\n\n if (isBytes(value)) {\n return addSlice(new Uint8Array(value));\n }\n\n return logger.throwArgumentError(\"invalid arrayify value\", \"value\", value);\n}\n\nexport function concat(items: ReadonlyArray): Uint8Array {\n const objects = items.map(item => arrayify(item));\n const length = objects.reduce((accum, item) => (accum + item.length), 0);\n\n const result = new Uint8Array(length);\n\n objects.reduce((offset, object) => {\n result.set(object, offset);\n return offset + object.length;\n }, 0);\n\n return addSlice(result);\n}\n\nexport function stripZeros(value: BytesLike): Uint8Array {\n let result: Uint8Array = arrayify(value);\n\n if (result.length === 0) { return result; }\n\n // Find the first non-zero entry\n let start = 0;\n while (start < result.length && result[start] === 0) { start++ }\n\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n\n return result;\n}\n\nexport function zeroPad(value: BytesLike, length: number): Uint8Array {\n value = arrayify(value);\n\n if (value.length > length) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[0]);\n }\n\n const result = new Uint8Array(length);\n result.set(value, length - value.length);\n return addSlice(result);\n}\n\n\nexport function isHexString(value: any, length?: number): boolean {\n if (typeof(value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false\n }\n if (length && value.length !== 2 + 2 * length) { return false; }\n return true;\n}\n\nconst HexCharacters: string = \"0123456789abcdef\";\n\nexport function hexlify(value: BytesLike | Hexable | number | bigint, options?: DataOptions): string {\n if (!options) { options = { }; }\n\n if (typeof(value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid hexlify value\");\n\n let hex = \"\";\n while (value) {\n hex = HexCharacters[value & 0xf] + hex;\n value = Math.floor(value / 16);\n }\n\n if (hex.length) {\n if (hex.length % 2) { hex = \"0\" + hex; }\n return \"0x\" + hex;\n }\n\n return \"0x00\";\n }\n\n if (typeof(value) === \"bigint\") {\n value = value.toString(16);\n if (value.length % 2) { return (\"0x0\" + value); }\n return \"0x\" + value;\n }\n\n if (options.allowMissingPrefix && typeof(value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n\n if (isHexable(value)) { return value.toHexString(); }\n\n if (isHexString(value)) {\n if ((value).length % 2) {\n if (options.hexPad === \"left\") {\n value = \"0x0\" + (value).substring(2);\n } else if (options.hexPad === \"right\") {\n value += \"0\";\n } else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n return (value).toLowerCase();\n }\n\n if (isBytes(value)) {\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n let v = value[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n }\n\n return logger.throwArgumentError(\"invalid hexlify value\", \"value\", value);\n}\n\n/*\nfunction unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {\n if (typeof(value) === \"string\" && value.length % 2 && value.substring(0, 2) === \"0x\") {\n return \"0x0\" + value.substring(2);\n }\n return value;\n}\n*/\nexport function hexDataLength(data: BytesLike) {\n if (typeof(data) !== \"string\") {\n data = hexlify(data);\n } else if (!isHexString(data) || (data.length % 2)) {\n return null;\n }\n\n return (data.length - 2) / 2;\n}\n\nexport function hexDataSlice(data: BytesLike, offset: number, endOffset?: number): string {\n if (typeof(data) !== \"string\") {\n data = hexlify(data);\n } else if (!isHexString(data) || (data.length % 2)) {\n logger.throwArgumentError(\"invalid hexData\", \"value\", data );\n }\n\n offset = 2 + 2 * offset;\n\n if (endOffset != null) {\n return \"0x\" + data.substring(offset, 2 + 2 * endOffset);\n }\n\n return \"0x\" + data.substring(offset);\n}\n\nexport function hexConcat(items: ReadonlyArray): string {\n let result = \"0x\";\n items.forEach((item) => {\n result += hexlify(item).substring(2);\n });\n return result;\n}\n\nexport function hexValue(value: BytesLike | Hexable | number | bigint): string {\n const trimmed = hexStripZeros(hexlify(value, { hexPad: \"left\" }));\n if (trimmed === \"0x\") { return \"0x0\"; }\n return trimmed;\n}\n\nexport function hexStripZeros(value: BytesLike): string {\n if (typeof(value) !== \"string\") { value = hexlify(value); }\n\n if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n value = value.substring(2);\n let offset = 0;\n while (offset < value.length && value[offset] === \"0\") { offset++; }\n return \"0x\" + value.substring(offset);\n}\n\nexport function hexZeroPad(value: BytesLike, length: number): string {\n if (typeof(value) !== \"string\") {\n value = hexlify(value);\n } else if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n\n if (value.length > 2 * length + 2) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[1]);\n }\n\n while (value.length < 2 * length + 2) {\n value = \"0x0\" + value.substring(2);\n }\n\n return value;\n}\n\nexport function splitSignature(signature: SignatureLike): Signature {\n\n const result = {\n r: \"0x\",\n s: \"0x\",\n _vs: \"0x\",\n recoveryParam: 0,\n v: 0,\n yParityAndS: \"0x\",\n compact: \"0x\"\n };\n\n if (isBytesLike(signature)) {\n let bytes: Uint8Array = arrayify(signature);\n\n // Get the r, s and v\n if (bytes.length === 64) {\n // EIP-2098; pull the v from the top bit of s and clear it\n result.v = 27 + (bytes[32] >> 7);\n bytes[32] &= 0x7f;\n\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n\n } else if (bytes.length === 65) {\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n result.v = bytes[64];\n } else {\n\n logger.throwArgumentError(\"invalid signature string\", \"signature\", signature);\n }\n\n\n // Allow a recid to be used as the v\n if (result.v < 27) {\n if (result.v === 0 || result.v === 1) {\n result.v += 27;\n } else {\n logger.throwArgumentError(\"signature invalid v byte\", \"signature\", signature);\n }\n }\n\n // Compute recoveryParam from v\n result.recoveryParam = 1 - (result.v % 2);\n\n // Compute _vs from recoveryParam and s\n if (result.recoveryParam) { bytes[32] |= 0x80; }\n result._vs = hexlify(bytes.slice(32, 64))\n\n } else {\n result.r = signature.r;\n result.s = signature.s;\n result.v = signature.v;\n result.recoveryParam = signature.recoveryParam;\n result._vs = signature._vs;\n\n // If the _vs is available, use it to populate missing s, v and recoveryParam\n // and verify non-missing s, v and recoveryParam\n if (result._vs != null) {\n const vs = zeroPad(arrayify(result._vs), 32);\n result._vs = hexlify(vs);\n\n // Set or check the recid\n const recoveryParam = ((vs[0] >= 128) ? 1: 0);\n if (result.recoveryParam == null) {\n result.recoveryParam = recoveryParam;\n } else if (result.recoveryParam !== recoveryParam) {\n logger.throwArgumentError(\"signature recoveryParam mismatch _vs\", \"signature\", signature);\n }\n\n // Set or check the s\n vs[0] &= 0x7f;\n const s = hexlify(vs);\n if (result.s == null) {\n result.s = s;\n } else if (result.s !== s) {\n logger.throwArgumentError(\"signature v mismatch _vs\", \"signature\", signature);\n }\n }\n\n // Use recid and v to populate each other\n if (result.recoveryParam == null) {\n if (result.v == null) {\n logger.throwArgumentError(\"signature missing v and recoveryParam\", \"signature\", signature);\n } else if (result.v === 0 || result.v === 1) {\n result.recoveryParam = result.v;\n } else {\n result.recoveryParam = 1 - (result.v % 2);\n }\n } else {\n if (result.v == null) {\n result.v = 27 + result.recoveryParam;\n } else {\n const recId = (result.v === 0 || result.v === 1) ? result.v :(1 - (result.v % 2));\n if (result.recoveryParam !== recId) {\n logger.throwArgumentError(\"signature recoveryParam mismatch v\", \"signature\", signature);\n }\n }\n }\n\n if (result.r == null || !isHexString(result.r)) {\n logger.throwArgumentError(\"signature missing or invalid r\", \"signature\", signature);\n } else {\n result.r = hexZeroPad(result.r, 32);\n }\n\n if (result.s == null || !isHexString(result.s)) {\n logger.throwArgumentError(\"signature missing or invalid s\", \"signature\", signature);\n } else {\n result.s = hexZeroPad(result.s, 32);\n }\n\n const vs = arrayify(result.s);\n if (vs[0] >= 128) {\n logger.throwArgumentError(\"signature s out of range\", \"signature\", signature);\n }\n if (result.recoveryParam) { vs[0] |= 0x80; }\n const _vs = hexlify(vs);\n\n if (result._vs) {\n if (!isHexString(result._vs)) {\n logger.throwArgumentError(\"signature invalid _vs\", \"signature\", signature);\n }\n result._vs = hexZeroPad(result._vs, 32);\n }\n\n // Set or check the _vs\n if (result._vs == null) {\n result._vs = _vs;\n } else if (result._vs !== _vs) {\n logger.throwArgumentError(\"signature _vs mismatch v and s\", \"signature\", signature);\n }\n }\n\n result.yParityAndS = result._vs;\n result.compact = result.r + result.yParityAndS.substring(2);\n\n return result;\n}\n\nexport function joinSignature(signature: SignatureLike): string {\n signature = splitSignature(signature);\n\n return hexlify(concat([\n signature.r,\n signature.s,\n (signature.recoveryParam ? \"0x1c\": \"0x1b\")\n ]));\n}\n\n","export const version = \"bytes/5.7.0\";\n","import { BigNumber } from \"@ethersproject/bignumber\";\n\nconst NegativeOne: BigNumber = (/*#__PURE__*/BigNumber.from(-1));\nconst Zero: BigNumber = (/*#__PURE__*/BigNumber.from(0));\nconst One: BigNumber = (/*#__PURE__*/BigNumber.from(1));\nconst Two: BigNumber = (/*#__PURE__*/BigNumber.from(2));\nconst WeiPerEther: BigNumber = (/*#__PURE__*/BigNumber.from(\"1000000000000000000\"));\nconst MaxUint256: BigNumber = (/*#__PURE__*/BigNumber.from(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\n\nconst MinInt256: BigNumber = (/*#__PURE__*/BigNumber.from(\"-0x8000000000000000000000000000000000000000000000000000000000000000\"));\nconst MaxInt256: BigNumber = (/*#__PURE__*/BigNumber.from(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\n\nexport {\n NegativeOne,\n Zero,\n One,\n Two,\n WeiPerEther,\n MaxUint256,\n MinInt256,\n MaxInt256,\n};\n","\"use strict\";\n\nimport { checkResultErrors, EventFragment, Fragment, FunctionFragment, Indexed, Interface, JsonFragment, LogDescription, ParamType, Result } from \"@ethersproject/abi\";\nimport { Block, BlockTag, Filter, FilterByBlockHash, Listener, Log, Provider, TransactionReceipt, TransactionRequest, TransactionResponse } from \"@ethersproject/abstract-provider\";\nimport { Signer, VoidSigner } from \"@ethersproject/abstract-signer\";\nimport { getAddress, getContractAddress } from \"@ethersproject/address\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { arrayify, BytesLike, concat, hexlify, isBytes, isHexString } from \"@ethersproject/bytes\";\nimport { Deferrable, defineReadOnly, deepCopy, getStatic, resolveProperties, shallowCopy } from \"@ethersproject/properties\";\nimport { AccessList, accessListify, AccessListish } from \"@ethersproject/transactions\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\n\nconst logger = new Logger(version);\n\nexport interface Overrides {\n gasLimit?: BigNumberish | Promise;\n gasPrice?: BigNumberish | Promise;\n maxFeePerGas?: BigNumberish | Promise;\n maxPriorityFeePerGas?: BigNumberish | Promise;\n nonce?: BigNumberish | Promise;\n type?: number;\n accessList?: AccessListish;\n customData?: Record;\n ccipReadEnabled?: boolean;\n};\n\nexport interface PayableOverrides extends Overrides {\n value?: BigNumberish | Promise;\n}\n\nexport interface CallOverrides extends PayableOverrides {\n blockTag?: BlockTag | Promise;\n from?: string | Promise;\n}\n\n// @TODO: Better hierarchy with: (in v6)\n// - abstract-provider:TransactionRequest\n// - transactions:Transaction\n// - transaction:UnsignedTransaction\n\nexport interface PopulatedTransaction {\n to?: string;\n from?: string;\n nonce?: number;\n\n gasLimit?: BigNumber;\n gasPrice?: BigNumber;\n\n data?: string;\n value?: BigNumber;\n chainId?: number;\n\n type?: number;\n accessList?: AccessList;\n\n maxFeePerGas?: BigNumber;\n maxPriorityFeePerGas?: BigNumber;\n\n customData?: Record;\n ccipReadEnabled?: boolean;\n};\n\nexport type EventFilter = {\n address?: string;\n topics?: Array>;\n};\n\n\nexport type ContractFunction = (...args: Array) => Promise;\n\n\n// The (n + 1)th parameter passed to contract event callbacks\nexport interface Event extends Log {\n\n // The event name\n event?: string;\n\n // The event signature\n eventSignature?: string;\n\n // The parsed arguments to the event\n args?: Result;\n\n // If parsing the arguments failed, this is the error\n decodeError?: Error;\n\n // A function that can be used to decode event data and topics\n decode?: (data: string, topics?: Array) => any;\n\n // A function that will remove the listener responsible for this event (if any)\n removeListener: () => void;\n\n // Get blockchain details about this event's block and transaction\n getBlock: () => Promise;\n getTransaction: () => Promise;\n getTransactionReceipt: () => Promise;\n}\n\nexport interface ContractReceipt extends TransactionReceipt {\n events?: Array;\n}\n\nexport interface ContractTransaction extends TransactionResponse {\n wait(confirmations?: number): Promise;\n}\n\n///////////////////////////////\n\nconst allowedTransactionKeys: { [ key: string ]: boolean } = {\n chainId: true, data: true, from: true, gasLimit: true, gasPrice:true, nonce: true, to: true, value: true,\n type: true, accessList: true,\n maxFeePerGas: true, maxPriorityFeePerGas: true,\n customData: true,\n ccipReadEnabled: true\n}\n\nasync function resolveName(resolver: Signer | Provider, nameOrPromise: string | Promise): Promise {\n const name = await nameOrPromise;\n\n if (typeof(name) !== \"string\") {\n logger.throwArgumentError(\"invalid address or ENS name\", \"name\", name);\n }\n\n // If it is already an address, just use it (after adding checksum)\n try {\n return getAddress(name);\n } catch (error) { }\n\n if (!resolver) {\n logger.throwError(\"a provider or signer is needed to resolve ENS names\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"resolveName\"\n });\n }\n\n const address = await resolver.resolveName(name);\n\n if (address == null) {\n logger.throwArgumentError(\"resolver or addr is not configured for ENS name\", \"name\", name);\n }\n\n return address;\n}\n\n// Recursively replaces ENS names with promises to resolve the name and resolves all properties\nasync function resolveAddresses(resolver: Signer | Provider, value: any, paramType: ParamType | Array): Promise {\n if (Array.isArray(paramType)) {\n return await Promise.all(paramType.map((paramType, index) => {\n return resolveAddresses(\n resolver,\n ((Array.isArray(value)) ? value[index]: value[paramType.name]),\n paramType\n );\n }));\n }\n\n if (paramType.type === \"address\") {\n return await resolveName(resolver, value);\n }\n\n if (paramType.type === \"tuple\") {\n return await resolveAddresses(resolver, value, paramType.components);\n }\n\n if (paramType.baseType === \"array\") {\n if (!Array.isArray(value)) {\n return Promise.reject(logger.makeError(\"invalid value for array\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"value\",\n value\n }));\n }\n return await Promise.all(value.map((v) => resolveAddresses(resolver, v, paramType.arrayChildren)));\n }\n\n return value;\n}\n\nasync function populateTransaction(contract: Contract, fragment: FunctionFragment, args: Array): Promise {\n // If an extra argument is given, it is overrides\n let overrides: CallOverrides = { };\n if (args.length === fragment.inputs.length + 1 && typeof(args[args.length - 1]) === \"object\") {\n overrides = shallowCopy(args.pop());\n }\n\n // Make sure the parameter count matches\n logger.checkArgumentCount(args.length, fragment.inputs.length, \"passed to contract\");\n\n // Populate \"from\" override (allow promises)\n if (contract.signer) {\n if (overrides.from) {\n // Contracts with a Signer are from the Signer's frame-of-reference;\n // but we allow overriding \"from\" if it matches the signer\n overrides.from = resolveProperties({\n override: resolveName(contract.signer, overrides.from),\n signer: contract.signer.getAddress()\n }).then(async (check) => {\n if (getAddress(check.signer) !== check.override) {\n logger.throwError(\"Contract with a Signer cannot override from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"overrides.from\"\n });\n }\n\n return check.override;\n });\n\n } else {\n overrides.from = contract.signer.getAddress();\n }\n\n } else if (overrides.from) {\n overrides.from = resolveName(contract.provider, overrides.from);\n\n //} else {\n // Contracts without a signer can override \"from\", and if\n // unspecified the zero address is used\n //overrides.from = AddressZero;\n }\n\n // Wait for all dependencies to be resolved (prefer the signer over the provider)\n const resolved = await resolveProperties({\n args: resolveAddresses(contract.signer || contract.provider, args, fragment.inputs),\n address: contract.resolvedAddress,\n overrides: (resolveProperties(overrides) || { })\n });\n\n // The ABI coded transaction\n const data = contract.interface.encodeFunctionData(fragment, resolved.args);\n const tx: PopulatedTransaction = {\n data: data,\n to: resolved.address\n };\n\n // Resolved Overrides\n const ro = resolved.overrides;\n\n // Populate simple overrides\n if (ro.nonce != null) { tx.nonce = BigNumber.from(ro.nonce).toNumber(); }\n if (ro.gasLimit != null) { tx.gasLimit = BigNumber.from(ro.gasLimit); }\n if (ro.gasPrice != null) { tx.gasPrice = BigNumber.from(ro.gasPrice); }\n if (ro.maxFeePerGas != null) { tx.maxFeePerGas = BigNumber.from(ro.maxFeePerGas); }\n if (ro.maxPriorityFeePerGas != null) { tx.maxPriorityFeePerGas = BigNumber.from(ro.maxPriorityFeePerGas); }\n if (ro.from != null) { tx.from = ro.from; }\n\n if (ro.type != null) { tx.type = ro.type; }\n if (ro.accessList != null) { tx.accessList = accessListify(ro.accessList); }\n\n // If there was no \"gasLimit\" override, but the ABI specifies a default, use it\n if (tx.gasLimit == null && fragment.gas != null) {\n // Compute the intrinsic gas cost for this transaction\n // @TODO: This is based on the yellow paper as of Petersburg; this is something\n // we may wish to parameterize in v6 as part of the Network object. Since this\n // is always a non-nil to address, we can ignore G_create, but may wish to add\n // similar logic to the ContractFactory.\n let intrinsic = 21000;\n const bytes = arrayify(data);\n for (let i = 0; i < bytes.length; i++) {\n intrinsic += 4;\n if (bytes[i]) { intrinsic += 64; }\n }\n tx.gasLimit = BigNumber.from(fragment.gas).add(intrinsic);\n }\n\n // Populate \"value\" override\n if (ro.value) {\n const roValue = BigNumber.from(ro.value);\n if (!roValue.isZero() && !fragment.payable) {\n logger.throwError(\"non-payable method cannot override value\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"overrides.value\",\n value: overrides.value\n });\n }\n tx.value = roValue;\n }\n\n if (ro.customData) {\n tx.customData = shallowCopy(ro.customData);\n }\n\n if (ro.ccipReadEnabled) {\n tx.ccipReadEnabled = !!ro.ccipReadEnabled;\n }\n\n // Remove the overrides\n delete overrides.nonce;\n delete overrides.gasLimit;\n delete overrides.gasPrice;\n delete overrides.from;\n delete overrides.value;\n\n delete overrides.type;\n delete overrides.accessList;\n\n delete overrides.maxFeePerGas;\n delete overrides.maxPriorityFeePerGas;\n\n delete overrides.customData;\n delete overrides.ccipReadEnabled;\n\n // Make sure there are no stray overrides, which may indicate a\n // typo or using an unsupported key.\n const leftovers = Object.keys(overrides).filter((key) => ((overrides)[key] != null));\n if (leftovers.length) {\n logger.throwError(`cannot override ${ leftovers.map((l) => JSON.stringify(l)).join(\",\") }`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"overrides\",\n overrides: leftovers\n });\n }\n\n return tx;\n}\n\n\nfunction buildPopulate(contract: Contract, fragment: FunctionFragment): ContractFunction {\n return function(...args: Array): Promise {\n return populateTransaction(contract, fragment, args);\n };\n}\n\nfunction buildEstimate(contract: Contract, fragment: FunctionFragment): ContractFunction {\n const signerOrProvider = (contract.signer || contract.provider);\n return async function(...args: Array): Promise {\n if (!signerOrProvider) {\n logger.throwError(\"estimate require a provider or signer\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"estimateGas\"\n })\n }\n\n const tx = await populateTransaction(contract, fragment, args);\n return await signerOrProvider.estimateGas(tx);\n };\n}\n\nfunction addContractWait(contract: Contract, tx: TransactionResponse) {\n const wait = tx.wait.bind(tx);\n tx.wait = (confirmations?: number) => {\n return wait(confirmations).then((receipt: ContractReceipt) => {\n receipt.events = receipt.logs.map((log) => {\n let event: Event = (deepCopy(log));\n let parsed: LogDescription = null;\n try {\n parsed = contract.interface.parseLog(log);\n } catch (e){ }\n\n // Successfully parsed the event log; include it\n if (parsed) {\n event.args = parsed.args;\n event.decode = (data: BytesLike, topics?: Array) => {\n return contract.interface.decodeEventLog(parsed.eventFragment, data, topics);\n };\n event.event = parsed.name;\n event.eventSignature = parsed.signature;\n }\n\n // Useful operations\n event.removeListener = () => { return contract.provider; }\n event.getBlock = () => {\n return contract.provider.getBlock(receipt.blockHash);\n }\n event.getTransaction = () => {\n return contract.provider.getTransaction(receipt.transactionHash);\n }\n event.getTransactionReceipt = () => {\n return Promise.resolve(receipt);\n }\n\n return event;\n });\n\n return receipt;\n });\n };\n}\n\nfunction buildCall(contract: Contract, fragment: FunctionFragment, collapseSimple: boolean): ContractFunction {\n const signerOrProvider = (contract.signer || contract.provider);\n\n return async function(...args: Array): Promise {\n // Extract the \"blockTag\" override if present\n let blockTag = undefined;\n if (args.length === fragment.inputs.length + 1 && typeof(args[args.length - 1]) === \"object\") {\n const overrides = shallowCopy(args.pop());\n if (overrides.blockTag != null) {\n blockTag = await overrides.blockTag;\n }\n delete overrides.blockTag;\n args.push(overrides);\n }\n\n // If the contract was just deployed, wait until it is mined\n if (contract.deployTransaction != null) {\n await contract._deployed(blockTag);\n }\n\n // Call a node and get the result\n const tx = await populateTransaction(contract, fragment, args);\n const result = await signerOrProvider.call(tx, blockTag);\n\n try {\n let value = contract.interface.decodeFunctionResult(fragment, result);\n if (collapseSimple && fragment.outputs.length === 1) {\n value = value[0];\n }\n return value;\n\n } catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n error.address = contract.address;\n error.args = args;\n error.transaction = tx;\n }\n throw error;\n }\n };\n}\n\nfunction buildSend(contract: Contract, fragment: FunctionFragment): ContractFunction {\n return async function(...args: Array): Promise {\n if (!contract.signer) {\n logger.throwError(\"sending a transaction requires a signer\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"sendTransaction\"\n })\n }\n\n // If the contract was just deployed, wait until it is mined\n if (contract.deployTransaction != null) {\n await contract._deployed();\n }\n\n const txRequest = await populateTransaction(contract, fragment, args);\n\n const tx = await contract.signer.sendTransaction(txRequest);\n\n // Tweak the tx.wait so the receipt has extra properties\n addContractWait(contract, tx);\n\n return tx;\n };\n}\n\nfunction buildDefault(contract: Contract, fragment: FunctionFragment, collapseSimple: boolean): ContractFunction {\n if (fragment.constant) {\n return buildCall(contract, fragment, collapseSimple);\n }\n return buildSend(contract, fragment);\n}\n\nfunction getEventTag(filter: EventFilter): string {\n if (filter.address && (filter.topics == null || filter.topics.length === 0)) {\n return \"*\";\n }\n\n return (filter.address || \"*\") + \"@\" + (filter.topics ? filter.topics.map((topic) => {\n if (Array.isArray(topic)) {\n return topic.join(\"|\");\n }\n return topic;\n }).join(\":\"): \"\");\n}\n\nclass RunningEvent {\n readonly tag: string;\n readonly filter: EventFilter;\n private _listeners: Array<{ listener: Listener, once: boolean }>;\n\n constructor(tag: string, filter: EventFilter) {\n defineReadOnly(this, \"tag\", tag);\n defineReadOnly(this, \"filter\", filter);\n this._listeners = [ ];\n }\n\n addListener(listener: Listener, once: boolean): void {\n this._listeners.push({ listener: listener, once: once });\n }\n\n removeListener(listener: Listener): void {\n let done = false;\n this._listeners = this._listeners.filter((item) => {\n if (done || item.listener !== listener) { return true; }\n done = true;\n return false;\n });\n }\n\n removeAllListeners(): void {\n this._listeners = [];\n }\n\n listeners(): Array {\n return this._listeners.map((i) => i.listener);\n }\n\n listenerCount(): number {\n return this._listeners.length;\n }\n\n run(args: Array): number {\n const listenerCount = this.listenerCount();\n this._listeners = this._listeners.filter((item) => {\n\n const argsCopy = args.slice();\n\n // Call the callback in the next event loop\n setTimeout(() => {\n item.listener.apply(this, argsCopy);\n }, 0);\n\n // Reschedule it if it not \"once\"\n return !(item.once);\n });\n\n return listenerCount;\n }\n\n prepareEvent(event: Event): void {\n }\n\n // Returns the array that will be applied to an emit\n getEmit(event: Event): Array {\n return [ event ];\n }\n}\n\nclass ErrorRunningEvent extends RunningEvent {\n constructor() {\n super(\"error\", null);\n }\n}\n\n\n// @TODO Fragment should inherit Wildcard? and just override getEmit?\n// or have a common abstract super class, with enough constructor\n// options to configure both.\n\n// A Fragment Event will populate all the properties that Wildcard\n// will, and additionally dereference the arguments when emitting\nclass FragmentRunningEvent extends RunningEvent {\n readonly address: string;\n readonly interface: Interface;\n readonly fragment: EventFragment;\n\n constructor(address: string, contractInterface: Interface, fragment: EventFragment, topics?: Array>) {\n const filter: EventFilter = {\n address: address\n }\n\n let topic = contractInterface.getEventTopic(fragment);\n if (topics) {\n if (topic !== topics[0]) { logger.throwArgumentError(\"topic mismatch\", \"topics\", topics); }\n filter.topics = topics.slice();\n } else {\n filter.topics = [ topic ];\n }\n\n super(getEventTag(filter), filter);\n defineReadOnly(this, \"address\", address);\n defineReadOnly(this, \"interface\", contractInterface);\n defineReadOnly(this, \"fragment\", fragment);\n }\n\n\n prepareEvent(event: Event): void {\n super.prepareEvent(event);\n\n event.event = this.fragment.name;\n event.eventSignature = this.fragment.format();\n\n event.decode = (data: BytesLike, topics?: Array) => {\n return this.interface.decodeEventLog(this.fragment, data, topics);\n };\n\n try {\n event.args = this.interface.decodeEventLog(this.fragment, event.data, event.topics);\n } catch (error) {\n event.args = null;\n event.decodeError = error;\n }\n }\n\n getEmit(event: Event): Array {\n const errors = checkResultErrors(event.args);\n if (errors.length) { throw errors[0].error; }\n\n const args = (event.args || []).slice();\n args.push(event);\n return args;\n }\n}\n\n// A Wildcard Event will attempt to populate:\n// - event The name of the event name\n// - eventSignature The full signature of the event\n// - decode A function to decode data and topics\n// - args The decoded data and topics\nclass WildcardRunningEvent extends RunningEvent {\n readonly address: string;\n readonly interface: Interface;\n\n constructor(address: string, contractInterface: Interface) {\n super(\"*\", { address: address });\n defineReadOnly(this, \"address\", address);\n defineReadOnly(this, \"interface\", contractInterface);\n }\n\n prepareEvent(event: Event): void {\n super.prepareEvent(event);\n\n try {\n const parsed = this.interface.parseLog(event);\n event.event = parsed.name;\n event.eventSignature = parsed.signature;\n\n event.decode = (data: BytesLike, topics?: Array) => {\n return this.interface.decodeEventLog(parsed.eventFragment, data, topics);\n };\n\n event.args = parsed.args;\n } catch (error) {\n // No matching event\n }\n }\n}\n\nexport type ContractInterface = string | ReadonlyArray | Interface;\n\ntype InterfaceFunc = (contractInterface: ContractInterface) => Interface;\n\n\nexport class BaseContract {\n readonly address: string;\n readonly interface: Interface;\n\n readonly signer: Signer;\n readonly provider: Provider;\n\n readonly functions: { [ name: string ]: ContractFunction };\n\n readonly callStatic: { [ name: string ]: ContractFunction };\n readonly estimateGas: { [ name: string ]: ContractFunction };\n readonly populateTransaction: { [ name: string ]: ContractFunction };\n\n readonly filters: { [ name: string ]: (...args: Array) => EventFilter };\n\n // This will always be an address. This will only differ from\n // address if an ENS name was used in the constructor\n readonly resolvedAddress: Promise;\n\n // This is only set if the contract was created with a call to deploy\n readonly deployTransaction: TransactionResponse;\n\n _deployedPromise: Promise;\n\n // A list of RunningEvents to track listeners for each event tag\n _runningEvents: { [ eventTag: string ]: RunningEvent };\n\n // Wrapped functions to call emit and allow deregistration from the provider\n _wrappedEmits: { [ eventTag: string ]: (...args: Array) => void };\n\n constructor(addressOrName: string, contractInterface: ContractInterface, signerOrProvider?: Signer | Provider) {\n // @TODO: Maybe still check the addressOrName looks like a valid address or name?\n //address = getAddress(address);\n defineReadOnly(this, \"interface\", getStatic(new.target, \"getInterface\")(contractInterface));\n\n if (signerOrProvider == null) {\n defineReadOnly(this, \"provider\", null);\n defineReadOnly(this, \"signer\", null);\n } else if (Signer.isSigner(signerOrProvider)) {\n defineReadOnly(this, \"provider\", signerOrProvider.provider || null);\n defineReadOnly(this, \"signer\", signerOrProvider);\n } else if (Provider.isProvider(signerOrProvider)) {\n defineReadOnly(this, \"provider\", signerOrProvider);\n defineReadOnly(this, \"signer\", null);\n } else {\n logger.throwArgumentError(\"invalid signer or provider\", \"signerOrProvider\", signerOrProvider);\n }\n\n defineReadOnly(this, \"callStatic\", { });\n defineReadOnly(this, \"estimateGas\", { });\n defineReadOnly(this, \"functions\", { });\n defineReadOnly(this, \"populateTransaction\", { });\n\n defineReadOnly(this, \"filters\", { });\n\n {\n const uniqueFilters: { [ name: string ]: Array } = { };\n Object.keys(this.interface.events).forEach((eventSignature) => {\n const event = this.interface.events[eventSignature];\n defineReadOnly(this.filters, eventSignature, (...args: Array) => {\n return {\n address: this.address,\n topics: this.interface.encodeFilterTopics(event, args)\n }\n });\n if (!uniqueFilters[event.name]) { uniqueFilters[event.name] = [ ]; }\n uniqueFilters[event.name].push(eventSignature);\n });\n\n Object.keys(uniqueFilters).forEach((name) => {\n const filters = uniqueFilters[name];\n if (filters.length === 1) {\n defineReadOnly(this.filters, name, this.filters[filters[0]]);\n } else {\n logger.warn(`Duplicate definition of ${ name } (${ filters.join(\", \")})`);\n }\n });\n }\n\n defineReadOnly(this, \"_runningEvents\", { });\n defineReadOnly(this, \"_wrappedEmits\", { });\n\n if (addressOrName == null) {\n logger.throwArgumentError(\"invalid contract address or ENS name\", \"addressOrName\", addressOrName);\n }\n\n defineReadOnly(this, \"address\", addressOrName);\n if (this.provider) {\n defineReadOnly(this, \"resolvedAddress\", resolveName(this.provider, addressOrName));\n } else {\n try {\n defineReadOnly(this, \"resolvedAddress\", Promise.resolve(getAddress(addressOrName)));\n } catch (error) {\n // Without a provider, we cannot use ENS names\n logger.throwError(\"provider is required to use ENS name as contract address\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new Contract\"\n });\n }\n }\n\n // Swallow bad ENS names to prevent Unhandled Exceptions\n this.resolvedAddress.catch((e) => { });\n\n const uniqueNames: { [ name: string ]: Array } = { };\n const uniqueSignatures: { [ signature: string ]: boolean } = { };\n Object.keys(this.interface.functions).forEach((signature) => {\n const fragment = this.interface.functions[signature];\n\n // Check that the signature is unique; if not the ABI generation has\n // not been cleaned or may be incorrectly generated\n if (uniqueSignatures[signature]) {\n logger.warn(`Duplicate ABI entry for ${ JSON.stringify(signature) }`);\n return;\n }\n uniqueSignatures[signature] = true;\n\n // Track unique names; we only expose bare named functions if they\n // are ambiguous\n {\n const name = fragment.name;\n if (!uniqueNames[`%${ name }`]) { uniqueNames[`%${ name }`] = [ ]; }\n uniqueNames[`%${ name }`].push(signature);\n }\n\n if ((this)[signature] == null) {\n defineReadOnly(this, signature, buildDefault(this, fragment, true));\n }\n\n // We do not collapse simple calls on this bucket, which allows\n // frameworks to safely use this without introspection as well as\n // allows decoding error recovery.\n if (this.functions[signature] == null) {\n defineReadOnly(this.functions, signature, buildDefault(this, fragment, false));\n }\n\n if (this.callStatic[signature] == null) {\n defineReadOnly(this.callStatic, signature, buildCall(this, fragment, true));\n }\n\n if (this.populateTransaction[signature] == null) {\n defineReadOnly(this.populateTransaction, signature, buildPopulate(this, fragment));\n }\n\n if (this.estimateGas[signature] == null) {\n defineReadOnly(this.estimateGas, signature, buildEstimate(this, fragment));\n }\n });\n\n Object.keys(uniqueNames).forEach((name) => {\n // Ambiguous names to not get attached as bare names\n const signatures = uniqueNames[name];\n if (signatures.length > 1) { return; }\n\n // Strip off the leading \"%\" used for prototype protection\n name = name.substring(1);\n\n const signature = signatures[0];\n\n // If overwriting a member property that is null, swallow the error\n try {\n if ((this)[name] == null) {\n defineReadOnly(this, name, (this)[signature]);\n }\n } catch (e) { }\n\n if (this.functions[name] == null) {\n defineReadOnly(this.functions, name, this.functions[signature]);\n }\n\n if (this.callStatic[name] == null) {\n defineReadOnly(this.callStatic, name, this.callStatic[signature]);\n }\n\n if (this.populateTransaction[name] == null) {\n defineReadOnly(this.populateTransaction, name, this.populateTransaction[signature]);\n }\n\n if (this.estimateGas[name] == null) {\n defineReadOnly(this.estimateGas, name, this.estimateGas[signature]);\n }\n });\n }\n\n static getContractAddress(transaction: { from: string, nonce: BigNumberish }): string {\n return getContractAddress(transaction);\n }\n\n static getInterface(contractInterface: ContractInterface): Interface {\n if (Interface.isInterface(contractInterface)) {\n return contractInterface;\n }\n return new Interface(contractInterface);\n }\n\n // @TODO: Allow timeout?\n deployed(): Promise {\n return this._deployed();\n }\n\n _deployed(blockTag?: BlockTag): Promise {\n if (!this._deployedPromise) {\n\n // If we were just deployed, we know the transaction we should occur in\n if (this.deployTransaction) {\n this._deployedPromise = this.deployTransaction.wait().then(() => {\n return this;\n });\n\n } else {\n // @TODO: Once we allow a timeout to be passed in, we will wait\n // up to that many blocks for getCode\n\n // Otherwise, poll for our code to be deployed\n this._deployedPromise = this.provider.getCode(this.address, blockTag).then((code) => {\n if (code === \"0x\") {\n logger.throwError(\"contract not deployed\", Logger.errors.UNSUPPORTED_OPERATION, {\n contractAddress: this.address,\n operation: \"getDeployed\"\n });\n }\n return this;\n });\n }\n }\n\n return this._deployedPromise;\n }\n\n // @TODO:\n // estimateFallback(overrides?: TransactionRequest): Promise\n\n // @TODO:\n // estimateDeploy(bytecode: string, ...args): Promise\n\n fallback(overrides?: TransactionRequest): Promise {\n if (!this.signer) {\n logger.throwError(\"sending a transactions require a signer\", Logger.errors.UNSUPPORTED_OPERATION, { operation: \"sendTransaction(fallback)\" })\n }\n\n const tx: Deferrable = shallowCopy(overrides || {});\n\n [\"from\", \"to\"].forEach(function(key) {\n if ((tx)[key] == null) { return; }\n logger.throwError(\"cannot override \" + key, Logger.errors.UNSUPPORTED_OPERATION, { operation: key })\n });\n\n tx.to = this.resolvedAddress;\n return this.deployed().then(() => {\n return this.signer.sendTransaction(tx);\n });\n }\n\n // Reconnect to a different signer or provider\n connect(signerOrProvider: Signer | Provider | string): Contract {\n if (typeof(signerOrProvider) === \"string\") {\n signerOrProvider = new VoidSigner(signerOrProvider, this.provider);\n }\n\n const contract = new (<{ new(...args: any[]): Contract }>(this.constructor))(this.address, this.interface, signerOrProvider);\n if (this.deployTransaction) {\n defineReadOnly(contract, \"deployTransaction\", this.deployTransaction);\n }\n\n return contract;\n }\n\n // Re-attach to a different on-chain instance of this contract\n attach(addressOrName: string): Contract {\n return new (<{ new(...args: any[]): Contract }>(this.constructor))(addressOrName, this.interface, this.signer || this.provider);\n }\n\n static isIndexed(value: any): value is Indexed {\n return Indexed.isIndexed(value);\n }\n\n private _normalizeRunningEvent(runningEvent: RunningEvent): RunningEvent {\n // Already have an instance of this event running; we can re-use it\n if (this._runningEvents[runningEvent.tag]) {\n return this._runningEvents[runningEvent.tag];\n }\n return runningEvent\n }\n\n private _getRunningEvent(eventName: EventFilter | string): RunningEvent {\n if (typeof(eventName) === \"string\") {\n\n // Listen for \"error\" events (if your contract has an error event, include\n // the full signature to bypass this special event keyword)\n if (eventName === \"error\") {\n return this._normalizeRunningEvent(new ErrorRunningEvent());\n }\n\n // Listen for any event that is registered\n if (eventName === \"event\") {\n return this._normalizeRunningEvent(new RunningEvent(\"event\", null));\n }\n\n // Listen for any event\n if (eventName === \"*\") {\n return this._normalizeRunningEvent(new WildcardRunningEvent(this.address, this.interface));\n }\n\n // Get the event Fragment (throws if ambiguous/unknown event)\n const fragment = this.interface.getEvent(eventName)\n return this._normalizeRunningEvent(new FragmentRunningEvent(this.address, this.interface, fragment));\n }\n\n // We have topics to filter by...\n if (eventName.topics && eventName.topics.length > 0) {\n\n // Is it a known topichash? (throws if no matching topichash)\n try {\n const topic = eventName.topics[0];\n if (typeof(topic) !== \"string\") {\n throw new Error(\"invalid topic\"); // @TODO: May happen for anonymous events\n }\n const fragment = this.interface.getEvent(topic);\n return this._normalizeRunningEvent(new FragmentRunningEvent(this.address, this.interface, fragment, eventName.topics));\n } catch (error) { }\n\n // Filter by the unknown topichash\n const filter: EventFilter = {\n address: this.address,\n topics: eventName.topics\n }\n\n return this._normalizeRunningEvent(new RunningEvent(getEventTag(filter), filter));\n }\n\n return this._normalizeRunningEvent(new WildcardRunningEvent(this.address, this.interface));\n }\n\n _checkRunningEvents(runningEvent: RunningEvent): void {\n if (runningEvent.listenerCount() === 0) {\n delete this._runningEvents[runningEvent.tag];\n\n // If we have a poller for this, remove it\n const emit = this._wrappedEmits[runningEvent.tag];\n if (emit && runningEvent.filter) {\n this.provider.off(runningEvent.filter, emit);\n delete this._wrappedEmits[runningEvent.tag];\n }\n }\n }\n\n // Subclasses can override this to gracefully recover\n // from parse errors if they wish\n _wrapEvent(runningEvent: RunningEvent, log: Log, listener: Listener): Event {\n const event = deepCopy(log);\n\n event.removeListener = () => {\n if (!listener) { return; }\n runningEvent.removeListener(listener);\n this._checkRunningEvents(runningEvent);\n };\n\n event.getBlock = () => { return this.provider.getBlock(log.blockHash); }\n event.getTransaction = () => { return this.provider.getTransaction(log.transactionHash); }\n event.getTransactionReceipt = () => { return this.provider.getTransactionReceipt(log.transactionHash); }\n\n // This may throw if the topics and data mismatch the signature\n runningEvent.prepareEvent(event);\n\n return event;\n }\n\n private _addEventListener(runningEvent: RunningEvent, listener: Listener, once: boolean): void {\n if (!this.provider) {\n logger.throwError(\"events require a provider or a signer with a provider\", Logger.errors.UNSUPPORTED_OPERATION, { operation: \"once\" })\n }\n\n runningEvent.addListener(listener, once);\n\n // Track this running event and its listeners (may already be there; but no hard in updating)\n this._runningEvents[runningEvent.tag] = runningEvent;\n\n // If we are not polling the provider, start polling\n if (!this._wrappedEmits[runningEvent.tag]) {\n const wrappedEmit = (log: Log) => {\n let event = this._wrapEvent(runningEvent, log, listener);\n\n // Try to emit the result for the parameterized event...\n if (event.decodeError == null) {\n try {\n const args = runningEvent.getEmit(event);\n this.emit(runningEvent.filter, ...args);\n } catch (error) {\n event.decodeError = error.error;\n }\n }\n\n // Always emit \"event\" for fragment-base events\n if (runningEvent.filter != null) {\n this.emit(\"event\", event);\n }\n\n // Emit \"error\" if there was an error\n if (event.decodeError != null) {\n this.emit(\"error\", event.decodeError, event);\n }\n };\n this._wrappedEmits[runningEvent.tag] = wrappedEmit;\n\n // Special events, like \"error\" do not have a filter\n if (runningEvent.filter != null) {\n this.provider.on(runningEvent.filter, wrappedEmit);\n }\n }\n }\n\n queryFilter(event: EventFilter | string, fromBlockOrBlockhash?: BlockTag | string, toBlock?: BlockTag): Promise> {\n const runningEvent = this._getRunningEvent(event);\n const filter = shallowCopy(runningEvent.filter);\n\n if (typeof(fromBlockOrBlockhash) === \"string\" && isHexString(fromBlockOrBlockhash, 32)) {\n if (toBlock != null) {\n logger.throwArgumentError(\"cannot specify toBlock with blockhash\", \"toBlock\", toBlock);\n }\n (filter).blockHash = fromBlockOrBlockhash;\n } else {\n (filter).fromBlock = ((fromBlockOrBlockhash != null) ? fromBlockOrBlockhash: 0);\n (filter).toBlock = ((toBlock != null) ? toBlock: \"latest\");\n }\n\n return this.provider.getLogs(filter).then((logs) => {\n return logs.map((log) => this._wrapEvent(runningEvent, log, null));\n });\n }\n\n on(event: EventFilter | string, listener: Listener): this {\n this._addEventListener(this._getRunningEvent(event), listener, false);\n return this;\n }\n\n once(event: EventFilter | string, listener: Listener): this {\n this._addEventListener(this._getRunningEvent(event), listener, true);\n return this;\n }\n\n emit(eventName: EventFilter | string, ...args: Array): boolean {\n if (!this.provider) { return false; }\n\n const runningEvent = this._getRunningEvent(eventName);\n const result = (runningEvent.run(args) > 0);\n\n // May have drained all the \"once\" events; check for living events\n this._checkRunningEvents(runningEvent);\n\n return result;\n }\n\n listenerCount(eventName?: EventFilter | string): number {\n if (!this.provider) { return 0; }\n if (eventName == null) {\n return Object.keys(this._runningEvents).reduce((accum, key) => {\n return accum + this._runningEvents[key].listenerCount();\n }, 0);\n }\n return this._getRunningEvent(eventName).listenerCount();\n }\n\n listeners(eventName?: EventFilter | string): Array {\n if (!this.provider) { return []; }\n\n if (eventName == null) {\n const result: Array = [ ];\n for (let tag in this._runningEvents) {\n this._runningEvents[tag].listeners().forEach((listener) => {\n result.push(listener)\n });\n }\n return result;\n }\n\n return this._getRunningEvent(eventName).listeners();\n }\n\n removeAllListeners(eventName?: EventFilter | string): this {\n if (!this.provider) { return this; }\n\n if (eventName == null) {\n for (const tag in this._runningEvents) {\n const runningEvent = this._runningEvents[tag];\n runningEvent.removeAllListeners();\n this._checkRunningEvents(runningEvent);\n }\n return this;\n }\n\n // Delete any listeners\n const runningEvent = this._getRunningEvent(eventName);\n runningEvent.removeAllListeners();\n this._checkRunningEvents(runningEvent);\n\n return this;\n }\n\n off(eventName: EventFilter | string, listener: Listener): this {\n if (!this.provider) { return this; }\n const runningEvent = this._getRunningEvent(eventName);\n runningEvent.removeListener(listener);\n this._checkRunningEvents(runningEvent);\n return this;\n }\n\n removeListener(eventName: EventFilter | string, listener: Listener): this {\n return this.off(eventName, listener);\n }\n\n}\n\nexport class Contract extends BaseContract {\n // The meta-class properties\n readonly [ key: string ]: ContractFunction | any;\n}\n\nexport class ContractFactory {\n\n readonly interface: Interface;\n readonly bytecode: string;\n readonly signer: Signer;\n\n constructor(contractInterface: ContractInterface, bytecode: BytesLike | { object: string }, signer?: Signer) {\n\n let bytecodeHex: string = null;\n\n if (typeof(bytecode) === \"string\") {\n bytecodeHex = bytecode;\n } else if (isBytes(bytecode)) {\n bytecodeHex = hexlify(bytecode);\n } else if (bytecode && typeof(bytecode.object) === \"string\") {\n // Allow the bytecode object from the Solidity compiler\n bytecodeHex = (bytecode).object;\n } else {\n // Crash in the next verification step\n bytecodeHex = \"!\";\n }\n\n // Make sure it is 0x prefixed\n if (bytecodeHex.substring(0, 2) !== \"0x\") { bytecodeHex = \"0x\" + bytecodeHex; }\n\n // Make sure the final result is valid bytecode\n if (!isHexString(bytecodeHex) || (bytecodeHex.length % 2)) {\n logger.throwArgumentError(\"invalid bytecode\", \"bytecode\", bytecode);\n }\n\n // If we have a signer, make sure it is valid\n if (signer && !Signer.isSigner(signer)) {\n logger.throwArgumentError(\"invalid signer\", \"signer\", signer);\n }\n\n defineReadOnly(this, \"bytecode\", bytecodeHex);\n defineReadOnly(this, \"interface\", getStatic(new.target, \"getInterface\")(contractInterface));\n defineReadOnly(this, \"signer\", signer || null);\n }\n\n // @TODO: Future; rename to populateTransaction?\n getDeployTransaction(...args: Array): TransactionRequest {\n let tx: TransactionRequest = { };\n\n // If we have 1 additional argument, we allow transaction overrides\n if (args.length === this.interface.deploy.inputs.length + 1 && typeof(args[args.length - 1]) === \"object\") {\n tx = shallowCopy(args.pop());\n for (const key in tx) {\n if (!allowedTransactionKeys[key]) {\n throw new Error(\"unknown transaction override \" + key);\n }\n }\n }\n\n // Do not allow these to be overridden in a deployment transaction\n [\"data\", \"from\", \"to\"].forEach((key) => {\n if ((tx)[key] == null) { return; }\n logger.throwError(\"cannot override \" + key, Logger.errors.UNSUPPORTED_OPERATION, { operation: key })\n });\n\n if (tx.value) {\n const value = BigNumber.from(tx.value);\n if (!value.isZero() && !this.interface.deploy.payable) {\n logger.throwError(\"non-payable constructor cannot override value\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"overrides.value\",\n value: tx.value\n });\n }\n }\n\n // Make sure the call matches the constructor signature\n logger.checkArgumentCount(args.length, this.interface.deploy.inputs.length, \" in Contract constructor\");\n\n // Set the data to the bytecode + the encoded constructor arguments\n tx.data = hexlify(concat([\n this.bytecode,\n this.interface.encodeDeploy(args)\n ]));\n\n return tx\n }\n\n async deploy(...args: Array): Promise {\n\n let overrides: any = { };\n\n // If 1 extra parameter was passed in, it contains overrides\n if (args.length === this.interface.deploy.inputs.length + 1) {\n overrides = args.pop();\n }\n\n // Make sure the call matches the constructor signature\n logger.checkArgumentCount(args.length, this.interface.deploy.inputs.length, \" in Contract constructor\");\n\n // Resolve ENS names and promises in the arguments\n const params = await resolveAddresses(this.signer, args, this.interface.deploy.inputs);\n params.push(overrides);\n\n // Get the deployment transaction (with optional overrides)\n const unsignedTx = this.getDeployTransaction(...params);\n\n // Send the deployment transaction\n const tx = await this.signer.sendTransaction(unsignedTx);\n\n const address = getStatic<(tx: TransactionResponse) => string>(this.constructor, \"getContractAddress\")(tx);\n const contract = getStatic<(address: string, contractInterface: ContractInterface, signer?: Signer) => Contract>(this.constructor, \"getContract\")(address, this.interface, this.signer);\n\n // Add the modified wait that wraps events\n addContractWait(contract, tx);\n\n defineReadOnly(contract, \"deployTransaction\", tx);\n return contract;\n }\n\n attach(address: string): Contract {\n return ((this.constructor)).getContract(address, this.interface, this.signer);\n }\n\n connect(signer: Signer) {\n return new (<{ new(...args: any[]): ContractFactory }>(this.constructor))(this.interface, this.bytecode, signer);\n }\n\n static fromSolidity(compilerOutput: any, signer?: Signer): ContractFactory {\n if (compilerOutput == null) {\n logger.throwError(\"missing compiler output\", Logger.errors.MISSING_ARGUMENT, { argument: \"compilerOutput\" });\n }\n\n if (typeof(compilerOutput) === \"string\") {\n compilerOutput = JSON.parse(compilerOutput);\n }\n\n const abi = compilerOutput.abi;\n\n let bytecode: any = null;\n if (compilerOutput.bytecode) {\n bytecode = compilerOutput.bytecode;\n } else if (compilerOutput.evm && compilerOutput.evm.bytecode) {\n bytecode = compilerOutput.evm.bytecode;\n }\n\n return new this(abi, bytecode, signer);\n }\n\n static getInterface(contractInterface: ContractInterface) {\n return Contract.getInterface(contractInterface);\n }\n\n static getContractAddress(tx: { from: string, nonce: BytesLike | BigNumber | number }): string {\n return getContractAddress(tx);\n }\n\n static getContract(address: string, contractInterface: ContractInterface, signer?: Signer): Contract {\n return new Contract(address, contractInterface, signer);\n }\n}\n","export const version = \"contracts/5.7.0\";\n","import { keccak256 } from \"@ethersproject/keccak256\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\n\nexport function id(text: string): string {\n return keccak256(toUtf8Bytes(text));\n}\n","\"use strict\";\n\nimport sha3 from \"js-sha3\";\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\n\nexport function keccak256(data: BytesLike): string {\n return '0x' + sha3.keccak_256(arrayify(data));\n}\n","\"use strict\";\n\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\n\nconst LogLevels: { [ name: string ]: number } = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\n\nimport { version } from \"./_version\";\n\nlet _globalLogger: Logger = null;\n\nfunction _checkNormalize(): string {\n try {\n const missing: Array = [ ];\n\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n };\n } catch(error) {\n missing.push(form);\n }\n });\n\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\")\n }\n } catch (error) {\n return error.message;\n }\n\n return null;\n}\n\nconst _normalizeError = _checkNormalize();\n\nexport enum LogLevel {\n DEBUG = \"DEBUG\",\n INFO = \"INFO\",\n WARNING = \"WARNING\",\n ERROR = \"ERROR\",\n OFF = \"OFF\"\n}\n\n\nexport enum ErrorCode {\n\n ///////////////////\n // Generic Errors\n\n // Unknown Error\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n\n // Not Implemented\n NOT_IMPLEMENTED = \"NOT_IMPLEMENTED\",\n\n // Unsupported Operation\n // - operation\n UNSUPPORTED_OPERATION = \"UNSUPPORTED_OPERATION\",\n\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n NETWORK_ERROR = \"NETWORK_ERROR\",\n\n // Some sort of bad response from the server\n SERVER_ERROR = \"SERVER_ERROR\",\n\n // Timeout\n TIMEOUT = \"TIMEOUT\",\n\n ///////////////////\n // Operational Errors\n\n // Buffer Overrun\n BUFFER_OVERRUN = \"BUFFER_OVERRUN\",\n\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n NUMERIC_FAULT = \"NUMERIC_FAULT\",\n\n\n ///////////////////\n // Argument Errors\n\n // Missing new operator to an object\n // - name: The name of the class\n MISSING_NEW = \"MISSING_NEW\",\n\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n INVALID_ARGUMENT = \"INVALID_ARGUMENT\",\n\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n MISSING_ARGUMENT = \"MISSING_ARGUMENT\",\n\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n UNEXPECTED_ARGUMENT = \"UNEXPECTED_ARGUMENT\",\n\n\n ///////////////////\n // Blockchain Errors\n\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n CALL_EXCEPTION = \"CALL_EXCEPTION\",\n\n // Insufficient funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n INSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\n // Nonce has already been used\n // - transaction: the transaction attempted\n NONCE_EXPIRED = \"NONCE_EXPIRED\",\n\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n REPLACEMENT_UNDERPRICED = \"REPLACEMENT_UNDERPRICED\",\n\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n UNPREDICTABLE_GAS_LIMIT = \"UNPREDICTABLE_GAS_LIMIT\",\n\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n TRANSACTION_REPLACED = \"TRANSACTION_REPLACED\",\n\n\n ///////////////////\n // Interaction Errors\n\n // The user rejected the action, such as signing a message or sending\n // a transaction\n ACTION_REJECTED = \"ACTION_REJECTED\",\n};\n\nconst HEX = \"0123456789abcdef\";\n\nexport class Logger {\n readonly version: string;\n\n static errors = ErrorCode;\n\n static levels = LogLevel;\n\n constructor(version: string) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n\n _log(logLevel: LogLevel, args: Array): void {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) { return; }\n console.log.apply(console, args);\n }\n\n debug(...args: Array): void {\n this._log(Logger.levels.DEBUG, args);\n }\n\n info(...args: Array): void {\n this._log(Logger.levels.INFO, args);\n }\n\n warn(...args: Array): void {\n this._log(Logger.levels.WARNING, args);\n }\n\n makeError(message: string, code?: ErrorCode, params?: any): Error {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, { });\n }\n\n if (!code) { code = Logger.errors.UNKNOWN_ERROR; }\n if (!params) { params = {}; }\n\n const messageDetails: Array = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n try {\n if (value instanceof Uint8Array) {\n let hex = \"\";\n for (let i = 0; i < value.length; i++) {\n hex += HEX[value[i] >> 4];\n hex += HEX[value[i] & 0x0f];\n }\n messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n } else {\n messageDetails.push(key + \"=\" + JSON.stringify(value));\n }\n } catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${ code }`);\n messageDetails.push(`version=${ this.version }`);\n\n const reason = message;\n\n let url = \"\";\n\n switch (code) {\n case ErrorCode.NUMERIC_FAULT: {\n url = \"NUMERIC_FAULT\";\n const fault = message;\n\n switch (fault) {\n case \"overflow\": case \"underflow\": case \"division-by-zero\":\n url += \"-\" + fault;\n break;\n case \"negative-power\": case \"negative-width\":\n url += \"-unsupported\";\n break;\n case \"unbound-bitwise-result\":\n url += \"-unbound-result\";\n break;\n }\n break;\n }\n case ErrorCode.CALL_EXCEPTION:\n case ErrorCode.INSUFFICIENT_FUNDS:\n case ErrorCode.MISSING_NEW:\n case ErrorCode.NONCE_EXPIRED:\n case ErrorCode.REPLACEMENT_UNDERPRICED:\n case ErrorCode.TRANSACTION_REPLACED:\n case ErrorCode.UNPREDICTABLE_GAS_LIMIT:\n url = code;\n break;\n }\n\n if (url) {\n message += \" [ See: https:/\\/links.ethers.org/v5-errors-\" + url + \" ]\";\n }\n\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n\n // @TODO: Any??\n const error: any = new Error(message);\n error.reason = reason;\n error.code = code\n\n Object.keys(params).forEach(function(key) {\n error[key] = params[key];\n });\n\n return error;\n }\n\n throwError(message: string, code?: ErrorCode, params?: any): never {\n throw this.makeError(message, code, params);\n }\n\n throwArgumentError(message: string, name: string, value: any): never {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n\n assert(condition: any, message: string, code?: ErrorCode, params?: any): void {\n if (!!condition) { return; }\n this.throwError(message, code, params);\n }\n\n assertArgument(condition: any, message: string, name: string, value: any): void {\n if (!!condition) { return; }\n this.throwArgumentError(message, name, value);\n }\n\n checkNormalize(message?: string): void {\n if (message == null) { message = \"platform missing String.prototype.normalize\"; }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n\n checkSafeUint53(value: number, message?: string): void {\n if (typeof(value) !== \"number\") { return; }\n\n if (message == null) { message = \"value not safe\"; }\n\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n\n checkArgumentCount(count: number, expectedCount: number, message?: string): void {\n if (message) {\n message = \": \" + message;\n } else {\n message = \"\";\n }\n\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n\n checkNew(target: any, kind: any): void {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n\n checkAbstract(target: any, kind: any): void {\n if (target === kind) {\n this.throwError(\n \"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\",\n Logger.errors.UNSUPPORTED_OPERATION,\n { name: target.name, operation: \"new\" }\n );\n } else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n\n static globalLogger(): Logger {\n if (!_globalLogger) { _globalLogger = new Logger(version); }\n return _globalLogger;\n }\n\n static setCensorship(censorship: boolean, permanent?: boolean): void {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n\n if (_permanentCensorErrors) {\n if (!censorship) { return; }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n\n static setLogLevel(logLevel: LogLevel): void {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n\n static from(version: string): Logger {\n return new Logger(version);\n }\n}\n","export const version = \"logger/5.7.0\";\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport function defineReadOnly(object: T, name: K, value: T[K]): void {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n\n// Crawl up the constructor chain to find a static method\nexport function getStatic(ctor: any, key: string): T {\n for (let i = 0; i < 32; i++) {\n if (ctor[key]) { return ctor[key]; }\n if (!ctor.prototype || typeof(ctor.prototype) !== \"object\") { break; }\n ctor = Object.getPrototypeOf(ctor.prototype).constructor;\n }\n return null;\n}\n\nexport type Deferrable = {\n [ K in keyof T ]: T[K] | Promise;\n}\n\n\ntype Result = { key: string, value: any};\n\nexport async function resolveProperties(object: Readonly>): Promise {\n const promises: Array> = Object.keys(object).map((key) => {\n const value = object[>key];\n return Promise.resolve(value).then((v) => ({ key: key, value: v }));\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce((accum, result) => {\n accum[(result.key)] = result.value;\n return accum;\n }, { });\n}\n\nexport function checkProperties(object: any, properties: { [ name: string ]: boolean }): void {\n if (!object || typeof(object) !== \"object\") {\n logger.throwArgumentError(\"invalid object\", \"object\", object);\n }\n\n Object.keys(object).forEach((key) => {\n if (!properties[key]) {\n logger.throwArgumentError(\"invalid object key - \" + key, \"transaction:\" + key, object);\n }\n });\n}\n\nexport function shallowCopy(object: T): T {\n const result: any = {};\n for (const key in object) { result[key] = object[key]; }\n return result;\n}\n\nconst opaque: { [key: string]: boolean } = { bigint: true, boolean: true, \"function\": true, number: true, string: true };\n\nfunction _isFrozen(object: any): boolean {\n\n // Opaque objects are not mutable, so safe to copy by assignment\n if (object === undefined || object === null || opaque[typeof(object)]) { return true; }\n\n if (Array.isArray(object) || typeof(object) === \"object\") {\n if (!Object.isFrozen(object)) { return false; }\n\n const keys = Object.keys(object);\n for (let i = 0; i < keys.length; i++) {\n let value: any = null;\n try {\n value = object[keys[i]];\n } catch (error) {\n // If accessing a value triggers an error, it is a getter\n // designed to do so (e.g. Result) and is therefore \"frozen\"\n continue;\n }\n\n if (!_isFrozen(value)) { return false; }\n }\n\n return true;\n }\n\n return logger.throwArgumentError(`Cannot deepCopy ${ typeof(object) }`, \"object\", object);\n}\n\n// Returns a new copy of object, such that no properties may be replaced.\n// New properties may be added only to objects.\nfunction _deepCopy(object: any): any {\n\n if (_isFrozen(object)) { return object; }\n\n // Arrays are mutable, so we need to create a copy\n if (Array.isArray(object)) {\n return Object.freeze(object.map((item) => deepCopy(item)));\n }\n\n if (typeof(object) === \"object\") {\n const result: { [ key: string ]: any } = {};\n for (const key in object) {\n const value = object[key];\n if (value === undefined) { continue; }\n defineReadOnly(result, key, deepCopy(value));\n }\n\n return result;\n }\n\n return logger.throwArgumentError(`Cannot deepCopy ${ typeof(object) }`, \"object\", object);\n}\n\nexport function deepCopy(object: T): T {\n return _deepCopy(object);\n}\n\nexport class Description {\n constructor(info: { [ K in keyof T ]: T[K] }) {\n for (const key in info) {\n (this)[key] = deepCopy(info[key]);\n }\n }\n}\n","export const version = \"properties/5.7.0\";\n","\"use strict\";\n\n//See: https://github.com/ethereum/wiki/wiki/RLP\n\nimport { arrayify, BytesLike, hexlify, isBytesLike } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nfunction arrayifyInteger(value: number): Array {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\n\nfunction unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\n\nfunction _encode(object: Array | string): Array {\n if (Array.isArray(object)) {\n let payload: Array = [];\n object.forEach(function(child) {\n payload = payload.concat(_encode(child));\n });\n\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length)\n return payload;\n }\n\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n\n return length.concat(payload);\n\n }\n\n if (!isBytesLike(object)) {\n logger.throwArgumentError(\"RLP object must be BytesLike\", \"object\", object);\n }\n\n const data: Array = Array.prototype.slice.call(arrayify(object));\n\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n\n } else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n\n return length.concat(data);\n}\n\nexport function encode(object: any): string {\n return hexlify(_encode(object));\n}\n\ntype Decoded = {\n result: any;\n consumed: number;\n};\n\nfunction _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {\n const result = [];\n\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n\n result.push(decoded.result);\n\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n }\n\n return {consumed: (1 + length), result: result};\n}\n\n// returns { consumed: number, result: Object }\nfunction _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {\n if (data.length === 0) {\n logger.throwError(\"data too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n if (offset + 1 + lengthLength > data.length) {\n logger.throwError(\"data short segment too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n logger.throwError(\"data long segment too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n\n } else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n if (offset + 1 + length > data.length) {\n logger.throwError(\"data array too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n return _decodeChildren(data, offset, offset + 1, length);\n\n } else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n if (offset + 1 + lengthLength > data.length) {\n logger.throwError(\"data array too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n logger.throwError(\"data array too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result }\n\n } else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n if (offset + 1 + length > data.length) {\n logger.throwError(\"data too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result }\n }\n return { consumed: 1, result: hexlify(data[offset]) };\n}\n\nexport function decode(data: BytesLike): any {\n const bytes = arrayify(data);\n const decoded = _decode(bytes, 0);\n if (decoded.consumed !== bytes.length) {\n logger.throwArgumentError(\"invalid rlp data\", \"data\", data);\n }\n return decoded.result;\n}\n\n","export const version = \"rlp/5.7.0\";\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","import _ec from \"elliptic\";\nvar EC = _ec.ec;\nexport { EC };\n//# sourceMappingURL=elliptic.js.map","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","\"use strict\";\n\nimport { EC } from \"./elliptic\";\n\nimport { arrayify, BytesLike, hexDataLength, hexlify, hexZeroPad, Signature, SignatureLike, splitSignature } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nlet _curve: EC = null\nfunction getCurve() {\n if (!_curve) {\n _curve = new EC(\"secp256k1\");\n }\n return _curve;\n}\n\nexport class SigningKey {\n\n readonly curve: string;\n\n readonly privateKey: string;\n readonly publicKey: string;\n readonly compressedPublicKey: string;\n\n //readonly address: string;\n\n readonly _isSigningKey: boolean;\n\n constructor(privateKey: BytesLike) {\n defineReadOnly(this, \"curve\", \"secp256k1\");\n\n defineReadOnly(this, \"privateKey\", hexlify(privateKey));\n if (hexDataLength(this.privateKey) !== 32) {\n logger.throwArgumentError(\"invalid private key\", \"privateKey\", \"[[ REDACTED ]]\");\n }\n\n const keyPair = getCurve().keyFromPrivate(arrayify(this.privateKey));\n\n defineReadOnly(this, \"publicKey\", \"0x\" + keyPair.getPublic(false, \"hex\"));\n defineReadOnly(this, \"compressedPublicKey\", \"0x\" + keyPair.getPublic(true, \"hex\"));\n\n defineReadOnly(this, \"_isSigningKey\", true);\n }\n\n _addPoint(other: BytesLike): string {\n const p0 = getCurve().keyFromPublic(arrayify(this.publicKey));\n const p1 = getCurve().keyFromPublic(arrayify(other));\n return \"0x\" + p0.pub.add(p1.pub).encodeCompressed(\"hex\");\n }\n\n signDigest(digest: BytesLike): Signature {\n const keyPair = getCurve().keyFromPrivate(arrayify(this.privateKey));\n const digestBytes = arrayify(digest);\n if (digestBytes.length !== 32) {\n logger.throwArgumentError(\"bad digest length\", \"digest\", digest);\n }\n const signature = keyPair.sign(digestBytes, { canonical: true });\n return splitSignature({\n recoveryParam: signature.recoveryParam,\n r: hexZeroPad(\"0x\" + signature.r.toString(16), 32),\n s: hexZeroPad(\"0x\" + signature.s.toString(16), 32),\n })\n }\n\n computeSharedSecret(otherKey: BytesLike): string {\n const keyPair = getCurve().keyFromPrivate(arrayify(this.privateKey));\n const otherKeyPair = getCurve().keyFromPublic(arrayify(computePublicKey(otherKey)));\n return hexZeroPad(\"0x\" + keyPair.derive(otherKeyPair.getPublic()).toString(16), 32);\n }\n\n static isSigningKey(value: any): value is SigningKey {\n return !!(value && value._isSigningKey);\n }\n}\n\nexport function recoverPublicKey(digest: BytesLike, signature: SignatureLike): string {\n const sig = splitSignature(signature);\n const rs = { r: arrayify(sig.r), s: arrayify(sig.s) };\n return \"0x\" + getCurve().recoverPubKey(arrayify(digest), rs, sig.recoveryParam).encode(\"hex\", false);\n}\n\nexport function computePublicKey(key: BytesLike, compressed?: boolean): string {\n const bytes = arrayify(key);\n\n if (bytes.length === 32) {\n const signingKey = new SigningKey(bytes);\n if (compressed) {\n return \"0x\" + getCurve().keyFromPrivate(bytes).getPublic(true, \"hex\");\n }\n return signingKey.publicKey;\n\n } else if (bytes.length === 33) {\n if (compressed) { return hexlify(bytes); }\n return \"0x\" + getCurve().keyFromPublic(bytes).getPublic(false, \"hex\");\n\n } else if (bytes.length === 65) {\n if (!compressed) { return hexlify(bytes); }\n return \"0x\" + getCurve().keyFromPublic(bytes).getPublic(true, \"hex\");\n }\n\n return logger.throwArgumentError(\"invalid public or private key\", \"key\", \"[REDACTED]\");\n}\n\n","export const version = \"signing-key/5.7.0\";\n","\"use strict\";\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n///////////////////////////////\n\nexport enum UnicodeNormalizationForm {\n current = \"\",\n NFC = \"NFC\",\n NFD = \"NFD\",\n NFKC = \"NFKC\",\n NFKD = \"NFKD\"\n};\n\nexport enum Utf8ErrorReason {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n UNEXPECTED_CONTINUE = \"unexpected continuation byte\",\n\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n BAD_PREFIX = \"bad codepoint prefix\",\n\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n OVERRUN = \"string overrun\",\n\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n MISSING_CONTINUE = \"missing continuation byte\",\n\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n OUT_OF_RANGE = \"out of UTF-8 range\",\n\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n UTF16_SURROGATE = \"UTF-16 surrogate\",\n\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n OVERLONG = \"overlong representation\",\n};\n\n\nexport type Utf8ErrorFunc = (reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number) => number;\n\nfunction errorFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number {\n return logger.throwArgumentError(`invalid codepoint at offset ${ offset }; ${ reason }`, \"bytes\", bytes);\n}\n\nfunction ignoreFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number {\n\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) { break; }\n i++;\n }\n return i;\n }\n\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n\n // Nothing to skip\n return 0;\n}\n\nfunction replaceFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number {\n\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push(badCodepoint);\n return 0;\n }\n\n // Put the replacement character into the output\n output.push(0xfffd);\n\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n\n// Common error handing strategies\nexport const Utf8ErrorFuncs: { [ name: string ]: Utf8ErrorFunc } = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes: BytesLike, onError?: Utf8ErrorFunc): Array {\n if (onError == null) { onError = Utf8ErrorFuncs.error; }\n\n bytes = arrayify(bytes);\n\n const result: Array = [];\n let i = 0;\n\n // Invalid bytes are ignored\n while(i < bytes.length) {\n\n const c = bytes[i++];\n\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n\n // 1110 xxxx 10xx xxxx 10xx xxxx\n } else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n } else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n\n } else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n } else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n };\n\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n\n // See above loop for invalid continuation byte\n if (res === null) { continue; }\n\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n\n result.push(res);\n }\n\n return result;\n}\n\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Uint8Array {\n\n if (form != UnicodeNormalizationForm.current) {\n logger.checkNormalize();\n str = str.normalize(form);\n }\n\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n\n if (c < 0x80) {\n result.push(c);\n\n } else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n\n } else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n\n } else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n\n return arrayify(result);\n};\n\nfunction escapeChar(value: number) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\n\nexport function _toEscapedUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\"\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\n\nexport function _toUtf8String(codePoints: Array): string {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode(\n (((codePoint >> 10) & 0x3ff) + 0xd800),\n ((codePoint & 0x3ff) + 0xdc00)\n );\n }).join(\"\");\n}\n\nexport function toUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n\nexport function toUtf8CodePoints(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Array {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n","export const version = \"strings/5.7.0\";\n","\"use strict\";\n\nimport { getAddress } from \"@ethersproject/address\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { arrayify, BytesLike, DataOptions, hexConcat, hexDataLength, hexDataSlice, hexlify, hexZeroPad, isBytesLike, SignatureLike, splitSignature, stripZeros, } from \"@ethersproject/bytes\";\nimport { Zero } from \"@ethersproject/constants\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { checkProperties } from \"@ethersproject/properties\";\nimport * as RLP from \"@ethersproject/rlp\";\nimport { computePublicKey, recoverPublicKey } from \"@ethersproject/signing-key\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n///////////////////////////////\n// Exported Types\n\nexport type AccessList = Array<{ address: string, storageKeys: Array }>;\n\n// Input allows flexibility in describing an access list\nexport type AccessListish = AccessList |\n Array<[ string, Array ]> |\n Record>;\n\nexport enum TransactionTypes {\n legacy = 0,\n eip2930 = 1,\n eip1559 = 2,\n};\n\nexport type UnsignedTransaction = {\n to?: string;\n nonce?: number;\n\n gasLimit?: BigNumberish;\n gasPrice?: BigNumberish;\n\n data?: BytesLike;\n value?: BigNumberish;\n chainId?: number;\n\n // Typed-Transaction features\n type?: number | null;\n\n // EIP-2930; Type 1 & EIP-1559; Type 2\n accessList?: AccessListish;\n\n // EIP-1559; Type 2\n maxPriorityFeePerGas?: BigNumberish;\n maxFeePerGas?: BigNumberish;\n}\n\nexport interface Transaction {\n hash?: string;\n\n to?: string;\n from?: string;\n nonce: number;\n\n gasLimit: BigNumber;\n gasPrice?: BigNumber;\n\n data: string;\n value: BigNumber;\n chainId: number;\n\n r?: string;\n s?: string;\n v?: number;\n\n // Typed-Transaction features\n type?: number | null;\n\n // EIP-2930; Type 1 & EIP-1559; Type 2\n accessList?: AccessList;\n\n // EIP-1559; Type 2\n maxPriorityFeePerGas?: BigNumber;\n maxFeePerGas?: BigNumber;\n}\n\n///////////////////////////////\n\nfunction handleAddress(value: string): string {\n if (value === \"0x\") { return null; }\n return getAddress(value);\n}\n\nfunction handleNumber(value: string): BigNumber {\n if (value === \"0x\") { return Zero; }\n return BigNumber.from(value);\n}\n\n// Legacy Transaction Fields\nconst transactionFields = [\n { name: \"nonce\", maxLength: 32, numeric: true },\n { name: \"gasPrice\", maxLength: 32, numeric: true },\n { name: \"gasLimit\", maxLength: 32, numeric: true },\n { name: \"to\", length: 20 },\n { name: \"value\", maxLength: 32, numeric: true },\n { name: \"data\" },\n];\n\nconst allowedTransactionKeys: { [ key: string ]: boolean } = {\n chainId: true, data: true, gasLimit: true, gasPrice:true, nonce: true, to: true, type: true, value: true\n}\n\nexport function computeAddress(key: BytesLike | string): string {\n const publicKey = computePublicKey(key);\n return getAddress(hexDataSlice(keccak256(hexDataSlice(publicKey, 1)), 12));\n}\n\nexport function recoverAddress(digest: BytesLike, signature: SignatureLike): string {\n return computeAddress(recoverPublicKey(arrayify(digest), signature));\n}\n\nfunction formatNumber(value: BigNumberish, name: string): Uint8Array {\n const result = stripZeros(BigNumber.from(value).toHexString());\n if (result.length > 32) {\n logger.throwArgumentError(\"invalid length for \" + name, (\"transaction:\" + name), value);\n }\n return result;\n}\n\nfunction accessSetify(addr: string, storageKeys: Array): { address: string,storageKeys: Array } {\n return {\n address: getAddress(addr),\n storageKeys: (storageKeys || []).map((storageKey, index) => {\n if (hexDataLength(storageKey) !== 32) {\n logger.throwArgumentError(\"invalid access list storageKey\", `accessList[${ addr }:${ index }]`, storageKey)\n }\n return storageKey.toLowerCase();\n })\n };\n}\n\nexport function accessListify(value: AccessListish): AccessList {\n if (Array.isArray(value)) {\n return (] | { address: string, storageKeys: Array}>>value).map((set, index) => {\n if (Array.isArray(set)) {\n if (set.length > 2) {\n logger.throwArgumentError(\"access list expected to be [ address, storageKeys[] ]\", `value[${ index }]`, set);\n }\n return accessSetify(set[0], set[1])\n }\n return accessSetify(set.address, set.storageKeys);\n });\n }\n\n const result: Array<{ address: string, storageKeys: Array }> = Object.keys(value).map((addr) => {\n const storageKeys: Record = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, >{ });\n return accessSetify(addr, Object.keys(storageKeys).sort())\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n\nfunction formatAccessList(value: AccessListish): Array<[ string, Array ]> {\n return accessListify(value).map((set) => [ set.address, set.storageKeys ]);\n}\n\nfunction _serializeEip1559(transaction: UnsignedTransaction, signature?: SignatureLike): string {\n // If there is an explicit gasPrice, make sure it matches the\n // EIP-1559 fees; otherwise they may not understand what they\n // think they are setting in terms of fee.\n if (transaction.gasPrice != null) {\n const gasPrice = BigNumber.from(transaction.gasPrice);\n const maxFeePerGas = BigNumber.from(transaction.maxFeePerGas || 0);\n if (!gasPrice.eq(maxFeePerGas)) {\n logger.throwArgumentError(\"mismatch EIP-1559 gasPrice != maxFeePerGas\", \"tx\", {\n gasPrice, maxFeePerGas\n });\n }\n }\n\n const fields: any = [\n formatNumber(transaction.chainId || 0, \"chainId\"),\n formatNumber(transaction.nonce || 0, \"nonce\"),\n formatNumber(transaction.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n formatNumber(transaction.maxFeePerGas || 0, \"maxFeePerGas\"),\n formatNumber(transaction.gasLimit || 0, \"gasLimit\"),\n ((transaction.to != null) ? getAddress(transaction.to): \"0x\"),\n formatNumber(transaction.value || 0, \"value\"),\n (transaction.data || \"0x\"),\n (formatAccessList(transaction.accessList || []))\n ];\n\n if (signature) {\n const sig = splitSignature(signature);\n fields.push(formatNumber(sig.recoveryParam, \"recoveryParam\"));\n fields.push(stripZeros(sig.r));\n fields.push(stripZeros(sig.s));\n }\n\n return hexConcat([ \"0x02\", RLP.encode(fields)]);\n}\n\nfunction _serializeEip2930(transaction: UnsignedTransaction, signature?: SignatureLike): string {\n const fields: any = [\n formatNumber(transaction.chainId || 0, \"chainId\"),\n formatNumber(transaction.nonce || 0, \"nonce\"),\n formatNumber(transaction.gasPrice || 0, \"gasPrice\"),\n formatNumber(transaction.gasLimit || 0, \"gasLimit\"),\n ((transaction.to != null) ? getAddress(transaction.to): \"0x\"),\n formatNumber(transaction.value || 0, \"value\"),\n (transaction.data || \"0x\"),\n (formatAccessList(transaction.accessList || []))\n ];\n\n if (signature) {\n const sig = splitSignature(signature);\n fields.push(formatNumber(sig.recoveryParam, \"recoveryParam\"));\n fields.push(stripZeros(sig.r));\n fields.push(stripZeros(sig.s));\n }\n\n return hexConcat([ \"0x01\", RLP.encode(fields)]);\n}\n\n// Legacy Transactions and EIP-155\nfunction _serialize(transaction: UnsignedTransaction, signature?: SignatureLike): string {\n checkProperties(transaction, allowedTransactionKeys);\n\n const raw: Array = [];\n\n transactionFields.forEach(function(fieldInfo) {\n let value = (transaction)[fieldInfo.name] || ([]);\n const options: DataOptions = { };\n if (fieldInfo.numeric) { options.hexPad = \"left\"; }\n value = arrayify(hexlify(value, options));\n\n // Fixed-width field\n if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) {\n logger.throwArgumentError(\"invalid length for \" + fieldInfo.name, (\"transaction:\" + fieldInfo.name), value);\n }\n\n // Variable-width (with a maximum)\n if (fieldInfo.maxLength) {\n value = stripZeros(value);\n if (value.length > fieldInfo.maxLength) {\n logger.throwArgumentError(\"invalid length for \" + fieldInfo.name, (\"transaction:\" + fieldInfo.name), value );\n }\n }\n\n raw.push(hexlify(value));\n });\n\n let chainId = 0;\n if (transaction.chainId != null) {\n // A chainId was provided; if non-zero we'll use EIP-155\n chainId = transaction.chainId;\n\n if (typeof(chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid transaction.chainId\", \"transaction\", transaction);\n }\n\n } else if (signature && !isBytesLike(signature) && signature.v > 28) {\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\n chainId = Math.floor((signature.v - 35) / 2);\n }\n\n // We have an EIP-155 transaction (chainId was specified and non-zero)\n if (chainId !== 0) {\n raw.push(hexlify(chainId)); // @TODO: hexValue?\n raw.push(\"0x\");\n raw.push(\"0x\");\n }\n\n // Requesting an unsigned transaction\n if (!signature) {\n return RLP.encode(raw);\n }\n\n // The splitSignature will ensure the transaction has a recoveryParam in the\n // case that the signTransaction function only adds a v.\n const sig = splitSignature(signature);\n\n // We pushed a chainId and null r, s on for hashing only; remove those\n let v = 27 + sig.recoveryParam\n if (chainId !== 0) {\n raw.pop();\n raw.pop();\n raw.pop();\n v += chainId * 2 + 8;\n\n // If an EIP-155 v (directly or indirectly; maybe _vs) was provided, check it!\n if (sig.v > 28 && sig.v !== v) {\n logger.throwArgumentError(\"transaction.chainId/signature.v mismatch\", \"signature\", signature);\n }\n } else if (sig.v !== v) {\n logger.throwArgumentError(\"transaction.chainId/signature.v mismatch\", \"signature\", signature);\n }\n\n raw.push(hexlify(v));\n raw.push(stripZeros(arrayify(sig.r)));\n raw.push(stripZeros(arrayify(sig.s)));\n\n return RLP.encode(raw);\n}\n\nexport function serialize(transaction: UnsignedTransaction, signature?: SignatureLike): string {\n // Legacy and EIP-155 Transactions\n if (transaction.type == null || transaction.type === 0) {\n if (transaction.accessList != null) {\n logger.throwArgumentError(\"untyped transactions do not support accessList; include type: 1\", \"transaction\", transaction);\n }\n return _serialize(transaction, signature);\n }\n\n // Typed Transactions (EIP-2718)\n switch (transaction.type) {\n case 1:\n return _serializeEip2930(transaction, signature);\n case 2:\n return _serializeEip1559(transaction, signature);\n default:\n break;\n }\n\n return logger.throwError(`unsupported transaction type: ${ transaction.type }`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"serializeTransaction\",\n transactionType: transaction.type\n });\n}\n\nfunction _parseEipSignature(tx: Transaction, fields: Array, serialize: (tx: UnsignedTransaction) => string): void {\n try {\n const recid = handleNumber(fields[0]).toNumber();\n if (recid !== 0 && recid !== 1) { throw new Error(\"bad recid\"); }\n tx.v = recid;\n } catch (error) {\n logger.throwArgumentError(\"invalid v for transaction type: 1\", \"v\", fields[0]);\n }\n\n tx.r = hexZeroPad(fields[1], 32);\n tx.s = hexZeroPad(fields[2], 32);\n\n try {\n const digest = keccak256(serialize(tx));\n tx.from = recoverAddress(digest, { r: tx.r, s: tx.s, recoveryParam: tx.v });\n } catch (error) { }\n}\n\nfunction _parseEip1559(payload: Uint8Array): Transaction {\n const transaction = RLP.decode(payload.slice(1));\n\n if (transaction.length !== 9 && transaction.length !== 12) {\n logger.throwArgumentError(\"invalid component count for transaction type: 2\", \"payload\", hexlify(payload));\n }\n\n const maxPriorityFeePerGas = handleNumber(transaction[2]);\n const maxFeePerGas = handleNumber(transaction[3]);\n const tx: Transaction = {\n type: 2,\n chainId: handleNumber(transaction[0]).toNumber(),\n nonce: handleNumber(transaction[1]).toNumber(),\n maxPriorityFeePerGas: maxPriorityFeePerGas,\n maxFeePerGas: maxFeePerGas,\n gasPrice: null,\n gasLimit: handleNumber(transaction[4]),\n to: handleAddress(transaction[5]),\n value: handleNumber(transaction[6]),\n data: transaction[7],\n accessList: accessListify(transaction[8]),\n };\n\n // Unsigned EIP-1559 Transaction\n if (transaction.length === 9) { return tx; }\n\n tx.hash = keccak256(payload);\n\n _parseEipSignature(tx, transaction.slice(9), _serializeEip1559);\n\n return tx;\n}\n\nfunction _parseEip2930(payload: Uint8Array): Transaction {\n const transaction = RLP.decode(payload.slice(1));\n\n if (transaction.length !== 8 && transaction.length !== 11) {\n logger.throwArgumentError(\"invalid component count for transaction type: 1\", \"payload\", hexlify(payload));\n }\n\n const tx: Transaction = {\n type: 1,\n chainId: handleNumber(transaction[0]).toNumber(),\n nonce: handleNumber(transaction[1]).toNumber(),\n gasPrice: handleNumber(transaction[2]),\n gasLimit: handleNumber(transaction[3]),\n to: handleAddress(transaction[4]),\n value: handleNumber(transaction[5]),\n data: transaction[6],\n accessList: accessListify(transaction[7])\n };\n\n // Unsigned EIP-2930 Transaction\n if (transaction.length === 8) { return tx; }\n\n tx.hash = keccak256(payload);\n\n _parseEipSignature(tx, transaction.slice(8), _serializeEip2930);\n\n return tx;\n}\n\n// Legacy Transactions and EIP-155\nfunction _parse(rawTransaction: Uint8Array): Transaction {\n const transaction = RLP.decode(rawTransaction);\n\n if (transaction.length !== 9 && transaction.length !== 6) {\n logger.throwArgumentError(\"invalid raw transaction\", \"rawTransaction\", rawTransaction);\n }\n\n const tx: Transaction = {\n nonce: handleNumber(transaction[0]).toNumber(),\n gasPrice: handleNumber(transaction[1]),\n gasLimit: handleNumber(transaction[2]),\n to: handleAddress(transaction[3]),\n value: handleNumber(transaction[4]),\n data: transaction[5],\n chainId: 0\n };\n\n // Legacy unsigned transaction\n if (transaction.length === 6) { return tx; }\n\n try {\n tx.v = BigNumber.from(transaction[6]).toNumber();\n\n } catch (error) {\n // @TODO: What makes snese to do? The v is too big\n return tx;\n }\n\n tx.r = hexZeroPad(transaction[7], 32);\n tx.s = hexZeroPad(transaction[8], 32);\n\n if (BigNumber.from(tx.r).isZero() && BigNumber.from(tx.s).isZero()) {\n // EIP-155 unsigned transaction\n tx.chainId = tx.v;\n tx.v = 0;\n\n } else {\n // Signed Transaction\n\n tx.chainId = Math.floor((tx.v - 35) / 2);\n if (tx.chainId < 0) { tx.chainId = 0; }\n\n let recoveryParam = tx.v - 27;\n\n const raw = transaction.slice(0, 6);\n\n if (tx.chainId !== 0) {\n raw.push(hexlify(tx.chainId));\n raw.push(\"0x\");\n raw.push(\"0x\");\n recoveryParam -= tx.chainId * 2 + 8;\n }\n\n const digest = keccak256(RLP.encode(raw));\n try {\n tx.from = recoverAddress(digest, { r: hexlify(tx.r), s: hexlify(tx.s), recoveryParam: recoveryParam });\n } catch (error) { }\n\n tx.hash = keccak256(rawTransaction);\n }\n\n tx.type = null;\n\n return tx;\n}\n\n\nexport function parse(rawTransaction: BytesLike): Transaction {\n const payload = arrayify(rawTransaction);\n\n // Legacy and EIP-155 Transactions\n if (payload[0] > 0x7f) { return _parse(payload); }\n\n // Typed Transaction (EIP-2718)\n switch (payload[0]) {\n case 1:\n return _parseEip2930(payload);\n case 2:\n return _parseEip1559(payload);\n default:\n break;\n }\n\n return logger.throwError(`unsupported transaction type: ${ payload[0] }`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"parseTransaction\",\n transactionType: payload[0]\n });\n}\n\n","export const version = \"transactions/5.7.0\";\n","\"use strict\";\n\n(function(root) {\n\n function checkInt(value) {\n return (parseInt(value) === value);\n }\n\n function checkInts(arrayish) {\n if (!checkInt(arrayish.length)) { return false; }\n\n for (var i = 0; i < arrayish.length; i++) {\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\n return false;\n }\n }\n\n return true;\n }\n\n function coerceArray(arg, copy) {\n\n // ArrayBuffer view\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\n\n if (copy) {\n if (arg.slice) {\n arg = arg.slice();\n } else {\n arg = Array.prototype.slice.call(arg);\n }\n }\n\n return arg;\n }\n\n // It's an array; check it is a valid representation of a byte\n if (Array.isArray(arg)) {\n if (!checkInts(arg)) {\n throw new Error('Array contains invalid value: ' + arg);\n }\n\n return new Uint8Array(arg);\n }\n\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\n if (checkInt(arg.length) && checkInts(arg)) {\n return new Uint8Array(arg);\n }\n\n throw new Error('unsupported array-like object');\n }\n\n function createArray(length) {\n return new Uint8Array(length);\n }\n\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\n if (sourceStart != null || sourceEnd != null) {\n if (sourceArray.slice) {\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\n } else {\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\n }\n }\n targetArray.set(sourceArray, targetStart);\n }\n\n\n\n var convertUtf8 = (function() {\n function toBytes(text) {\n var result = [], i = 0;\n text = encodeURI(text);\n while (i < text.length) {\n var c = text.charCodeAt(i++);\n\n // if it is a % sign, encode the following 2 bytes as a hex value\n if (c === 37) {\n result.push(parseInt(text.substr(i, 2), 16))\n i += 2;\n\n // otherwise, just the actual byte\n } else {\n result.push(c)\n }\n }\n\n return coerceArray(result);\n }\n\n function fromBytes(bytes) {\n var result = [], i = 0;\n\n while (i < bytes.length) {\n var c = bytes[i];\n\n if (c < 128) {\n result.push(String.fromCharCode(c));\n i++;\n } else if (c > 191 && c < 224) {\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\n i += 2;\n } else {\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\n i += 3;\n }\n }\n\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n var convertHex = (function() {\n function toBytes(text) {\n var result = [];\n for (var i = 0; i < text.length; i += 2) {\n result.push(parseInt(text.substr(i, 2), 16));\n }\n\n return result;\n }\n\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\n var Hex = '0123456789abcdef';\n\n function fromBytes(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i++) {\n var v = bytes[i];\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\n }\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n\n // Number of rounds by keysize\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\n\n // Round constant words\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n // S-box and Inverse S-box (S is for Substitution)\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n // Transformations for encryption\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n // Transformations for decryption\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n // Transformations for decryption key expansion\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\n function convertToInt32(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i += 4) {\n result.push(\n (bytes[i ] << 24) |\n (bytes[i + 1] << 16) |\n (bytes[i + 2] << 8) |\n bytes[i + 3]\n );\n }\n return result;\n }\n\n var AES = function(key) {\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n Object.defineProperty(this, 'key', {\n value: coerceArray(key, true)\n });\n\n this._prepare();\n }\n\n\n AES.prototype._prepare = function() {\n\n var rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\n }\n\n // encryption round keys\n this._Ke = [];\n\n // decryption round keys\n this._Kd = [];\n\n for (var i = 0; i <= rounds; i++) {\n this._Ke.push([0, 0, 0, 0]);\n this._Kd.push([0, 0, 0, 0]);\n }\n\n var roundKeyCount = (rounds + 1) * 4;\n var KC = this.key.length / 4;\n\n // convert the key into ints\n var tk = convertToInt32(this.key);\n\n // copy values into round key arrays\n var index;\n for (var i = 0; i < KC; i++) {\n index = i >> 2;\n this._Ke[index][i % 4] = tk[i];\n this._Kd[rounds - index][i % 4] = tk[i];\n }\n\n // key expansion (fips-197 section 5.2)\n var rconpointer = 0;\n var t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[ tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (var i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n } else {\n for (var i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n\n for (var i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n\n // copy values into round key arrays\n var i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n this._Ke[r][c] = tk[i];\n this._Kd[rounds - r][c] = tk[i++];\n t++;\n }\n }\n\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (var r = 1; r < rounds; r++) {\n for (var c = 0; c < 4; c++) {\n tt = this._Kd[r][c];\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[ tt & 0xFF]);\n }\n }\n }\n\n AES.prototype.encrypt = function(plaintext) {\n if (plaintext.length != 16) {\n throw new Error('invalid plaintext size (must be 16 bytes)');\n }\n\n var rounds = this._Ke.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(plaintext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Ke[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[ t[(i + 3) % 4] & 0xff] ^\n this._Ke[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Ke[rounds][i];\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n AES.prototype.decrypt = function(ciphertext) {\n if (ciphertext.length != 16) {\n throw new Error('invalid ciphertext size (must be 16 bytes)');\n }\n\n var rounds = this._Kd.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(ciphertext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Kd[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[ t[(i + 1) % 4] & 0xff] ^\n this._Kd[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Kd[rounds][i];\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n\n /**\n * Mode Of Operation - Electonic Codebook (ECB)\n */\n var ModeOfOperationECB = function(key) {\n if (!(this instanceof ModeOfOperationECB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Electronic Code Block\";\n this.name = \"ecb\";\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n block = this._aes.encrypt(block);\n copyArray(block, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n copyArray(block, plaintext, i);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Block Chaining (CBC)\n */\n var ModeOfOperationCBC = function(key, iv) {\n if (!(this instanceof ModeOfOperationCBC)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Block Chaining\";\n this.name = \"cbc\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastCipherblock = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n\n for (var j = 0; j < 16; j++) {\n block[j] ^= this._lastCipherblock[j];\n }\n\n this._lastCipherblock = this._aes.encrypt(block);\n copyArray(this._lastCipherblock, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n\n for (var j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\n }\n\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Feedback (CFB)\n */\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\n if (!(this instanceof ModeOfOperationCFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Feedback\";\n this.name = \"cfb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 size)');\n }\n\n if (!segmentSize) { segmentSize = 1; }\n\n this.segmentSize = segmentSize;\n\n this._shiftRegister = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\n if ((plaintext.length % this.segmentSize) != 0) {\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\n }\n\n var encrypted = coerceArray(plaintext, true);\n\n var xorSegment;\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n for (var j = 0; j < this.segmentSize; j++) {\n encrypted[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return encrypted;\n }\n\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\n if ((ciphertext.length % this.segmentSize) != 0) {\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\n }\n\n var plaintext = coerceArray(ciphertext, true);\n\n var xorSegment;\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n\n for (var j = 0; j < this.segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return plaintext;\n }\n\n /**\n * Mode Of Operation - Output Feedback (OFB)\n */\n var ModeOfOperationOFB = function(key, iv) {\n if (!(this instanceof ModeOfOperationOFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Output Feedback\";\n this.name = \"ofb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastPrecipher = coerceArray(iv, true);\n this._lastPrecipherIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._lastPrecipherIndex === 16) {\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\n this._lastPrecipherIndex = 0;\n }\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\n\n\n /**\n * Counter object for CTR common mode of operation\n */\n var Counter = function(initialValue) {\n if (!(this instanceof Counter)) {\n throw Error('Counter must be instanitated with `new`');\n }\n\n // We allow 0, but anything false-ish uses the default 1\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\n\n if (typeof(initialValue) === 'number') {\n this._counter = createArray(16);\n this.setValue(initialValue);\n\n } else {\n this.setBytes(initialValue);\n }\n }\n\n Counter.prototype.setValue = function(value) {\n if (typeof(value) !== 'number' || parseInt(value) != value) {\n throw new Error('invalid counter value (must be an integer)');\n }\n\n for (var index = 15; index >= 0; --index) {\n this._counter[index] = value % 256;\n value = value >> 8;\n }\n }\n\n Counter.prototype.setBytes = function(bytes) {\n bytes = coerceArray(bytes, true);\n\n if (bytes.length != 16) {\n throw new Error('invalid counter bytes size (must be 16 bytes)');\n }\n\n this._counter = bytes;\n };\n\n Counter.prototype.increment = function() {\n for (var i = 15; i >= 0; i--) {\n if (this._counter[i] === 255) {\n this._counter[i] = 0;\n } else {\n this._counter[i]++;\n break;\n }\n }\n }\n\n\n /**\n * Mode Of Operation - Counter (CTR)\n */\n var ModeOfOperationCTR = function(key, counter) {\n if (!(this instanceof ModeOfOperationCTR)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Counter\";\n this.name = \"ctr\";\n\n if (!(counter instanceof Counter)) {\n counter = new Counter(counter)\n }\n\n this._counter = counter;\n\n this._remainingCounter = null;\n this._remainingCounterIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._remainingCounterIndex === 16) {\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\n this._remainingCounterIndex = 0;\n this._counter.increment();\n }\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\n\n\n ///////////////////////\n // Padding\n\n // See:https://tools.ietf.org/html/rfc2315\n function pkcs7pad(data) {\n data = coerceArray(data, true);\n var padder = 16 - (data.length % 16);\n var result = createArray(data.length + padder);\n copyArray(data, result);\n for (var i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n }\n\n function pkcs7strip(data) {\n data = coerceArray(data, true);\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\n\n var padder = data[data.length - 1];\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\n\n var length = data.length - padder;\n for (var i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new Error('PKCS#7 invalid padding byte');\n }\n }\n\n var result = createArray(length);\n copyArray(data, result, 0, 0, length);\n return result;\n }\n\n ///////////////////////\n // Exporting\n\n\n // The block cipher\n var aesjs = {\n AES: AES,\n Counter: Counter,\n\n ModeOfOperation: {\n ecb: ModeOfOperationECB,\n cbc: ModeOfOperationCBC,\n cfb: ModeOfOperationCFB,\n ofb: ModeOfOperationOFB,\n ctr: ModeOfOperationCTR\n },\n\n utils: {\n hex: convertHex,\n utf8: convertUtf8\n },\n\n padding: {\n pkcs7: {\n pad: pkcs7pad,\n strip: pkcs7strip\n }\n },\n\n _arrayTest: {\n coerceArray: coerceArray,\n createArray: createArray,\n copyArray: copyArray,\n }\n };\n\n\n // node.js\n if (typeof exports !== 'undefined') {\n module.exports = aesjs\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(aesjs);\n\n // Web Browsers\n } else {\n\n // If there was an existing library at \"aesjs\" make sure it's still available\n if (root.aesjs) {\n aesjs._aesjs = root.aesjs;\n }\n\n root.aesjs = aesjs;\n }\n\n\n})(this);\n","'use strict';\n\nvar compileSchema = require('./compile')\n , resolve = require('./compile/resolve')\n , Cache = require('./cache')\n , SchemaObject = require('./compile/schema_obj')\n , stableStringify = require('fast-json-stable-stringify')\n , formats = require('./compile/formats')\n , rules = require('./compile/rules')\n , $dataMetaSchema = require('./data')\n , util = require('./compile/util');\n\nmodule.exports = Ajv;\n\nAjv.prototype.validate = validate;\nAjv.prototype.compile = compile;\nAjv.prototype.addSchema = addSchema;\nAjv.prototype.addMetaSchema = addMetaSchema;\nAjv.prototype.validateSchema = validateSchema;\nAjv.prototype.getSchema = getSchema;\nAjv.prototype.removeSchema = removeSchema;\nAjv.prototype.addFormat = addFormat;\nAjv.prototype.errorsText = errorsText;\n\nAjv.prototype._addSchema = _addSchema;\nAjv.prototype._compile = _compile;\n\nAjv.prototype.compileAsync = require('./compile/async');\nvar customKeyword = require('./keyword');\nAjv.prototype.addKeyword = customKeyword.add;\nAjv.prototype.getKeyword = customKeyword.get;\nAjv.prototype.removeKeyword = customKeyword.remove;\nAjv.prototype.validateKeyword = customKeyword.validate;\n\nvar errorClasses = require('./compile/error_classes');\nAjv.ValidationError = errorClasses.Validation;\nAjv.MissingRefError = errorClasses.MissingRef;\nAjv.$dataMetaSchema = $dataMetaSchema;\n\nvar META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';\n\nvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];\nvar META_SUPPORT_DATA = ['/properties'];\n\n/**\n * Creates validator instance.\n * Usage: `Ajv(opts)`\n * @param {Object} opts optional options\n * @return {Object} ajv instance\n */\nfunction Ajv(opts) {\n if (!(this instanceof Ajv)) return new Ajv(opts);\n opts = this._opts = util.copy(opts) || {};\n setLogger(this);\n this._schemas = {};\n this._refs = {};\n this._fragments = {};\n this._formats = formats(opts.format);\n\n this._cache = opts.cache || new Cache;\n this._loadingSchemas = {};\n this._compilations = [];\n this.RULES = rules();\n this._getId = chooseGetId(opts);\n\n opts.loopRequired = opts.loopRequired || Infinity;\n if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\n if (opts.serialize === undefined) opts.serialize = stableStringify;\n this._metaOpts = getMetaSchemaOptions(this);\n\n if (opts.formats) addInitialFormats(this);\n if (opts.keywords) addInitialKeywords(this);\n addDefaultMetaSchema(this);\n if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);\n if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});\n addInitialSchemas(this);\n}\n\n\n\n/**\n * Validate data using schema\n * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.\n * @this Ajv\n * @param {String|Object} schemaKeyRef key, ref or schema object\n * @param {Any} data to be validated\n * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\n */\nfunction validate(schemaKeyRef, data) {\n var v;\n if (typeof schemaKeyRef == 'string') {\n v = this.getSchema(schemaKeyRef);\n if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\n } else {\n var schemaObj = this._addSchema(schemaKeyRef);\n v = schemaObj.validate || this._compile(schemaObj);\n }\n\n var valid = v(data);\n if (v.$async !== true) this.errors = v.errors;\n return valid;\n}\n\n\n/**\n * Create validating function for passed schema.\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.\n * @return {Function} validating function\n */\nfunction compile(schema, _meta) {\n var schemaObj = this._addSchema(schema, undefined, _meta);\n return schemaObj.validate || this._compile(schemaObj);\n}\n\n\n/**\n * Adds schema to the instance.\n * @this Ajv\n * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\n * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n * @return {Ajv} this for method chaining\n */\nfunction addSchema(schema, key, _skipValidation, _meta) {\n if (Array.isArray(schema)){\n for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n errors = errors || this.errors;\n if (!errors) return 'No errors';\n options = options || {};\n var separator = options.separator === undefined ? ', ' : options.separator;\n var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n var text = '';\n for (var i=0; i%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n mode = mode == 'full' ? 'full' : 'fast';\n return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n 'uri-reference': /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n 'uri-template': URITEMPLATE,\n url: URL,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n hostname: HOSTNAME,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: UUID,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n date: date,\n time: time,\n 'date-time': date_time,\n uri: uri,\n 'uri-reference': URIREF,\n 'uri-template': URITEMPLATE,\n url: URL,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: HOSTNAME,\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n uuid: UUID,\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n var matches = str.match(DATE);\n if (!matches) return false;\n\n var year = +matches[1];\n var month = +matches[2];\n var day = +matches[3];\n\n return month >= 1 && month <= 12 && day >= 1 &&\n day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n var matches = str.match(TIME);\n if (!matches) return false;\n\n var hour = matches[1];\n var minute = matches[2];\n var second = matches[3];\n var timeZone = matches[5];\n return ((hour <= 23 && minute <= 59 && second <= 59) ||\n (hour == 23 && minute == 59 && second == 60)) &&\n (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n var dateTime = str.split(DATE_TIME_SEPARATOR);\n return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n if (Z_ANCHOR.test(str)) return false;\n try {\n new RegExp(str);\n return true;\n } catch(e) {\n return false;\n }\n}\n","'use strict';\n\nvar resolve = require('./resolve')\n , util = require('./util')\n , errorClasses = require('./error_classes')\n , stableStringify = require('fast-json-stable-stringify');\n\nvar validateGenerator = require('../dotjs/validate');\n\n/**\n * Functions below are used inside compiled validations function\n */\n\nvar ucs2length = util.ucs2length;\nvar equal = require('fast-deep-equal');\n\n// this error is thrown by async schemas to return validation errors via exception\nvar ValidationError = errorClasses.Validation;\n\nmodule.exports = compile;\n\n\n/**\n * Compiles schema to validation function\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Object} root object with information about the root schema for this schema\n * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\n * @param {String} baseId base ID for IDs in the schema\n * @return {Function} validation function\n */\nfunction compile(schema, root, localRefs, baseId) {\n /* jshint validthis: true, evil: true */\n /* eslint no-shadow: 0 */\n var self = this\n , opts = this._opts\n , refVal = [ undefined ]\n , refs = {}\n , patterns = []\n , patternsHash = {}\n , defaults = []\n , defaultsHash = {}\n , customRules = [];\n\n root = root || { schema: schema, refVal: refVal, refs: refs };\n\n var c = checkCompiling.call(this, schema, root, baseId);\n var compilation = this._compilations[c.index];\n if (c.compiling) return (compilation.callValidate = callValidate);\n\n var formats = this._formats;\n var RULES = this.RULES;\n\n try {\n var v = localCompile(schema, root, localRefs, baseId);\n compilation.validate = v;\n var cv = compilation.callValidate;\n if (cv) {\n cv.schema = v.schema;\n cv.errors = null;\n cv.refs = v.refs;\n cv.refVal = v.refVal;\n cv.root = v.root;\n cv.$async = v.$async;\n if (opts.sourceCode) cv.source = v.source;\n }\n return v;\n } finally {\n endCompiling.call(this, schema, root, baseId);\n }\n\n /* @this {*} - custom context, see passContext option */\n function callValidate() {\n /* jshint validthis: true */\n var validate = compilation.validate;\n var result = validate.apply(this, arguments);\n callValidate.errors = validate.errors;\n return result;\n }\n\n function localCompile(_schema, _root, localRefs, baseId) {\n var isRoot = !_root || (_root && _root.schema == _schema);\n if (_root.schema != root.schema)\n return compile.call(self, _schema, _root, localRefs, baseId);\n\n var $async = _schema.$async === true;\n\n var sourceCode = validateGenerator({\n isTop: true,\n schema: _schema,\n isRoot: isRoot,\n baseId: baseId,\n root: _root,\n schemaPath: '',\n errSchemaPath: '#',\n errorPath: '\"\"',\n MissingRefError: errorClasses.MissingRef,\n RULES: RULES,\n validate: validateGenerator,\n util: util,\n resolve: resolve,\n resolveRef: resolveRef,\n usePattern: usePattern,\n useDefault: useDefault,\n useCustomRule: useCustomRule,\n opts: opts,\n formats: formats,\n logger: self.logger,\n self: self\n });\n\n sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)\n + vars(defaults, defaultCode) + vars(customRules, customRuleCode)\n + sourceCode;\n\n if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);\n // console.log('\\n\\n\\n *** \\n', JSON.stringify(sourceCode));\n var validate;\n try {\n var makeValidate = new Function(\n 'self',\n 'RULES',\n 'formats',\n 'root',\n 'refVal',\n 'defaults',\n 'customRules',\n 'equal',\n 'ucs2length',\n 'ValidationError',\n sourceCode\n );\n\n validate = makeValidate(\n self,\n RULES,\n formats,\n root,\n refVal,\n defaults,\n customRules,\n equal,\n ucs2length,\n ValidationError\n );\n\n refVal[0] = validate;\n } catch(e) {\n self.logger.error('Error compiling schema, function code:', sourceCode);\n throw e;\n }\n\n validate.schema = _schema;\n validate.errors = null;\n validate.refs = refs;\n validate.refVal = refVal;\n validate.root = isRoot ? validate : _root;\n if ($async) validate.$async = true;\n if (opts.sourceCode === true) {\n validate.source = {\n code: sourceCode,\n patterns: patterns,\n defaults: defaults\n };\n }\n\n return validate;\n }\n\n function resolveRef(baseId, ref, isRoot) {\n ref = resolve.url(baseId, ref);\n var refIndex = refs[ref];\n var _refVal, refCode;\n if (refIndex !== undefined) {\n _refVal = refVal[refIndex];\n refCode = 'refVal[' + refIndex + ']';\n return resolvedRef(_refVal, refCode);\n }\n if (!isRoot && root.refs) {\n var rootRefId = root.refs[ref];\n if (rootRefId !== undefined) {\n _refVal = root.refVal[rootRefId];\n refCode = addLocalRef(ref, _refVal);\n return resolvedRef(_refVal, refCode);\n }\n }\n\n refCode = addLocalRef(ref);\n var v = resolve.call(self, localCompile, root, ref);\n if (v === undefined) {\n var localSchema = localRefs && localRefs[ref];\n if (localSchema) {\n v = resolve.inlineRef(localSchema, opts.inlineRefs)\n ? localSchema\n : compile.call(self, localSchema, root, localRefs, baseId);\n }\n }\n\n if (v === undefined) {\n removeLocalRef(ref);\n } else {\n replaceLocalRef(ref, v);\n return resolvedRef(v, refCode);\n }\n }\n\n function addLocalRef(ref, v) {\n var refId = refVal.length;\n refVal[refId] = v;\n refs[ref] = refId;\n return 'refVal' + refId;\n }\n\n function removeLocalRef(ref) {\n delete refs[ref];\n }\n\n function replaceLocalRef(ref, v) {\n var refId = refs[ref];\n refVal[refId] = v;\n }\n\n function resolvedRef(refVal, code) {\n return typeof refVal == 'object' || typeof refVal == 'boolean'\n ? { code: code, schema: refVal, inline: true }\n : { code: code, $async: refVal && !!refVal.$async };\n }\n\n function usePattern(regexStr) {\n var index = patternsHash[regexStr];\n if (index === undefined) {\n index = patternsHash[regexStr] = patterns.length;\n patterns[index] = regexStr;\n }\n return 'pattern' + index;\n }\n\n function useDefault(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n return '' + value;\n case 'string':\n return util.toQuotedString(value);\n case 'object':\n if (value === null) return 'null';\n var valueStr = stableStringify(value);\n var index = defaultsHash[valueStr];\n if (index === undefined) {\n index = defaultsHash[valueStr] = defaults.length;\n defaults[index] = value;\n }\n return 'default' + index;\n }\n }\n\n function useCustomRule(rule, schema, parentSchema, it) {\n if (self._opts.validateSchema !== false) {\n var deps = rule.definition.dependencies;\n if (deps && !deps.every(function(keyword) {\n return Object.prototype.hasOwnProperty.call(parentSchema, keyword);\n }))\n throw new Error('parent schema must have all required keywords: ' + deps.join(','));\n\n var validateSchema = rule.definition.validateSchema;\n if (validateSchema) {\n var valid = validateSchema(schema);\n if (!valid) {\n var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);\n if (self._opts.validateSchema == 'log') self.logger.error(message);\n else throw new Error(message);\n }\n }\n }\n\n var compile = rule.definition.compile\n , inline = rule.definition.inline\n , macro = rule.definition.macro;\n\n var validate;\n if (compile) {\n validate = compile.call(self, schema, parentSchema, it);\n } else if (macro) {\n validate = macro.call(self, schema, parentSchema, it);\n if (opts.validateSchema !== false) self.validateSchema(validate, true);\n } else if (inline) {\n validate = inline.call(self, it, rule.keyword, schema, parentSchema);\n } else {\n validate = rule.definition.validate;\n if (!validate) return;\n }\n\n if (validate === undefined)\n throw new Error('custom keyword \"' + rule.keyword + '\"failed to compile');\n\n var index = customRules.length;\n customRules[index] = validate;\n\n return {\n code: 'customRule' + index,\n validate: validate\n };\n }\n}\n\n\n/**\n * Checks if the schema is currently compiled\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Object} object with properties \"index\" (compilation index) and \"compiling\" (boolean)\n */\nfunction checkCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var index = compIndex.call(this, schema, root, baseId);\n if (index >= 0) return { index: index, compiling: true };\n index = this._compilations.length;\n this._compilations[index] = {\n schema: schema,\n root: root,\n baseId: baseId\n };\n return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var i = compIndex.call(this, schema, root, baseId);\n if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n /* jshint validthis: true */\n for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n }\n }\n return length;\n};\n","'use strict';\n\n\nmodule.exports = {\n copy: copy,\n checkDataType: checkDataType,\n checkDataTypes: checkDataTypes,\n coerceToTypes: coerceToTypes,\n toHash: toHash,\n getProperty: getProperty,\n escapeQuotes: escapeQuotes,\n equal: require('fast-deep-equal'),\n ucs2length: require('./ucs2length'),\n varOccurences: varOccurences,\n varReplace: varReplace,\n schemaHasRules: schemaHasRules,\n schemaHasRulesExcept: schemaHasRulesExcept,\n schemaUnknownRules: schemaUnknownRules,\n toQuotedString: toQuotedString,\n getPathExpr: getPathExpr,\n getPath: getPath,\n getData: getData,\n unescapeFragment: unescapeFragment,\n unescapeJsonPointer: unescapeJsonPointer,\n escapeFragment: escapeFragment,\n escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n to = to || {};\n for (var key in o) to[key] = o[key];\n return to;\n}\n\n\nfunction checkDataType(dataType, data, strictNumbers, negate) {\n var EQUAL = negate ? ' !== ' : ' === '\n , AND = negate ? ' || ' : ' && '\n , OK = negate ? '!' : ''\n , NOT = negate ? '' : '!';\n switch (dataType) {\n case 'null': return data + EQUAL + 'null';\n case 'array': return OK + 'Array.isArray(' + data + ')';\n case 'object': return '(' + OK + data + AND +\n 'typeof ' + data + EQUAL + '\"object\"' + AND +\n NOT + 'Array.isArray(' + data + '))';\n case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n NOT + '(' + data + ' % 1)' +\n AND + data + EQUAL + data +\n (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n case 'number': return '(typeof ' + data + EQUAL + '\"' + dataType + '\"' +\n (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n }\n}\n\n\nfunction checkDataTypes(dataTypes, data, strictNumbers) {\n switch (dataTypes.length) {\n case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);\n default:\n var code = '';\n var types = toHash(dataTypes);\n if (types.array && types.object) {\n code = types.null ? '(': '(!' + data + ' || ';\n code += 'typeof ' + data + ' !== \"object\")';\n delete types.null;\n delete types.array;\n delete types.object;\n }\n if (types.number) delete types.integer;\n for (var t in types)\n code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);\n\n return code;\n }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n if (Array.isArray(dataTypes)) {\n var types = [];\n for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n return paths[lvl - up];\n }\n\n if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n data = 'data' + ((lvl - up) || '');\n if (!jsonPointer) return data;\n }\n\n var expr = data;\n var segments = jsonPointer.split('/');\n for (var i=0; i',\n $notOp = $isMax ? '>' : '<',\n $errorKeyword = undefined;\n if (!($isData || typeof $schema == 'number' || $schema === undefined)) {\n throw new Error($keyword + ' must be number');\n }\n if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {\n throw new Error($exclusiveKeyword + ' must be number or boolean');\n }\n if ($isDataExcl) {\n var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n $exclusive = 'exclusive' + $lvl,\n $exclType = 'exclType' + $lvl,\n $exclIsNumber = 'exclIsNumber' + $lvl,\n $opExpr = 'op' + $lvl,\n $opStr = '\\' + ' + $opExpr + ' + \\'';\n out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n $schemaValueExcl = 'schemaExcl' + $lvl;\n out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n var $errorKeyword = $exclusiveKeyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n if ($schema === undefined) {\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaValueExcl;\n $isData = $isDataExcl;\n }\n } else {\n var $exclIsNumber = typeof $schemaExcl == 'number',\n $opStr = $op;\n if ($exclIsNumber && $isData) {\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n } else {\n if ($exclIsNumber && $schema === undefined) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaExcl;\n $notOp += '=';\n } else {\n if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $notOp += '=';\n } else {\n $exclusive = false;\n $opStr += '=';\n }\n }\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n }\n }\n $errorKeyword = $errorKeyword || $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ' + ($opStr) + ' ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxItems' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxItems') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxLength' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n if (it.opts.unicode === false) {\n out += ' ' + ($data) + '.length ';\n } else {\n out += ' ucs2length(' + ($data) + ') ';\n }\n out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be ';\n if ($keyword == 'maxLength') {\n out += 'longer';\n } else {\n out += 'shorter';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' characters\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxProperties' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxProperties') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' properties\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $allSchemasEmpty = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n $allSchemasEmpty = false;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($breakOnError) {\n if ($allSchemasEmpty) {\n out += ' if (true) { ';\n } else {\n out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $noEmptySchema = $schema.every(function($sch) {\n return (it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all));\n });\n if ($noEmptySchema) {\n var $currentBaseId = $it.baseId;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n $closingBraces += '}';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match some schema in anyOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $comment = it.util.toQuotedString($schema);\n if (it.opts.$comment === true) {\n out += ' console.log(' + ($comment) + ');';\n } else if (typeof it.opts.$comment == 'function') {\n out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!$isData) {\n out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to constant\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId,\n $nonEmptySchema = (it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all));\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($nonEmptySchema) {\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (' + ($nextValid) + ') break; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n } else {\n out += ' if (' + ($data) + '.length == 0) {';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should contain a valid item\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n if ($nonEmptySchema) {\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n }\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_custom(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $rule = this,\n $definition = 'definition' + $lvl,\n $rDef = $rule.definition,\n $closingBraces = '';\n var $compile, $inline, $macro, $ruleValidate, $validateCode;\n if ($isData && $rDef.$data) {\n $validateCode = 'keywordValidate' + $lvl;\n var $validateSchema = $rDef.validateSchema;\n out += ' var ' + ($definition) + ' = RULES.custom[\\'' + ($keyword) + '\\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';\n } else {\n $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);\n if (!$ruleValidate) return;\n $schemaValue = 'validate.schema' + $schemaPath;\n $validateCode = $ruleValidate.code;\n $compile = $rDef.compile;\n $inline = $rDef.inline;\n $macro = $rDef.macro;\n }\n var $ruleErrs = $validateCode + '.errors',\n $i = 'i' + $lvl,\n $ruleErr = 'ruleErr' + $lvl,\n $asyncKeyword = $rDef.async;\n if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');\n if (!($inline || $macro)) {\n out += '' + ($ruleErrs) + ' = null;';\n }\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($isData && $rDef.$data) {\n $closingBraces += '}';\n out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';\n if ($validateSchema) {\n $closingBraces += '}';\n out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';\n }\n }\n if ($inline) {\n if ($rDef.statements) {\n out += ' ' + ($ruleValidate.validate) + ' ';\n } else {\n out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';\n }\n } else if ($macro) {\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n $it.schema = $ruleValidate.validate;\n $it.schemaPath = '';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it).replace(/validate\\.schema/g, $validateCode);\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($code);\n } else {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n out += ' ' + ($validateCode) + '.call( ';\n if (it.opts.passContext) {\n out += 'this';\n } else {\n out += 'self';\n }\n if ($compile || $rDef.schema === false) {\n out += ' , ' + ($data) + ' ';\n } else {\n out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';\n }\n out += ' , (dataPath || \\'\\')';\n if (it.errorPath != '\"\"') {\n out += ' + ' + (it.errorPath);\n }\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) ';\n var def_callRuleValidate = out;\n out = $$outStack.pop();\n if ($rDef.errors === false) {\n out += ' ' + ($valid) + ' = ';\n if ($asyncKeyword) {\n out += 'await ';\n }\n out += '' + (def_callRuleValidate) + '; ';\n } else {\n if ($asyncKeyword) {\n $ruleErrs = 'customErrors' + $lvl;\n out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';\n } else {\n out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';\n }\n }\n }\n if ($rDef.modifying) {\n out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';\n }\n out += '' + ($closingBraces);\n if ($rDef.valid) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n } else {\n out += ' if ( ';\n if ($rDef.valid === undefined) {\n out += ' !';\n if ($macro) {\n out += '' + ($nextValid);\n } else {\n out += '' + ($valid);\n }\n } else {\n out += ' ' + (!$rDef.valid) + ' ';\n }\n out += ') { ';\n $errorKeyword = $rule.keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n var def_customError = out;\n out = $$outStack.pop();\n if ($inline) {\n if ($rDef.errors) {\n if ($rDef.errors != 'full') {\n out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + ' 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n out += ') { ';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + it.util.getProperty($property);\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $i = 'i' + $lvl,\n $vSchema = 'schema' + $lvl;\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ';';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to one of the allowed values\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n if (it.opts.format === false) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $unknownFormats = it.opts.unknownFormats,\n $allowUnknown = Array.isArray($unknownFormats);\n if ($isData) {\n var $format = 'format' + $lvl,\n $isObject = 'isObject' + $lvl,\n $formatType = 'formatType' + $lvl;\n out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n if (it.async) {\n out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n }\n out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' (';\n if ($unknownFormats != 'ignore') {\n out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n if ($allowUnknown) {\n out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n }\n out += ') || ';\n }\n out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n if (it.async) {\n out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n } else {\n out += ' ' + ($format) + '(' + ($data) + ') ';\n }\n out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n } else {\n var $format = it.formats[$schema];\n if (!$format) {\n if ($unknownFormats == 'ignore') {\n it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else {\n throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n var $formatType = $isObject && $format.type || 'string';\n if ($isObject) {\n var $async = $format.async === true;\n $format = $format.validate;\n }\n if ($formatType != $ruleType) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n if ($async) {\n if (!it.async) throw new Error('async format in sync schema');\n var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n } else {\n out += ' if (! ';\n var $formatRef = 'formats' + it.util.getProperty($schema);\n if ($isObject) $formatRef += '.validate';\n if (typeof $format == 'function') {\n out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n } else {\n out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n }\n out += ') { ';\n }\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match format \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $thenSch = it.schema['then'],\n $elseSch = it.schema['else'],\n $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? (typeof $thenSch == 'object' && Object.keys($thenSch).length > 0) || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)),\n $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? (typeof $elseSch == 'object' && Object.keys($elseSch).length > 0) || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)),\n $currentBaseId = $it.baseId;\n if ($thenPresent || $elsePresent) {\n var $ifClause;\n $it.createErrors = false;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n $it.createErrors = true;\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n if ($thenPresent) {\n out += ' if (' + ($nextValid) + ') { ';\n $it.schema = it.schema['then'];\n $it.schemaPath = it.schemaPath + '.then';\n $it.errSchemaPath = it.errSchemaPath + '/then';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n } else {\n $ifClause = '\\'then\\'';\n }\n out += ' } ';\n if ($elsePresent) {\n out += ' else { ';\n }\n } else {\n out += ' if (!' + ($nextValid) + ') { ';\n }\n if ($elsePresent) {\n $it.schema = it.schema['else'];\n $it.schemaPath = it.schemaPath + '.else';\n $it.errSchemaPath = it.errSchemaPath + '/else';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n } else {\n $ifClause = '\\'else\\'';\n }\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n '$ref': require('./ref'),\n allOf: require('./allOf'),\n anyOf: require('./anyOf'),\n '$comment': require('./comment'),\n const: require('./const'),\n contains: require('./contains'),\n dependencies: require('./dependencies'),\n 'enum': require('./enum'),\n format: require('./format'),\n 'if': require('./if'),\n items: require('./items'),\n maximum: require('./_limit'),\n minimum: require('./_limit'),\n maxItems: require('./_limitItems'),\n minItems: require('./_limitItems'),\n maxLength: require('./_limitLength'),\n minLength: require('./_limitLength'),\n maxProperties: require('./_limitProperties'),\n minProperties: require('./_limitProperties'),\n multipleOf: require('./multipleOf'),\n not: require('./not'),\n oneOf: require('./oneOf'),\n pattern: require('./pattern'),\n properties: require('./properties'),\n propertyNames: require('./propertyNames'),\n required: require('./required'),\n uniqueItems: require('./uniqueItems'),\n validate: require('./validate')\n};\n","'use strict';\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId;\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if (Array.isArray($schema)) {\n var $additionalItems = it.schema.additionalItems;\n if ($additionalItems === false) {\n out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n var $passData = $data + '[' + $i + ']';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n $it.dataPathArr[$dataNxt] = $i;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? (typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0) || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n $it.schema = $additionalItems;\n $it.schemaPath = it.schemaPath + '.additionalItems';\n $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n } else if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' }';\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n out += 'var division' + ($lvl) + ';if (';\n if ($isData) {\n out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n }\n out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n if (it.opts.multipleOfPrecision) {\n out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n } else {\n out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n }\n out += ' ) ';\n if ($isData) {\n out += ' ) ';\n }\n out += ' ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be multiple of ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.createErrors = false;\n var $allErrorsOption;\n if ($it.opts.allErrors) {\n $allErrorsOption = $it.opts.allErrors;\n $it.opts.allErrors = false;\n }\n out += ' ' + (it.validate($it)) + ' ';\n $it.createErrors = true;\n if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (' + ($nextValid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n out += ' var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $prevValid = 'prevValid' + $lvl,\n $passingSchemas = 'passingSchemas' + $lvl;\n out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n } else {\n out += ' var ' + ($nextValid) + ' = true; ';\n }\n if ($i) {\n out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n $closingBraces += '}';\n }\n out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match pattern \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl;\n var $schemaKeys = Object.keys($schema || {}).filter(notProto),\n $pProperties = it.schema.patternProperties || {},\n $pPropertyKeys = Object.keys($pProperties).filter(notProto),\n $aProperties = it.schema.additionalProperties,\n $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n $noAdditional = $aProperties === false,\n $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n $removeAdditional = it.opts.removeAdditional,\n $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n var $required = it.schema.required;\n if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {\n var $requiredHash = it.util.toHash($required);\n }\n\n function notProto(p) {\n return p !== '__proto__';\n }\n out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined;';\n }\n if ($checkAdditional) {\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n if ($someProperties) {\n out += ' var isAdditional' + ($lvl) + ' = !(false ';\n if ($schemaKeys.length) {\n if ($schemaKeys.length > 8) {\n out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n } else {\n var arr1 = $schemaKeys;\n if (arr1) {\n var $propertyKey, i1 = -1,\n l1 = arr1.length - 1;\n while (i1 < l1) {\n $propertyKey = arr1[i1 += 1];\n out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr2 = $pPropertyKeys;\n if (arr2) {\n var $pProperty, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $pProperty = arr2[$i += 1];\n out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n }\n }\n }\n out += ' ); if (isAdditional' + ($lvl) + ') { ';\n }\n if ($removeAdditional == 'all') {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n var $currentErrorPath = it.errorPath;\n var $additionalProperty = '\\' + ' + $key + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n }\n if ($noAdditional) {\n if ($removeAdditional) {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n out += ' ' + ($nextValid) + ' = false; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is an invalid additional property';\n } else {\n out += 'should NOT have additional properties';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n out += ' break; ';\n }\n }\n } else if ($additionalIsSchema) {\n if ($removeAdditional == 'failing') {\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n } else {\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n }\n if ($someProperties) {\n out += ' } ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n if ($schemaKeys.length) {\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n var $prop = it.util.getProperty($propertyKey),\n $passData = $data + $prop,\n $hasDefault = $useDefaults && $sch.default !== undefined;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + $prop;\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n $code = it.util.varReplace($code, $nextData, $passData);\n var $useData = $passData;\n } else {\n var $useData = $nextData;\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n }\n if ($hasDefault) {\n out += ' ' + ($code) + ' ';\n } else {\n if ($requiredHash && $requiredHash[$propertyKey]) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = false; ';\n var $currentErrorPath = it.errorPath,\n $currErrSchemaPath = $errSchemaPath,\n $missingProperty = it.util.escapeQuotes($propertyKey);\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n $errSchemaPath = it.errSchemaPath + '/required';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n it.errorPath = $currentErrorPath;\n out += ' } else { ';\n } else {\n if ($breakOnError) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = true; } else { ';\n } else {\n out += ' if (' + ($useData) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ' ) { ';\n }\n }\n out += ' ' + ($code) + ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr4 = $pPropertyKeys;\n if (arr4) {\n var $pProperty, i4 = -1,\n l4 = arr4.length - 1;\n while (i4 < l4) {\n $pProperty = arr4[i4 += 1];\n var $sch = $pProperties[$pProperty];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else ' + ($nextValid) + ' = true; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n out += 'var ' + ($errs) + ' = errors;';\n if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $i = 'i' + $lvl,\n $invalidName = '\\' + ' + $key + ' + \\'',\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined; ';\n }\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' var startErrs' + ($lvl) + ' = errors; ';\n var $passData = $key;\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + ' 0) || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n $required[$required.length] = $property;\n }\n }\n }\n } else {\n var $required = $schema;\n }\n }\n if ($isData || $required.length) {\n var $currentErrorPath = it.errorPath,\n $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n $ownProperties = it.opts.ownProperties;\n if ($breakOnError) {\n out += ' var missing' + ($lvl) + '; ';\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n out += ' var ' + ($valid) + ' = true; ';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += '; if (!' + ($valid) + ') break; } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n } else {\n out += ' if ( ';\n var arr2 = $required;\n if (arr2) {\n var $propertyKey, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $propertyKey = arr2[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ') { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n }\n } else {\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n if ($isData) {\n out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n if ($isData) {\n out += ' } ';\n }\n } else {\n var arr3 = $required;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n }\n it.errorPath = $currentErrorPath;\n } else if ($breakOnError) {\n out += ' if (true) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (($schema || $isData) && it.opts.uniqueItems !== false) {\n if ($isData) {\n out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n }\n out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n var $itemType = it.schema.items && it.schema.items.type,\n $typeIsArray = Array.isArray($itemType);\n if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n } else {\n out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';\n if ($typeIsArray) {\n out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n }\n out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n }\n out += ' } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_validate(it, $keyword, $ruleType) {\n var out = '';\n var $async = it.schema.$async === true,\n $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),\n $id = it.self._getId(it.schema);\n if (it.opts.strictKeywords) {\n var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);\n if ($unknownKwd) {\n var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;\n if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);\n else throw new Error($keywordsMsg);\n }\n }\n if (it.isTop) {\n out += ' var validate = ';\n if ($async) {\n it.async = true;\n out += 'async ';\n }\n out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \\'use strict\\'; ';\n if ($id && (it.opts.sourceCode || it.opts.processCode)) {\n out += ' ' + ('/\\*# sourceURL=' + $id + ' */') + ' ';\n }\n }\n if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {\n var $keyword = 'false schema';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n if (it.schema === false) {\n if (it.isTop) {\n $breakOnError = true;\n } else {\n out += ' var ' + ($valid) + ' = false; ';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'false schema') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'boolean schema is false\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n } else {\n if (it.isTop) {\n if ($async) {\n out += ' return data; ';\n } else {\n out += ' validate.errors = null; return true; ';\n }\n } else {\n out += ' var ' + ($valid) + ' = true; ';\n }\n }\n if (it.isTop) {\n out += ' }; return validate; ';\n }\n return out;\n }\n if (it.isTop) {\n var $top = it.isTop,\n $lvl = it.level = 0,\n $dataLvl = it.dataLevel = 0,\n $data = 'data';\n it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));\n it.baseId = it.baseId || it.rootId;\n delete it.isTop;\n it.dataPathArr = [\"\"];\n if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored in the schema root';\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n out += ' var vErrors = null; ';\n out += ' var errors = 0; ';\n out += ' if (rootData === undefined) rootData = data; ';\n } else {\n var $lvl = it.level,\n $dataLvl = it.dataLevel,\n $data = 'data' + ($dataLvl || '');\n if ($id) it.baseId = it.resolve.url(it.baseId, $id);\n if ($async && !it.async) throw new Error('async schema in sync schema');\n out += ' var errs_' + ($lvl) + ' = errors;';\n }\n var $valid = 'valid' + $lvl,\n $breakOnError = !it.opts.allErrors,\n $closingBraces1 = '',\n $closingBraces2 = '';\n var $errorKeyword;\n var $typeSchema = it.schema.type,\n $typeIsArray = Array.isArray($typeSchema);\n if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {\n if ($typeIsArray) {\n if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');\n } else if ($typeSchema != 'null') {\n $typeSchema = [$typeSchema, 'null'];\n $typeIsArray = true;\n }\n }\n if ($typeIsArray && $typeSchema.length == 1) {\n $typeSchema = $typeSchema[0];\n $typeIsArray = false;\n }\n if (it.schema.$ref && $refKeywords) {\n if (it.opts.extendRefs == 'fail') {\n throw new Error('$ref: validation keywords used in schema at path \"' + it.errSchemaPath + '\" (see option extendRefs)');\n } else if (it.opts.extendRefs !== true) {\n $refKeywords = false;\n it.logger.warn('$ref: keywords ignored in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n if (it.schema.$comment && it.opts.$comment) {\n out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));\n }\n if ($typeSchema) {\n if (it.opts.coerceTypes) {\n var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);\n }\n var $rulesGroup = it.RULES.types[$typeSchema];\n if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type';\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type',\n $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\n out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';\n if ($coerceToTypes) {\n var $dataType = 'dataType' + $lvl,\n $coerced = 'coerced' + $lvl;\n out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';\n if (it.opts.coerceTypes == 'array') {\n out += ' if (' + ($dataType) + ' == \\'object\\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } ';\n }\n out += ' if (' + ($coerced) + ' !== undefined) ; ';\n var arr1 = $coerceToTypes;\n if (arr1) {\n var $type, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $type = arr1[$i += 1];\n if ($type == 'string') {\n out += ' else if (' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\') ' + ($coerced) + ' = \\'\\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \\'\\'; ';\n } else if ($type == 'number' || $type == 'integer') {\n out += ' else if (' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \\'string\\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';\n if ($type == 'integer') {\n out += ' && !(' + ($data) + ' % 1)';\n }\n out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';\n } else if ($type == 'boolean') {\n out += ' else if (' + ($data) + ' === \\'false\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \\'true\\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';\n } else if ($type == 'null') {\n out += ' else if (' + ($data) + ' === \\'\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';\n } else if (it.opts.coerceTypes == 'array' && $type == 'array') {\n out += ' else if (' + ($dataType) + ' == \\'string\\' || ' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';\n }\n }\n }\n out += ' else { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } if (' + ($coerced) + ' !== undefined) { ';\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' ' + ($data) + ' = ' + ($coerced) + '; ';\n if (!$dataLvl) {\n out += 'if (' + ($parentData) + ' !== undefined)';\n }\n out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';\n } else {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n }\n out += ' } ';\n }\n }\n if (it.schema.$ref && !$refKeywords) {\n out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';\n if ($breakOnError) {\n out += ' } if (errors === ';\n if ($top) {\n out += '0';\n } else {\n out += 'errs_' + ($lvl);\n }\n out += ') { ';\n $closingBraces2 += '}';\n }\n } else {\n var arr2 = it.RULES;\n if (arr2) {\n var $rulesGroup, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $rulesGroup = arr2[i2 += 1];\n if ($shouldUseGroup($rulesGroup)) {\n if ($rulesGroup.type) {\n out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';\n }\n if (it.opts.useDefaults) {\n if ($rulesGroup.type == 'object' && it.schema.properties) {\n var $schema = it.schema.properties,\n $schemaKeys = Object.keys($schema);\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ($sch.default !== undefined) {\n var $passData = $data + it.util.getProperty($propertyKey);\n if (it.compositeRule) {\n if (it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored for: ' + $passData;\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n } else {\n out += ' if (' + ($passData) + ' === undefined ';\n if (it.opts.useDefaults == 'empty') {\n out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n }\n out += ' ) ' + ($passData) + ' = ';\n if (it.opts.useDefaults == 'shared') {\n out += ' ' + (it.useDefault($sch.default)) + ' ';\n } else {\n out += ' ' + (JSON.stringify($sch.default)) + ' ';\n }\n out += '; ';\n }\n }\n }\n }\n } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {\n var arr4 = it.schema.items;\n if (arr4) {\n var $sch, $i = -1,\n l4 = arr4.length - 1;\n while ($i < l4) {\n $sch = arr4[$i += 1];\n if ($sch.default !== undefined) {\n var $passData = $data + '[' + $i + ']';\n if (it.compositeRule) {\n if (it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored for: ' + $passData;\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n } else {\n out += ' if (' + ($passData) + ' === undefined ';\n if (it.opts.useDefaults == 'empty') {\n out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n }\n out += ' ) ' + ($passData) + ' = ';\n if (it.opts.useDefaults == 'shared') {\n out += ' ' + (it.useDefault($sch.default)) + ' ';\n } else {\n out += ' ' + (JSON.stringify($sch.default)) + ' ';\n }\n out += '; ';\n }\n }\n }\n }\n }\n }\n var arr5 = $rulesGroup.rules;\n if (arr5) {\n var $rule, i5 = -1,\n l5 = arr5.length - 1;\n while (i5 < l5) {\n $rule = arr5[i5 += 1];\n if ($shouldUseRule($rule)) {\n var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);\n if ($code) {\n out += ' ' + ($code) + ' ';\n if ($breakOnError) {\n $closingBraces1 += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces1) + ' ';\n $closingBraces1 = '';\n }\n if ($rulesGroup.type) {\n out += ' } ';\n if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {\n out += ' else { ';\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (errors === ';\n if ($top) {\n out += '0';\n } else {\n out += 'errs_' + ($lvl);\n }\n out += ') { ';\n $closingBraces2 += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces2) + ' ';\n }\n if ($top) {\n if ($async) {\n out += ' if (errors === 0) return data; ';\n out += ' else throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; ';\n out += ' return errors === 0; ';\n }\n out += ' }; return validate;';\n } else {\n out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';\n }\n\n function $shouldUseGroup($rulesGroup) {\n var rules = $rulesGroup.rules;\n for (var i = 0; i < rules.length; i++)\n if ($shouldUseRule(rules[i])) return true;\n }\n\n function $shouldUseRule($rule) {\n return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));\n }\n\n function $ruleImplementsSomeKeyword($rule) {\n var impl = $rule.implements;\n for (var i = 0; i < impl.length; i++)\n if (it.schema[impl[i]] !== undefined) return true;\n }\n return out;\n}\n","'use strict';\n\nvar IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;\nvar customRuleCode = require('./dotjs/custom');\nvar definitionSchema = require('./definition_schema');\n\nmodule.exports = {\n add: addKeyword,\n get: getKeyword,\n remove: removeKeyword,\n validate: validateKeyword\n};\n\n\n/**\n * Define custom keyword\n * @this Ajv\n * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).\n * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\n * @return {Ajv} this for method chaining\n */\nfunction addKeyword(keyword, definition) {\n /* jshint validthis: true */\n /* eslint no-shadow: 0 */\n var RULES = this.RULES;\n if (RULES.keywords[keyword])\n throw new Error('Keyword ' + keyword + ' is already defined');\n\n if (!IDENTIFIER.test(keyword))\n throw new Error('Keyword ' + keyword + ' is not a valid identifier');\n\n if (definition) {\n this.validateKeyword(definition, true);\n\n var dataType = definition.type;\n if (Array.isArray(dataType)) {\n for (var i=0; i= this.wordsInUse) {\n this.ensureSize(w + 1);\n this.wordsInUse = w + 1;\n }\n const bit = 1 << bitIndex;\n this.words[w] |= bit;\n }\n\n /**\n * @param {number} bitIndex\n */\n clear(bitIndex) {\n const w = wordIndex(bitIndex);\n if (w >= this.wordsInUse) return;\n const mask = ~(1 << bitIndex);\n this.words[w] &= mask;\n }\n\n /**\n * @param {number} bitIndex\n */\n get(bitIndex) {\n const w = wordIndex(bitIndex);\n if (w >= this.wordsInUse) return false; // >= since index vs size\n const bit = 1 << bitIndex;\n return !!(this.words[w] & bit);\n }\n\n /**\n * Give the next bit that is set on or after fromIndex, or -1 if no such bit\n *\n * @param {number} fromIndex\n */\n nextSetBit(fromIndex) {\n let w = wordIndex(fromIndex);\n if (w >= this.wordsInUse) return -1;\n\n // the right-hand side is shifted to only test the bits of the first\n // word that are > fromIndex\n let word = this.words[w] & (0xffffffff << fromIndex);\n while (true) {\n if (word) return (w * 32) + trailingZeros(word);\n w++;\n if (w === this.wordsInUse) return -1;\n word = this.words[w];\n }\n }\n\n /**\n * @param {number} fromIndex\n */\n nextClearBit(fromIndex) {\n let w = wordIndex(fromIndex);\n if (w >= this.wordsInUse) return fromIndex;\n\n let word = ~(this.words[w]) & (0xffffffff << fromIndex);\n while (true) {\n if (word) return (w * 32) + trailingZeros(word);\n w++;\n if (w == this.wordsInUse) return w * 32;\n word = ~(this.words[w]);\n }\n }\n}\n\n/**\n * @param {number} bitIndex\n */\nfunction wordIndex(bitIndex) {\n return Math.floor(bitIndex / 32);\n}\n\n/**\n * @param {number} i\n */\nfunction trailingZeros(i) {\n // From Hacker's Delight, via JDK. Probably far less effective here,\n // since bit ops are not necessarily the quick way to do things in\n // JS.\n if (i === 0) return 32;\n let y, n = 31;\n y = i << 16; if (y != 0) { n = n -16; i = y; }\n y = i << 8; if (y != 0) { n = n - 8; i = y; }\n y = i << 4; if (y != 0) { n = n - 4; i = y; }\n y = i << 2; if (y != 0) { n = n - 2; i = y; }\n return n - ((i << 1) >>> 31);\n}\n\nmodule.exports.BitSet = BitSet;\n","//\n//\n//\n\n// Channel machinery.\n\n'use strict';\n\nvar defs = require('./defs');\nvar closeMsg = require('./format').closeMessage;\nvar inspect = require('./format').inspect;\nvar methodName = require('./format').methodName;\nvar assert = require('assert');\nvar inherits = require('util').inherits;\nvar EventEmitter = require('events').EventEmitter;\nvar fmt = require('util').format;\nvar IllegalOperationError = require('./error').IllegalOperationError;\nvar stackCapture = require('./error').stackCapture;\nfunction Channel(connection) {\n EventEmitter.call( this );\n this.connection = connection;\n // for the presently outstanding RPC\n this.reply = null;\n // for the RPCs awaiting action\n this.pending = [];\n // for unconfirmed messages\n this.lwm = 1; // the least, unconfirmed deliveryTag\n this.unconfirmed = []; // rolling window of delivery callbacks\n this.on('ack', this.handleConfirm.bind(this, function(cb) {\n if (cb) cb(null);\n }));\n this.on('nack', this.handleConfirm.bind(this, function(cb) {\n if (cb) cb(new Error('message nacked'));\n }));\n this.on('close', function () {\n var cb;\n while (cb = this.unconfirmed.shift()) {\n if (cb) cb(new Error('channel closed'));\n }\n })\n // message frame state machine\n this.handleMessage = acceptDeliveryOrReturn;\n}\ninherits(Channel, EventEmitter);\n\nmodule.exports.Channel = Channel;\nmodule.exports.acceptMessage = acceptMessage;\n\nvar C = Channel.prototype;\n\nC.allocate = function() {\n this.ch = this.connection.freshChannel(this);\n return this;\n}\n\n// Incoming frames are either notifications of e.g., message delivery,\n// or replies to something we've sent. In general I deal with the\n// former by emitting an event, and with the latter by keeping a track\n// of what's expecting a reply.\n//\n// The AMQP specification implies that RPCs can't be pipelined; that\n// is, you can have only one outstanding RPC on a channel at a\n// time. Certainly that's what RabbitMQ and its clients assume. For\n// this reason, I buffer RPCs if the channel is already waiting for a\n// reply.\n\n// Just send the damn frame.\nC.sendImmediately = function(method, fields) {\n return this.connection.sendMethod(this.ch, method, fields);\n};\n\n// Invariant: !this.reply -> pending.length == 0. That is, whenever we\n// clear a reply, we must send another RPC (and thereby fill\n// this.reply) if there is one waiting. The invariant relevant here\n// and in `accept`.\nC.sendOrEnqueue = function(method, fields, reply) {\n if (!this.reply) { // if no reply waiting, we can go\n assert(this.pending.length === 0);\n this.reply = reply;\n this.sendImmediately(method, fields);\n }\n else {\n this.pending.push({method: method,\n fields: fields,\n reply: reply});\n }\n};\n\nC.sendMessage = function(fields, properties, content) {\n return this.connection.sendMessage(\n this.ch,\n defs.BasicPublish, fields,\n defs.BasicProperties, properties,\n content);\n};\n\n// Internal, synchronously resolved RPC; the return value is resolved\n// with the whole frame.\nC._rpc = function(method, fields, expect, cb) {\n var self = this;\n\n function reply(err, f) {\n if (err === null) {\n if (f.id === expect) {\n return cb(null, f);\n }\n else {\n // We have detected a problem, so it's up to us to close the\n // channel\n var expectedName = methodName(expect);\n\n var e = new Error(fmt(\"Expected %s; got %s\",\n expectedName, inspect(f, false)));\n self.closeWithError(f.id, fmt('Expected %s; got %s',\n expectedName, methodName(f.id)),\n defs.constants.UNEXPECTED_FRAME, e);\n return cb(e);\n }\n }\n // An error will be given if, for example, this is waiting to be\n // sent and the connection closes\n else if (err instanceof Error) return cb(err);\n // A close frame will be given if this is the RPC awaiting reply\n // and the channel is closed by the server\n else {\n // otherwise, it's a close frame\n var closeReason =\n (err.fields.classId << 16) + err.fields.methodId;\n var e = (method === closeReason)\n ? fmt(\"Operation failed: %s; %s\",\n methodName(method), closeMsg(err))\n : fmt(\"Channel closed by server: %s\", closeMsg(err));\n var closeFrameError = new Error(e);\n closeFrameError.code = err.fields.replyCode;\n closeFrameError.classId = err.fields.classId;\n closeFrameError.methodId = err.fields.methodId;\n return cb(closeFrameError);\n }\n }\n\n this.sendOrEnqueue(method, fields, reply);\n};\n\n// Shutdown protocol. There's three scenarios:\n//\n// 1. The application decides to shut the channel\n// 2. The server decides to shut the channel, possibly because of\n// something the application did\n// 3. The connection is closing, so there won't be any more frames\n// going back and forth.\n//\n// 1 and 2 involve an exchange of method frames (Close and CloseOk),\n// while 3 doesn't; the connection simply says \"shutdown\" to the\n// channel, which then acts as if it's closing, without going through\n// the exchange.\n\nfunction invalidOp(msg, stack) {\n return function() {\n throw new IllegalOperationError(msg, stack);\n };\n}\n\nfunction invalidateSend(ch, msg, stack) {\n ch.sendImmediately = ch.sendOrEnqueue = ch.sendMessage =\n invalidOp(msg, stack);\n}\n\n// Move to entirely closed state.\nC.toClosed = function(capturedStack) {\n this._rejectPending();\n invalidateSend(this, 'Channel closed', capturedStack);\n this.accept = invalidOp('Channel closed', capturedStack);\n this.connection.releaseChannel(this.ch);\n this.emit('close');\n};\n\n// Stop being able to send and receive methods and content. Used when\n// we close the channel. Invokes the continuation once the server has\n// acknowledged the close, but before the channel is moved to the\n// closed state.\nC.toClosing = function(capturedStack, k) {\n var send = this.sendImmediately.bind(this);\n invalidateSend(this, 'Channel closing', capturedStack);\n\n this.accept = function(f) {\n if (f.id === defs.ChannelCloseOk) {\n if (k) k();\n var s = stackCapture('ChannelCloseOk frame received');\n this.toClosed(s);\n }\n else if (f.id === defs.ChannelClose) {\n send(defs.ChannelCloseOk, {});\n }\n // else ignore frame\n };\n};\n\nC._rejectPending = function() {\n function rej(r) {\n r(new Error(\"Channel ended, no reply will be forthcoming\"));\n }\n if (this.reply !== null) rej(this.reply);\n this.reply = null;\n\n var discard;\n while (discard = this.pending.shift()) rej(discard.reply);\n this.pending = null; // so pushes will break\n};\n\nC.closeBecause = function(reason, code, k) {\n this.sendImmediately(defs.ChannelClose, {\n replyText: reason,\n replyCode: code,\n methodId:0, classId: 0\n });\n var s = stackCapture('closeBecause called: ' + reason);\n this.toClosing(s, k);\n};\n\n// If we close because there's been an error, we need to distinguish\n// between what we tell the server (`reason`) and what we report as\n// the cause in the client (`error`).\nC.closeWithError = function(id, reason, code, error) {\n var self = this;\n this.closeBecause(reason, code, function() {\n error.code = code;\n // content frames and consumer errors do not provide a method a class/method ID\n if (id) {\n error.classId = defs.info(id).classId;\n error.methodId = defs.info(id).methodId;\n }\n self.emit('error', error);\n });\n};\n\n// A trampolining state machine for message frames on a channel. A\n// message arrives in at least two frames: first, a method announcing\n// the message (either a BasicDeliver or BasicGetOk); then, a message\n// header with the message properties; then, zero or more content\n// frames.\n\n// Keep the try/catch localised, in an attempt to avoid disabling\n// optimisation\nC.acceptMessageFrame = function(f) {\n try {\n this.handleMessage = this.handleMessage(f);\n }\n catch (msg) {\n if (typeof msg === 'string') {\n this.closeWithError(f.id, msg, defs.constants.UNEXPECTED_FRAME,\n new Error(msg));\n }\n else if (msg instanceof Error) {\n this.closeWithError(f.id, 'Error while processing message',\n defs.constants.INTERNAL_ERROR, msg);\n }\n else {\n this.closeWithError(f.id, 'Internal error while processing message',\n defs.constants.INTERNAL_ERROR,\n new Error(msg.toString()));\n }\n }\n};\n\n// Kick off a message delivery given a BasicDeliver or BasicReturn\n// frame (BasicGet uses the RPC mechanism)\nfunction acceptDeliveryOrReturn(f) {\n var event;\n if (f.id === defs.BasicDeliver) event = 'delivery';\n else if (f.id === defs.BasicReturn) event = 'return';\n else throw fmt(\"Expected BasicDeliver or BasicReturn; got %s\",\n inspect(f));\n\n var self = this;\n var fields = f.fields;\n return acceptMessage(function(message) {\n message.fields = fields;\n self.emit(event, message);\n });\n}\n\n// Move to the state of waiting for message frames (headers, then\n// one or more content frames)\nfunction acceptMessage(continuation) {\n var totalSize = 0, remaining = 0;\n var buffers = null;\n\n var message = {\n fields: null,\n properties: null,\n content: null\n };\n\n return headers;\n\n // expect a headers frame\n function headers(f) {\n if (f.id === defs.BasicProperties) {\n message.properties = f.fields;\n totalSize = remaining = f.size;\n\n // for zero-length messages, content frames aren't required.\n if (totalSize === 0) {\n message.content = Buffer.alloc(0);\n continuation(message);\n return acceptDeliveryOrReturn;\n }\n else {\n return content;\n }\n }\n else {\n throw \"Expected headers frame after delivery\";\n }\n }\n\n // expect a content frame\n // %%% TODO cancelled messages (sent as zero-length content frame)\n function content(f) {\n if (f.content) {\n var size = f.content.length;\n remaining -= size;\n if (remaining === 0) {\n if (buffers !== null) {\n buffers.push(f.content);\n message.content = Buffer.concat(buffers);\n }\n else {\n message.content = f.content;\n }\n continuation(message);\n return acceptDeliveryOrReturn;\n }\n else if (remaining < 0) {\n throw fmt(\"Too much content sent! Expected %d bytes\",\n totalSize);\n }\n else {\n if (buffers !== null)\n buffers.push(f.content);\n else\n buffers = [f.content];\n return content;\n }\n }\n else throw \"Expected content frame after headers\"\n }\n}\n\nC.handleConfirm = function(handle, f) {\n var tag = f.deliveryTag;\n var multi = f.multiple;\n\n if (multi) {\n var confirmed = this.unconfirmed.splice(0, tag - this.lwm + 1);\n this.lwm = tag + 1;\n confirmed.forEach(handle);\n }\n else {\n var c;\n if (tag === this.lwm) {\n c = this.unconfirmed.shift();\n this.lwm++;\n // Advance the LWM and the window to the next non-gap, or\n // possibly to the end\n while (this.unconfirmed[0] === null) {\n this.unconfirmed.shift();\n this.lwm++;\n }\n }\n else {\n c = this.unconfirmed[tag - this.lwm];\n this.unconfirmed[tag - this.lwm] = null;\n }\n // Technically, in the single-deliveryTag case, I should report a\n // protocol breach if it's already been confirmed.\n handle(c);\n }\n};\n\nC.pushConfirmCallback = function(cb) {\n // `null` is used specifically for marking already confirmed slots,\n // so I coerce `undefined` and `null` to false; functions are never\n // falsey.\n this.unconfirmed.push(cb || false);\n};\n\n// Interface for connection to use\n\nC.accept = function(f) {\n\n switch (f.id) {\n\n // Message frames\n case undefined: // content frame!\n case defs.BasicDeliver:\n case defs.BasicReturn:\n case defs.BasicProperties:\n return this.acceptMessageFrame(f);\n\n // confirmations, need to do confirm.select first\n case defs.BasicAck:\n return this.emit('ack', f.fields);\n case defs.BasicNack:\n return this.emit('nack', f.fields);\n case defs.BasicCancel:\n // The broker can send this if e.g., the queue is deleted.\n return this.emit('cancel', f.fields);\n\n case defs.ChannelClose:\n // Any remote closure is an error to us. Reject the pending reply\n // with the close frame, so it can see whether it was that\n // operation that caused it to close.\n if (this.reply) {\n var reply = this.reply; this.reply = null;\n reply(f);\n }\n var emsg = \"Channel closed by server: \" + closeMsg(f);\n this.sendImmediately(defs.ChannelCloseOk, {});\n\n var error = new Error(emsg);\n error.code = f.fields.replyCode;\n error.classId = f.fields.classId;\n error.methodId = f.fields.methodId;\n this.emit('error', error);\n\n var s = stackCapture(emsg);\n this.toClosed(s);\n return;\n\n case defs.BasicFlow:\n // RabbitMQ doesn't send this, it just blocks the TCP socket\n return this.closeWithError(f.id, \"Flow not implemented\",\n defs.constants.NOT_IMPLEMENTED,\n new Error('Flow not implemented'));\n\n default: // assume all other things are replies\n // Resolving the reply may lead to another RPC; to make sure we\n // don't hold that up, clear this.reply\n var reply = this.reply; this.reply = null;\n // however, maybe there's an RPC waiting to go? If so, that'll\n // fill this.reply again, restoring the invariant. This does rely\n // on any response being recv'ed after resolving the promise,\n // below; hence, I use synchronous defer.\n if (this.pending.length > 0) {\n var send = this.pending.shift();\n this.reply = send.reply;\n this.sendImmediately(send.method, send.fields);\n }\n return reply(null, f);\n }\n};\n\nC.onBufferDrain = function() {\n this.emit('drain');\n};\n\n\n// This adds just a bit more stuff useful for the APIs, but not\n// low-level machinery.\nfunction BaseChannel(connection) {\n Channel.call(this, connection);\n this.consumers = new Map();\n}\ninherits(BaseChannel, Channel);\n\nmodule.exports.BaseChannel = BaseChannel;\n\n// Not sure I like the ff, it's going to be changing hidden classes\n// all over the place. On the other hand, whaddya do.\nBaseChannel.prototype.registerConsumer = function(tag, callback) {\n this.consumers.set(tag, callback);\n};\n\nBaseChannel.prototype.unregisterConsumer = function(tag) {\n this.consumers.delete(tag);\n};\n\nBaseChannel.prototype.dispatchMessage = function(fields, message) {\n var consumerTag = fields.consumerTag;\n var consumer = this.consumers.get(consumerTag);\n if (consumer) {\n return consumer(message);\n }\n else {\n // %%% Surely a race here\n throw new Error(\"Unknown consumer: \" + consumerTag);\n }\n};\n\nBaseChannel.prototype.handleDelivery = function(message) {\n return this.dispatchMessage(message.fields, message);\n};\n\nBaseChannel.prototype.handleCancel = function(fields) {\n var result = this.dispatchMessage(fields, null);\n this.unregisterConsumer(fields.consumerTag);\n return result;\n};\n","//\n//\n//\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst Promise = require('bluebird');\nconst defs = require('./defs');\nconst {BaseChannel} = require('./channel');\nconst {acceptMessage} = require('./channel');\nconst Args = require('./api_args');\nconst {inspect} = require('./format');\n\nclass ChannelModel extends EventEmitter {\n constructor(connection) {\n super();\n this.connection = connection;\n\n ['error', 'close', 'blocked', 'unblocked'].forEach(ev => {\n connection.on(ev, this.emit.bind(this, ev));\n });\n }\n\n close() {\n return Promise.fromCallback(this.connection.close.bind(this.connection));\n }\n\n async createChannel() {\n const channel = new Channel(this.connection);\n await channel.open();\n return channel;\n }\n\n async createConfirmChannel() {\n const channel = new ConfirmChannel(this.connection);\n await channel.open();\n await channel.rpc(defs.ConfirmSelect, {nowait: false}, defs.ConfirmSelectOk);\n return channel;\n }\n}\n\n// Channels\n\nclass Channel extends BaseChannel {\n constructor(connection) {\n super(connection);\n this.on('delivery', this.handleDelivery.bind(this));\n this.on('cancel', this.handleCancel.bind(this));\n }\n\n // An RPC that returns a 'proper' promise, which resolves to just the\n // response's fields; this is intended to be suitable for implementing\n // API procedures.\n async rpc(method, fields, expect) {\n const f = await Promise.fromCallback(cb => {\n return this._rpc(method, fields, expect, cb);\n })\n\n return f.fields;\n }\n\n // Do the remarkably simple channel open handshake\n open() {\n return Promise.try(this.allocate.bind(this)).then(\n ch => {\n return ch.rpc(defs.ChannelOpen, {outOfBand: \"\"},\n defs.ChannelOpenOk);\n });\n }\n\n close() {\n return Promise.fromCallback(cb => {\n return this.closeBecause(\"Goodbye\", defs.constants.REPLY_SUCCESS,\n cb);\n });\n }\n\n // === Public API, declaring queues and stuff ===\n\n assertQueue(queue, options) {\n return this.rpc(defs.QueueDeclare,\n Args.assertQueue(queue, options),\n defs.QueueDeclareOk);\n }\n\n checkQueue(queue) {\n return this.rpc(defs.QueueDeclare,\n Args.checkQueue(queue),\n defs.QueueDeclareOk);\n }\n\n deleteQueue(queue, options) {\n return this.rpc(defs.QueueDelete,\n Args.deleteQueue(queue, options),\n defs.QueueDeleteOk);\n }\n\n purgeQueue(queue) {\n return this.rpc(defs.QueuePurge,\n Args.purgeQueue(queue),\n defs.QueuePurgeOk);\n }\n\n bindQueue(queue, source, pattern, argt) {\n return this.rpc(defs.QueueBind,\n Args.bindQueue(queue, source, pattern, argt),\n defs.QueueBindOk);\n }\n\n unbindQueue(queue, source, pattern, argt) {\n return this.rpc(defs.QueueUnbind,\n Args.unbindQueue(queue, source, pattern, argt),\n defs.QueueUnbindOk);\n }\n\n assertExchange(exchange, type, options) {\n // The server reply is an empty set of fields, but it's convenient\n // to have the exchange name handed to the continuation.\n return this.rpc(defs.ExchangeDeclare,\n Args.assertExchange(exchange, type, options),\n defs.ExchangeDeclareOk)\n .then(_ok => { return { exchange }; });\n }\n\n checkExchange(exchange) {\n return this.rpc(defs.ExchangeDeclare,\n Args.checkExchange(exchange),\n defs.ExchangeDeclareOk);\n }\n\n deleteExchange(name, options) {\n return this.rpc(defs.ExchangeDelete,\n Args.deleteExchange(name, options),\n defs.ExchangeDeleteOk);\n }\n\n bindExchange(dest, source, pattern, argt) {\n return this.rpc(defs.ExchangeBind,\n Args.bindExchange(dest, source, pattern, argt),\n defs.ExchangeBindOk);\n }\n\n unbindExchange(dest, source, pattern, argt) {\n return this.rpc(defs.ExchangeUnbind,\n Args.unbindExchange(dest, source, pattern, argt),\n defs.ExchangeUnbindOk);\n }\n\n // Working with messages\n\n publish(exchange, routingKey, content, options) {\n const fieldsAndProps = Args.publish(exchange, routingKey, options);\n return this.sendMessage(fieldsAndProps, fieldsAndProps, content);\n }\n\n sendToQueue(queue, content, options) {\n return this.publish('', queue, content, options);\n }\n\n consume(queue, callback, options) {\n // NB we want the callback to be run synchronously, so that we've\n // registered the consumerTag before any messages can arrive.\n const fields = Args.consume(queue, options);\n return Promise.fromCallback(cb => {\n this._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, cb);\n })\n .then(ok => {\n this.registerConsumer(ok.fields.consumerTag, callback);\n return ok.fields;\n });\n }\n\n async cancel(consumerTag) {\n const ok = await Promise.fromCallback(cb => {\n this._rpc(defs.BasicCancel, Args.cancel(consumerTag),\n defs.BasicCancelOk,\n cb);\n })\n .then(ok => {\n this.unregisterConsumer(consumerTag);\n return ok.fields;\n });\n }\n\n get(queue, options) {\n const fields = Args.get(queue, options);\n return Promise.fromCallback(cb => {\n return this.sendOrEnqueue(defs.BasicGet, fields, cb);\n })\n .then(f => {\n if (f.id === defs.BasicGetEmpty) {\n return false;\n }\n else if (f.id === defs.BasicGetOk) {\n const fields = f.fields;\n return new Promise(resolve => {\n this.handleMessage = acceptMessage(m => {\n m.fields = fields;\n resolve(m);\n });\n });\n }\n else {\n throw new Error(`Unexpected response to BasicGet: ${inspect(f)}`);\n }\n });\n }\n\n ack(message, allUpTo) {\n this.sendImmediately(\n defs.BasicAck,\n Args.ack(message.fields.deliveryTag, allUpTo));\n }\n\n ackAll() {\n this.sendImmediately(defs.BasicAck, Args.ack(0, true));\n }\n\n nack(message, allUpTo, requeue) {\n this.sendImmediately(\n defs.BasicNack,\n Args.nack(message.fields.deliveryTag, allUpTo, requeue));\n }\n\n nackAll(requeue) {\n this.sendImmediately(defs.BasicNack,\n Args.nack(0, true, requeue));\n }\n\n // `Basic.Nack` is not available in older RabbitMQ versions (or in the\n // AMQP specification), so you have to use the one-at-a-time\n // `Basic.Reject`. This is otherwise synonymous with\n // `#nack(message, false, requeue)`.\n reject(message, requeue) {\n this.sendImmediately(\n defs.BasicReject,\n Args.reject(message.fields.deliveryTag, requeue));\n }\n\n recover() {\n return this.rpc(defs.BasicRecover,\n Args.recover(),\n defs.BasicRecoverOk);\n }\n\n qos(count, global) {\n return this.rpc(defs.BasicQos,\n Args.prefetch(count, global),\n defs.BasicQosOk);\n }\n}\n\n// There are more options in AMQP than exposed here; RabbitMQ only\n// implements prefetch based on message count, and only for individual\n// channels or consumers. RabbitMQ v3.3.0 and after treat prefetch\n// (without `global` set) as per-consumer (for consumers following),\n// and prefetch with `global` set as per-channel.\nChannel.prototype.prefetch = Channel.prototype.qos\n\n// Confirm channel. This is a channel with confirms 'switched on',\n// meaning sent messages will provoke a responding 'ack' or 'nack'\n// from the server. The upshot of this is that `publish` and\n// `sendToQueue` both take a callback, which will be called either\n// with `null` as its argument to signify 'ack', or an exception as\n// its argument to signify 'nack'.\n\nclass ConfirmChannel extends Channel {\n publish(exchange, routingKey, content, options, cb) {\n this.pushConfirmCallback(cb);\n return Channel.prototype.publish.call(this, exchange, routingKey, content, options);\n }\n\n sendToQueue(queue, content, options, cb) {\n return this.publish('', queue, content, options, cb);\n }\n\n waitForConfirms() {\n const awaiting = [];\n const unconfirmed = this.unconfirmed;\n unconfirmed.forEach((val, index) => {\n if (val !== null) {\n const confirmed = new Promise((resolve, reject) => {\n unconfirmed[index] = err => {\n if (val) val(err);\n if (err === null) resolve();\n else reject(err);\n };\n });\n awaiting.push(confirmed);\n }\n });\n return Promise.all(awaiting);\n }\n}\n\nmodule.exports.ConfirmChannel = ConfirmChannel;\nmodule.exports.Channel = Channel;\nmodule.exports.ChannelModel = ChannelModel;\n","//\n//\n//\n\n/*\n\nThe AMQP 0-9-1 is a mess when it comes to the types that can be\nencoded on the wire.\n\nThere are four encoding schemes, and three overlapping sets of types:\nframes, methods, (field-)tables, and properties.\n\nEach *frame type* has a set layout in which values of given types are\nconcatenated along with sections of \"raw binary\" data.\n\nIn frames there are `shortstr`s, that is length-prefixed strings of\nUTF8 chars, 8 bit unsigned integers (called `octet`), unsigned 16 bit\nintegers (called `short` or `short-uint`), unsigned 32 bit integers\n(called `long` or `long-uint`), unsigned 64 bit integers (called\n`longlong` or `longlong-uint`), and flags (called `bit`).\n\nMethods are encoded as a frame giving a method ID and a sequence of\narguments of known types. The encoded method argument values are\nconcatenated (with some fun complications around \"packing\" consecutive\nbit values into bytes).\n\nAlong with the types given in frames, method arguments may be long\nbyte strings (`longstr`, not required to be UTF8) or 64 bit unsigned\nintegers to be interpreted as timestamps (yeah I don't know why\neither), or arbitrary sets of key-value pairs (called `field-table`).\n\nInside a field table the keys are `shortstr` and the values are\nprefixed with a byte tag giving the type. The types are any of the\nabove except for bits (which are replaced by byte-wide `bool`), along\nwith a NULL value `void`, a special fixed-precision number encoding\n(`decimal`), IEEE754 `float`s and `double`s, signed integers,\n`field-array` (a sequence of tagged values), and nested field-tables.\n\nRabbitMQ and QPid use a subset of the field-table types, and different\nvalue tags, established before the AMQP 0-9-1 specification was\npublished. So far as I know, no-one uses the types and tags as\npublished. http://www.rabbitmq.com/amqp-0-9-1-errata.html gives the\nlist of field-table types.\n\nLastly, there are (sets of) properties, only one of which is given in\nAMQP 0-9-1: `BasicProperties`. These are almost the same as methods,\nexcept that they appear in content header frames, which include a\ncontent size, and they carry a set of flags indicating which\nproperties are present. This scheme can save ones of bytes per message\n(messages which take a minimum of three frames each to send).\n\n*/\n\n'use strict';\n\nvar ints = require('buffer-more-ints');\n\n// JavaScript uses only doubles so what I'm testing for is whether\n// it's *better* to encode a number as a float or double. This really\n// just amounts to testing whether there's a fractional part to the\n// number, except that see below. NB I don't use bitwise operations to\n// do this 'efficiently' -- it would mask the number to 32 bits.\n//\n// At 2^50, doubles don't have sufficient precision to distinguish\n// between floating point and integer numbers (`Math.pow(2, 50) + 0.1\n// === Math.pow(2, 50)` (and, above 2^53, doubles cannot represent all\n// integers (`Math.pow(2, 53) + 1 === Math.pow(2, 53)`)). Hence\n// anything with a magnitude at or above 2^50 may as well be encoded\n// as a 64-bit integer. Except that only signed integers are supported\n// by RabbitMQ, so anything above 2^63 - 1 must be a double.\nfunction isFloatingPoint(n) {\n return n >= 0x8000000000000000 ||\n (Math.abs(n) < 0x4000000000000\n && Math.floor(n) !== n);\n}\n\nfunction encodeTable(buffer, val, offset) {\n var start = offset;\n offset += 4; // leave room for the table length\n for (var key in val) {\n if (val[key] !== undefined) {\n var len = Buffer.byteLength(key);\n buffer.writeUInt8(len, offset); offset++;\n buffer.write(key, offset, 'utf8'); offset += len;\n offset += encodeFieldValue(buffer, val[key], offset);\n }\n }\n var size = offset - start;\n buffer.writeUInt32BE(size - 4, start);\n return size;\n}\n\nfunction encodeArray(buffer, val, offset) {\n var start = offset;\n offset += 4;\n for (var i=0, num=val.length; i < num; i++) {\n offset += encodeFieldValue(buffer, val[i], offset);\n }\n var size = offset - start;\n buffer.writeUInt32BE(size - 4, start);\n return size;\n}\n\nfunction encodeFieldValue(buffer, value, offset) {\n var start = offset;\n var type = typeof value, val = value;\n // A trapdoor for specifying a type, e.g., timestamp\n if (value && type === 'object' && value.hasOwnProperty('!')) {\n val = value.value;\n type = value['!'];\n }\n\n // If it's a JS number, we'll have to guess what type to encode it\n // as.\n if (type == 'number') {\n // Making assumptions about the kind of number (floating point\n // v integer, signed, unsigned, size) desired is dangerous in\n // general; however, in practice RabbitMQ uses only\n // longstrings and unsigned integers in its arguments, and\n // other clients generally conflate number types anyway. So\n // the only distinction we care about is floating point vs\n // integers, preferring integers since those can be promoted\n // if necessary. If floating point is required, we may as well\n // use double precision.\n if (isFloatingPoint(val)) {\n type = 'double';\n }\n else { // only signed values are used in tables by\n // RabbitMQ. It *used* to (< v3.3.0) treat the byte 'b'\n // type as unsigned, but most clients (and the spec)\n // think it's signed, and now RabbitMQ does too.\n if (val < 128 && val >= -128) {\n type = 'byte';\n }\n else if (val >= -0x8000 && val < 0x8000) {\n type = 'short'\n }\n else if (val >= -0x80000000 && val < 0x80000000) {\n type = 'int';\n }\n else {\n type = 'long';\n }\n }\n }\n\n function tag(t) { buffer.write(t, offset); offset++; }\n\n switch (type) {\n case 'string': // no shortstr in field tables\n var len = Buffer.byteLength(val, 'utf8');\n tag('S');\n buffer.writeUInt32BE(len, offset); offset += 4;\n buffer.write(val, offset, 'utf8'); offset += len;\n break;\n case 'object':\n if (val === null) {\n tag('V');\n }\n else if (Array.isArray(val)) {\n tag('A');\n offset += encodeArray(buffer, val, offset);\n }\n else if (Buffer.isBuffer(val)) {\n tag('x');\n buffer.writeUInt32BE(val.length, offset); offset += 4;\n val.copy(buffer, offset); offset += val.length;\n }\n else {\n tag('F');\n offset += encodeTable(buffer, val, offset);\n }\n break;\n case 'boolean':\n tag('t');\n buffer.writeUInt8((val) ? 1 : 0, offset); offset++;\n break;\n // These are the types that are either guessed above, or\n // explicitly given using the {'!': type} notation.\n case 'double':\n case 'float64':\n tag('d');\n buffer.writeDoubleBE(val, offset);\n offset += 8;\n break;\n case 'byte':\n case 'int8':\n tag('b');\n buffer.writeInt8(val, offset); offset++;\n break;\n case 'short':\n case 'int16':\n tag('s');\n buffer.writeInt16BE(val, offset); offset += 2;\n break;\n case 'int':\n case 'int32':\n tag('I');\n buffer.writeInt32BE(val, offset); offset += 4;\n break;\n case 'long':\n case 'int64':\n tag('l');\n ints.writeInt64BE(buffer, val, offset); offset += 8;\n break;\n\n // Now for exotic types, those can _only_ be denoted by using\n // `{'!': type, value: val}\n case 'timestamp':\n tag('T');\n ints.writeUInt64BE(buffer, val, offset); offset += 8;\n break;\n case 'float':\n tag('f');\n buffer.writeFloatBE(val, offset); offset += 4;\n break;\n case 'decimal':\n tag('D');\n if (val.hasOwnProperty('places') && val.hasOwnProperty('digits')\n && val.places >= 0 && val.places < 256) {\n buffer[offset] = val.places; offset++;\n buffer.writeUInt32BE(val.digits, offset); offset += 4;\n }\n else throw new TypeError(\n \"Decimal value must be {'places': 0..255, 'digits': uint32}, \" +\n \"got \" + JSON.stringify(val));\n break;\n default:\n throw new TypeError('Unknown type to encode: ' + type);\n }\n return offset - start;\n}\n\n// Assume we're given a slice of the buffer that contains just the\n// fields.\nfunction decodeFields(slice) {\n var fields = {}, offset = 0, size = slice.length;\n var len, key, val;\n\n function decodeFieldValue() {\n var tag = String.fromCharCode(slice[offset]); offset++;\n switch (tag) {\n case 'b':\n val = slice.readInt8(offset); offset++;\n break;\n case 'S':\n len = slice.readUInt32BE(offset); offset += 4;\n val = slice.toString('utf8', offset, offset + len);\n offset += len;\n break;\n case 'I':\n val = slice.readInt32BE(offset); offset += 4;\n break;\n case 'D': // only positive decimals, apparently.\n var places = slice[offset]; offset++;\n var digits = slice.readUInt32BE(offset); offset += 4;\n val = {'!': 'decimal', value: {places: places, digits: digits}};\n break;\n case 'T':\n val = ints.readUInt64BE(slice, offset); offset += 8;\n val = {'!': 'timestamp', value: val};\n break;\n case 'F':\n len = slice.readUInt32BE(offset); offset += 4;\n val = decodeFields(slice.slice(offset, offset + len));\n offset += len;\n break;\n case 'A':\n len = slice.readUInt32BE(offset); offset += 4;\n decodeArray(offset + len);\n // NB decodeArray will itself update offset and val\n break;\n case 'd':\n val = slice.readDoubleBE(offset); offset += 8;\n break;\n case 'f':\n val = slice.readFloatBE(offset); offset += 4;\n break;\n case 'l':\n val = ints.readInt64BE(slice, offset); offset += 8;\n break;\n case 's':\n val = slice.readInt16BE(offset); offset += 2;\n break;\n case 't':\n val = slice[offset] != 0; offset++;\n break;\n case 'V':\n val = null;\n break;\n case 'x':\n len = slice.readUInt32BE(offset); offset += 4;\n val = slice.slice(offset, offset + len);\n offset += len;\n break;\n default:\n throw new TypeError('Unexpected type tag \"' + tag +'\"');\n }\n }\n\n function decodeArray(until) {\n var vals = [];\n while (offset < until) {\n decodeFieldValue();\n vals.push(val);\n }\n val = vals;\n }\n\n while (offset < size) {\n len = slice.readUInt8(offset); offset++;\n key = slice.toString('utf8', offset, offset + len);\n offset += len;\n decodeFieldValue();\n fields[key] = val;\n }\n return fields;\n}\n\nmodule.exports.encodeTable = encodeTable;\nmodule.exports.decodeFields = decodeFields;\n","//\n//\n//\n\n// General-purpose API for glueing everything together.\n\n'use strict';\n\nvar URL = require('url-parse');\nvar QS = require('querystring');\nvar Connection = require('./connection').Connection;\nvar fmt = require('util').format;\nvar credentials = require('./credentials');\n\nfunction copyInto(obj, target) {\n var keys = Object.keys(obj);\n var i = keys.length;\n while (i--) {\n var k = keys[i];\n target[k] = obj[k];\n }\n return target;\n}\n\n// Adapted from util._extend, which is too fringe to use.\nfunction clone(obj) {\n return copyInto(obj, {});\n}\n\nvar CLIENT_PROPERTIES = {\n \"product\": \"amqplib\",\n \"version\": require('../package.json').version,\n \"platform\": fmt('Node.JS %s', process.version),\n \"information\": \"http://squaremo.github.io/amqp.node\",\n \"capabilities\": {\n \"publisher_confirms\": true,\n \"exchange_exchange_bindings\": true,\n \"basic.nack\": true,\n \"consumer_cancel_notify\": true,\n \"connection.blocked\": true,\n \"authentication_failure_close\": true\n }\n};\n\n// Construct the main frames used in the opening handshake\nfunction openFrames(vhost, query, credentials, extraClientProperties) {\n if (!vhost)\n vhost = '/';\n else\n vhost = QS.unescape(vhost);\n\n var query = query || {};\n\n function intOrDefault(val, def) {\n return (val === undefined) ? def : parseInt(val);\n }\n\n var clientProperties = Object.create(CLIENT_PROPERTIES);\n\n return {\n // start-ok\n 'clientProperties': copyInto(extraClientProperties, clientProperties),\n 'mechanism': credentials.mechanism,\n 'response': credentials.response(),\n 'locale': query.locale || 'en_US',\n\n // tune-ok\n 'channelMax': intOrDefault(query.channelMax, 0),\n 'frameMax': intOrDefault(query.frameMax, 0x1000),\n 'heartbeat': intOrDefault(query.heartbeat, 0),\n\n // open\n 'virtualHost': vhost,\n 'capabilities': '',\n 'insist': 0\n };\n}\n\n// Decide on credentials based on what we're supplied.\nfunction credentialsFromUrl(parts) {\n var user = 'guest', passwd = 'guest';\n if (parts.username != '' || parts.password != '') {\n user = (parts.username) ? unescape(parts.username) : '';\n passwd = (parts.password) ? unescape(parts.password) : '';\n }\n return credentials.plain(user, passwd);\n}\n\nfunction connect(url, socketOptions, openCallback) {\n // tls.connect uses `util._extend()` on the options given it, which\n // copies only properties mentioned in `Object.keys()`, when\n // processing the options. So I have to make copies too, rather\n // than using `Object.create()`.\n var sockopts = clone(socketOptions || {});\n url = url || 'amqp://localhost';\n\n var noDelay = !!sockopts.noDelay;\n var timeout = sockopts.timeout;\n var keepAlive = !!sockopts.keepAlive;\n // 0 is default for node\n var keepAliveDelay = sockopts.keepAliveDelay || 0;\n\n var extraClientProperties = sockopts.clientProperties || {};\n\n var protocol, fields;\n if (typeof url === 'object') {\n protocol = (url.protocol || 'amqp') + ':';\n sockopts.host = url.hostname;\n sockopts.servername = url.hostname;\n sockopts.port = url.port || ((protocol === 'amqp:') ? 5672 : 5671);\n\n var user, pass;\n // Only default if both are missing, to have the same behaviour as\n // the stringly URL.\n if (url.username == undefined && url.password == undefined) {\n user = 'guest'; pass = 'guest';\n } else {\n user = url.username || '';\n pass = url.password || '';\n }\n\n var config = {\n locale: url.locale,\n channelMax: url.channelMax,\n frameMax: url.frameMax,\n heartbeat: url.heartbeat,\n };\n\n fields = openFrames(url.vhost, config, sockopts.credentials || credentials.plain(user, pass), extraClientProperties);\n } else {\n var parts = URL(url, true); // yes, parse the query string\n protocol = parts.protocol;\n sockopts.host = parts.hostname;\n sockopts.servername = parts.hostname;\n sockopts.port = parseInt(parts.port) || ((protocol === 'amqp:') ? 5672 : 5671);\n var vhost = parts.pathname ? parts.pathname.substr(1) : null;\n fields = openFrames(vhost, parts.query, sockopts.credentials || credentialsFromUrl(parts), extraClientProperties);\n }\n\n var sockok = false;\n var sock;\n\n function onConnect() {\n sockok = true;\n sock.setNoDelay(noDelay);\n if (keepAlive) sock.setKeepAlive(keepAlive, keepAliveDelay);\n\n var c = new Connection(sock);\n c.open(fields, function(err, ok) {\n // disable timeout once the connection is open, we don't want\n // it fouling things\n if (timeout) sock.setTimeout(0);\n if (err === null) {\n openCallback(null, c);\n } else {\n // The connection isn't closed by the server on e.g. wrong password\n sock.end();\n sock.destroy();\n openCallback(err);\n }\n });\n }\n\n if (protocol === 'amqp:') {\n sock = require('net').connect(sockopts, onConnect);\n }\n else if (protocol === 'amqps:') {\n sock = require('tls').connect(sockopts, onConnect);\n }\n else {\n throw new Error(\"Expected amqp: or amqps: as the protocol; got \" + protocol);\n }\n\n if (timeout) {\n sock.setTimeout(timeout, function() {\n sock.end();\n sock.destroy();\n openCallback(new Error('connect ETIMEDOUT'));\n });\n }\n\n sock.once('error', function(err) {\n if (!sockok) openCallback(err);\n });\n\n}\n\nmodule.exports.connect = connect;\nmodule.exports.credentialsFromUrl = credentialsFromUrl;\n","//\n//\n//\n\n'use strict';\n\nvar defs = require('./defs');\nvar constants = defs.constants;\nvar frame = require('./frame');\nvar HEARTBEAT = frame.HEARTBEAT;\nvar Mux = require('./mux').Mux;\n\nvar Duplex =\n require('stream').Duplex ||\n require('readable-stream/duplex');\nvar EventEmitter = require('events').EventEmitter;\nvar Heart = require('./heartbeat').Heart;\n\nvar methodName = require('./format').methodName;\nvar closeMsg = require('./format').closeMessage;\nvar inspect = require('./format').inspect;\n\nvar BitSet = require('./bitset').BitSet;\nvar inherits = require('util').inherits;\nvar fmt = require('util').format;\nvar PassThrough = require('stream').PassThrough ||\n require('readable-stream/passthrough');\nvar IllegalOperationError = require('./error').IllegalOperationError;\nvar stackCapture = require('./error').stackCapture;\n\n// High-water mark for channel write buffers, in 'objects' (which are\n// encoded frames as buffers).\nvar DEFAULT_WRITE_HWM = 1024;\n// If all the frames of a message (method, properties, content) total\n// to less than this, copy them into a single buffer and write it all\n// at once. Note that this is less than the minimum frame size: if it\n// was greater, we might have to fragment the content.\nvar SINGLE_CHUNK_THRESHOLD = 2048;\n\nfunction Connection(underlying) {\n EventEmitter.call( this );\n var stream = this.stream = wrapStream(underlying);\n this.muxer = new Mux(stream);\n\n // frames\n this.rest = Buffer.alloc(0);\n this.frameMax = constants.FRAME_MIN_SIZE;\n this.sentSinceLastCheck = false;\n this.recvSinceLastCheck = false;\n\n this.expectSocketClose = false;\n this.freeChannels = new BitSet();\n this.channels = [{channel: {accept: channel0(this)},\n buffer: underlying}];\n}\ninherits(Connection, EventEmitter);\n\nvar C = Connection.prototype;\n\n// Usual frame accept mode\nfunction mainAccept(frame) {\n var rec = this.channels[frame.channel];\n if (rec) { return rec.channel.accept(frame); }\n // NB CHANNEL_ERROR may not be right, but I don't know what is ..\n else\n this.closeWithError(\n fmt('Frame on unknown channel %d', frame.channel),\n constants.CHANNEL_ERROR,\n new Error(fmt(\"Frame on unknown channel: %s\",\n inspect(frame, false))));\n}\n\n// Handle anything that comes through on channel 0, that's the\n// connection control channel. This is only used once mainAccept is\n// installed as the frame handler, after the opening handshake.\nfunction channel0(connection) {\n return function(f) {\n // Once we get a 'close', we know 1. we'll get no more frames, and\n // 2. anything we send except close, or close-ok, will be\n // ignored. If we already sent 'close', this won't be invoked since\n // we're already in closing mode; if we didn't well we're not going\n // to send it now are we.\n if (f === HEARTBEAT); // ignore; it's already counted as activity\n // on the socket, which is its purpose\n else if (f.id === defs.ConnectionClose) {\n // Oh. OK. I guess we're done here then.\n connection.sendMethod(0, defs.ConnectionCloseOk, {});\n var emsg = fmt('Connection closed: %s', closeMsg(f));\n var s = stackCapture(emsg);\n var e = new Error(emsg);\n e.code = f.fields.replyCode;\n if (isFatalError(e)) {\n connection.emit('error', e);\n }\n connection.toClosed(s, e);\n }\n else if (f.id === defs.ConnectionBlocked) {\n connection.emit('blocked', f.fields.reason);\n }\n else if (f.id === defs.ConnectionUnblocked) {\n connection.emit('unblocked');\n }\n else {\n connection.closeWithError(\n fmt(\"Unexpected frame on channel 0\"),\n constants.UNEXPECTED_FRAME,\n new Error(fmt(\"Unexpected frame on channel 0: %s\",\n inspect(f, false))));\n }\n };\n}\n\n// This changed between versions, as did the codec, methods, etc. AMQP\n// 0-9-1 is fairly similar to 0.8, but better, and nothing implements\n// 0.8 that doesn't implement 0-9-1. In other words, it doesn't make\n// much sense to generalise here.\nC.sendProtocolHeader = function() {\n this.sendBytes(frame.PROTOCOL_HEADER);\n};\n\n/*\n The frighteningly complicated opening protocol (spec section 2.2.4):\n\n Client -> Server\n\n protocol header ->\n <- start\n start-ok ->\n .. next two zero or more times ..\n <- secure\n secure-ok ->\n <- tune\n tune-ok ->\n open ->\n <- open-ok\n\nIf I'm only supporting SASL's PLAIN mechanism (which I am for the time\nbeing), it gets a bit easier since the server won't in general send\nback a `secure`, it'll just send `tune` after the `start-ok`.\n(SASL PLAIN: http://tools.ietf.org/html/rfc4616)\n\n*/\n\nC.open = function(allFields, openCallback0) {\n var self = this;\n var openCallback = openCallback0 || function() {};\n\n // This is where we'll put our negotiated values\n var tunedOptions = Object.create(allFields);\n\n function wait(k) {\n self.step(function(err, frame) {\n if (err !== null) bail(err);\n else if (frame.channel !== 0) {\n bail(new Error(\n fmt(\"Frame on channel != 0 during handshake: %s\",\n inspect(frame, false))));\n }\n else k(frame);\n });\n }\n\n function expect(Method, k) {\n wait(function(frame) {\n if (frame.id === Method) k(frame);\n else {\n bail(new Error(\n fmt(\"Expected %s; got %s\",\n methodName(Method), inspect(frame, false))));\n }\n });\n }\n\n function bail(err) {\n openCallback(err);\n }\n\n function send(Method) {\n // This can throw an exception if there's some problem with the\n // options; e.g., something is a string instead of a number.\n self.sendMethod(0, Method, tunedOptions);\n }\n\n function negotiate(server, desired) {\n // We get sent values for channelMax, frameMax and heartbeat,\n // which we may accept or lower (subject to a minimum for\n // frameMax, but we'll leave that to the server to enforce). In\n // all cases, `0` really means \"no limit\", or rather the highest\n // value in the encoding, e.g., unsigned short for channelMax.\n if (server === 0 || desired === 0) {\n // i.e., whichever places a limit, if either\n return Math.max(server, desired);\n }\n else {\n return Math.min(server, desired);\n }\n }\n\n function onStart(start) {\n var mechanisms = start.fields.mechanisms.toString().split(' ');\n if (mechanisms.indexOf(allFields.mechanism) < 0) {\n bail(new Error(fmt('SASL mechanism %s is not provided by the server',\n allFields.mechanism)));\n return;\n }\n self.serverProperties = start.fields.serverProperties;\n try {\n send(defs.ConnectionStartOk);\n } catch (err) {\n bail(err);\n return;\n }\n wait(afterStartOk);\n }\n\n function afterStartOk(reply) {\n switch (reply.id) {\n case defs.ConnectionSecure:\n bail(new Error(\n \"Wasn't expecting to have to go through secure\"));\n break;\n case defs.ConnectionClose:\n bail(new Error(fmt(\"Handshake terminated by server: %s\",\n closeMsg(reply))));\n break;\n case defs.ConnectionTune:\n var fields = reply.fields;\n tunedOptions.frameMax =\n negotiate(fields.frameMax, allFields.frameMax);\n tunedOptions.channelMax =\n negotiate(fields.channelMax, allFields.channelMax);\n tunedOptions.heartbeat =\n negotiate(fields.heartbeat, allFields.heartbeat);\n try {\n send(defs.ConnectionTuneOk);\n send(defs.ConnectionOpen);\n } catch (err) {\n bail(err);\n return;\n }\n expect(defs.ConnectionOpenOk, onOpenOk);\n break;\n default:\n bail(new Error(\n fmt(\"Expected connection.secure, connection.close, \" +\n \"or connection.tune during handshake; got %s\",\n inspect(reply, false))));\n break;\n }\n }\n\n function onOpenOk(openOk) {\n // Impose the maximum of the encoded value, if the negotiated\n // value is zero, meaning \"no, no limits\"\n self.channelMax = tunedOptions.channelMax || 0xffff;\n self.frameMax = tunedOptions.frameMax || 0xffffffff;\n // 0 means \"no heartbeat\", rather than \"maximum period of\n // heartbeating\"\n self.heartbeat = tunedOptions.heartbeat;\n self.heartbeater = self.startHeartbeater();\n self.accept = mainAccept;\n succeed(openOk);\n }\n\n // If the server closes the connection, it's probably because of\n // something we did\n function endWhileOpening(err) {\n bail(err || new Error('Socket closed abruptly ' +\n 'during opening handshake'));\n }\n\n this.stream.on('end', endWhileOpening);\n this.stream.on('error', endWhileOpening);\n\n function succeed(ok) {\n self.stream.removeListener('end', endWhileOpening);\n self.stream.removeListener('error', endWhileOpening);\n self.stream.on('error', self.onSocketError.bind(self));\n self.stream.on('end', self.onSocketError.bind(\n self, new Error('Unexpected close')));\n self.on('frameError', self.onSocketError.bind(self));\n self.acceptLoop();\n openCallback(null, ok);\n }\n\n // Now kick off the handshake by prompting the server\n this.sendProtocolHeader();\n expect(defs.ConnectionStart, onStart);\n};\n\n// Closing things: AMQP has a closing handshake that applies to\n// closing both connects and channels. As the initiating party, I send\n// Close, then ignore all frames until I see either CloseOK --\n// which signifies that the other party has seen the Close and shut\n// the connection or channel down, so it's fine to free resources; or\n// Close, which means the other party also wanted to close the\n// whatever, and I should send CloseOk so it can free resources,\n// then go back to waiting for the CloseOk. If I receive a Close\n// out of the blue, I should throw away any unsent frames (they will\n// be ignored anyway) and send CloseOk, then clean up resources. In\n// general, Close out of the blue signals an error (or a forced\n// closure, which may as well be an error).\n//\n// RUNNING [1] --- send Close ---> Closing [2] ---> recv Close --+\n// | | [3]\n// | +------ send CloseOk ------+\n// recv Close recv CloseOk\n// | |\n// V V\n// Ended [4] ---- send CloseOk ---> Closed [5]\n//\n// [1] All frames accepted; getting a Close frame from the server\n// moves to Ended; client may initiate a close by sending Close\n// itself.\n// [2] Client has initiated a close; only CloseOk or (simulataneously\n// sent) Close is accepted.\n// [3] Simultaneous close\n// [4] Server won't send any more frames; accept no more frames, send\n// CloseOk.\n// [5] Fully closed, client will send no more, server will send no\n// more. Signal 'close' or 'error'.\n//\n// There are two signalling mechanisms used in the API. The first is\n// that calling `close` will return a promise, that will either\n// resolve once the connection or channel is cleanly shut down, or\n// will reject if the shutdown times out.\n//\n// The second is the 'close' and 'error' events. These are\n// emitted as above. The events will fire *before* promises are\n// resolved.\n\n// Close the connection without even giving a reason. Typical.\nC.close = function(closeCallback) {\n var k = closeCallback && function() { closeCallback(null); };\n this.closeBecause(\"Cheers, thanks\", constants.REPLY_SUCCESS, k);\n};\n\n// Close with a reason and a 'code'. I'm pretty sure RabbitMQ totally\n// ignores these; maybe it logs them. The continuation will be invoked\n// when the CloseOk has been received, and before the 'close' event.\nC.closeBecause = function(reason, code, k) {\n this.sendMethod(0, defs.ConnectionClose, {\n replyText: reason,\n replyCode: code,\n methodId: 0, classId: 0\n });\n var s = stackCapture('closeBecause called: ' + reason);\n this.toClosing(s, k);\n};\n\nC.closeWithError = function(reason, code, error) {\n this.emit('error', error);\n this.closeBecause(reason, code);\n};\n\nC.onSocketError = function(err) {\n if (!this.expectSocketClose) {\n // forestall any more calls to onSocketError, since we're signed\n // up for `'error'` *and* `'end'`\n this.expectSocketClose = true;\n this.emit('error', err);\n var s = stackCapture('Socket error');\n this.toClosed(s, err);\n }\n};\n\nfunction invalidOp(msg, stack) {\n return function() {\n throw new IllegalOperationError(msg, stack);\n };\n}\n\nfunction invalidateSend(conn, msg, stack) {\n conn.sendMethod = conn.sendContent = conn.sendMessage =\n invalidOp(msg, stack);\n}\n\n// A close has been initiated. Repeat: a close has been initiated.\n// This means we should not send more frames, anyway they will be\n// ignored. We also have to shut down all the channels.\nC.toClosing = function(capturedStack, k) {\n var send = this.sendMethod.bind(this);\n\n this.accept = function(f) {\n if (f.id === defs.ConnectionCloseOk) {\n if (k) k();\n var s = stackCapture('ConnectionCloseOk received');\n this.toClosed(s, undefined);\n }\n else if (f.id === defs.ConnectionClose) {\n send(0, defs.ConnectionCloseOk, {});\n }\n // else ignore frame\n };\n invalidateSend(this, 'Connection closing', capturedStack);\n};\n\nC._closeChannels = function(capturedStack) {\n for (var i = 1; i < this.channels.length; i++) {\n var ch = this.channels[i];\n if (ch !== null) {\n ch.channel.toClosed(capturedStack); // %%% or with an error? not clear\n }\n }\n};\n\n// A close has been confirmed. Cease all communication.\nC.toClosed = function(capturedStack, maybeErr) {\n this._closeChannels(capturedStack);\n var info = fmt('Connection closed (%s)',\n (maybeErr) ? maybeErr.toString() : 'by client');\n // Tidy up, invalidate enverything, dynamite the bridges.\n invalidateSend(this, info, capturedStack);\n this.accept = invalidOp(info, capturedStack);\n this.close = function(cb) {\n cb && cb(new IllegalOperationError(info, capturedStack));\n };\n if (this.heartbeater) this.heartbeater.clear();\n // This is certainly true now, if it wasn't before\n this.expectSocketClose = true;\n this.stream.end();\n this.emit('close', maybeErr);\n};\n\n// ===\n\nC.startHeartbeater = function() {\n if (this.heartbeat === 0) return null;\n else {\n var self = this;\n var hb = new Heart(this.heartbeat,\n this.checkSend.bind(this),\n this.checkRecv.bind(this));\n hb.on('timeout', function() {\n var hberr = new Error(\"Heartbeat timeout\");\n self.emit('error', hberr);\n var s = stackCapture('Heartbeat timeout');\n self.toClosed(s, hberr);\n });\n hb.on('beat', function() {\n self.sendHeartbeat();\n });\n return hb;\n }\n};\n\n// I use an array to keep track of the channels, rather than an\n// object. The channel identifiers are numbers, and allocated by the\n// connection. If I try to allocate low numbers when they are\n// available (which I do, by looking from the start of the bitset),\n// this ought to keep the array small, and out of 'sparse array\n// storage'. I also set entries to null, rather than deleting them, in\n// the expectation that the next channel allocation will fill the slot\n// again rather than growing the array. See\n// http://www.html5rocks.com/en/tutorials/speed/v8/\nC.freshChannel = function(channel, options) {\n var next = this.freeChannels.nextClearBit(1);\n if (next < 0 || next > this.channelMax)\n throw new Error(\"No channels left to allocate\");\n this.freeChannels.set(next);\n\n var hwm = (options && options.highWaterMark) || DEFAULT_WRITE_HWM;\n var writeBuffer = new PassThrough({\n objectMode: true, highWaterMark: hwm\n });\n this.channels[next] = {channel: channel, buffer: writeBuffer};\n writeBuffer.on('drain', function() {\n channel.onBufferDrain();\n });\n this.muxer.pipeFrom(writeBuffer);\n return next;\n};\n\nC.releaseChannel = function(channel) {\n this.freeChannels.clear(channel);\n var buffer = this.channels[channel].buffer;\n buffer.end(); // will also cause it to be unpiped\n this.channels[channel] = null;\n};\n\nC.acceptLoop = function() {\n var self = this;\n\n function go() {\n try {\n var f; while (f = self.recvFrame()) self.accept(f);\n }\n catch (e) {\n self.emit('frameError', e);\n }\n }\n self.stream.on('readable', go);\n go();\n};\n\nC.step = function(cb) {\n var self = this;\n function recv() {\n var f;\n try {\n f = self.recvFrame();\n }\n catch (e) {\n cb(e, null);\n return;\n }\n if (f) cb(null, f);\n else self.stream.once('readable', recv);\n }\n recv();\n};\n\nC.checkSend = function() {\n var check = this.sentSinceLastCheck;\n this.sentSinceLastCheck = false;\n return check;\n}\n\nC.checkRecv = function() {\n var check = this.recvSinceLastCheck;\n this.recvSinceLastCheck = false;\n return check;\n}\n\nC.sendBytes = function(bytes) {\n this.sentSinceLastCheck = true;\n this.stream.write(bytes);\n};\n\nC.sendHeartbeat = function() {\n return this.sendBytes(frame.HEARTBEAT_BUF);\n};\n\nvar encodeMethod = defs.encodeMethod;\nvar encodeProperties = defs.encodeProperties;\n\nC.sendMethod = function(channel, Method, fields) {\n var frame = encodeMethod(Method, channel, fields);\n this.sentSinceLastCheck = true;\n var buffer = this.channels[channel].buffer;\n return buffer.write(frame);\n};\n\nC.sendMessage = function(channel,\n Method, fields,\n Properties, props,\n content) {\n if (!Buffer.isBuffer(content))\n throw new TypeError('content is not a buffer');\n\n var mframe = encodeMethod(Method, channel, fields);\n var pframe = encodeProperties(Properties, channel,\n content.length, props);\n var buffer = this.channels[channel].buffer;\n this.sentSinceLastCheck = true;\n\n var methodHeaderLen = mframe.length + pframe.length;\n var bodyLen = (content.length > 0) ?\n content.length + FRAME_OVERHEAD : 0;\n var allLen = methodHeaderLen + bodyLen;\n\n if (allLen < SINGLE_CHUNK_THRESHOLD) {\n var all = Buffer.alloc(allLen);\n var offset = mframe.copy(all, 0);\n offset += pframe.copy(all, offset);\n\n if (bodyLen > 0)\n makeBodyFrame(channel, content).copy(all, offset);\n return buffer.write(all);\n }\n else {\n if (methodHeaderLen < SINGLE_CHUNK_THRESHOLD) {\n var both = Buffer.alloc(methodHeaderLen);\n var offset = mframe.copy(both, 0);\n pframe.copy(both, offset);\n buffer.write(both);\n }\n else {\n buffer.write(mframe);\n buffer.write(pframe);\n }\n return this.sendContent(channel, content);\n }\n};\n\nvar FRAME_OVERHEAD = defs.FRAME_OVERHEAD;\nvar makeBodyFrame = frame.makeBodyFrame;\n\nC.sendContent = function(channel, body) {\n if (!Buffer.isBuffer(body)) {\n throw new TypeError(fmt(\"Expected buffer; got %s\", body));\n }\n var writeResult = true;\n var buffer = this.channels[channel].buffer;\n\n var maxBody = this.frameMax - FRAME_OVERHEAD;\n\n for (var offset = 0; offset < body.length; offset += maxBody) {\n var end = offset + maxBody;\n var slice = (end > body.length) ? body.slice(offset) : body.slice(offset, end);\n var bodyFrame = makeBodyFrame(channel, slice);\n writeResult = buffer.write(bodyFrame);\n }\n this.sentSinceLastCheck = true;\n return writeResult;\n};\n\nvar parseFrame = frame.parseFrame;\nvar decodeFrame = frame.decodeFrame;\n\nC.recvFrame = function() {\n // %%% identifying invariants might help here?\n var frame = parseFrame(this.rest, this.frameMax);\n\n if (!frame) {\n var incoming = this.stream.read();\n if (incoming === null) {\n return false;\n }\n else {\n this.recvSinceLastCheck = true;\n this.rest = Buffer.concat([this.rest, incoming]);\n return this.recvFrame();\n }\n }\n else {\n this.rest = frame.rest;\n return decodeFrame(frame);\n }\n};\n\nfunction wrapStream(s) {\n if (s instanceof Duplex) return s;\n else {\n var ws = new Duplex();\n ws.wrap(s); //wraps the readable side of things\n ws._write = function(chunk, encoding, callback) {\n return s.write(chunk, encoding, callback);\n };\n return ws;\n }\n}\n\nfunction isFatalError(error) {\n switch (error && error.code) {\n case defs.constants.CONNECTION_FORCED:\n case defs.constants.REPLY_SUCCESS:\n return false;\n default:\n return true;\n }\n}\n\nmodule.exports.Connection = Connection;\nmodule.exports.isFatalError = isFatalError;\n","//\n//\n//\n\n// Different kind of credentials that can be supplied when opening a\n// connection, corresponding to SASL mechanisms There's only two\n// useful mechanisms that RabbitMQ implements:\n// * PLAIN (send username and password in the plain)\n// * EXTERNAL (assume the server will figure out who you are from\n// context, i.e., your SSL certificate)\nvar codec = require('./codec')\n\nmodule.exports.plain = function(user, passwd) {\n return {\n mechanism: 'PLAIN',\n response: function() {\n return Buffer.from(['', user, passwd].join(String.fromCharCode(0)))\n },\n username: user,\n password: passwd\n }\n}\n\nmodule.exports.amqplain = function(user, passwd) {\n return {\n mechanism: 'AMQPLAIN',\n response: function() {\n const buffer = Buffer.alloc(16384);\n const size = codec.encodeTable(buffer, { LOGIN: user, PASSWORD: passwd}, 0);\n return buffer.slice(4, size);\n },\n username: user,\n password: passwd\n }\n}\n\nmodule.exports.external = function() {\n return {\n mechanism: 'EXTERNAL',\n response: function() { return Buffer.from(''); }\n }\n}\n","/** @preserve This file is generated by the script\n * ../bin/generate-defs.js, which is not in general included in a\n * distribution, but is available in the source repository e.g. at\n * https://github.com/squaremo/amqp.node/\n */\n\"use strict\";\n\nfunction decodeConnectionStart(buffer) {\n var val, len, offset = 0, fields = {\n versionMajor: void 0,\n versionMinor: void 0,\n serverProperties: void 0,\n mechanisms: void 0,\n locales: void 0\n };\n val = buffer[offset];\n offset++;\n fields.versionMajor = val;\n val = buffer[offset];\n offset++;\n fields.versionMinor = val;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.serverProperties = val;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = buffer.slice(offset, offset + len);\n offset += len;\n fields.mechanisms = val;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = buffer.slice(offset, offset + len);\n offset += len;\n fields.locales = val;\n return fields;\n}\n\nfunction encodeConnectionStart(channel, fields) {\n var len, offset = 0, val = null, varyingSize = 0, scratchOffset = 0;\n val = fields.serverProperties;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'serverProperties'\");\n if (\"object\" != typeof val) throw new TypeError(\"Field 'serverProperties' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var serverProperties_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += serverProperties_encoded.length;\n val = fields.mechanisms;\n if (void 0 === val) val = Buffer.from(\"PLAIN\"); else if (!Buffer.isBuffer(val)) throw new TypeError(\"Field 'mechanisms' is the wrong type; must be a Buffer\");\n varyingSize += val.length;\n val = fields.locales;\n if (void 0 === val) val = Buffer.from(\"en_US\"); else if (!Buffer.isBuffer(val)) throw new TypeError(\"Field 'locales' is the wrong type; must be a Buffer\");\n varyingSize += val.length;\n var buffer = Buffer.alloc(22 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655370, 7);\n offset = 11;\n val = fields.versionMajor;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'versionMajor' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt8(val, offset);\n offset++;\n val = fields.versionMinor;\n if (void 0 === val) val = 9; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'versionMinor' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt8(val, offset);\n offset++;\n offset += serverProperties_encoded.copy(buffer, offset);\n val = fields.mechanisms;\n void 0 === val && (val = Buffer.from(\"PLAIN\"));\n len = val.length;\n buffer.writeUInt32BE(len, offset);\n offset += 4;\n val.copy(buffer, offset);\n offset += len;\n val = fields.locales;\n void 0 === val && (val = Buffer.from(\"en_US\"));\n len = val.length;\n buffer.writeUInt32BE(len, offset);\n offset += 4;\n val.copy(buffer, offset);\n offset += len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionStartOk(buffer) {\n var val, len, offset = 0, fields = {\n clientProperties: void 0,\n mechanism: void 0,\n response: void 0,\n locale: void 0\n };\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.clientProperties = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.mechanism = val;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = buffer.slice(offset, offset + len);\n offset += len;\n fields.response = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.locale = val;\n return fields;\n}\n\nfunction encodeConnectionStartOk(channel, fields) {\n var len, offset = 0, val = null, varyingSize = 0, scratchOffset = 0;\n val = fields.clientProperties;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'clientProperties'\");\n if (\"object\" != typeof val) throw new TypeError(\"Field 'clientProperties' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var clientProperties_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += clientProperties_encoded.length;\n val = fields.mechanism;\n if (void 0 === val) val = \"PLAIN\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'mechanism' is the wrong type; must be a string (up to 255 chars)\");\n var mechanism_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += mechanism_len;\n val = fields.response;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'response'\");\n if (!Buffer.isBuffer(val)) throw new TypeError(\"Field 'response' is the wrong type; must be a Buffer\");\n varyingSize += val.length;\n val = fields.locale;\n if (void 0 === val) val = \"en_US\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'locale' is the wrong type; must be a string (up to 255 chars)\");\n var locale_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += locale_len;\n var buffer = Buffer.alloc(18 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655371, 7);\n offset = 11;\n offset += clientProperties_encoded.copy(buffer, offset);\n val = fields.mechanism;\n void 0 === val && (val = \"PLAIN\");\n buffer[offset] = mechanism_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += mechanism_len;\n val = fields.response;\n void 0 === val && (val = Buffer.from(void 0));\n len = val.length;\n buffer.writeUInt32BE(len, offset);\n offset += 4;\n val.copy(buffer, offset);\n offset += len;\n val = fields.locale;\n void 0 === val && (val = \"en_US\");\n buffer[offset] = locale_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += locale_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionSecure(buffer) {\n var val, len, offset = 0, fields = {\n challenge: void 0\n };\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = buffer.slice(offset, offset + len);\n offset += len;\n fields.challenge = val;\n return fields;\n}\n\nfunction encodeConnectionSecure(channel, fields) {\n var len, offset = 0, val = null, varyingSize = 0;\n val = fields.challenge;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'challenge'\");\n if (!Buffer.isBuffer(val)) throw new TypeError(\"Field 'challenge' is the wrong type; must be a Buffer\");\n varyingSize += val.length;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655380, 7);\n offset = 11;\n val = fields.challenge;\n void 0 === val && (val = Buffer.from(void 0));\n len = val.length;\n buffer.writeUInt32BE(len, offset);\n offset += 4;\n val.copy(buffer, offset);\n offset += len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionSecureOk(buffer) {\n var val, len, offset = 0, fields = {\n response: void 0\n };\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = buffer.slice(offset, offset + len);\n offset += len;\n fields.response = val;\n return fields;\n}\n\nfunction encodeConnectionSecureOk(channel, fields) {\n var len, offset = 0, val = null, varyingSize = 0;\n val = fields.response;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'response'\");\n if (!Buffer.isBuffer(val)) throw new TypeError(\"Field 'response' is the wrong type; must be a Buffer\");\n varyingSize += val.length;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655381, 7);\n offset = 11;\n val = fields.response;\n void 0 === val && (val = Buffer.from(void 0));\n len = val.length;\n buffer.writeUInt32BE(len, offset);\n offset += 4;\n val.copy(buffer, offset);\n offset += len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionTune(buffer) {\n var val, offset = 0, fields = {\n channelMax: void 0,\n frameMax: void 0,\n heartbeat: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.channelMax = val;\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.frameMax = val;\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.heartbeat = val;\n return fields;\n}\n\nfunction encodeConnectionTune(channel, fields) {\n var offset = 0, val = null, buffer = Buffer.alloc(20);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655390, 7);\n offset = 11;\n val = fields.channelMax;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'channelMax' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.frameMax;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'frameMax' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n val = fields.heartbeat;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'heartbeat' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionTuneOk(buffer) {\n var val, offset = 0, fields = {\n channelMax: void 0,\n frameMax: void 0,\n heartbeat: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.channelMax = val;\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.frameMax = val;\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.heartbeat = val;\n return fields;\n}\n\nfunction encodeConnectionTuneOk(channel, fields) {\n var offset = 0, val = null, buffer = Buffer.alloc(20);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655391, 7);\n offset = 11;\n val = fields.channelMax;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'channelMax' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.frameMax;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'frameMax' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n val = fields.heartbeat;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'heartbeat' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionOpen(buffer) {\n var val, len, offset = 0, fields = {\n virtualHost: void 0,\n capabilities: void 0,\n insist: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.virtualHost = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.capabilities = val;\n val = !!(1 & buffer[offset]);\n fields.insist = val;\n return fields;\n}\n\nfunction encodeConnectionOpen(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.virtualHost;\n if (void 0 === val) val = \"/\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'virtualHost' is the wrong type; must be a string (up to 255 chars)\");\n var virtualHost_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += virtualHost_len;\n val = fields.capabilities;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'capabilities' is the wrong type; must be a string (up to 255 chars)\");\n var capabilities_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += capabilities_len;\n var buffer = Buffer.alloc(15 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655400, 7);\n offset = 11;\n val = fields.virtualHost;\n void 0 === val && (val = \"/\");\n buffer[offset] = virtualHost_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += virtualHost_len;\n val = fields.capabilities;\n void 0 === val && (val = \"\");\n buffer[offset] = capabilities_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += capabilities_len;\n val = fields.insist;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionOpenOk(buffer) {\n var val, len, offset = 0, fields = {\n knownHosts: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.knownHosts = val;\n return fields;\n}\n\nfunction encodeConnectionOpenOk(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.knownHosts;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'knownHosts' is the wrong type; must be a string (up to 255 chars)\");\n var knownHosts_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += knownHosts_len;\n var buffer = Buffer.alloc(13 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655401, 7);\n offset = 11;\n val = fields.knownHosts;\n void 0 === val && (val = \"\");\n buffer[offset] = knownHosts_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += knownHosts_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionClose(buffer) {\n var val, len, offset = 0, fields = {\n replyCode: void 0,\n replyText: void 0,\n classId: void 0,\n methodId: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.replyCode = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.replyText = val;\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.classId = val;\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.methodId = val;\n return fields;\n}\n\nfunction encodeConnectionClose(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.replyText;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'replyText' is the wrong type; must be a string (up to 255 chars)\");\n var replyText_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += replyText_len;\n var buffer = Buffer.alloc(19 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655410, 7);\n offset = 11;\n val = fields.replyCode;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'replyCode'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'replyCode' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.replyText;\n void 0 === val && (val = \"\");\n buffer[offset] = replyText_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += replyText_len;\n val = fields.classId;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'classId'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'classId' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.methodId;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'methodId'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'methodId' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionCloseOk(buffer) {\n return {};\n}\n\nfunction encodeConnectionCloseOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655411, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionBlocked(buffer) {\n var val, len, offset = 0, fields = {\n reason: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.reason = val;\n return fields;\n}\n\nfunction encodeConnectionBlocked(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.reason;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'reason' is the wrong type; must be a string (up to 255 chars)\");\n var reason_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += reason_len;\n var buffer = Buffer.alloc(13 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655420, 7);\n offset = 11;\n val = fields.reason;\n void 0 === val && (val = \"\");\n buffer[offset] = reason_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += reason_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConnectionUnblocked(buffer) {\n return {};\n}\n\nfunction encodeConnectionUnblocked(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(655421, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeChannelOpen(buffer) {\n var val, len, offset = 0, fields = {\n outOfBand: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.outOfBand = val;\n return fields;\n}\n\nfunction encodeChannelOpen(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.outOfBand;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'outOfBand' is the wrong type; must be a string (up to 255 chars)\");\n var outOfBand_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += outOfBand_len;\n var buffer = Buffer.alloc(13 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1310730, 7);\n offset = 11;\n val = fields.outOfBand;\n void 0 === val && (val = \"\");\n buffer[offset] = outOfBand_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += outOfBand_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeChannelOpenOk(buffer) {\n var val, len, offset = 0, fields = {\n channelId: void 0\n };\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = buffer.slice(offset, offset + len);\n offset += len;\n fields.channelId = val;\n return fields;\n}\n\nfunction encodeChannelOpenOk(channel, fields) {\n var len, offset = 0, val = null, varyingSize = 0;\n val = fields.channelId;\n if (void 0 === val) val = Buffer.from(\"\"); else if (!Buffer.isBuffer(val)) throw new TypeError(\"Field 'channelId' is the wrong type; must be a Buffer\");\n varyingSize += val.length;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1310731, 7);\n offset = 11;\n val = fields.channelId;\n void 0 === val && (val = Buffer.from(\"\"));\n len = val.length;\n buffer.writeUInt32BE(len, offset);\n offset += 4;\n val.copy(buffer, offset);\n offset += len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeChannelFlow(buffer) {\n var val, fields = {\n active: void 0\n };\n val = !!(1 & buffer[0]);\n fields.active = val;\n return fields;\n}\n\nfunction encodeChannelFlow(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(13);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1310740, 7);\n offset = 11;\n val = fields.active;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'active'\");\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeChannelFlowOk(buffer) {\n var val, fields = {\n active: void 0\n };\n val = !!(1 & buffer[0]);\n fields.active = val;\n return fields;\n}\n\nfunction encodeChannelFlowOk(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(13);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1310741, 7);\n offset = 11;\n val = fields.active;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'active'\");\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeChannelClose(buffer) {\n var val, len, offset = 0, fields = {\n replyCode: void 0,\n replyText: void 0,\n classId: void 0,\n methodId: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.replyCode = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.replyText = val;\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.classId = val;\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.methodId = val;\n return fields;\n}\n\nfunction encodeChannelClose(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.replyText;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'replyText' is the wrong type; must be a string (up to 255 chars)\");\n var replyText_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += replyText_len;\n var buffer = Buffer.alloc(19 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1310760, 7);\n offset = 11;\n val = fields.replyCode;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'replyCode'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'replyCode' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.replyText;\n void 0 === val && (val = \"\");\n buffer[offset] = replyText_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += replyText_len;\n val = fields.classId;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'classId'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'classId' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.methodId;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'methodId'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'methodId' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeChannelCloseOk(buffer) {\n return {};\n}\n\nfunction encodeChannelCloseOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1310761, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeAccessRequest(buffer) {\n var val, len, offset = 0, fields = {\n realm: void 0,\n exclusive: void 0,\n passive: void 0,\n active: void 0,\n write: void 0,\n read: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.realm = val;\n val = !!(1 & buffer[offset]);\n fields.exclusive = val;\n val = !!(2 & buffer[offset]);\n fields.passive = val;\n val = !!(4 & buffer[offset]);\n fields.active = val;\n val = !!(8 & buffer[offset]);\n fields.write = val;\n val = !!(16 & buffer[offset]);\n fields.read = val;\n return fields;\n}\n\nfunction encodeAccessRequest(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.realm;\n if (void 0 === val) val = \"/data\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'realm' is the wrong type; must be a string (up to 255 chars)\");\n var realm_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += realm_len;\n var buffer = Buffer.alloc(14 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1966090, 7);\n offset = 11;\n val = fields.realm;\n void 0 === val && (val = \"/data\");\n buffer[offset] = realm_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += realm_len;\n val = fields.exclusive;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.passive;\n void 0 === val && (val = !0);\n val && (bits += 2);\n val = fields.active;\n void 0 === val && (val = !0);\n val && (bits += 4);\n val = fields.write;\n void 0 === val && (val = !0);\n val && (bits += 8);\n val = fields.read;\n void 0 === val && (val = !0);\n val && (bits += 16);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeAccessRequestOk(buffer) {\n var val, offset = 0, fields = {\n ticket: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n return fields;\n}\n\nfunction encodeAccessRequestOk(channel, fields) {\n var offset = 0, val = null, buffer = Buffer.alloc(14);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(1966091, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 1; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeDeclare(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n exchange: void 0,\n type: void 0,\n passive: void 0,\n durable: void 0,\n autoDelete: void 0,\n internal: void 0,\n nowait: void 0,\n arguments: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.type = val;\n val = !!(1 & buffer[offset]);\n fields.passive = val;\n val = !!(2 & buffer[offset]);\n fields.durable = val;\n val = !!(4 & buffer[offset]);\n fields.autoDelete = val;\n val = !!(8 & buffer[offset]);\n fields.internal = val;\n val = !!(16 & buffer[offset]);\n fields.nowait = val;\n offset++;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.arguments = val;\n return fields;\n}\n\nfunction encodeExchangeDeclare(channel, fields) {\n var len, offset = 0, val = null, bits = 0, varyingSize = 0, scratchOffset = 0;\n val = fields.exchange;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'exchange'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n val = fields.type;\n if (void 0 === val) val = \"direct\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'type' is the wrong type; must be a string (up to 255 chars)\");\n var type_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += type_len;\n val = fields.arguments;\n if (void 0 === val) val = {}; else if (\"object\" != typeof val) throw new TypeError(\"Field 'arguments' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var arguments_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += arguments_encoded.length;\n var buffer = Buffer.alloc(17 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621450, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.exchange;\n void 0 === val && (val = void 0);\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.type;\n void 0 === val && (val = \"direct\");\n buffer[offset] = type_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += type_len;\n val = fields.passive;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.durable;\n void 0 === val && (val = !1);\n val && (bits += 2);\n val = fields.autoDelete;\n void 0 === val && (val = !1);\n val && (bits += 4);\n val = fields.internal;\n void 0 === val && (val = !1);\n val && (bits += 8);\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 16);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n offset += arguments_encoded.copy(buffer, offset);\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeDeclareOk(buffer) {\n return {};\n}\n\nfunction encodeExchangeDeclareOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621451, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeDelete(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n exchange: void 0,\n ifUnused: void 0,\n nowait: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n val = !!(1 & buffer[offset]);\n fields.ifUnused = val;\n val = !!(2 & buffer[offset]);\n fields.nowait = val;\n return fields;\n}\n\nfunction encodeExchangeDelete(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.exchange;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'exchange'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621460, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.exchange;\n void 0 === val && (val = void 0);\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.ifUnused;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 2);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeDeleteOk(buffer) {\n return {};\n}\n\nfunction encodeExchangeDeleteOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621461, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeBind(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n destination: void 0,\n source: void 0,\n routingKey: void 0,\n nowait: void 0,\n arguments: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.destination = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.source = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n val = !!(1 & buffer[offset]);\n fields.nowait = val;\n offset++;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.arguments = val;\n return fields;\n}\n\nfunction encodeExchangeBind(channel, fields) {\n var len, offset = 0, val = null, bits = 0, varyingSize = 0, scratchOffset = 0;\n val = fields.destination;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'destination'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'destination' is the wrong type; must be a string (up to 255 chars)\");\n var destination_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += destination_len;\n val = fields.source;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'source'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'source' is the wrong type; must be a string (up to 255 chars)\");\n var source_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += source_len;\n val = fields.routingKey;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n val = fields.arguments;\n if (void 0 === val) val = {}; else if (\"object\" != typeof val) throw new TypeError(\"Field 'arguments' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var arguments_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += arguments_encoded.length;\n var buffer = Buffer.alloc(18 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621470, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.destination;\n void 0 === val && (val = void 0);\n buffer[offset] = destination_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += destination_len;\n val = fields.source;\n void 0 === val && (val = void 0);\n buffer[offset] = source_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += source_len;\n val = fields.routingKey;\n void 0 === val && (val = \"\");\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n offset += arguments_encoded.copy(buffer, offset);\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeBindOk(buffer) {\n return {};\n}\n\nfunction encodeExchangeBindOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621471, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeUnbind(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n destination: void 0,\n source: void 0,\n routingKey: void 0,\n nowait: void 0,\n arguments: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.destination = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.source = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n val = !!(1 & buffer[offset]);\n fields.nowait = val;\n offset++;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.arguments = val;\n return fields;\n}\n\nfunction encodeExchangeUnbind(channel, fields) {\n var len, offset = 0, val = null, bits = 0, varyingSize = 0, scratchOffset = 0;\n val = fields.destination;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'destination'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'destination' is the wrong type; must be a string (up to 255 chars)\");\n var destination_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += destination_len;\n val = fields.source;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'source'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'source' is the wrong type; must be a string (up to 255 chars)\");\n var source_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += source_len;\n val = fields.routingKey;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n val = fields.arguments;\n if (void 0 === val) val = {}; else if (\"object\" != typeof val) throw new TypeError(\"Field 'arguments' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var arguments_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += arguments_encoded.length;\n var buffer = Buffer.alloc(18 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621480, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.destination;\n void 0 === val && (val = void 0);\n buffer[offset] = destination_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += destination_len;\n val = fields.source;\n void 0 === val && (val = void 0);\n buffer[offset] = source_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += source_len;\n val = fields.routingKey;\n void 0 === val && (val = \"\");\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n offset += arguments_encoded.copy(buffer, offset);\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeExchangeUnbindOk(buffer) {\n return {};\n}\n\nfunction encodeExchangeUnbindOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(2621491, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueDeclare(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n queue: void 0,\n passive: void 0,\n durable: void 0,\n exclusive: void 0,\n autoDelete: void 0,\n nowait: void 0,\n arguments: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n val = !!(1 & buffer[offset]);\n fields.passive = val;\n val = !!(2 & buffer[offset]);\n fields.durable = val;\n val = !!(4 & buffer[offset]);\n fields.exclusive = val;\n val = !!(8 & buffer[offset]);\n fields.autoDelete = val;\n val = !!(16 & buffer[offset]);\n fields.nowait = val;\n offset++;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.arguments = val;\n return fields;\n}\n\nfunction encodeQueueDeclare(channel, fields) {\n var len, offset = 0, val = null, bits = 0, varyingSize = 0, scratchOffset = 0;\n val = fields.queue;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n val = fields.arguments;\n if (void 0 === val) val = {}; else if (\"object\" != typeof val) throw new TypeError(\"Field 'arguments' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var arguments_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += arguments_encoded.length;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276810, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.queue;\n void 0 === val && (val = \"\");\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.passive;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.durable;\n void 0 === val && (val = !1);\n val && (bits += 2);\n val = fields.exclusive;\n void 0 === val && (val = !1);\n val && (bits += 4);\n val = fields.autoDelete;\n void 0 === val && (val = !1);\n val && (bits += 8);\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 16);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n offset += arguments_encoded.copy(buffer, offset);\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueDeclareOk(buffer) {\n var val, len, offset = 0, fields = {\n queue: void 0,\n messageCount: void 0,\n consumerCount: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.messageCount = val;\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.consumerCount = val;\n return fields;\n}\n\nfunction encodeQueueDeclareOk(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.queue;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'queue'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n var buffer = Buffer.alloc(21 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276811, 7);\n offset = 11;\n val = fields.queue;\n void 0 === val && (val = void 0);\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.messageCount;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'messageCount'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'messageCount' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n val = fields.consumerCount;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'consumerCount'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'consumerCount' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueBind(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n queue: void 0,\n exchange: void 0,\n routingKey: void 0,\n nowait: void 0,\n arguments: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n val = !!(1 & buffer[offset]);\n fields.nowait = val;\n offset++;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.arguments = val;\n return fields;\n}\n\nfunction encodeQueueBind(channel, fields) {\n var len, offset = 0, val = null, bits = 0, varyingSize = 0, scratchOffset = 0;\n val = fields.queue;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n val = fields.exchange;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'exchange'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n val = fields.routingKey;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n val = fields.arguments;\n if (void 0 === val) val = {}; else if (\"object\" != typeof val) throw new TypeError(\"Field 'arguments' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var arguments_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += arguments_encoded.length;\n var buffer = Buffer.alloc(18 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276820, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.queue;\n void 0 === val && (val = \"\");\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.exchange;\n void 0 === val && (val = void 0);\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.routingKey;\n void 0 === val && (val = \"\");\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n offset += arguments_encoded.copy(buffer, offset);\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueBindOk(buffer) {\n return {};\n}\n\nfunction encodeQueueBindOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276821, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueuePurge(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n queue: void 0,\n nowait: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n val = !!(1 & buffer[offset]);\n fields.nowait = val;\n return fields;\n}\n\nfunction encodeQueuePurge(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.queue;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276830, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.queue;\n void 0 === val && (val = \"\");\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueuePurgeOk(buffer) {\n var val, offset = 0, fields = {\n messageCount: void 0\n };\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.messageCount = val;\n return fields;\n}\n\nfunction encodeQueuePurgeOk(channel, fields) {\n var offset = 0, val = null, buffer = Buffer.alloc(16);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276831, 7);\n offset = 11;\n val = fields.messageCount;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'messageCount'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'messageCount' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueDelete(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n queue: void 0,\n ifUnused: void 0,\n ifEmpty: void 0,\n nowait: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n val = !!(1 & buffer[offset]);\n fields.ifUnused = val;\n val = !!(2 & buffer[offset]);\n fields.ifEmpty = val;\n val = !!(4 & buffer[offset]);\n fields.nowait = val;\n return fields;\n}\n\nfunction encodeQueueDelete(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.queue;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276840, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.queue;\n void 0 === val && (val = \"\");\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.ifUnused;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.ifEmpty;\n void 0 === val && (val = !1);\n val && (bits += 2);\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 4);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueDeleteOk(buffer) {\n var val, offset = 0, fields = {\n messageCount: void 0\n };\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.messageCount = val;\n return fields;\n}\n\nfunction encodeQueueDeleteOk(channel, fields) {\n var offset = 0, val = null, buffer = Buffer.alloc(16);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276841, 7);\n offset = 11;\n val = fields.messageCount;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'messageCount'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'messageCount' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueUnbind(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n queue: void 0,\n exchange: void 0,\n routingKey: void 0,\n arguments: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.arguments = val;\n return fields;\n}\n\nfunction encodeQueueUnbind(channel, fields) {\n var len, offset = 0, val = null, varyingSize = 0, scratchOffset = 0;\n val = fields.queue;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n val = fields.exchange;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'exchange'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n val = fields.routingKey;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n val = fields.arguments;\n if (void 0 === val) val = {}; else if (\"object\" != typeof val) throw new TypeError(\"Field 'arguments' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var arguments_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += arguments_encoded.length;\n var buffer = Buffer.alloc(17 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276850, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.queue;\n void 0 === val && (val = \"\");\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.exchange;\n void 0 === val && (val = void 0);\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.routingKey;\n void 0 === val && (val = \"\");\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n offset += arguments_encoded.copy(buffer, offset);\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeQueueUnbindOk(buffer) {\n return {};\n}\n\nfunction encodeQueueUnbindOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3276851, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicQos(buffer) {\n var val, offset = 0, fields = {\n prefetchSize: void 0,\n prefetchCount: void 0,\n global: void 0\n };\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.prefetchSize = val;\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.prefetchCount = val;\n val = !!(1 & buffer[offset]);\n fields.global = val;\n return fields;\n}\n\nfunction encodeBasicQos(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(19);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932170, 7);\n offset = 11;\n val = fields.prefetchSize;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'prefetchSize' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n val = fields.prefetchCount;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'prefetchCount' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.global;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicQosOk(buffer) {\n return {};\n}\n\nfunction encodeBasicQosOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932171, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicConsume(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n queue: void 0,\n consumerTag: void 0,\n noLocal: void 0,\n noAck: void 0,\n exclusive: void 0,\n nowait: void 0,\n arguments: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.consumerTag = val;\n val = !!(1 & buffer[offset]);\n fields.noLocal = val;\n val = !!(2 & buffer[offset]);\n fields.noAck = val;\n val = !!(4 & buffer[offset]);\n fields.exclusive = val;\n val = !!(8 & buffer[offset]);\n fields.nowait = val;\n offset++;\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.arguments = val;\n return fields;\n}\n\nfunction encodeBasicConsume(channel, fields) {\n var len, offset = 0, val = null, bits = 0, varyingSize = 0, scratchOffset = 0;\n val = fields.queue;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n val = fields.consumerTag;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'consumerTag' is the wrong type; must be a string (up to 255 chars)\");\n var consumerTag_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += consumerTag_len;\n val = fields.arguments;\n if (void 0 === val) val = {}; else if (\"object\" != typeof val) throw new TypeError(\"Field 'arguments' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var arguments_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += arguments_encoded.length;\n var buffer = Buffer.alloc(17 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932180, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.queue;\n void 0 === val && (val = \"\");\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.consumerTag;\n void 0 === val && (val = \"\");\n buffer[offset] = consumerTag_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += consumerTag_len;\n val = fields.noLocal;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.noAck;\n void 0 === val && (val = !1);\n val && (bits += 2);\n val = fields.exclusive;\n void 0 === val && (val = !1);\n val && (bits += 4);\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 8);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n offset += arguments_encoded.copy(buffer, offset);\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicConsumeOk(buffer) {\n var val, len, offset = 0, fields = {\n consumerTag: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.consumerTag = val;\n return fields;\n}\n\nfunction encodeBasicConsumeOk(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.consumerTag;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'consumerTag'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'consumerTag' is the wrong type; must be a string (up to 255 chars)\");\n var consumerTag_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += consumerTag_len;\n var buffer = Buffer.alloc(13 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932181, 7);\n offset = 11;\n val = fields.consumerTag;\n void 0 === val && (val = void 0);\n buffer[offset] = consumerTag_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += consumerTag_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicCancel(buffer) {\n var val, len, offset = 0, fields = {\n consumerTag: void 0,\n nowait: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.consumerTag = val;\n val = !!(1 & buffer[offset]);\n fields.nowait = val;\n return fields;\n}\n\nfunction encodeBasicCancel(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.consumerTag;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'consumerTag'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'consumerTag' is the wrong type; must be a string (up to 255 chars)\");\n var consumerTag_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += consumerTag_len;\n var buffer = Buffer.alloc(14 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932190, 7);\n offset = 11;\n val = fields.consumerTag;\n void 0 === val && (val = void 0);\n buffer[offset] = consumerTag_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += consumerTag_len;\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicCancelOk(buffer) {\n var val, len, offset = 0, fields = {\n consumerTag: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.consumerTag = val;\n return fields;\n}\n\nfunction encodeBasicCancelOk(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.consumerTag;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'consumerTag'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'consumerTag' is the wrong type; must be a string (up to 255 chars)\");\n var consumerTag_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += consumerTag_len;\n var buffer = Buffer.alloc(13 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932191, 7);\n offset = 11;\n val = fields.consumerTag;\n void 0 === val && (val = void 0);\n buffer[offset] = consumerTag_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += consumerTag_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicPublish(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n exchange: void 0,\n routingKey: void 0,\n mandatory: void 0,\n immediate: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n val = !!(1 & buffer[offset]);\n fields.mandatory = val;\n val = !!(2 & buffer[offset]);\n fields.immediate = val;\n return fields;\n}\n\nfunction encodeBasicPublish(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.exchange;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n val = fields.routingKey;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n var buffer = Buffer.alloc(17 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932200, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.exchange;\n void 0 === val && (val = \"\");\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.routingKey;\n void 0 === val && (val = \"\");\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n val = fields.mandatory;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.immediate;\n void 0 === val && (val = !1);\n val && (bits += 2);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicReturn(buffer) {\n var val, len, offset = 0, fields = {\n replyCode: void 0,\n replyText: void 0,\n exchange: void 0,\n routingKey: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.replyCode = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.replyText = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n return fields;\n}\n\nfunction encodeBasicReturn(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.replyText;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'replyText' is the wrong type; must be a string (up to 255 chars)\");\n var replyText_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += replyText_len;\n val = fields.exchange;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'exchange'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n val = fields.routingKey;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'routingKey'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n var buffer = Buffer.alloc(17 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932210, 7);\n offset = 11;\n val = fields.replyCode;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'replyCode'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'replyCode' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.replyText;\n void 0 === val && (val = \"\");\n buffer[offset] = replyText_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += replyText_len;\n val = fields.exchange;\n void 0 === val && (val = void 0);\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.routingKey;\n void 0 === val && (val = void 0);\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicDeliver(buffer) {\n var val, len, offset = 0, fields = {\n consumerTag: void 0,\n deliveryTag: void 0,\n redelivered: void 0,\n exchange: void 0,\n routingKey: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.consumerTag = val;\n val = ints.readUInt64BE(buffer, offset);\n offset += 8;\n fields.deliveryTag = val;\n val = !!(1 & buffer[offset]);\n fields.redelivered = val;\n offset++;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n return fields;\n}\n\nfunction encodeBasicDeliver(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.consumerTag;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'consumerTag'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'consumerTag' is the wrong type; must be a string (up to 255 chars)\");\n var consumerTag_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += consumerTag_len;\n val = fields.exchange;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'exchange'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n val = fields.routingKey;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'routingKey'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n var buffer = Buffer.alloc(24 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932220, 7);\n offset = 11;\n val = fields.consumerTag;\n void 0 === val && (val = void 0);\n buffer[offset] = consumerTag_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += consumerTag_len;\n val = fields.deliveryTag;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'deliveryTag'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'deliveryTag' is the wrong type; must be a number (but not NaN)\");\n ints.writeUInt64BE(buffer, val, offset);\n offset += 8;\n val = fields.redelivered;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n val = fields.exchange;\n void 0 === val && (val = void 0);\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.routingKey;\n void 0 === val && (val = void 0);\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicGet(buffer) {\n var val, len, offset = 0, fields = {\n ticket: void 0,\n queue: void 0,\n noAck: void 0\n };\n val = buffer.readUInt16BE(offset);\n offset += 2;\n fields.ticket = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.queue = val;\n val = !!(1 & buffer[offset]);\n fields.noAck = val;\n return fields;\n}\n\nfunction encodeBasicGet(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.queue;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'queue' is the wrong type; must be a string (up to 255 chars)\");\n var queue_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += queue_len;\n var buffer = Buffer.alloc(16 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932230, 7);\n offset = 11;\n val = fields.ticket;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'ticket' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt16BE(val, offset);\n offset += 2;\n val = fields.queue;\n void 0 === val && (val = \"\");\n buffer[offset] = queue_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += queue_len;\n val = fields.noAck;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicGetOk(buffer) {\n var val, len, offset = 0, fields = {\n deliveryTag: void 0,\n redelivered: void 0,\n exchange: void 0,\n routingKey: void 0,\n messageCount: void 0\n };\n val = ints.readUInt64BE(buffer, offset);\n offset += 8;\n fields.deliveryTag = val;\n val = !!(1 & buffer[offset]);\n fields.redelivered = val;\n offset++;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.exchange = val;\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.routingKey = val;\n val = buffer.readUInt32BE(offset);\n offset += 4;\n fields.messageCount = val;\n return fields;\n}\n\nfunction encodeBasicGetOk(channel, fields) {\n var offset = 0, val = null, bits = 0, varyingSize = 0;\n val = fields.exchange;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'exchange'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'exchange' is the wrong type; must be a string (up to 255 chars)\");\n var exchange_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += exchange_len;\n val = fields.routingKey;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'routingKey'\");\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'routingKey' is the wrong type; must be a string (up to 255 chars)\");\n var routingKey_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += routingKey_len;\n var buffer = Buffer.alloc(27 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932231, 7);\n offset = 11;\n val = fields.deliveryTag;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'deliveryTag'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'deliveryTag' is the wrong type; must be a number (but not NaN)\");\n ints.writeUInt64BE(buffer, val, offset);\n offset += 8;\n val = fields.redelivered;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n bits = 0;\n val = fields.exchange;\n void 0 === val && (val = void 0);\n buffer[offset] = exchange_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += exchange_len;\n val = fields.routingKey;\n void 0 === val && (val = void 0);\n buffer[offset] = routingKey_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += routingKey_len;\n val = fields.messageCount;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'messageCount'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'messageCount' is the wrong type; must be a number (but not NaN)\");\n buffer.writeUInt32BE(val, offset);\n offset += 4;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicGetEmpty(buffer) {\n var val, len, offset = 0, fields = {\n clusterId: void 0\n };\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.clusterId = val;\n return fields;\n}\n\nfunction encodeBasicGetEmpty(channel, fields) {\n var offset = 0, val = null, varyingSize = 0;\n val = fields.clusterId;\n if (void 0 === val) val = \"\"; else if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'clusterId' is the wrong type; must be a string (up to 255 chars)\");\n var clusterId_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += clusterId_len;\n var buffer = Buffer.alloc(13 + varyingSize);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932232, 7);\n offset = 11;\n val = fields.clusterId;\n void 0 === val && (val = \"\");\n buffer[offset] = clusterId_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += clusterId_len;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicAck(buffer) {\n var val, offset = 0, fields = {\n deliveryTag: void 0,\n multiple: void 0\n };\n val = ints.readUInt64BE(buffer, offset);\n offset += 8;\n fields.deliveryTag = val;\n val = !!(1 & buffer[offset]);\n fields.multiple = val;\n return fields;\n}\n\nfunction encodeBasicAck(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(21);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932240, 7);\n offset = 11;\n val = fields.deliveryTag;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'deliveryTag' is the wrong type; must be a number (but not NaN)\");\n ints.writeUInt64BE(buffer, val, offset);\n offset += 8;\n val = fields.multiple;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicReject(buffer) {\n var val, offset = 0, fields = {\n deliveryTag: void 0,\n requeue: void 0\n };\n val = ints.readUInt64BE(buffer, offset);\n offset += 8;\n fields.deliveryTag = val;\n val = !!(1 & buffer[offset]);\n fields.requeue = val;\n return fields;\n}\n\nfunction encodeBasicReject(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(21);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932250, 7);\n offset = 11;\n val = fields.deliveryTag;\n if (void 0 === val) throw new Error(\"Missing value for mandatory field 'deliveryTag'\");\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'deliveryTag' is the wrong type; must be a number (but not NaN)\");\n ints.writeUInt64BE(buffer, val, offset);\n offset += 8;\n val = fields.requeue;\n void 0 === val && (val = !0);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicRecoverAsync(buffer) {\n var val, fields = {\n requeue: void 0\n };\n val = !!(1 & buffer[0]);\n fields.requeue = val;\n return fields;\n}\n\nfunction encodeBasicRecoverAsync(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(13);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932260, 7);\n offset = 11;\n val = fields.requeue;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicRecover(buffer) {\n var val, fields = {\n requeue: void 0\n };\n val = !!(1 & buffer[0]);\n fields.requeue = val;\n return fields;\n}\n\nfunction encodeBasicRecover(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(13);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932270, 7);\n offset = 11;\n val = fields.requeue;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicRecoverOk(buffer) {\n return {};\n}\n\nfunction encodeBasicRecoverOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932271, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeBasicNack(buffer) {\n var val, offset = 0, fields = {\n deliveryTag: void 0,\n multiple: void 0,\n requeue: void 0\n };\n val = ints.readUInt64BE(buffer, offset);\n offset += 8;\n fields.deliveryTag = val;\n val = !!(1 & buffer[offset]);\n fields.multiple = val;\n val = !!(2 & buffer[offset]);\n fields.requeue = val;\n return fields;\n}\n\nfunction encodeBasicNack(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(21);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932280, 7);\n offset = 11;\n val = fields.deliveryTag;\n if (void 0 === val) val = 0; else if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'deliveryTag' is the wrong type; must be a number (but not NaN)\");\n ints.writeUInt64BE(buffer, val, offset);\n offset += 8;\n val = fields.multiple;\n void 0 === val && (val = !1);\n val && (bits += 1);\n val = fields.requeue;\n void 0 === val && (val = !0);\n val && (bits += 2);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeTxSelect(buffer) {\n return {};\n}\n\nfunction encodeTxSelect(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5898250, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeTxSelectOk(buffer) {\n return {};\n}\n\nfunction encodeTxSelectOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5898251, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeTxCommit(buffer) {\n return {};\n}\n\nfunction encodeTxCommit(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5898260, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeTxCommitOk(buffer) {\n return {};\n}\n\nfunction encodeTxCommitOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5898261, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeTxRollback(buffer) {\n return {};\n}\n\nfunction encodeTxRollback(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5898270, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeTxRollbackOk(buffer) {\n return {};\n}\n\nfunction encodeTxRollbackOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5898271, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConfirmSelect(buffer) {\n var val, fields = {\n nowait: void 0\n };\n val = !!(1 & buffer[0]);\n fields.nowait = val;\n return fields;\n}\n\nfunction encodeConfirmSelect(channel, fields) {\n var offset = 0, val = null, bits = 0, buffer = Buffer.alloc(13);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5570570, 7);\n offset = 11;\n val = fields.nowait;\n void 0 === val && (val = !1);\n val && (bits += 1);\n buffer[offset] = bits;\n offset++;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction decodeConfirmSelectOk(buffer) {\n return {};\n}\n\nfunction encodeConfirmSelectOk(channel, fields) {\n var offset = 0, buffer = Buffer.alloc(12);\n buffer[0] = 1;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(5570571, 7);\n offset = 11;\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n return buffer;\n}\n\nfunction encodeBasicProperties(channel, size, fields) {\n var val, len, offset = 0, flags = 0, scratchOffset = 0, varyingSize = 0;\n val = fields.contentType;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'contentType' is the wrong type; must be a string (up to 255 chars)\");\n var contentType_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += contentType_len;\n }\n val = fields.contentEncoding;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'contentEncoding' is the wrong type; must be a string (up to 255 chars)\");\n var contentEncoding_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += contentEncoding_len;\n }\n val = fields.headers;\n if (void 0 != val) {\n if (\"object\" != typeof val) throw new TypeError(\"Field 'headers' is the wrong type; must be an object\");\n len = encodeTable(SCRATCH, val, scratchOffset);\n var headers_encoded = SCRATCH.slice(scratchOffset, scratchOffset + len);\n scratchOffset += len;\n varyingSize += headers_encoded.length;\n }\n val = fields.deliveryMode;\n if (void 0 != val) {\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'deliveryMode' is the wrong type; must be a number (but not NaN)\");\n varyingSize += 1;\n }\n val = fields.priority;\n if (void 0 != val) {\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'priority' is the wrong type; must be a number (but not NaN)\");\n varyingSize += 1;\n }\n val = fields.correlationId;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'correlationId' is the wrong type; must be a string (up to 255 chars)\");\n var correlationId_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += correlationId_len;\n }\n val = fields.replyTo;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'replyTo' is the wrong type; must be a string (up to 255 chars)\");\n var replyTo_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += replyTo_len;\n }\n val = fields.expiration;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'expiration' is the wrong type; must be a string (up to 255 chars)\");\n var expiration_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += expiration_len;\n }\n val = fields.messageId;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'messageId' is the wrong type; must be a string (up to 255 chars)\");\n var messageId_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += messageId_len;\n }\n val = fields.timestamp;\n if (void 0 != val) {\n if (\"number\" != typeof val || isNaN(val)) throw new TypeError(\"Field 'timestamp' is the wrong type; must be a number (but not NaN)\");\n varyingSize += 8;\n }\n val = fields.type;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'type' is the wrong type; must be a string (up to 255 chars)\");\n var type_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += type_len;\n }\n val = fields.userId;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'userId' is the wrong type; must be a string (up to 255 chars)\");\n var userId_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += userId_len;\n }\n val = fields.appId;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'appId' is the wrong type; must be a string (up to 255 chars)\");\n var appId_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += appId_len;\n }\n val = fields.clusterId;\n if (void 0 != val) {\n if (!(\"string\" == typeof val && Buffer.byteLength(val) < 256)) throw new TypeError(\"Field 'clusterId' is the wrong type; must be a string (up to 255 chars)\");\n var clusterId_len = Buffer.byteLength(val, \"utf8\");\n varyingSize += 1;\n varyingSize += clusterId_len;\n }\n var buffer = Buffer.alloc(22 + varyingSize);\n buffer[0] = 2;\n buffer.writeUInt16BE(channel, 1);\n buffer.writeUInt32BE(3932160, 7);\n ints.writeUInt64BE(buffer, size, 11);\n flags = 0;\n offset = 21;\n val = fields.contentType;\n if (void 0 != val) {\n flags += 32768;\n buffer[offset] = contentType_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += contentType_len;\n }\n val = fields.contentEncoding;\n if (void 0 != val) {\n flags += 16384;\n buffer[offset] = contentEncoding_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += contentEncoding_len;\n }\n val = fields.headers;\n if (void 0 != val) {\n flags += 8192;\n offset += headers_encoded.copy(buffer, offset);\n }\n val = fields.deliveryMode;\n if (void 0 != val) {\n flags += 4096;\n buffer.writeUInt8(val, offset);\n offset++;\n }\n val = fields.priority;\n if (void 0 != val) {\n flags += 2048;\n buffer.writeUInt8(val, offset);\n offset++;\n }\n val = fields.correlationId;\n if (void 0 != val) {\n flags += 1024;\n buffer[offset] = correlationId_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += correlationId_len;\n }\n val = fields.replyTo;\n if (void 0 != val) {\n flags += 512;\n buffer[offset] = replyTo_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += replyTo_len;\n }\n val = fields.expiration;\n if (void 0 != val) {\n flags += 256;\n buffer[offset] = expiration_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += expiration_len;\n }\n val = fields.messageId;\n if (void 0 != val) {\n flags += 128;\n buffer[offset] = messageId_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += messageId_len;\n }\n val = fields.timestamp;\n if (void 0 != val) {\n flags += 64;\n ints.writeUInt64BE(buffer, val, offset);\n offset += 8;\n }\n val = fields.type;\n if (void 0 != val) {\n flags += 32;\n buffer[offset] = type_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += type_len;\n }\n val = fields.userId;\n if (void 0 != val) {\n flags += 16;\n buffer[offset] = userId_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += userId_len;\n }\n val = fields.appId;\n if (void 0 != val) {\n flags += 8;\n buffer[offset] = appId_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += appId_len;\n }\n val = fields.clusterId;\n if (void 0 != val) {\n flags += 4;\n buffer[offset] = clusterId_len;\n offset++;\n buffer.write(val, offset, \"utf8\");\n offset += clusterId_len;\n }\n buffer[offset] = 206;\n buffer.writeUInt32BE(offset - 7, 3);\n buffer.writeUInt16BE(flags, 19);\n return buffer.slice(0, offset + 1);\n}\n\nfunction decodeBasicProperties(buffer) {\n var flags, val, len, offset = 2;\n flags = buffer.readUInt16BE(0);\n if (0 === flags) return {};\n var fields = {\n contentType: void 0,\n contentEncoding: void 0,\n headers: void 0,\n deliveryMode: void 0,\n priority: void 0,\n correlationId: void 0,\n replyTo: void 0,\n expiration: void 0,\n messageId: void 0,\n timestamp: void 0,\n type: void 0,\n userId: void 0,\n appId: void 0,\n clusterId: void 0\n };\n if (32768 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.contentType = val;\n }\n if (16384 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.contentEncoding = val;\n }\n if (8192 & flags) {\n len = buffer.readUInt32BE(offset);\n offset += 4;\n val = decodeFields(buffer.slice(offset, offset + len));\n offset += len;\n fields.headers = val;\n }\n if (4096 & flags) {\n val = buffer[offset];\n offset++;\n fields.deliveryMode = val;\n }\n if (2048 & flags) {\n val = buffer[offset];\n offset++;\n fields.priority = val;\n }\n if (1024 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.correlationId = val;\n }\n if (512 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.replyTo = val;\n }\n if (256 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.expiration = val;\n }\n if (128 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.messageId = val;\n }\n if (64 & flags) {\n val = ints.readUInt64BE(buffer, offset);\n offset += 8;\n fields.timestamp = val;\n }\n if (32 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.type = val;\n }\n if (16 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.userId = val;\n }\n if (8 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.appId = val;\n }\n if (4 & flags) {\n len = buffer.readUInt8(offset);\n offset++;\n val = buffer.toString(\"utf8\", offset, offset + len);\n offset += len;\n fields.clusterId = val;\n }\n return fields;\n}\n\nvar codec = require(\"./codec\"), ints = require(\"buffer-more-ints\"), encodeTable = codec.encodeTable, decodeFields = codec.decodeFields, SCRATCH = Buffer.alloc(65536), EMPTY_OBJECT = Object.freeze({});\n\nmodule.exports.constants = {\n FRAME_METHOD: 1,\n FRAME_HEADER: 2,\n FRAME_BODY: 3,\n FRAME_HEARTBEAT: 8,\n FRAME_MIN_SIZE: 4096,\n FRAME_END: 206,\n REPLY_SUCCESS: 200,\n CONTENT_TOO_LARGE: 311,\n NO_ROUTE: 312,\n NO_CONSUMERS: 313,\n ACCESS_REFUSED: 403,\n NOT_FOUND: 404,\n RESOURCE_LOCKED: 405,\n PRECONDITION_FAILED: 406,\n CONNECTION_FORCED: 320,\n INVALID_PATH: 402,\n FRAME_ERROR: 501,\n SYNTAX_ERROR: 502,\n COMMAND_INVALID: 503,\n CHANNEL_ERROR: 504,\n UNEXPECTED_FRAME: 505,\n RESOURCE_ERROR: 506,\n NOT_ALLOWED: 530,\n NOT_IMPLEMENTED: 540,\n INTERNAL_ERROR: 541\n};\n\nmodule.exports.constant_strs = {\n \"1\": \"FRAME-METHOD\",\n \"2\": \"FRAME-HEADER\",\n \"3\": \"FRAME-BODY\",\n \"8\": \"FRAME-HEARTBEAT\",\n \"200\": \"REPLY-SUCCESS\",\n \"206\": \"FRAME-END\",\n \"311\": \"CONTENT-TOO-LARGE\",\n \"312\": \"NO-ROUTE\",\n \"313\": \"NO-CONSUMERS\",\n \"320\": \"CONNECTION-FORCED\",\n \"402\": \"INVALID-PATH\",\n \"403\": \"ACCESS-REFUSED\",\n \"404\": \"NOT-FOUND\",\n \"405\": \"RESOURCE-LOCKED\",\n \"406\": \"PRECONDITION-FAILED\",\n \"501\": \"FRAME-ERROR\",\n \"502\": \"SYNTAX-ERROR\",\n \"503\": \"COMMAND-INVALID\",\n \"504\": \"CHANNEL-ERROR\",\n \"505\": \"UNEXPECTED-FRAME\",\n \"506\": \"RESOURCE-ERROR\",\n \"530\": \"NOT-ALLOWED\",\n \"540\": \"NOT-IMPLEMENTED\",\n \"541\": \"INTERNAL-ERROR\",\n \"4096\": \"FRAME-MIN-SIZE\"\n};\n\nmodule.exports.FRAME_OVERHEAD = 8;\n\nmodule.exports.decode = function(id, buf) {\n switch (id) {\n case 655370:\n return decodeConnectionStart(buf);\n\n case 655371:\n return decodeConnectionStartOk(buf);\n\n case 655380:\n return decodeConnectionSecure(buf);\n\n case 655381:\n return decodeConnectionSecureOk(buf);\n\n case 655390:\n return decodeConnectionTune(buf);\n\n case 655391:\n return decodeConnectionTuneOk(buf);\n\n case 655400:\n return decodeConnectionOpen(buf);\n\n case 655401:\n return decodeConnectionOpenOk(buf);\n\n case 655410:\n return decodeConnectionClose(buf);\n\n case 655411:\n return decodeConnectionCloseOk(buf);\n\n case 655420:\n return decodeConnectionBlocked(buf);\n\n case 655421:\n return decodeConnectionUnblocked(buf);\n\n case 1310730:\n return decodeChannelOpen(buf);\n\n case 1310731:\n return decodeChannelOpenOk(buf);\n\n case 1310740:\n return decodeChannelFlow(buf);\n\n case 1310741:\n return decodeChannelFlowOk(buf);\n\n case 1310760:\n return decodeChannelClose(buf);\n\n case 1310761:\n return decodeChannelCloseOk(buf);\n\n case 1966090:\n return decodeAccessRequest(buf);\n\n case 1966091:\n return decodeAccessRequestOk(buf);\n\n case 2621450:\n return decodeExchangeDeclare(buf);\n\n case 2621451:\n return decodeExchangeDeclareOk(buf);\n\n case 2621460:\n return decodeExchangeDelete(buf);\n\n case 2621461:\n return decodeExchangeDeleteOk(buf);\n\n case 2621470:\n return decodeExchangeBind(buf);\n\n case 2621471:\n return decodeExchangeBindOk(buf);\n\n case 2621480:\n return decodeExchangeUnbind(buf);\n\n case 2621491:\n return decodeExchangeUnbindOk(buf);\n\n case 3276810:\n return decodeQueueDeclare(buf);\n\n case 3276811:\n return decodeQueueDeclareOk(buf);\n\n case 3276820:\n return decodeQueueBind(buf);\n\n case 3276821:\n return decodeQueueBindOk(buf);\n\n case 3276830:\n return decodeQueuePurge(buf);\n\n case 3276831:\n return decodeQueuePurgeOk(buf);\n\n case 3276840:\n return decodeQueueDelete(buf);\n\n case 3276841:\n return decodeQueueDeleteOk(buf);\n\n case 3276850:\n return decodeQueueUnbind(buf);\n\n case 3276851:\n return decodeQueueUnbindOk(buf);\n\n case 3932170:\n return decodeBasicQos(buf);\n\n case 3932171:\n return decodeBasicQosOk(buf);\n\n case 3932180:\n return decodeBasicConsume(buf);\n\n case 3932181:\n return decodeBasicConsumeOk(buf);\n\n case 3932190:\n return decodeBasicCancel(buf);\n\n case 3932191:\n return decodeBasicCancelOk(buf);\n\n case 3932200:\n return decodeBasicPublish(buf);\n\n case 3932210:\n return decodeBasicReturn(buf);\n\n case 3932220:\n return decodeBasicDeliver(buf);\n\n case 3932230:\n return decodeBasicGet(buf);\n\n case 3932231:\n return decodeBasicGetOk(buf);\n\n case 3932232:\n return decodeBasicGetEmpty(buf);\n\n case 3932240:\n return decodeBasicAck(buf);\n\n case 3932250:\n return decodeBasicReject(buf);\n\n case 3932260:\n return decodeBasicRecoverAsync(buf);\n\n case 3932270:\n return decodeBasicRecover(buf);\n\n case 3932271:\n return decodeBasicRecoverOk(buf);\n\n case 3932280:\n return decodeBasicNack(buf);\n\n case 5898250:\n return decodeTxSelect(buf);\n\n case 5898251:\n return decodeTxSelectOk(buf);\n\n case 5898260:\n return decodeTxCommit(buf);\n\n case 5898261:\n return decodeTxCommitOk(buf);\n\n case 5898270:\n return decodeTxRollback(buf);\n\n case 5898271:\n return decodeTxRollbackOk(buf);\n\n case 5570570:\n return decodeConfirmSelect(buf);\n\n case 5570571:\n return decodeConfirmSelectOk(buf);\n\n case 60:\n return decodeBasicProperties(buf);\n\n default:\n throw new Error(\"Unknown class/method ID\");\n }\n};\n\nmodule.exports.encodeMethod = function(id, channel, fields) {\n switch (id) {\n case 655370:\n return encodeConnectionStart(channel, fields);\n\n case 655371:\n return encodeConnectionStartOk(channel, fields);\n\n case 655380:\n return encodeConnectionSecure(channel, fields);\n\n case 655381:\n return encodeConnectionSecureOk(channel, fields);\n\n case 655390:\n return encodeConnectionTune(channel, fields);\n\n case 655391:\n return encodeConnectionTuneOk(channel, fields);\n\n case 655400:\n return encodeConnectionOpen(channel, fields);\n\n case 655401:\n return encodeConnectionOpenOk(channel, fields);\n\n case 655410:\n return encodeConnectionClose(channel, fields);\n\n case 655411:\n return encodeConnectionCloseOk(channel, fields);\n\n case 655420:\n return encodeConnectionBlocked(channel, fields);\n\n case 655421:\n return encodeConnectionUnblocked(channel, fields);\n\n case 1310730:\n return encodeChannelOpen(channel, fields);\n\n case 1310731:\n return encodeChannelOpenOk(channel, fields);\n\n case 1310740:\n return encodeChannelFlow(channel, fields);\n\n case 1310741:\n return encodeChannelFlowOk(channel, fields);\n\n case 1310760:\n return encodeChannelClose(channel, fields);\n\n case 1310761:\n return encodeChannelCloseOk(channel, fields);\n\n case 1966090:\n return encodeAccessRequest(channel, fields);\n\n case 1966091:\n return encodeAccessRequestOk(channel, fields);\n\n case 2621450:\n return encodeExchangeDeclare(channel, fields);\n\n case 2621451:\n return encodeExchangeDeclareOk(channel, fields);\n\n case 2621460:\n return encodeExchangeDelete(channel, fields);\n\n case 2621461:\n return encodeExchangeDeleteOk(channel, fields);\n\n case 2621470:\n return encodeExchangeBind(channel, fields);\n\n case 2621471:\n return encodeExchangeBindOk(channel, fields);\n\n case 2621480:\n return encodeExchangeUnbind(channel, fields);\n\n case 2621491:\n return encodeExchangeUnbindOk(channel, fields);\n\n case 3276810:\n return encodeQueueDeclare(channel, fields);\n\n case 3276811:\n return encodeQueueDeclareOk(channel, fields);\n\n case 3276820:\n return encodeQueueBind(channel, fields);\n\n case 3276821:\n return encodeQueueBindOk(channel, fields);\n\n case 3276830:\n return encodeQueuePurge(channel, fields);\n\n case 3276831:\n return encodeQueuePurgeOk(channel, fields);\n\n case 3276840:\n return encodeQueueDelete(channel, fields);\n\n case 3276841:\n return encodeQueueDeleteOk(channel, fields);\n\n case 3276850:\n return encodeQueueUnbind(channel, fields);\n\n case 3276851:\n return encodeQueueUnbindOk(channel, fields);\n\n case 3932170:\n return encodeBasicQos(channel, fields);\n\n case 3932171:\n return encodeBasicQosOk(channel, fields);\n\n case 3932180:\n return encodeBasicConsume(channel, fields);\n\n case 3932181:\n return encodeBasicConsumeOk(channel, fields);\n\n case 3932190:\n return encodeBasicCancel(channel, fields);\n\n case 3932191:\n return encodeBasicCancelOk(channel, fields);\n\n case 3932200:\n return encodeBasicPublish(channel, fields);\n\n case 3932210:\n return encodeBasicReturn(channel, fields);\n\n case 3932220:\n return encodeBasicDeliver(channel, fields);\n\n case 3932230:\n return encodeBasicGet(channel, fields);\n\n case 3932231:\n return encodeBasicGetOk(channel, fields);\n\n case 3932232:\n return encodeBasicGetEmpty(channel, fields);\n\n case 3932240:\n return encodeBasicAck(channel, fields);\n\n case 3932250:\n return encodeBasicReject(channel, fields);\n\n case 3932260:\n return encodeBasicRecoverAsync(channel, fields);\n\n case 3932270:\n return encodeBasicRecover(channel, fields);\n\n case 3932271:\n return encodeBasicRecoverOk(channel, fields);\n\n case 3932280:\n return encodeBasicNack(channel, fields);\n\n case 5898250:\n return encodeTxSelect(channel, fields);\n\n case 5898251:\n return encodeTxSelectOk(channel, fields);\n\n case 5898260:\n return encodeTxCommit(channel, fields);\n\n case 5898261:\n return encodeTxCommitOk(channel, fields);\n\n case 5898270:\n return encodeTxRollback(channel, fields);\n\n case 5898271:\n return encodeTxRollbackOk(channel, fields);\n\n case 5570570:\n return encodeConfirmSelect(channel, fields);\n\n case 5570571:\n return encodeConfirmSelectOk(channel, fields);\n\n default:\n throw new Error(\"Unknown class/method ID\");\n }\n};\n\nmodule.exports.encodeProperties = function(id, channel, size, fields) {\n switch (id) {\n case 60:\n return encodeBasicProperties(channel, size, fields);\n\n default:\n throw new Error(\"Unknown class/properties ID\");\n }\n};\n\nmodule.exports.info = function(id) {\n switch (id) {\n case 655370:\n return methodInfoConnectionStart;\n\n case 655371:\n return methodInfoConnectionStartOk;\n\n case 655380:\n return methodInfoConnectionSecure;\n\n case 655381:\n return methodInfoConnectionSecureOk;\n\n case 655390:\n return methodInfoConnectionTune;\n\n case 655391:\n return methodInfoConnectionTuneOk;\n\n case 655400:\n return methodInfoConnectionOpen;\n\n case 655401:\n return methodInfoConnectionOpenOk;\n\n case 655410:\n return methodInfoConnectionClose;\n\n case 655411:\n return methodInfoConnectionCloseOk;\n\n case 655420:\n return methodInfoConnectionBlocked;\n\n case 655421:\n return methodInfoConnectionUnblocked;\n\n case 1310730:\n return methodInfoChannelOpen;\n\n case 1310731:\n return methodInfoChannelOpenOk;\n\n case 1310740:\n return methodInfoChannelFlow;\n\n case 1310741:\n return methodInfoChannelFlowOk;\n\n case 1310760:\n return methodInfoChannelClose;\n\n case 1310761:\n return methodInfoChannelCloseOk;\n\n case 1966090:\n return methodInfoAccessRequest;\n\n case 1966091:\n return methodInfoAccessRequestOk;\n\n case 2621450:\n return methodInfoExchangeDeclare;\n\n case 2621451:\n return methodInfoExchangeDeclareOk;\n\n case 2621460:\n return methodInfoExchangeDelete;\n\n case 2621461:\n return methodInfoExchangeDeleteOk;\n\n case 2621470:\n return methodInfoExchangeBind;\n\n case 2621471:\n return methodInfoExchangeBindOk;\n\n case 2621480:\n return methodInfoExchangeUnbind;\n\n case 2621491:\n return methodInfoExchangeUnbindOk;\n\n case 3276810:\n return methodInfoQueueDeclare;\n\n case 3276811:\n return methodInfoQueueDeclareOk;\n\n case 3276820:\n return methodInfoQueueBind;\n\n case 3276821:\n return methodInfoQueueBindOk;\n\n case 3276830:\n return methodInfoQueuePurge;\n\n case 3276831:\n return methodInfoQueuePurgeOk;\n\n case 3276840:\n return methodInfoQueueDelete;\n\n case 3276841:\n return methodInfoQueueDeleteOk;\n\n case 3276850:\n return methodInfoQueueUnbind;\n\n case 3276851:\n return methodInfoQueueUnbindOk;\n\n case 3932170:\n return methodInfoBasicQos;\n\n case 3932171:\n return methodInfoBasicQosOk;\n\n case 3932180:\n return methodInfoBasicConsume;\n\n case 3932181:\n return methodInfoBasicConsumeOk;\n\n case 3932190:\n return methodInfoBasicCancel;\n\n case 3932191:\n return methodInfoBasicCancelOk;\n\n case 3932200:\n return methodInfoBasicPublish;\n\n case 3932210:\n return methodInfoBasicReturn;\n\n case 3932220:\n return methodInfoBasicDeliver;\n\n case 3932230:\n return methodInfoBasicGet;\n\n case 3932231:\n return methodInfoBasicGetOk;\n\n case 3932232:\n return methodInfoBasicGetEmpty;\n\n case 3932240:\n return methodInfoBasicAck;\n\n case 3932250:\n return methodInfoBasicReject;\n\n case 3932260:\n return methodInfoBasicRecoverAsync;\n\n case 3932270:\n return methodInfoBasicRecover;\n\n case 3932271:\n return methodInfoBasicRecoverOk;\n\n case 3932280:\n return methodInfoBasicNack;\n\n case 5898250:\n return methodInfoTxSelect;\n\n case 5898251:\n return methodInfoTxSelectOk;\n\n case 5898260:\n return methodInfoTxCommit;\n\n case 5898261:\n return methodInfoTxCommitOk;\n\n case 5898270:\n return methodInfoTxRollback;\n\n case 5898271:\n return methodInfoTxRollbackOk;\n\n case 5570570:\n return methodInfoConfirmSelect;\n\n case 5570571:\n return methodInfoConfirmSelectOk;\n\n case 60:\n return propertiesInfoBasicProperties;\n\n default:\n throw new Error(\"Unknown class/method ID\");\n }\n};\n\nmodule.exports.ConnectionStart = 655370;\n\nvar methodInfoConnectionStart = module.exports.methodInfoConnectionStart = {\n id: 655370,\n classId: 10,\n methodId: 10,\n name: \"ConnectionStart\",\n args: [ {\n type: \"octet\",\n name: \"versionMajor\",\n default: 0\n }, {\n type: \"octet\",\n name: \"versionMinor\",\n default: 9\n }, {\n type: \"table\",\n name: \"serverProperties\"\n }, {\n type: \"longstr\",\n name: \"mechanisms\",\n default: \"PLAIN\"\n }, {\n type: \"longstr\",\n name: \"locales\",\n default: \"en_US\"\n } ]\n};\n\nmodule.exports.ConnectionStartOk = 655371;\n\nvar methodInfoConnectionStartOk = module.exports.methodInfoConnectionStartOk = {\n id: 655371,\n classId: 10,\n methodId: 11,\n name: \"ConnectionStartOk\",\n args: [ {\n type: \"table\",\n name: \"clientProperties\"\n }, {\n type: \"shortstr\",\n name: \"mechanism\",\n default: \"PLAIN\"\n }, {\n type: \"longstr\",\n name: \"response\"\n }, {\n type: \"shortstr\",\n name: \"locale\",\n default: \"en_US\"\n } ]\n};\n\nmodule.exports.ConnectionSecure = 655380;\n\nvar methodInfoConnectionSecure = module.exports.methodInfoConnectionSecure = {\n id: 655380,\n classId: 10,\n methodId: 20,\n name: \"ConnectionSecure\",\n args: [ {\n type: \"longstr\",\n name: \"challenge\"\n } ]\n};\n\nmodule.exports.ConnectionSecureOk = 655381;\n\nvar methodInfoConnectionSecureOk = module.exports.methodInfoConnectionSecureOk = {\n id: 655381,\n classId: 10,\n methodId: 21,\n name: \"ConnectionSecureOk\",\n args: [ {\n type: \"longstr\",\n name: \"response\"\n } ]\n};\n\nmodule.exports.ConnectionTune = 655390;\n\nvar methodInfoConnectionTune = module.exports.methodInfoConnectionTune = {\n id: 655390,\n classId: 10,\n methodId: 30,\n name: \"ConnectionTune\",\n args: [ {\n type: \"short\",\n name: \"channelMax\",\n default: 0\n }, {\n type: \"long\",\n name: \"frameMax\",\n default: 0\n }, {\n type: \"short\",\n name: \"heartbeat\",\n default: 0\n } ]\n};\n\nmodule.exports.ConnectionTuneOk = 655391;\n\nvar methodInfoConnectionTuneOk = module.exports.methodInfoConnectionTuneOk = {\n id: 655391,\n classId: 10,\n methodId: 31,\n name: \"ConnectionTuneOk\",\n args: [ {\n type: \"short\",\n name: \"channelMax\",\n default: 0\n }, {\n type: \"long\",\n name: \"frameMax\",\n default: 0\n }, {\n type: \"short\",\n name: \"heartbeat\",\n default: 0\n } ]\n};\n\nmodule.exports.ConnectionOpen = 655400;\n\nvar methodInfoConnectionOpen = module.exports.methodInfoConnectionOpen = {\n id: 655400,\n classId: 10,\n methodId: 40,\n name: \"ConnectionOpen\",\n args: [ {\n type: \"shortstr\",\n name: \"virtualHost\",\n default: \"/\"\n }, {\n type: \"shortstr\",\n name: \"capabilities\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"insist\",\n default: !1\n } ]\n};\n\nmodule.exports.ConnectionOpenOk = 655401;\n\nvar methodInfoConnectionOpenOk = module.exports.methodInfoConnectionOpenOk = {\n id: 655401,\n classId: 10,\n methodId: 41,\n name: \"ConnectionOpenOk\",\n args: [ {\n type: \"shortstr\",\n name: \"knownHosts\",\n default: \"\"\n } ]\n};\n\nmodule.exports.ConnectionClose = 655410;\n\nvar methodInfoConnectionClose = module.exports.methodInfoConnectionClose = {\n id: 655410,\n classId: 10,\n methodId: 50,\n name: \"ConnectionClose\",\n args: [ {\n type: \"short\",\n name: \"replyCode\"\n }, {\n type: \"shortstr\",\n name: \"replyText\",\n default: \"\"\n }, {\n type: \"short\",\n name: \"classId\"\n }, {\n type: \"short\",\n name: \"methodId\"\n } ]\n};\n\nmodule.exports.ConnectionCloseOk = 655411;\n\nvar methodInfoConnectionCloseOk = module.exports.methodInfoConnectionCloseOk = {\n id: 655411,\n classId: 10,\n methodId: 51,\n name: \"ConnectionCloseOk\",\n args: []\n};\n\nmodule.exports.ConnectionBlocked = 655420;\n\nvar methodInfoConnectionBlocked = module.exports.methodInfoConnectionBlocked = {\n id: 655420,\n classId: 10,\n methodId: 60,\n name: \"ConnectionBlocked\",\n args: [ {\n type: \"shortstr\",\n name: \"reason\",\n default: \"\"\n } ]\n};\n\nmodule.exports.ConnectionUnblocked = 655421;\n\nvar methodInfoConnectionUnblocked = module.exports.methodInfoConnectionUnblocked = {\n id: 655421,\n classId: 10,\n methodId: 61,\n name: \"ConnectionUnblocked\",\n args: []\n};\n\nmodule.exports.ChannelOpen = 1310730;\n\nvar methodInfoChannelOpen = module.exports.methodInfoChannelOpen = {\n id: 1310730,\n classId: 20,\n methodId: 10,\n name: \"ChannelOpen\",\n args: [ {\n type: \"shortstr\",\n name: \"outOfBand\",\n default: \"\"\n } ]\n};\n\nmodule.exports.ChannelOpenOk = 1310731;\n\nvar methodInfoChannelOpenOk = module.exports.methodInfoChannelOpenOk = {\n id: 1310731,\n classId: 20,\n methodId: 11,\n name: \"ChannelOpenOk\",\n args: [ {\n type: \"longstr\",\n name: \"channelId\",\n default: \"\"\n } ]\n};\n\nmodule.exports.ChannelFlow = 1310740;\n\nvar methodInfoChannelFlow = module.exports.methodInfoChannelFlow = {\n id: 1310740,\n classId: 20,\n methodId: 20,\n name: \"ChannelFlow\",\n args: [ {\n type: \"bit\",\n name: \"active\"\n } ]\n};\n\nmodule.exports.ChannelFlowOk = 1310741;\n\nvar methodInfoChannelFlowOk = module.exports.methodInfoChannelFlowOk = {\n id: 1310741,\n classId: 20,\n methodId: 21,\n name: \"ChannelFlowOk\",\n args: [ {\n type: \"bit\",\n name: \"active\"\n } ]\n};\n\nmodule.exports.ChannelClose = 1310760;\n\nvar methodInfoChannelClose = module.exports.methodInfoChannelClose = {\n id: 1310760,\n classId: 20,\n methodId: 40,\n name: \"ChannelClose\",\n args: [ {\n type: \"short\",\n name: \"replyCode\"\n }, {\n type: \"shortstr\",\n name: \"replyText\",\n default: \"\"\n }, {\n type: \"short\",\n name: \"classId\"\n }, {\n type: \"short\",\n name: \"methodId\"\n } ]\n};\n\nmodule.exports.ChannelCloseOk = 1310761;\n\nvar methodInfoChannelCloseOk = module.exports.methodInfoChannelCloseOk = {\n id: 1310761,\n classId: 20,\n methodId: 41,\n name: \"ChannelCloseOk\",\n args: []\n};\n\nmodule.exports.AccessRequest = 1966090;\n\nvar methodInfoAccessRequest = module.exports.methodInfoAccessRequest = {\n id: 1966090,\n classId: 30,\n methodId: 10,\n name: \"AccessRequest\",\n args: [ {\n type: \"shortstr\",\n name: \"realm\",\n default: \"/data\"\n }, {\n type: \"bit\",\n name: \"exclusive\",\n default: !1\n }, {\n type: \"bit\",\n name: \"passive\",\n default: !0\n }, {\n type: \"bit\",\n name: \"active\",\n default: !0\n }, {\n type: \"bit\",\n name: \"write\",\n default: !0\n }, {\n type: \"bit\",\n name: \"read\",\n default: !0\n } ]\n};\n\nmodule.exports.AccessRequestOk = 1966091;\n\nvar methodInfoAccessRequestOk = module.exports.methodInfoAccessRequestOk = {\n id: 1966091,\n classId: 30,\n methodId: 11,\n name: \"AccessRequestOk\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 1\n } ]\n};\n\nmodule.exports.ExchangeDeclare = 2621450;\n\nvar methodInfoExchangeDeclare = module.exports.methodInfoExchangeDeclare = {\n id: 2621450,\n classId: 40,\n methodId: 10,\n name: \"ExchangeDeclare\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"exchange\"\n }, {\n type: \"shortstr\",\n name: \"type\",\n default: \"direct\"\n }, {\n type: \"bit\",\n name: \"passive\",\n default: !1\n }, {\n type: \"bit\",\n name: \"durable\",\n default: !1\n }, {\n type: \"bit\",\n name: \"autoDelete\",\n default: !1\n }, {\n type: \"bit\",\n name: \"internal\",\n default: !1\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n }, {\n type: \"table\",\n name: \"arguments\",\n default: {}\n } ]\n};\n\nmodule.exports.ExchangeDeclareOk = 2621451;\n\nvar methodInfoExchangeDeclareOk = module.exports.methodInfoExchangeDeclareOk = {\n id: 2621451,\n classId: 40,\n methodId: 11,\n name: \"ExchangeDeclareOk\",\n args: []\n};\n\nmodule.exports.ExchangeDelete = 2621460;\n\nvar methodInfoExchangeDelete = module.exports.methodInfoExchangeDelete = {\n id: 2621460,\n classId: 40,\n methodId: 20,\n name: \"ExchangeDelete\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"exchange\"\n }, {\n type: \"bit\",\n name: \"ifUnused\",\n default: !1\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n } ]\n};\n\nmodule.exports.ExchangeDeleteOk = 2621461;\n\nvar methodInfoExchangeDeleteOk = module.exports.methodInfoExchangeDeleteOk = {\n id: 2621461,\n classId: 40,\n methodId: 21,\n name: \"ExchangeDeleteOk\",\n args: []\n};\n\nmodule.exports.ExchangeBind = 2621470;\n\nvar methodInfoExchangeBind = module.exports.methodInfoExchangeBind = {\n id: 2621470,\n classId: 40,\n methodId: 30,\n name: \"ExchangeBind\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"destination\"\n }, {\n type: \"shortstr\",\n name: \"source\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n }, {\n type: \"table\",\n name: \"arguments\",\n default: {}\n } ]\n};\n\nmodule.exports.ExchangeBindOk = 2621471;\n\nvar methodInfoExchangeBindOk = module.exports.methodInfoExchangeBindOk = {\n id: 2621471,\n classId: 40,\n methodId: 31,\n name: \"ExchangeBindOk\",\n args: []\n};\n\nmodule.exports.ExchangeUnbind = 2621480;\n\nvar methodInfoExchangeUnbind = module.exports.methodInfoExchangeUnbind = {\n id: 2621480,\n classId: 40,\n methodId: 40,\n name: \"ExchangeUnbind\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"destination\"\n }, {\n type: \"shortstr\",\n name: \"source\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n }, {\n type: \"table\",\n name: \"arguments\",\n default: {}\n } ]\n};\n\nmodule.exports.ExchangeUnbindOk = 2621491;\n\nvar methodInfoExchangeUnbindOk = module.exports.methodInfoExchangeUnbindOk = {\n id: 2621491,\n classId: 40,\n methodId: 51,\n name: \"ExchangeUnbindOk\",\n args: []\n};\n\nmodule.exports.QueueDeclare = 3276810;\n\nvar methodInfoQueueDeclare = module.exports.methodInfoQueueDeclare = {\n id: 3276810,\n classId: 50,\n methodId: 10,\n name: \"QueueDeclare\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"queue\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"passive\",\n default: !1\n }, {\n type: \"bit\",\n name: \"durable\",\n default: !1\n }, {\n type: \"bit\",\n name: \"exclusive\",\n default: !1\n }, {\n type: \"bit\",\n name: \"autoDelete\",\n default: !1\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n }, {\n type: \"table\",\n name: \"arguments\",\n default: {}\n } ]\n};\n\nmodule.exports.QueueDeclareOk = 3276811;\n\nvar methodInfoQueueDeclareOk = module.exports.methodInfoQueueDeclareOk = {\n id: 3276811,\n classId: 50,\n methodId: 11,\n name: \"QueueDeclareOk\",\n args: [ {\n type: \"shortstr\",\n name: \"queue\"\n }, {\n type: \"long\",\n name: \"messageCount\"\n }, {\n type: \"long\",\n name: \"consumerCount\"\n } ]\n};\n\nmodule.exports.QueueBind = 3276820;\n\nvar methodInfoQueueBind = module.exports.methodInfoQueueBind = {\n id: 3276820,\n classId: 50,\n methodId: 20,\n name: \"QueueBind\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"queue\",\n default: \"\"\n }, {\n type: \"shortstr\",\n name: \"exchange\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n }, {\n type: \"table\",\n name: \"arguments\",\n default: {}\n } ]\n};\n\nmodule.exports.QueueBindOk = 3276821;\n\nvar methodInfoQueueBindOk = module.exports.methodInfoQueueBindOk = {\n id: 3276821,\n classId: 50,\n methodId: 21,\n name: \"QueueBindOk\",\n args: []\n};\n\nmodule.exports.QueuePurge = 3276830;\n\nvar methodInfoQueuePurge = module.exports.methodInfoQueuePurge = {\n id: 3276830,\n classId: 50,\n methodId: 30,\n name: \"QueuePurge\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"queue\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n } ]\n};\n\nmodule.exports.QueuePurgeOk = 3276831;\n\nvar methodInfoQueuePurgeOk = module.exports.methodInfoQueuePurgeOk = {\n id: 3276831,\n classId: 50,\n methodId: 31,\n name: \"QueuePurgeOk\",\n args: [ {\n type: \"long\",\n name: \"messageCount\"\n } ]\n};\n\nmodule.exports.QueueDelete = 3276840;\n\nvar methodInfoQueueDelete = module.exports.methodInfoQueueDelete = {\n id: 3276840,\n classId: 50,\n methodId: 40,\n name: \"QueueDelete\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"queue\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"ifUnused\",\n default: !1\n }, {\n type: \"bit\",\n name: \"ifEmpty\",\n default: !1\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n } ]\n};\n\nmodule.exports.QueueDeleteOk = 3276841;\n\nvar methodInfoQueueDeleteOk = module.exports.methodInfoQueueDeleteOk = {\n id: 3276841,\n classId: 50,\n methodId: 41,\n name: \"QueueDeleteOk\",\n args: [ {\n type: \"long\",\n name: \"messageCount\"\n } ]\n};\n\nmodule.exports.QueueUnbind = 3276850;\n\nvar methodInfoQueueUnbind = module.exports.methodInfoQueueUnbind = {\n id: 3276850,\n classId: 50,\n methodId: 50,\n name: \"QueueUnbind\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"queue\",\n default: \"\"\n }, {\n type: \"shortstr\",\n name: \"exchange\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\",\n default: \"\"\n }, {\n type: \"table\",\n name: \"arguments\",\n default: {}\n } ]\n};\n\nmodule.exports.QueueUnbindOk = 3276851;\n\nvar methodInfoQueueUnbindOk = module.exports.methodInfoQueueUnbindOk = {\n id: 3276851,\n classId: 50,\n methodId: 51,\n name: \"QueueUnbindOk\",\n args: []\n};\n\nmodule.exports.BasicQos = 3932170;\n\nvar methodInfoBasicQos = module.exports.methodInfoBasicQos = {\n id: 3932170,\n classId: 60,\n methodId: 10,\n name: \"BasicQos\",\n args: [ {\n type: \"long\",\n name: \"prefetchSize\",\n default: 0\n }, {\n type: \"short\",\n name: \"prefetchCount\",\n default: 0\n }, {\n type: \"bit\",\n name: \"global\",\n default: !1\n } ]\n};\n\nmodule.exports.BasicQosOk = 3932171;\n\nvar methodInfoBasicQosOk = module.exports.methodInfoBasicQosOk = {\n id: 3932171,\n classId: 60,\n methodId: 11,\n name: \"BasicQosOk\",\n args: []\n};\n\nmodule.exports.BasicConsume = 3932180;\n\nvar methodInfoBasicConsume = module.exports.methodInfoBasicConsume = {\n id: 3932180,\n classId: 60,\n methodId: 20,\n name: \"BasicConsume\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"queue\",\n default: \"\"\n }, {\n type: \"shortstr\",\n name: \"consumerTag\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"noLocal\",\n default: !1\n }, {\n type: \"bit\",\n name: \"noAck\",\n default: !1\n }, {\n type: \"bit\",\n name: \"exclusive\",\n default: !1\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n }, {\n type: \"table\",\n name: \"arguments\",\n default: {}\n } ]\n};\n\nmodule.exports.BasicConsumeOk = 3932181;\n\nvar methodInfoBasicConsumeOk = module.exports.methodInfoBasicConsumeOk = {\n id: 3932181,\n classId: 60,\n methodId: 21,\n name: \"BasicConsumeOk\",\n args: [ {\n type: \"shortstr\",\n name: \"consumerTag\"\n } ]\n};\n\nmodule.exports.BasicCancel = 3932190;\n\nvar methodInfoBasicCancel = module.exports.methodInfoBasicCancel = {\n id: 3932190,\n classId: 60,\n methodId: 30,\n name: \"BasicCancel\",\n args: [ {\n type: \"shortstr\",\n name: \"consumerTag\"\n }, {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n } ]\n};\n\nmodule.exports.BasicCancelOk = 3932191;\n\nvar methodInfoBasicCancelOk = module.exports.methodInfoBasicCancelOk = {\n id: 3932191,\n classId: 60,\n methodId: 31,\n name: \"BasicCancelOk\",\n args: [ {\n type: \"shortstr\",\n name: \"consumerTag\"\n } ]\n};\n\nmodule.exports.BasicPublish = 3932200;\n\nvar methodInfoBasicPublish = module.exports.methodInfoBasicPublish = {\n id: 3932200,\n classId: 60,\n methodId: 40,\n name: \"BasicPublish\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"exchange\",\n default: \"\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"mandatory\",\n default: !1\n }, {\n type: \"bit\",\n name: \"immediate\",\n default: !1\n } ]\n};\n\nmodule.exports.BasicReturn = 3932210;\n\nvar methodInfoBasicReturn = module.exports.methodInfoBasicReturn = {\n id: 3932210,\n classId: 60,\n methodId: 50,\n name: \"BasicReturn\",\n args: [ {\n type: \"short\",\n name: \"replyCode\"\n }, {\n type: \"shortstr\",\n name: \"replyText\",\n default: \"\"\n }, {\n type: \"shortstr\",\n name: \"exchange\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\"\n } ]\n};\n\nmodule.exports.BasicDeliver = 3932220;\n\nvar methodInfoBasicDeliver = module.exports.methodInfoBasicDeliver = {\n id: 3932220,\n classId: 60,\n methodId: 60,\n name: \"BasicDeliver\",\n args: [ {\n type: \"shortstr\",\n name: \"consumerTag\"\n }, {\n type: \"longlong\",\n name: \"deliveryTag\"\n }, {\n type: \"bit\",\n name: \"redelivered\",\n default: !1\n }, {\n type: \"shortstr\",\n name: \"exchange\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\"\n } ]\n};\n\nmodule.exports.BasicGet = 3932230;\n\nvar methodInfoBasicGet = module.exports.methodInfoBasicGet = {\n id: 3932230,\n classId: 60,\n methodId: 70,\n name: \"BasicGet\",\n args: [ {\n type: \"short\",\n name: \"ticket\",\n default: 0\n }, {\n type: \"shortstr\",\n name: \"queue\",\n default: \"\"\n }, {\n type: \"bit\",\n name: \"noAck\",\n default: !1\n } ]\n};\n\nmodule.exports.BasicGetOk = 3932231;\n\nvar methodInfoBasicGetOk = module.exports.methodInfoBasicGetOk = {\n id: 3932231,\n classId: 60,\n methodId: 71,\n name: \"BasicGetOk\",\n args: [ {\n type: \"longlong\",\n name: \"deliveryTag\"\n }, {\n type: \"bit\",\n name: \"redelivered\",\n default: !1\n }, {\n type: \"shortstr\",\n name: \"exchange\"\n }, {\n type: \"shortstr\",\n name: \"routingKey\"\n }, {\n type: \"long\",\n name: \"messageCount\"\n } ]\n};\n\nmodule.exports.BasicGetEmpty = 3932232;\n\nvar methodInfoBasicGetEmpty = module.exports.methodInfoBasicGetEmpty = {\n id: 3932232,\n classId: 60,\n methodId: 72,\n name: \"BasicGetEmpty\",\n args: [ {\n type: \"shortstr\",\n name: \"clusterId\",\n default: \"\"\n } ]\n};\n\nmodule.exports.BasicAck = 3932240;\n\nvar methodInfoBasicAck = module.exports.methodInfoBasicAck = {\n id: 3932240,\n classId: 60,\n methodId: 80,\n name: \"BasicAck\",\n args: [ {\n type: \"longlong\",\n name: \"deliveryTag\",\n default: 0\n }, {\n type: \"bit\",\n name: \"multiple\",\n default: !1\n } ]\n};\n\nmodule.exports.BasicReject = 3932250;\n\nvar methodInfoBasicReject = module.exports.methodInfoBasicReject = {\n id: 3932250,\n classId: 60,\n methodId: 90,\n name: \"BasicReject\",\n args: [ {\n type: \"longlong\",\n name: \"deliveryTag\"\n }, {\n type: \"bit\",\n name: \"requeue\",\n default: !0\n } ]\n};\n\nmodule.exports.BasicRecoverAsync = 3932260;\n\nvar methodInfoBasicRecoverAsync = module.exports.methodInfoBasicRecoverAsync = {\n id: 3932260,\n classId: 60,\n methodId: 100,\n name: \"BasicRecoverAsync\",\n args: [ {\n type: \"bit\",\n name: \"requeue\",\n default: !1\n } ]\n};\n\nmodule.exports.BasicRecover = 3932270;\n\nvar methodInfoBasicRecover = module.exports.methodInfoBasicRecover = {\n id: 3932270,\n classId: 60,\n methodId: 110,\n name: \"BasicRecover\",\n args: [ {\n type: \"bit\",\n name: \"requeue\",\n default: !1\n } ]\n};\n\nmodule.exports.BasicRecoverOk = 3932271;\n\nvar methodInfoBasicRecoverOk = module.exports.methodInfoBasicRecoverOk = {\n id: 3932271,\n classId: 60,\n methodId: 111,\n name: \"BasicRecoverOk\",\n args: []\n};\n\nmodule.exports.BasicNack = 3932280;\n\nvar methodInfoBasicNack = module.exports.methodInfoBasicNack = {\n id: 3932280,\n classId: 60,\n methodId: 120,\n name: \"BasicNack\",\n args: [ {\n type: \"longlong\",\n name: \"deliveryTag\",\n default: 0\n }, {\n type: \"bit\",\n name: \"multiple\",\n default: !1\n }, {\n type: \"bit\",\n name: \"requeue\",\n default: !0\n } ]\n};\n\nmodule.exports.TxSelect = 5898250;\n\nvar methodInfoTxSelect = module.exports.methodInfoTxSelect = {\n id: 5898250,\n classId: 90,\n methodId: 10,\n name: \"TxSelect\",\n args: []\n};\n\nmodule.exports.TxSelectOk = 5898251;\n\nvar methodInfoTxSelectOk = module.exports.methodInfoTxSelectOk = {\n id: 5898251,\n classId: 90,\n methodId: 11,\n name: \"TxSelectOk\",\n args: []\n};\n\nmodule.exports.TxCommit = 5898260;\n\nvar methodInfoTxCommit = module.exports.methodInfoTxCommit = {\n id: 5898260,\n classId: 90,\n methodId: 20,\n name: \"TxCommit\",\n args: []\n};\n\nmodule.exports.TxCommitOk = 5898261;\n\nvar methodInfoTxCommitOk = module.exports.methodInfoTxCommitOk = {\n id: 5898261,\n classId: 90,\n methodId: 21,\n name: \"TxCommitOk\",\n args: []\n};\n\nmodule.exports.TxRollback = 5898270;\n\nvar methodInfoTxRollback = module.exports.methodInfoTxRollback = {\n id: 5898270,\n classId: 90,\n methodId: 30,\n name: \"TxRollback\",\n args: []\n};\n\nmodule.exports.TxRollbackOk = 5898271;\n\nvar methodInfoTxRollbackOk = module.exports.methodInfoTxRollbackOk = {\n id: 5898271,\n classId: 90,\n methodId: 31,\n name: \"TxRollbackOk\",\n args: []\n};\n\nmodule.exports.ConfirmSelect = 5570570;\n\nvar methodInfoConfirmSelect = module.exports.methodInfoConfirmSelect = {\n id: 5570570,\n classId: 85,\n methodId: 10,\n name: \"ConfirmSelect\",\n args: [ {\n type: \"bit\",\n name: \"nowait\",\n default: !1\n } ]\n};\n\nmodule.exports.ConfirmSelectOk = 5570571;\n\nvar methodInfoConfirmSelectOk = module.exports.methodInfoConfirmSelectOk = {\n id: 5570571,\n classId: 85,\n methodId: 11,\n name: \"ConfirmSelectOk\",\n args: []\n};\n\nmodule.exports.BasicProperties = 60;\n\nvar propertiesInfoBasicProperties = module.exports.propertiesInfoBasicProperties = {\n id: 60,\n name: \"BasicProperties\",\n args: [ {\n type: \"shortstr\",\n name: \"contentType\"\n }, {\n type: \"shortstr\",\n name: \"contentEncoding\"\n }, {\n type: \"table\",\n name: \"headers\"\n }, {\n type: \"octet\",\n name: \"deliveryMode\"\n }, {\n type: \"octet\",\n name: \"priority\"\n }, {\n type: \"shortstr\",\n name: \"correlationId\"\n }, {\n type: \"shortstr\",\n name: \"replyTo\"\n }, {\n type: \"shortstr\",\n name: \"expiration\"\n }, {\n type: \"shortstr\",\n name: \"messageId\"\n }, {\n type: \"timestamp\",\n name: \"timestamp\"\n }, {\n type: \"shortstr\",\n name: \"type\"\n }, {\n type: \"shortstr\",\n name: \"userId\"\n }, {\n type: \"shortstr\",\n name: \"appId\"\n }, {\n type: \"shortstr\",\n name: \"clusterId\"\n } ]\n};","var inherits = require('util').inherits;\n\nfunction trimStack(stack, num) {\n return stack && stack.split('\\n').slice(num).join('\\n');\n}\n\nfunction IllegalOperationError(msg, stack) {\n var tmp = new Error();\n this.message = msg;\n this.stack = this.toString() + '\\n' + trimStack(tmp.stack, 2);\n this.stackAtStateChange = stack;\n}\ninherits(IllegalOperationError, Error);\n\nIllegalOperationError.prototype.name = 'IllegalOperationError';\n\nfunction stackCapture(reason) {\n var e = new Error();\n return 'Stack capture: ' + reason + '\\n' +\n trimStack(e.stack, 2);\n}\n\nmodule.exports.IllegalOperationError = IllegalOperationError;\nmodule.exports.stackCapture = stackCapture;\n","//\n//\n//\n\n// Stringifying various things\n\n'use strict';\n\nvar defs = require('./defs');\nvar format = require('util').format;\nvar inherits = require('util').inherits;\nvar HEARTBEAT = require('./frame').HEARTBEAT;\n\nmodule.exports.closeMessage = function(close) {\n var code = close.fields.replyCode;\n return format('%d (%s) with message \"%s\"',\n code, defs.constant_strs[code],\n close.fields.replyText);\n}\n\nmodule.exports.methodName = function(id) {\n return defs.info(id).name;\n};\n\nmodule.exports.inspect = function(frame, showFields) {\n if (frame === HEARTBEAT) {\n return '';\n }\n else if (!frame.id) {\n return format('',\n frame.channel, frame.size);\n }\n else {\n var info = defs.info(frame.id);\n return format('<%s channel:%d%s>', info.name, frame.channel,\n (showFields)\n ? ' ' + JSON.stringify(frame.fields, undefined, 2)\n : '');\n }\n}\n","// The river sweeps through\n// Silt and twigs, gravel and leaves\n// Driving the wheel on\n\n'use strict';\n\nvar defs = require('./defs');\nvar constants = defs.constants;\nvar decode = defs.decode;\n\nvar Bits = require('bitsyntax');\n\nmodule.exports.PROTOCOL_HEADER = \"AMQP\" + String.fromCharCode(0, 0, 9, 1);\n\n/*\n Frame format:\n\n 0 1 3 7 size+7 size+8\n +------+---------+-------------+ +------------+ +-----------+\n | type | channel | size | | payload | | frame-end |\n +------+---------+-------------+ +------------+ +-----------+\n octet short long size octets octet\n\n In general I want to know those first three things straight away, so I\n can discard frames early.\n\n*/\n\n// framing constants\nvar FRAME_METHOD = constants.FRAME_METHOD,\nFRAME_HEARTBEAT = constants.FRAME_HEARTBEAT,\nFRAME_HEADER = constants.FRAME_HEADER,\nFRAME_BODY = constants.FRAME_BODY,\nFRAME_END = constants.FRAME_END;\n\nvar bodyCons =\n Bits.builder(FRAME_BODY,\n 'channel:16, size:32, payload:size/binary',\n FRAME_END);\n\n// %%% TESTME possibly better to cons the first bit and write the\n// second directly, in the absence of IO lists\nmodule.exports.makeBodyFrame = function(channel, payload) {\n return bodyCons({channel: channel, size: payload.length, payload: payload});\n};\n\nvar frameHeaderPattern = Bits.matcher('type:8', 'channel:16',\n 'size:32', 'rest/binary');\n\nfunction parseFrame(bin, max) {\n var fh = frameHeaderPattern(bin);\n if (fh) {\n var size = fh.size, rest = fh.rest;\n if (size > max) {\n throw new Error('Frame size exceeds frame max');\n }\n else if (rest.length > size) {\n if (rest[size] !== FRAME_END)\n throw new Error('Invalid frame');\n\n return {\n type: fh.type,\n channel: fh.channel,\n size: size,\n payload: rest.slice(0, size),\n rest: rest.slice(size + 1)\n };\n }\n }\n return false;\n}\n\nmodule.exports.parseFrame = parseFrame;\n\nvar headerPattern = Bits.matcher('class:16',\n '_weight:16',\n 'size:64',\n 'flagsAndfields/binary');\n\nvar methodPattern = Bits.matcher('id:32, args/binary');\n\nvar HEARTBEAT = {channel: 0};\n\nmodule.exports.decodeFrame = function(frame) {\n var payload = frame.payload;\n switch (frame.type) {\n case FRAME_METHOD:\n var idAndArgs = methodPattern(payload);\n var id = idAndArgs.id;\n var fields = decode(id, idAndArgs.args);\n return {id: id, channel: frame.channel, fields: fields};\n case FRAME_HEADER:\n var parts = headerPattern(payload);\n var id = parts['class'];\n var fields = decode(id, parts.flagsAndfields);\n return {id: id, channel: frame.channel,\n size: parts.size, fields: fields};\n case FRAME_BODY:\n return {channel: frame.channel, content: frame.payload};\n case FRAME_HEARTBEAT:\n return HEARTBEAT;\n default:\n throw new Error('Unknown frame type ' + frame.type);\n }\n}\n\n// encoded heartbeat\nmodule.exports.HEARTBEAT_BUF = Buffer.from([constants.FRAME_HEARTBEAT,\n 0, 0, 0, 0, // size = 0\n 0, 0, // channel = 0\n constants.FRAME_END]);\n\nmodule.exports.HEARTBEAT = HEARTBEAT;\n","//\n//\n//\n\n// Heartbeats. In AMQP both clients and servers may expect a heartbeat\n// frame if there is no activity on the connection for a negotiated\n// period of time. If there's no activity for two such intervals, the\n// server or client is allowed to close the connection on the\n// presumption that the other party is dead.\n//\n// The client has two jobs here: the first is to send a heartbeat\n// frame if it's not sent any frames for a while, so that the server\n// doesn't think it's dead; the second is to check periodically that\n// it's seen activity from the server, and to advise if there doesn't\n// appear to have been any for over two intervals.\n//\n// Node.JS timers are a bit unreliable, in that they endeavour only to\n// fire at some indeterminate point *after* the given time (rather\n// gives the lie to 'realtime', dunnit). Because the scheduler is just\n// an event loop, it's quite easy to delay timers indefinitely by\n// reacting to some I/O with a lot of computation.\n//\n// To mitigate this I need a bit of creative interpretation:\n//\n// - I'll schedule a server activity check for every `interval`, and\n// check just how much time has passed. It will overshoot by at\n// least a small margin; modulo missing timer deadlines, it'll\n// notice between two and three intervals after activity actually\n// stops (otherwise, at some point after two intervals).\n//\n// - Every `interval / 2` I'll check that we've sent something since\n// the last check, and if not, send a heartbeat frame. If we're\n// really too busy to even run the check for two whole heartbeat\n// intervals, there must be a lot of I (but not O, at least not on\n// the connection), or computation, in which case perhaps it's best\n// the server cuts us off anyway. Why `interval / 2`? Because the\n// edge case is that the client sent a frame just after a\n// heartbeat, which would mean I only send one after almost two\n// intervals. (NB a heartbeat counts as a send, so it'll be checked\n// at least twice before sending another)\n//\n// This design is based largely on RabbitMQ's heartbeating:\n// https://github.com/rabbitmq/rabbitmq-common/blob/master/src/rabbit_heartbeat.erl\n\n// %% Yes, I could apply the same 'actually passage of time' thing to\n// %% send as well as to recv.\n\n'use strict';\n\nvar inherits = require('util').inherits;\nvar EventEmitter = require('events').EventEmitter;\n\n// Exported so that we can mess with it in tests\nmodule.exports.UNITS_TO_MS = 1000;\n\nfunction Heart(interval, checkSend, checkRecv) {\n EventEmitter.call(this);\n this.interval = interval;\n\n var intervalMs = interval * module.exports.UNITS_TO_MS;\n // Function#bind is my new best friend\n var beat = this.emit.bind(this, 'beat');\n var timeout = this.emit.bind(this, 'timeout');\n\n this.sendTimer = setInterval(\n this.runHeartbeat.bind(this, checkSend, beat), intervalMs / 2);\n\n // A timeout occurs if I see nothing for *two consecutive* intervals\n var recvMissed = 0;\n function missedTwo() {\n if (!checkRecv()) return (++recvMissed < 2);\n else { recvMissed = 0; return true; }\n }\n this.recvTimer = setInterval(\n this.runHeartbeat.bind(this, missedTwo, timeout), intervalMs);\n}\ninherits(Heart, EventEmitter);\n\nmodule.exports.Heart = Heart;\n\nHeart.prototype.clear = function() {\n clearInterval(this.sendTimer);\n clearInterval(this.recvTimer);\n};\n\nHeart.prototype.runHeartbeat = function(check, fail) {\n // Have we seen activity?\n if (!check()) fail();\n};\n","//\n//\n//\n\n'use strict';\n\n// A Mux is an object into which other readable streams may be piped;\n// it then writes 'packets' from the upstreams to the given\n// downstream.\n\nvar assert = require('assert');\n\nvar schedule = (typeof setImmediate === 'function') ?\n setImmediate : process.nextTick;\n\nfunction Mux(downstream) {\n this.newStreams = [];\n this.oldStreams = [];\n this.blocked = false;\n this.scheduledRead = false;\n\n this.out = downstream;\n var self = this;\n downstream.on('drain', function() {\n self.blocked = false;\n self._readIncoming();\n });\n}\n\n// There are 2 states we can be in:\n\n// - waiting for outbound capacity, which will be signalled by a\n// - 'drain' event on the downstream; or,\n\n// - no packets to send, waiting for an inbound buffer to have\n// packets, which will be signalled by a 'readable' event\n\n// If we write all packets available whenever there is outbound\n// capacity, we will either run out of outbound capacity (`#write`\n// returns false), or run out of packets (all calls to an\n// `inbound.read()` have returned null).\n\nMux.prototype._readIncoming = function() {\n\n // We may be sent here speculatively, if an incoming stream has\n // become readable\n if (this.blocked) return;\n\n var accepting = true;\n var out = this.out;\n\n // Try to read a chunk from each stream in turn, until all streams\n // are empty, or we exhaust our ability to accept chunks.\n function roundrobin(streams) {\n var s;\n while (accepting && (s = streams.shift())) {\n var chunk = s.read();\n if (chunk !== null) {\n accepting = out.write(chunk);\n streams.push(s);\n }\n }\n }\n\n roundrobin(this.newStreams);\n\n // Either we exhausted the new queues, or we ran out of capacity. If\n // we ran out of capacity, all the remaining new streams (i.e.,\n // those with packets left) become old streams. This effectively\n // prioritises streams that keep their buffers close to empty over\n // those that are constantly near full.\n\n if (accepting) { // all new queues are exhausted, write as many as\n // we can from the old streams\n assert.equal(0, this.newStreams.length);\n roundrobin(this.oldStreams);\n }\n else { // ran out of room\n assert(this.newStreams.length > 0, \"Expect some new streams to remain\");\n Array.prototype.push.apply(this.oldStreams, this.newStreams);\n this.newStreams = [];\n }\n // We may have exhausted all the old queues, or run out of room;\n // either way, all we need to do is record whether we have capacity\n // or not, so any speculative reads will know\n this.blocked = !accepting;\n};\n\nMux.prototype._scheduleRead = function() {\n var self = this;\n\n if (!self.scheduledRead) {\n schedule(function() {\n self.scheduledRead = false;\n self._readIncoming();\n });\n self.scheduledRead = true;\n }\n};\n\nMux.prototype.pipeFrom = function(readable) {\n var self = this;\n\n function enqueue() {\n self.newStreams.push(readable);\n self._scheduleRead();\n }\n\n function cleanup() {\n readable.removeListener('readable', enqueue);\n readable.removeListener('error', cleanup);\n readable.removeListener('end', cleanup);\n readable.removeListener('unpipeFrom', cleanupIfMe);\n }\n function cleanupIfMe(dest) {\n if (dest === self) cleanup();\n }\n\n readable.on('unpipeFrom', cleanupIfMe);\n readable.on('end', cleanup);\n readable.on('error', cleanup);\n readable.on('readable', enqueue);\n};\n\nMux.prototype.unpipeFrom = function(readable) {\n readable.emit('unpipeFrom', this);\n};\n\nmodule.exports.Mux = Mux;\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n\n newInvalidAsn1Error: function (msg) {\n var e = new Error();\n e.name = 'InvalidAsn1Error';\n e.message = msg || '';\n return e;\n }\n\n};\n","// Copyright 2011 Mark Cavage All rights reserved.\n\nvar errors = require('./errors');\nvar types = require('./types');\n\nvar Reader = require('./reader');\nvar Writer = require('./writer');\n\n\n// --- Exports\n\nmodule.exports = {\n\n Reader: Reader,\n\n Writer: Writer\n\n};\n\nfor (var t in types) {\n if (types.hasOwnProperty(t))\n module.exports[t] = types[t];\n}\nfor (var e in errors) {\n if (errors.hasOwnProperty(e))\n module.exports[e] = errors[e];\n}\n","// Copyright 2011 Mark Cavage All rights reserved.\n\nvar assert = require('assert');\nvar Buffer = require('safer-buffer').Buffer;\n\nvar ASN1 = require('./types');\nvar errors = require('./errors');\n\n\n// --- Globals\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error;\n\n\n\n// --- API\n\nfunction Reader(data) {\n if (!data || !Buffer.isBuffer(data))\n throw new TypeError('data must be a node Buffer');\n\n this._buf = data;\n this._size = data.length;\n\n // These hold the \"current\" state\n this._len = 0;\n this._offset = 0;\n}\n\nObject.defineProperty(Reader.prototype, 'length', {\n enumerable: true,\n get: function () { return (this._len); }\n});\n\nObject.defineProperty(Reader.prototype, 'offset', {\n enumerable: true,\n get: function () { return (this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'remain', {\n get: function () { return (this._size - this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'buffer', {\n get: function () { return (this._buf.slice(this._offset)); }\n});\n\n\n/**\n * Reads a single byte and advances offset; you can pass in `true` to make this\n * a \"peek\" operation (i.e., get the byte, but don't advance the offset).\n *\n * @param {Boolean} peek true means don't move offset.\n * @return {Number} the next byte, null if not enough data.\n */\nReader.prototype.readByte = function (peek) {\n if (this._size - this._offset < 1)\n return null;\n\n var b = this._buf[this._offset] & 0xff;\n\n if (!peek)\n this._offset += 1;\n\n return b;\n};\n\n\nReader.prototype.peek = function () {\n return this.readByte(true);\n};\n\n\n/**\n * Reads a (potentially) variable length off the BER buffer. This call is\n * not really meant to be called directly, as callers have to manipulate\n * the internal buffer afterwards.\n *\n * As a result of this call, you can call `Reader.length`, until the\n * next thing called that does a readLength.\n *\n * @return {Number} the amount of offset to advance the buffer.\n * @throws {InvalidAsn1Error} on bad ASN.1\n */\nReader.prototype.readLength = function (offset) {\n if (offset === undefined)\n offset = this._offset;\n\n if (offset >= this._size)\n return null;\n\n var lenB = this._buf[offset++] & 0xff;\n if (lenB === null)\n return null;\n\n if ((lenB & 0x80) === 0x80) {\n lenB &= 0x7f;\n\n if (lenB === 0)\n throw newInvalidAsn1Error('Indefinite length not supported');\n\n if (lenB > 4)\n throw newInvalidAsn1Error('encoding too long');\n\n if (this._size - offset < lenB)\n return null;\n\n this._len = 0;\n for (var i = 0; i < lenB; i++)\n this._len = (this._len << 8) + (this._buf[offset++] & 0xff);\n\n } else {\n // Wasn't a variable length\n this._len = lenB;\n }\n\n return offset;\n};\n\n\n/**\n * Parses the next sequence in this BER buffer.\n *\n * To get the length of the sequence, call `Reader.length`.\n *\n * @return {Number} the sequence's tag.\n */\nReader.prototype.readSequence = function (tag) {\n var seq = this.peek();\n if (seq === null)\n return null;\n if (tag !== undefined && tag !== seq)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + seq.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n if (o === null)\n return null;\n\n this._offset = o;\n return seq;\n};\n\n\nReader.prototype.readInt = function () {\n return this._readTag(ASN1.Integer);\n};\n\n\nReader.prototype.readBoolean = function () {\n return (this._readTag(ASN1.Boolean) === 0 ? false : true);\n};\n\n\nReader.prototype.readEnumeration = function () {\n return this._readTag(ASN1.Enumeration);\n};\n\n\nReader.prototype.readString = function (tag, retbuf) {\n if (!tag)\n tag = ASN1.OctetString;\n\n var b = this.peek();\n if (b === null)\n return null;\n\n if (b !== tag)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + b.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n\n if (o === null)\n return null;\n\n if (this.length > this._size - o)\n return null;\n\n this._offset = o;\n\n if (this.length === 0)\n return retbuf ? Buffer.alloc(0) : '';\n\n var str = this._buf.slice(this._offset, this._offset + this.length);\n this._offset += this.length;\n\n return retbuf ? str : str.toString('utf8');\n};\n\nReader.prototype.readOID = function (tag) {\n if (!tag)\n tag = ASN1.OID;\n\n var b = this.readString(tag, true);\n if (b === null)\n return null;\n\n var values = [];\n var value = 0;\n\n for (var i = 0; i < b.length; i++) {\n var byte = b[i] & 0xff;\n\n value <<= 7;\n value += byte & 0x7f;\n if ((byte & 0x80) === 0) {\n values.push(value);\n value = 0;\n }\n }\n\n value = values.shift();\n values.unshift(value % 40);\n values.unshift((value / 40) >> 0);\n\n return values.join('.');\n};\n\n\nReader.prototype._readTag = function (tag) {\n assert.ok(tag !== undefined);\n\n var b = this.peek();\n\n if (b === null)\n return null;\n\n if (b !== tag)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + b.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n if (o === null)\n return null;\n\n if (this.length > 4)\n throw newInvalidAsn1Error('Integer too long: ' + this.length);\n\n if (this.length > this._size - o)\n return null;\n this._offset = o;\n\n var fb = this._buf[this._offset];\n var value = 0;\n\n for (var i = 0; i < this.length; i++) {\n value <<= 8;\n value |= (this._buf[this._offset++] & 0xff);\n }\n\n if ((fb & 0x80) === 0x80 && i !== 4)\n value -= (1 << (i * 8));\n\n return value >> 0;\n};\n\n\n\n// --- Exported API\n\nmodule.exports = Reader;\n","// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n EOC: 0,\n Boolean: 1,\n Integer: 2,\n BitString: 3,\n OctetString: 4,\n Null: 5,\n OID: 6,\n ObjectDescriptor: 7,\n External: 8,\n Real: 9, // float\n Enumeration: 10,\n PDV: 11,\n Utf8String: 12,\n RelativeOID: 13,\n Sequence: 16,\n Set: 17,\n NumericString: 18,\n PrintableString: 19,\n T61String: 20,\n VideotexString: 21,\n IA5String: 22,\n UTCTime: 23,\n GeneralizedTime: 24,\n GraphicString: 25,\n VisibleString: 26,\n GeneralString: 28,\n UniversalString: 29,\n CharacterString: 30,\n BMPString: 31,\n Constructor: 32,\n Context: 128\n};\n","// Copyright 2011 Mark Cavage All rights reserved.\n\nvar assert = require('assert');\nvar Buffer = require('safer-buffer').Buffer;\nvar ASN1 = require('./types');\nvar errors = require('./errors');\n\n\n// --- Globals\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error;\n\nvar DEFAULT_OPTS = {\n size: 1024,\n growthFactor: 8\n};\n\n\n// --- Helpers\n\nfunction merge(from, to) {\n assert.ok(from);\n assert.equal(typeof (from), 'object');\n assert.ok(to);\n assert.equal(typeof (to), 'object');\n\n var keys = Object.getOwnPropertyNames(from);\n keys.forEach(function (key) {\n if (to[key])\n return;\n\n var value = Object.getOwnPropertyDescriptor(from, key);\n Object.defineProperty(to, key, value);\n });\n\n return to;\n}\n\n\n\n// --- API\n\nfunction Writer(options) {\n options = merge(DEFAULT_OPTS, options || {});\n\n this._buf = Buffer.alloc(options.size || 1024);\n this._size = this._buf.length;\n this._offset = 0;\n this._options = options;\n\n // A list of offsets in the buffer where we need to insert\n // sequence tag/len pairs.\n this._seq = [];\n}\n\nObject.defineProperty(Writer.prototype, 'buffer', {\n get: function () {\n if (this._seq.length)\n throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)');\n\n return (this._buf.slice(0, this._offset));\n }\n});\n\nWriter.prototype.writeByte = function (b) {\n if (typeof (b) !== 'number')\n throw new TypeError('argument must be a Number');\n\n this._ensure(1);\n this._buf[this._offset++] = b;\n};\n\n\nWriter.prototype.writeInt = function (i, tag) {\n if (typeof (i) !== 'number')\n throw new TypeError('argument must be a Number');\n if (typeof (tag) !== 'number')\n tag = ASN1.Integer;\n\n var sz = 4;\n\n while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) &&\n (sz > 1)) {\n sz--;\n i <<= 8;\n }\n\n if (sz > 4)\n throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff');\n\n this._ensure(2 + sz);\n this._buf[this._offset++] = tag;\n this._buf[this._offset++] = sz;\n\n while (sz-- > 0) {\n this._buf[this._offset++] = ((i & 0xff000000) >>> 24);\n i <<= 8;\n }\n\n};\n\n\nWriter.prototype.writeNull = function () {\n this.writeByte(ASN1.Null);\n this.writeByte(0x00);\n};\n\n\nWriter.prototype.writeEnumeration = function (i, tag) {\n if (typeof (i) !== 'number')\n throw new TypeError('argument must be a Number');\n if (typeof (tag) !== 'number')\n tag = ASN1.Enumeration;\n\n return this.writeInt(i, tag);\n};\n\n\nWriter.prototype.writeBoolean = function (b, tag) {\n if (typeof (b) !== 'boolean')\n throw new TypeError('argument must be a Boolean');\n if (typeof (tag) !== 'number')\n tag = ASN1.Boolean;\n\n this._ensure(3);\n this._buf[this._offset++] = tag;\n this._buf[this._offset++] = 0x01;\n this._buf[this._offset++] = b ? 0xff : 0x00;\n};\n\n\nWriter.prototype.writeString = function (s, tag) {\n if (typeof (s) !== 'string')\n throw new TypeError('argument must be a string (was: ' + typeof (s) + ')');\n if (typeof (tag) !== 'number')\n tag = ASN1.OctetString;\n\n var len = Buffer.byteLength(s);\n this.writeByte(tag);\n this.writeLength(len);\n if (len) {\n this._ensure(len);\n this._buf.write(s, this._offset);\n this._offset += len;\n }\n};\n\n\nWriter.prototype.writeBuffer = function (buf, tag) {\n if (typeof (tag) !== 'number')\n throw new TypeError('tag must be a number');\n if (!Buffer.isBuffer(buf))\n throw new TypeError('argument must be a buffer');\n\n this.writeByte(tag);\n this.writeLength(buf.length);\n this._ensure(buf.length);\n buf.copy(this._buf, this._offset, 0, buf.length);\n this._offset += buf.length;\n};\n\n\nWriter.prototype.writeStringArray = function (strings) {\n if ((!strings instanceof Array))\n throw new TypeError('argument must be an Array[String]');\n\n var self = this;\n strings.forEach(function (s) {\n self.writeString(s);\n });\n};\n\n// This is really to solve DER cases, but whatever for now\nWriter.prototype.writeOID = function (s, tag) {\n if (typeof (s) !== 'string')\n throw new TypeError('argument must be a string');\n if (typeof (tag) !== 'number')\n tag = ASN1.OID;\n\n if (!/^([0-9]+\\.){3,}[0-9]+$/.test(s))\n throw new Error('argument is not a valid OID string');\n\n function encodeOctet(bytes, octet) {\n if (octet < 128) {\n bytes.push(octet);\n } else if (octet < 16384) {\n bytes.push((octet >>> 7) | 0x80);\n bytes.push(octet & 0x7F);\n } else if (octet < 2097152) {\n bytes.push((octet >>> 14) | 0x80);\n bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n bytes.push(octet & 0x7F);\n } else if (octet < 268435456) {\n bytes.push((octet >>> 21) | 0x80);\n bytes.push(((octet >>> 14) | 0x80) & 0xFF);\n bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n bytes.push(octet & 0x7F);\n } else {\n bytes.push(((octet >>> 28) | 0x80) & 0xFF);\n bytes.push(((octet >>> 21) | 0x80) & 0xFF);\n bytes.push(((octet >>> 14) | 0x80) & 0xFF);\n bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n bytes.push(octet & 0x7F);\n }\n }\n\n var tmp = s.split('.');\n var bytes = [];\n bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10));\n tmp.slice(2).forEach(function (b) {\n encodeOctet(bytes, parseInt(b, 10));\n });\n\n var self = this;\n this._ensure(2 + bytes.length);\n this.writeByte(tag);\n this.writeLength(bytes.length);\n bytes.forEach(function (b) {\n self.writeByte(b);\n });\n};\n\n\nWriter.prototype.writeLength = function (len) {\n if (typeof (len) !== 'number')\n throw new TypeError('argument must be a Number');\n\n this._ensure(4);\n\n if (len <= 0x7f) {\n this._buf[this._offset++] = len;\n } else if (len <= 0xff) {\n this._buf[this._offset++] = 0x81;\n this._buf[this._offset++] = len;\n } else if (len <= 0xffff) {\n this._buf[this._offset++] = 0x82;\n this._buf[this._offset++] = len >> 8;\n this._buf[this._offset++] = len;\n } else if (len <= 0xffffff) {\n this._buf[this._offset++] = 0x83;\n this._buf[this._offset++] = len >> 16;\n this._buf[this._offset++] = len >> 8;\n this._buf[this._offset++] = len;\n } else {\n throw newInvalidAsn1Error('Length too long (> 4 bytes)');\n }\n};\n\nWriter.prototype.startSequence = function (tag) {\n if (typeof (tag) !== 'number')\n tag = ASN1.Sequence | ASN1.Constructor;\n\n this.writeByte(tag);\n this._seq.push(this._offset);\n this._ensure(3);\n this._offset += 3;\n};\n\n\nWriter.prototype.endSequence = function () {\n var seq = this._seq.pop();\n var start = seq + 3;\n var len = this._offset - start;\n\n if (len <= 0x7f) {\n this._shift(start, len, -2);\n this._buf[seq] = len;\n } else if (len <= 0xff) {\n this._shift(start, len, -1);\n this._buf[seq] = 0x81;\n this._buf[seq + 1] = len;\n } else if (len <= 0xffff) {\n this._buf[seq] = 0x82;\n this._buf[seq + 1] = len >> 8;\n this._buf[seq + 2] = len;\n } else if (len <= 0xffffff) {\n this._shift(start, len, 1);\n this._buf[seq] = 0x83;\n this._buf[seq + 1] = len >> 16;\n this._buf[seq + 2] = len >> 8;\n this._buf[seq + 3] = len;\n } else {\n throw newInvalidAsn1Error('Sequence too long');\n }\n};\n\n\nWriter.prototype._shift = function (start, len, shift) {\n assert.ok(start !== undefined);\n assert.ok(len !== undefined);\n assert.ok(shift);\n\n this._buf.copy(this._buf, start + shift, start, start + len);\n this._offset += shift;\n};\n\nWriter.prototype._ensure = function (len) {\n assert.ok(len);\n\n if (this._size - this._offset < len) {\n var sz = this._size * this._options.growthFactor;\n if (sz - this._offset < len)\n sz += len;\n\n var buf = Buffer.alloc(sz);\n\n this._buf.copy(buf, 0, 0, this._offset);\n this._buf = buf;\n this._size = sz;\n }\n};\n\n\n\n// --- Exported API\n\nmodule.exports = Writer;\n","// Copyright 2011 Mark Cavage All rights reserved.\n\n// If you have no idea what ASN.1 or BER is, see this:\n// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nvar Ber = require('./ber/index');\n\n\n\n// --- Exported API\n\nmodule.exports = {\n\n Ber: Ber,\n\n BerReader: Ber.Reader,\n\n BerWriter: Ber.Writer\n\n};\n","// Copyright (c) 2012, Mark Cavage. All rights reserved.\n// Copyright 2015 Joyent, Inc.\n\nvar assert = require('assert');\nvar Stream = require('stream').Stream;\nvar util = require('util');\n\n\n///--- Globals\n\n/* JSSTYLED */\nvar UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/;\n\n\n///--- Internal\n\nfunction _capitalize(str) {\n return (str.charAt(0).toUpperCase() + str.slice(1));\n}\n\nfunction _toss(name, expected, oper, arg, actual) {\n throw new assert.AssertionError({\n message: util.format('%s (%s) is required', name, expected),\n actual: (actual === undefined) ? typeof (arg) : actual(arg),\n expected: expected,\n operator: oper || '===',\n stackStartFunction: _toss.caller\n });\n}\n\nfunction _getClass(arg) {\n return (Object.prototype.toString.call(arg).slice(8, -1));\n}\n\nfunction noop() {\n // Why even bother with asserts?\n}\n\n\n///--- Exports\n\nvar types = {\n bool: {\n check: function (arg) { return typeof (arg) === 'boolean'; }\n },\n func: {\n check: function (arg) { return typeof (arg) === 'function'; }\n },\n string: {\n check: function (arg) { return typeof (arg) === 'string'; }\n },\n object: {\n check: function (arg) {\n return typeof (arg) === 'object' && arg !== null;\n }\n },\n number: {\n check: function (arg) {\n return typeof (arg) === 'number' && !isNaN(arg);\n }\n },\n finite: {\n check: function (arg) {\n return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg);\n }\n },\n buffer: {\n check: function (arg) { return Buffer.isBuffer(arg); },\n operator: 'Buffer.isBuffer'\n },\n array: {\n check: function (arg) { return Array.isArray(arg); },\n operator: 'Array.isArray'\n },\n stream: {\n check: function (arg) { return arg instanceof Stream; },\n operator: 'instanceof',\n actual: _getClass\n },\n date: {\n check: function (arg) { return arg instanceof Date; },\n operator: 'instanceof',\n actual: _getClass\n },\n regexp: {\n check: function (arg) { return arg instanceof RegExp; },\n operator: 'instanceof',\n actual: _getClass\n },\n uuid: {\n check: function (arg) {\n return typeof (arg) === 'string' && UUID_REGEXP.test(arg);\n },\n operator: 'isUUID'\n }\n};\n\nfunction _setExports(ndebug) {\n var keys = Object.keys(types);\n var out;\n\n /* re-export standard assert */\n if (process.env.NODE_NDEBUG) {\n out = noop;\n } else {\n out = function (arg, msg) {\n if (!arg) {\n _toss(msg, 'true', arg);\n }\n };\n }\n\n /* standard checks */\n keys.forEach(function (k) {\n if (ndebug) {\n out[k] = noop;\n return;\n }\n var type = types[k];\n out[k] = function (arg, msg) {\n if (!type.check(arg)) {\n _toss(msg, k, type.operator, arg, type.actual);\n }\n };\n });\n\n /* optional checks */\n keys.forEach(function (k) {\n var name = 'optional' + _capitalize(k);\n if (ndebug) {\n out[name] = noop;\n return;\n }\n var type = types[k];\n out[name] = function (arg, msg) {\n if (arg === undefined || arg === null) {\n return;\n }\n if (!type.check(arg)) {\n _toss(msg, k, type.operator, arg, type.actual);\n }\n };\n });\n\n /* arrayOf checks */\n keys.forEach(function (k) {\n var name = 'arrayOf' + _capitalize(k);\n if (ndebug) {\n out[name] = noop;\n return;\n }\n var type = types[k];\n var expected = '[' + k + ']';\n out[name] = function (arg, msg) {\n if (!Array.isArray(arg)) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n var i;\n for (i = 0; i < arg.length; i++) {\n if (!type.check(arg[i])) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n }\n };\n });\n\n /* optionalArrayOf checks */\n keys.forEach(function (k) {\n var name = 'optionalArrayOf' + _capitalize(k);\n if (ndebug) {\n out[name] = noop;\n return;\n }\n var type = types[k];\n var expected = '[' + k + ']';\n out[name] = function (arg, msg) {\n if (arg === undefined || arg === null) {\n return;\n }\n if (!Array.isArray(arg)) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n var i;\n for (i = 0; i < arg.length; i++) {\n if (!type.check(arg[i])) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n }\n };\n });\n\n /* re-export built-in assertions */\n Object.keys(assert).forEach(function (k) {\n if (k === 'AssertionError') {\n out[k] = assert[k];\n return;\n }\n if (ndebug) {\n out[k] = noop;\n return;\n }\n out[k] = assert[k];\n });\n\n /* export ourselves (for unit tests _only_) */\n out._setExports = _setExports;\n\n return out;\n}\n\nmodule.exports = _setExports(process.env.NODE_NDEBUG);\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = require('./internal/assert/assertion_error');\n\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\n\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : require('es6-object-assign').assign;\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\n\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n\n if (argsLen === 2) operator = '!=';\n }\n\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n\n if (message !== undefined) {\n errArgs.message = message;\n }\n\n var err = new AssertionError(errArgs);\n\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n\n throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n var _this = this;\n\n _classCallCheck(this, Comparison);\n\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n } // Handle primitives properly.\n\n\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n\n var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n // as well.\n\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n return;\n }\n\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n\n try {\n fn();\n } catch (e) {\n return e;\n }\n\n return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n\n throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\n\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n }); // Make sure we actually have a stack trace!\n\n var origStack = err.stack;\n\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift(); // Filter all frames existing in err.stack.\n\n var tmp1 = newErr.stack.split('\\n');\n\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n\n throw newErr;\n }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n'use strict';\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar _require = require('util/'),\n inspect = _require.inspect;\n\nvar _require2 = require('../errors'),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n\n\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n\n while (count) {\n str += str;\n count--;\n }\n\n str += str.substring(0, maxCount - str.length);\n return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\n\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n\n\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n } // Ignore the first characters.\n\n\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n } // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n\n\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n\n var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the expected line to the cache.\n\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++; // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++; // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2; // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = ''; // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n } // Inspected object to big (Show ~20 rows max)\n\n\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n _inherits(AssertionError, _Error);\n\n function AssertionError(options) {\n var _this;\n\n _classCallCheck(this, AssertionError);\n\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n\n if (message != null) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n } // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n\n\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n } // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (res.length > 27) {\n res.pop();\n }\n } // Only print a single input.\n\n\n if (res.length === 1) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n } else {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n }\n } else {\n var _res = inspectValue(actual);\n\n var other = '';\n var knownOperators = kReadableOperator[operator];\n\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n }\n }\n\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n } // Create error message including the error code in the name.\n\n\n _this.stack; // Reset the name.\n\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: inspect.custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread({}, ctx, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n\n return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n'use strict'; // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inherits(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n var _this;\n\n _classCallCheck(this, NodeError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n _this.code = code;\n return _this;\n }\n\n return NodeError;\n }(Base);\n\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = require('../assert');\n assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = require('util/');\n var inspected = util.inspect(value);\n\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (assert === undefined) assert = require('../assert');\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\n\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = require('util/').types,\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n } // The maximum size for an array is 2 ** 32 -1.\n\n\n return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n\n if (y < x) {\n return 1;\n }\n\n return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n } // Check more closely if val1 and val2 are equal.\n\n\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n\n return false;\n }\n\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n\n if (val1Tag !== val2Tag) {\n return false;\n }\n\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n\n\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n } // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n\n\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (_keys.length !== _keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n } // Cheap key test\n\n\n var i = 0;\n\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n if (symbolKeysA.length !== 0) {\n var count = 0;\n\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n } // Use memos to handle cycles.\n\n\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n\n memos.position++;\n }\n\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n\n return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n\n case 'object':\n // Only pass in null as object!\n return undefined;\n\n case 'symbol':\n return false;\n\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n\n }\n\n return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n\n if (altValue != null) {\n return altValue;\n }\n\n var curB = b.get(altValue);\n\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n } // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n\n\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(val);\n }\n }\n\n if (set !== null) {\n var bValues = arrayFromSet(b);\n\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i]; // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n // keys.\n\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n }\n }\n }\n\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n\n return true;\n }\n }\n } // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n\n\n for (i = 0; i < keys.length; i++) {\n var _key = keys[i];\n\n if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\n};","\n/*!\n * Copyright 2010 LearnBoost \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto')\n , parse = require('url').parse\n ;\n\n/**\n * Valid keys.\n */\n\nvar keys = \n [ 'acl'\n , 'location'\n , 'logging'\n , 'notification'\n , 'partNumber'\n , 'policy'\n , 'requestPayment'\n , 'torrent'\n , 'uploadId'\n , 'uploads'\n , 'versionId'\n , 'versioning'\n , 'versions'\n , 'website'\n ]\n\n/**\n * Return an \"Authorization\" header value with the given `options`\n * in the form of \"AWS :\"\n *\n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction authorization (options) {\n return 'AWS ' + options.key + ':' + sign(options)\n}\n\nmodule.exports = authorization\nmodule.exports.authorization = authorization\n\n/**\n * Simple HMAC-SHA1 Wrapper\n *\n * @param {Object} options\n * @return {String}\n * @api private\n */ \n\nfunction hmacSha1 (options) {\n return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64')\n}\n\nmodule.exports.hmacSha1 = hmacSha1\n\n/**\n * Create a base64 sha1 HMAC for `options`. \n * \n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction sign (options) {\n options.message = stringToSign(options)\n return hmacSha1(options)\n}\nmodule.exports.sign = sign\n\n/**\n * Create a base64 sha1 HMAC for `options`. \n *\n * Specifically to be used with S3 presigned URLs\n * \n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction signQuery (options) {\n options.message = queryStringToSign(options)\n return hmacSha1(options)\n}\nmodule.exports.signQuery= signQuery\n\n/**\n * Return a string for sign() with the given `options`.\n *\n * Spec:\n * \n * \\n\n * \\n\n * \\n\n * \\n\n * [headers\\n]\n * \n *\n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction stringToSign (options) {\n var headers = options.amazonHeaders || ''\n if (headers) headers += '\\n'\n var r = \n [ options.verb\n , options.md5\n , options.contentType\n , options.date ? options.date.toUTCString() : ''\n , headers + options.resource\n ]\n return r.join('\\n')\n}\nmodule.exports.stringToSign = stringToSign\n\n/**\n * Return a string for sign() with the given `options`, but is meant exclusively\n * for S3 presigned URLs\n *\n * Spec:\n * \n * \\n\n * \n *\n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction queryStringToSign (options){\n return 'GET\\n\\n\\n' + options.date + '\\n' + options.resource\n}\nmodule.exports.queryStringToSign = queryStringToSign\n\n/**\n * Perform the following:\n *\n * - ignore non-amazon headers\n * - lowercase fields\n * - sort lexicographically\n * - trim whitespace between \":\"\n * - join with newline\n *\n * @param {Object} headers\n * @return {String}\n * @api private\n */\n\nfunction canonicalizeHeaders (headers) {\n var buf = []\n , fields = Object.keys(headers)\n ;\n for (var i = 0, len = fields.length; i < len; ++i) {\n var field = fields[i]\n , val = headers[field]\n , field = field.toLowerCase()\n ;\n if (0 !== field.indexOf('x-amz')) continue\n buf.push(field + ':' + val)\n }\n return buf.sort().join('\\n')\n}\nmodule.exports.canonicalizeHeaders = canonicalizeHeaders\n\n/**\n * Perform the following:\n *\n * - ignore non sub-resources\n * - sort lexicographically\n *\n * @param {String} resource\n * @return {String}\n * @api private\n */\n\nfunction canonicalizeResource (resource) {\n var url = parse(resource, true)\n , path = url.pathname\n , buf = []\n ;\n\n Object.keys(url.query).forEach(function(key){\n if (!~keys.indexOf(key)) return\n var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key])\n buf.push(key + val)\n })\n\n return path + (buf.length ? '?' + buf.sort().join('&') : '')\n}\nmodule.exports.canonicalizeResource = canonicalizeResource\n","var aws4 = exports,\n url = require('url'),\n querystring = require('querystring'),\n crypto = require('crypto'),\n lru = require('./lru'),\n credentialsCache = lru(1000)\n\n// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html\n\nfunction hmac(key, string, encoding) {\n return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding)\n}\n\nfunction hash(string, encoding) {\n return crypto.createHash('sha256').update(string, 'utf8').digest(encoding)\n}\n\n// This function assumes the string has already been percent encoded\nfunction encodeRfc3986(urlEncodedString) {\n return urlEncodedString.replace(/[!'()*]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\nfunction encodeRfc3986Full(str) {\n return encodeRfc3986(encodeURIComponent(str))\n}\n\n// A bit of a combination of:\n// https://github.com/aws/aws-sdk-java-v2/blob/dc695de6ab49ad03934e1b02e7263abbd2354be0/core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java#L59\n// https://github.com/aws/aws-sdk-js/blob/18cb7e5b463b46239f9fdd4a65e2ff8c81831e8f/lib/signers/v4.js#L191-L199\n// https://github.com/mhart/aws4fetch/blob/b3aed16b6f17384cf36ea33bcba3c1e9f3bdfefd/src/main.js#L25-L34\nvar HEADERS_TO_IGNORE = {\n 'authorization': true,\n 'connection': true,\n 'x-amzn-trace-id': true,\n 'user-agent': true,\n 'expect': true,\n 'presigned-expires': true,\n 'range': true,\n}\n\n// request: { path | body, [host], [method], [headers], [service], [region] }\n// credentials: { accessKeyId, secretAccessKey, [sessionToken] }\nfunction RequestSigner(request, credentials) {\n\n if (typeof request === 'string') request = url.parse(request)\n\n var headers = request.headers = (request.headers || {}),\n hostParts = (!this.service || !this.region) && this.matchHost(request.hostname || request.host || headers.Host || headers.host)\n\n this.request = request\n this.credentials = credentials || this.defaultCredentials()\n\n this.service = request.service || hostParts[0] || ''\n this.region = request.region || hostParts[1] || 'us-east-1'\n\n // SES uses a different domain from the service name\n if (this.service === 'email') this.service = 'ses'\n\n if (!request.method && request.body)\n request.method = 'POST'\n\n if (!headers.Host && !headers.host) {\n headers.Host = request.hostname || request.host || this.createHost()\n\n // If a port is specified explicitly, use it as is\n if (request.port)\n headers.Host += ':' + request.port\n }\n if (!request.hostname && !request.host)\n request.hostname = headers.Host || headers.host\n\n this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT'\n}\n\nRequestSigner.prototype.matchHost = function(host) {\n var match = (host || '').match(/([^\\.]+)\\.(?:([^\\.]*)\\.)?amazonaws\\.com(\\.cn)?$/)\n var hostParts = (match || []).slice(1, 3)\n\n // ES's hostParts are sometimes the other way round, if the value that is expected\n // to be region equals ‘es’ switch them back\n // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com\n if (hostParts[1] === 'es')\n hostParts = hostParts.reverse()\n\n if (hostParts[1] == 's3') {\n hostParts[0] = 's3'\n hostParts[1] = 'us-east-1'\n } else {\n for (var i = 0; i < 2; i++) {\n if (/^s3-/.test(hostParts[i])) {\n hostParts[1] = hostParts[i].slice(3)\n hostParts[0] = 's3'\n break\n }\n }\n }\n\n return hostParts\n}\n\n// http://docs.aws.amazon.com/general/latest/gr/rande.html\nRequestSigner.prototype.isSingleRegion = function() {\n // Special case for S3 and SimpleDB in us-east-1\n if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true\n\n return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts']\n .indexOf(this.service) >= 0\n}\n\nRequestSigner.prototype.createHost = function() {\n var region = this.isSingleRegion() ? '' : '.' + this.region,\n subdomain = this.service === 'ses' ? 'email' : this.service\n return subdomain + region + '.amazonaws.com'\n}\n\nRequestSigner.prototype.prepareRequest = function() {\n this.parsePath()\n\n var request = this.request, headers = request.headers, query\n\n if (request.signQuery) {\n\n this.parsedPath.query = query = this.parsedPath.query || {}\n\n if (this.credentials.sessionToken)\n query['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !query['X-Amz-Expires'])\n query['X-Amz-Expires'] = 86400\n\n if (query['X-Amz-Date'])\n this.datetime = query['X-Amz-Date']\n else\n query['X-Amz-Date'] = this.getDateTime()\n\n query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'\n query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString()\n query['X-Amz-SignedHeaders'] = this.signedHeaders()\n\n } else {\n\n if (!request.doNotModifyHeaders && !this.isCodeCommitGit) {\n if (request.body && !headers['Content-Type'] && !headers['content-type'])\n headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\n\n if (request.body && !headers['Content-Length'] && !headers['content-length'])\n headers['Content-Length'] = Buffer.byteLength(request.body)\n\n if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token'])\n headers['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256'])\n headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex')\n\n if (headers['X-Amz-Date'] || headers['x-amz-date'])\n this.datetime = headers['X-Amz-Date'] || headers['x-amz-date']\n else\n headers['X-Amz-Date'] = this.getDateTime()\n }\n\n delete headers.Authorization\n delete headers.authorization\n }\n}\n\nRequestSigner.prototype.sign = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n if (this.request.signQuery) {\n this.parsedPath.query['X-Amz-Signature'] = this.signature()\n } else {\n this.request.headers.Authorization = this.authHeader()\n }\n\n this.request.path = this.formatPath()\n\n return this.request\n}\n\nRequestSigner.prototype.getDateTime = function() {\n if (!this.datetime) {\n var headers = this.request.headers,\n date = new Date(headers.Date || headers.date || new Date)\n\n this.datetime = date.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '')\n\n // Remove the trailing 'Z' on the timestamp string for CodeCommit git access\n if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1)\n }\n return this.datetime\n}\n\nRequestSigner.prototype.getDate = function() {\n return this.getDateTime().substr(0, 8)\n}\n\nRequestSigner.prototype.authHeader = function() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(),\n 'SignedHeaders=' + this.signedHeaders(),\n 'Signature=' + this.signature(),\n ].join(', ')\n}\n\nRequestSigner.prototype.signature = function() {\n var date = this.getDate(),\n cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(),\n kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey)\n if (!kCredentials) {\n kDate = hmac('AWS4' + this.credentials.secretAccessKey, date)\n kRegion = hmac(kDate, this.region)\n kService = hmac(kRegion, this.service)\n kCredentials = hmac(kService, 'aws4_request')\n credentialsCache.set(cacheKey, kCredentials)\n }\n return hmac(kCredentials, this.stringToSign(), 'hex')\n}\n\nRequestSigner.prototype.stringToSign = function() {\n return [\n 'AWS4-HMAC-SHA256',\n this.getDateTime(),\n this.credentialString(),\n hash(this.canonicalString(), 'hex'),\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalString = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n var pathStr = this.parsedPath.path,\n query = this.parsedPath.query,\n headers = this.request.headers,\n queryStr = '',\n normalizePath = this.service !== 's3',\n decodePath = this.service === 's3' || this.request.doNotEncodePath,\n decodeSlashesInPath = this.service === 's3',\n firstValOnly = this.service === 's3',\n bodyHash\n\n if (this.service === 's3' && this.request.signQuery) {\n bodyHash = 'UNSIGNED-PAYLOAD'\n } else if (this.isCodeCommitGit) {\n bodyHash = ''\n } else {\n bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] ||\n hash(this.request.body || '', 'hex')\n }\n\n if (query) {\n var reducedQuery = Object.keys(query).reduce(function(obj, key) {\n if (!key) return obj\n obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] :\n (firstValOnly ? query[key][0] : query[key])\n return obj\n }, {})\n var encodedQueryPieces = []\n Object.keys(reducedQuery).sort().forEach(function(key) {\n if (!Array.isArray(reducedQuery[key])) {\n encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key]))\n } else {\n reducedQuery[key].map(encodeRfc3986Full).sort()\n .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) })\n }\n })\n queryStr = encodedQueryPieces.join('&')\n }\n if (pathStr !== '/') {\n if (normalizePath) pathStr = pathStr.replace(/\\/{2,}/g, '/')\n pathStr = pathStr.split('/').reduce(function(path, piece) {\n if (normalizePath && piece === '..') {\n path.pop()\n } else if (!normalizePath || piece !== '.') {\n if (decodePath) piece = decodeURIComponent(piece.replace(/\\+/g, ' '))\n path.push(encodeRfc3986Full(piece))\n }\n return path\n }, []).join('/')\n if (pathStr[0] !== '/') pathStr = '/' + pathStr\n if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/')\n }\n\n return [\n this.request.method || 'GET',\n pathStr,\n queryStr,\n this.canonicalHeaders() + '\\n',\n this.signedHeaders(),\n bodyHash,\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalHeaders = function() {\n var headers = this.request.headers\n function trimAll(header) {\n return header.toString().trim().replace(/\\s+/g, ' ')\n }\n return Object.keys(headers)\n .filter(function(key) { return HEADERS_TO_IGNORE[key.toLowerCase()] == null })\n .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 })\n .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) })\n .join('\\n')\n}\n\nRequestSigner.prototype.signedHeaders = function() {\n return Object.keys(this.request.headers)\n .map(function(key) { return key.toLowerCase() })\n .filter(function(key) { return HEADERS_TO_IGNORE[key] == null })\n .sort()\n .join(';')\n}\n\nRequestSigner.prototype.credentialString = function() {\n return [\n this.getDate(),\n this.region,\n this.service,\n 'aws4_request',\n ].join('/')\n}\n\nRequestSigner.prototype.defaultCredentials = function() {\n var env = process.env\n return {\n accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY,\n secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY,\n sessionToken: env.AWS_SESSION_TOKEN,\n }\n}\n\nRequestSigner.prototype.parsePath = function() {\n var path = this.request.path || '/'\n\n // S3 doesn't always encode characters > 127 correctly and\n // all services don't encode characters > 255 correctly\n // So if there are non-reserved chars (and it's not already all % encoded), just encode them all\n if (/[^0-9A-Za-z;,/?:@&=+$\\-_.!~*'()#%]/.test(path)) {\n path = encodeURI(decodeURI(path))\n }\n\n var queryIx = path.indexOf('?'),\n query = null\n\n if (queryIx >= 0) {\n query = querystring.parse(path.slice(queryIx + 1))\n path = path.slice(0, queryIx)\n }\n\n this.parsedPath = {\n path: path,\n query: query,\n }\n}\n\nRequestSigner.prototype.formatPath = function() {\n var path = this.parsedPath.path,\n query = this.parsedPath.query\n\n if (!query) return path\n\n // Services don't support empty query string keys\n if (query[''] != null) delete query['']\n\n return path + '?' + encodeRfc3986(querystring.stringify(query))\n}\n\naws4.RequestSigner = RequestSigner\n\naws4.sign = function(request, credentials) {\n return new RequestSigner(request, credentials).sign()\n}\n","module.exports = function(size) {\n return new LruCache(size)\n}\n\nfunction LruCache(size) {\n this.capacity = size | 0\n this.map = Object.create(null)\n this.list = new DoublyLinkedList()\n}\n\nLruCache.prototype.get = function(key) {\n var node = this.map[key]\n if (node == null) return undefined\n this.used(node)\n return node.val\n}\n\nLruCache.prototype.set = function(key, val) {\n var node = this.map[key]\n if (node != null) {\n node.val = val\n } else {\n if (!this.capacity) this.prune()\n if (!this.capacity) return false\n node = new DoublyLinkedNode(key, val)\n this.map[key] = node\n this.capacity--\n }\n this.used(node)\n return true\n}\n\nLruCache.prototype.used = function(node) {\n this.list.moveToFront(node)\n}\n\nLruCache.prototype.prune = function() {\n var node = this.list.pop()\n if (node != null) {\n delete this.map[node.key]\n this.capacity++\n }\n}\n\n\nfunction DoublyLinkedList() {\n this.firstNode = null\n this.lastNode = null\n}\n\nDoublyLinkedList.prototype.moveToFront = function(node) {\n if (this.firstNode == node) return\n\n this.remove(node)\n\n if (this.firstNode == null) {\n this.firstNode = node\n this.lastNode = node\n node.prev = null\n node.next = null\n } else {\n node.prev = null\n node.next = this.firstNode\n node.next.prev = node\n this.firstNode = node\n }\n}\n\nDoublyLinkedList.prototype.pop = function() {\n var lastNode = this.lastNode\n if (lastNode != null) {\n this.remove(lastNode)\n }\n return lastNode\n}\n\nDoublyLinkedList.prototype.remove = function(node) {\n if (this.firstNode == node) {\n this.firstNode = node.next\n } else if (node.prev != null) {\n node.prev.next = node.next\n }\n if (this.lastNode == node) {\n this.lastNode = node.prev\n } else if (node.next != null) {\n node.next.prev = node.prev\n }\n}\n\n\nfunction DoublyLinkedNode(key, val) {\n this.key = key\n this.val = val\n this.prev = null\n this.next = null\n}\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","'use strict';\n\nvar crypto_hash_sha512 = require('tweetnacl').lowlevel.crypto_hash;\n\n/*\n * This file is a 1:1 port from the OpenBSD blowfish.c and bcrypt_pbkdf.c. As a\n * result, it retains the original copyright and license. The two files are\n * under slightly different (but compatible) licenses, and are here combined in\n * one file.\n *\n * Credit for the actual porting work goes to:\n * Devi Mandiri \n */\n\n/*\n * The Blowfish portions are under the following license:\n *\n * Blowfish block cipher for OpenBSD\n * Copyright 1997 Niels Provos \n * All rights reserved.\n *\n * Implementation advice by David Mazieres .\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. The name of the author may not be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * The bcrypt_pbkdf portions are under the following license:\n *\n * Copyright (c) 2013 Ted Unangst \n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n/*\n * Performance improvements (Javascript-specific):\n *\n * Copyright 2016, Joyent Inc\n * Author: Alex Wilson \n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n// Ported from OpenBSD bcrypt_pbkdf.c v1.9\n\nvar BLF_J = 0;\n\nvar Blowfish = function() {\n this.S = [\n new Uint32Array([\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,\n 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,\n 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,\n 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,\n 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,\n 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,\n 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\n 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,\n 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,\n 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,\n 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,\n 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,\n 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,\n 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\n 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,\n 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,\n 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,\n 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,\n 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,\n 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,\n 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,\n 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,\n 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,\n 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,\n 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,\n 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,\n 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\n 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,\n 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,\n 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,\n 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,\n 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,\n 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,\n 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\n 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,\n 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,\n 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,\n 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,\n 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,\n 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,\n 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,\n 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,\n 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a]),\n new Uint32Array([\n 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,\n 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,\n 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,\n 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,\n 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,\n 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,\n 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,\n 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,\n 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,\n 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,\n 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\n 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,\n 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,\n 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\n 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,\n 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,\n 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,\n 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,\n 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,\n 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,\n 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,\n 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,\n 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,\n 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,\n 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,\n 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,\n 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,\n 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,\n 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,\n 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,\n 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\n 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,\n 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,\n 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\n 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,\n 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,\n 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,\n 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,\n 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,\n 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,\n 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,\n 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,\n 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7]),\n new Uint32Array([\n 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,\n 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\n 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,\n 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,\n 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,\n 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,\n 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,\n 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,\n 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,\n 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,\n 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,\n 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,\n 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,\n 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,\n 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,\n 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,\n 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,\n 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,\n 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\n 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,\n 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,\n 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\n 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,\n 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,\n 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,\n 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,\n 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,\n 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,\n 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,\n 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,\n 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,\n 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,\n 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,\n 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,\n 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,\n 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,\n 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,\n 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,\n 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\n 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,\n 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,\n 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\n 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,\n 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0]),\n new Uint32Array([\n 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,\n 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,\n 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,\n 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,\n 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,\n 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\n 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,\n 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,\n 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,\n 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,\n 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,\n 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,\n 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,\n 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,\n 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,\n 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,\n 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,\n 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,\n 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\n 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,\n 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,\n 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,\n 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,\n 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,\n 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,\n 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\n 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,\n 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,\n 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,\n 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,\n 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,\n 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,\n 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,\n 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,\n 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,\n 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,\n 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,\n 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,\n 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\n 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,\n 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,\n 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,\n 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6])\n ];\n this.P = new Uint32Array([\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,\n 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,\n 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,\n 0x9216d5d9, 0x8979fb1b]);\n};\n\nfunction F(S, x8, i) {\n return (((S[0][x8[i+3]] +\n S[1][x8[i+2]]) ^\n S[2][x8[i+1]]) +\n S[3][x8[i]]);\n};\n\nBlowfish.prototype.encipher = function(x, x8) {\n if (x8 === undefined) {\n x8 = new Uint8Array(x.buffer);\n if (x.byteOffset !== 0)\n x8 = x8.subarray(x.byteOffset);\n }\n x[0] ^= this.P[0];\n for (var i = 1; i < 16; i += 2) {\n x[1] ^= F(this.S, x8, 0) ^ this.P[i];\n x[0] ^= F(this.S, x8, 4) ^ this.P[i+1];\n }\n var t = x[0];\n x[0] = x[1] ^ this.P[17];\n x[1] = t;\n};\n\nBlowfish.prototype.decipher = function(x) {\n var x8 = new Uint8Array(x.buffer);\n if (x.byteOffset !== 0)\n x8 = x8.subarray(x.byteOffset);\n x[0] ^= this.P[17];\n for (var i = 16; i > 0; i -= 2) {\n x[1] ^= F(this.S, x8, 0) ^ this.P[i];\n x[0] ^= F(this.S, x8, 4) ^ this.P[i-1];\n }\n var t = x[0];\n x[0] = x[1] ^ this.P[0];\n x[1] = t;\n};\n\nfunction stream2word(data, databytes){\n var i, temp = 0;\n for (i = 0; i < 4; i++, BLF_J++) {\n if (BLF_J >= databytes) BLF_J = 0;\n temp = (temp << 8) | data[BLF_J];\n }\n return temp;\n};\n\nBlowfish.prototype.expand0state = function(key, keybytes) {\n var d = new Uint32Array(2), i, k;\n var d8 = new Uint8Array(d.buffer);\n\n for (i = 0, BLF_J = 0; i < 18; i++) {\n this.P[i] ^= stream2word(key, keybytes);\n }\n BLF_J = 0;\n\n for (i = 0; i < 18; i += 2) {\n this.encipher(d, d8);\n this.P[i] = d[0];\n this.P[i+1] = d[1];\n }\n\n for (i = 0; i < 4; i++) {\n for (k = 0; k < 256; k += 2) {\n this.encipher(d, d8);\n this.S[i][k] = d[0];\n this.S[i][k+1] = d[1];\n }\n }\n};\n\nBlowfish.prototype.expandstate = function(data, databytes, key, keybytes) {\n var d = new Uint32Array(2), i, k;\n\n for (i = 0, BLF_J = 0; i < 18; i++) {\n this.P[i] ^= stream2word(key, keybytes);\n }\n\n for (i = 0, BLF_J = 0; i < 18; i += 2) {\n d[0] ^= stream2word(data, databytes);\n d[1] ^= stream2word(data, databytes);\n this.encipher(d);\n this.P[i] = d[0];\n this.P[i+1] = d[1];\n }\n\n for (i = 0; i < 4; i++) {\n for (k = 0; k < 256; k += 2) {\n d[0] ^= stream2word(data, databytes);\n d[1] ^= stream2word(data, databytes);\n this.encipher(d);\n this.S[i][k] = d[0];\n this.S[i][k+1] = d[1];\n }\n }\n BLF_J = 0;\n};\n\nBlowfish.prototype.enc = function(data, blocks) {\n for (var i = 0; i < blocks; i++) {\n this.encipher(data.subarray(i*2));\n }\n};\n\nBlowfish.prototype.dec = function(data, blocks) {\n for (var i = 0; i < blocks; i++) {\n this.decipher(data.subarray(i*2));\n }\n};\n\nvar BCRYPT_BLOCKS = 8,\n BCRYPT_HASHSIZE = 32;\n\nfunction bcrypt_hash(sha2pass, sha2salt, out) {\n var state = new Blowfish(),\n cdata = new Uint32Array(BCRYPT_BLOCKS), i,\n ciphertext = new Uint8Array([79,120,121,99,104,114,111,109,97,116,105,\n 99,66,108,111,119,102,105,115,104,83,119,97,116,68,121,110,97,109,\n 105,116,101]); //\"OxychromaticBlowfishSwatDynamite\"\n\n state.expandstate(sha2salt, 64, sha2pass, 64);\n for (i = 0; i < 64; i++) {\n state.expand0state(sha2salt, 64);\n state.expand0state(sha2pass, 64);\n }\n\n for (i = 0; i < BCRYPT_BLOCKS; i++)\n cdata[i] = stream2word(ciphertext, ciphertext.byteLength);\n for (i = 0; i < 64; i++)\n state.enc(cdata, cdata.byteLength / 8);\n\n for (i = 0; i < BCRYPT_BLOCKS; i++) {\n out[4*i+3] = cdata[i] >>> 24;\n out[4*i+2] = cdata[i] >>> 16;\n out[4*i+1] = cdata[i] >>> 8;\n out[4*i+0] = cdata[i];\n }\n};\n\nfunction bcrypt_pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds) {\n var sha2pass = new Uint8Array(64),\n sha2salt = new Uint8Array(64),\n out = new Uint8Array(BCRYPT_HASHSIZE),\n tmpout = new Uint8Array(BCRYPT_HASHSIZE),\n countsalt = new Uint8Array(saltlen+4),\n i, j, amt, stride, dest, count,\n origkeylen = keylen;\n\n if (rounds < 1)\n return -1;\n if (passlen === 0 || saltlen === 0 || keylen === 0 ||\n keylen > (out.byteLength * out.byteLength) || saltlen > (1<<20))\n return -1;\n\n stride = Math.floor((keylen + out.byteLength - 1) / out.byteLength);\n amt = Math.floor((keylen + stride - 1) / stride);\n\n for (i = 0; i < saltlen; i++)\n countsalt[i] = salt[i];\n\n crypto_hash_sha512(sha2pass, pass, passlen);\n\n for (count = 1; keylen > 0; count++) {\n countsalt[saltlen+0] = count >>> 24;\n countsalt[saltlen+1] = count >>> 16;\n countsalt[saltlen+2] = count >>> 8;\n countsalt[saltlen+3] = count;\n\n crypto_hash_sha512(sha2salt, countsalt, saltlen + 4);\n bcrypt_hash(sha2pass, sha2salt, tmpout);\n for (i = out.byteLength; i--;)\n out[i] = tmpout[i];\n\n for (i = 1; i < rounds; i++) {\n crypto_hash_sha512(sha2salt, tmpout, tmpout.byteLength);\n bcrypt_hash(sha2pass, sha2salt, tmpout);\n for (j = 0; j < out.byteLength; j++)\n out[j] ^= tmpout[j];\n }\n\n amt = Math.min(amt, keylen);\n for (i = 0; i < amt; i++) {\n dest = i * stride + (count - 1);\n if (dest >= origkeylen)\n break;\n key[dest] = out[i];\n }\n keylen -= i;\n }\n\n return 0;\n};\n\nmodule.exports = {\n BLOCKS: BCRYPT_BLOCKS,\n HASHSIZE: BCRYPT_HASHSIZE,\n hash: bcrypt_hash,\n pbkdf: bcrypt_pbkdf\n};\n","'use strict'\nvar ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'\n\n// pre-compute lookup table\nvar ALPHABET_MAP = {}\nfor (var z = 0; z < ALPHABET.length; z++) {\n var x = ALPHABET.charAt(z)\n\n if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')\n ALPHABET_MAP[x] = z\n}\n\nfunction polymodStep (pre) {\n var b = pre >> 25\n return ((pre & 0x1FFFFFF) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3)\n}\n\nfunction prefixChk (prefix) {\n var chk = 1\n for (var i = 0; i < prefix.length; ++i) {\n var c = prefix.charCodeAt(i)\n if (c < 33 || c > 126) return 'Invalid prefix (' + prefix + ')'\n\n chk = polymodStep(chk) ^ (c >> 5)\n }\n chk = polymodStep(chk)\n\n for (i = 0; i < prefix.length; ++i) {\n var v = prefix.charCodeAt(i)\n chk = polymodStep(chk) ^ (v & 0x1f)\n }\n return chk\n}\n\nfunction encode (prefix, words, LIMIT) {\n LIMIT = LIMIT || 90\n if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit')\n\n prefix = prefix.toLowerCase()\n\n // determine chk mod\n var chk = prefixChk(prefix)\n if (typeof chk === 'string') throw new Error(chk)\n\n var result = prefix + '1'\n for (var i = 0; i < words.length; ++i) {\n var x = words[i]\n if ((x >> 5) !== 0) throw new Error('Non 5-bit word')\n\n chk = polymodStep(chk) ^ x\n result += ALPHABET.charAt(x)\n }\n\n for (i = 0; i < 6; ++i) {\n chk = polymodStep(chk)\n }\n chk ^= 1\n\n for (i = 0; i < 6; ++i) {\n var v = (chk >> ((5 - i) * 5)) & 0x1f\n result += ALPHABET.charAt(v)\n }\n\n return result\n}\n\nfunction __decode (str, LIMIT) {\n LIMIT = LIMIT || 90\n if (str.length < 8) return str + ' too short'\n if (str.length > LIMIT) return 'Exceeds length limit'\n\n // don't allow mixed case\n var lowered = str.toLowerCase()\n var uppered = str.toUpperCase()\n if (str !== lowered && str !== uppered) return 'Mixed-case string ' + str\n str = lowered\n\n var split = str.lastIndexOf('1')\n if (split === -1) return 'No separator character for ' + str\n if (split === 0) return 'Missing prefix for ' + str\n\n var prefix = str.slice(0, split)\n var wordChars = str.slice(split + 1)\n if (wordChars.length < 6) return 'Data too short'\n\n var chk = prefixChk(prefix)\n if (typeof chk === 'string') return chk\n\n var words = []\n for (var i = 0; i < wordChars.length; ++i) {\n var c = wordChars.charAt(i)\n var v = ALPHABET_MAP[c]\n if (v === undefined) return 'Unknown character ' + c\n chk = polymodStep(chk) ^ v\n\n // not in the checksum?\n if (i + 6 >= wordChars.length) continue\n words.push(v)\n }\n\n if (chk !== 1) return 'Invalid checksum for ' + str\n return { prefix: prefix, words: words }\n}\n\nfunction decodeUnsafe () {\n var res = __decode.apply(null, arguments)\n if (typeof res === 'object') return res\n}\n\nfunction decode (str) {\n var res = __decode.apply(null, arguments)\n if (typeof res === 'object') return res\n\n throw new Error(res)\n}\n\nfunction convert (data, inBits, outBits, pad) {\n var value = 0\n var bits = 0\n var maxV = (1 << outBits) - 1\n\n var result = []\n for (var i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i]\n bits += inBits\n\n while (bits >= outBits) {\n bits -= outBits\n result.push((value >> bits) & maxV)\n }\n }\n\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV)\n }\n } else {\n if (bits >= inBits) return 'Excess padding'\n if ((value << (outBits - bits)) & maxV) return 'Non-zero padding'\n }\n\n return result\n}\n\nfunction toWordsUnsafe (bytes) {\n var res = convert(bytes, 8, 5, true)\n if (Array.isArray(res)) return res\n}\n\nfunction toWords (bytes) {\n var res = convert(bytes, 8, 5, true)\n if (Array.isArray(res)) return res\n\n throw new Error(res)\n}\n\nfunction fromWordsUnsafe (words) {\n var res = convert(words, 5, 8, false)\n if (Array.isArray(res)) return res\n}\n\nfunction fromWords (words) {\n var res = convert(words, 5, 8, false)\n if (Array.isArray(res)) return res\n\n throw new Error(res)\n}\n\nmodule.exports = {\n decodeUnsafe: decodeUnsafe,\n decode: decode,\n encode: encode,\n toWordsUnsafe: toWordsUnsafe,\n toWords: toWords,\n fromWordsUnsafe: fromWordsUnsafe,\n fromWords: fromWords\n}\n","'use strict';\n\nmodule.exports.parse = require('./lib/parse').parse;\nmodule.exports.match = require('./lib/interp').match;\nmodule.exports.build = require('./lib/constructor').build;\nmodule.exports.write = require('./lib/constructor').write;\n\nmodule.exports.matcher = module.exports.compile =\n require('./lib/compile').compile;\nmodule.exports.builder = require('./lib/compile').compile_builder;\n","// Compile patterns to recognisers and constructors\n\n'use strict';\n\nrequire('buffer-more-ints');\nvar $ = require('util').format;\n\nvar parse = require('./parse').parse;\nvar interp = require('./interp'),\n parse_int = interp.parse_int,\n parse_float = interp.parse_float;\nvar construct = require('./constructor'),\n write_int = construct.write_int,\n write_float = construct.write_float;\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar lines = [];\nfunction $start() {\n lines = [];\n}\nfunction $line(/* format , args */) {\n lines.push($.apply(null, arguments));\n}\nfunction $result() {\n return lines.join('\\n');\n}\n\nfunction bits_expr(segment) {\n if (typeof segment.size === 'string') {\n return $('%s * %d', var_name(segment.size), segment.unit);\n }\n else {\n return (segment.size * segment.unit).toString();\n }\n}\n\nfunction get_number(segment) {\n $line('bits = %s;\\n', bits_expr(segment));\n var parser = (segment.type === 'integer') ?\n 'parse_int' : 'parse_float';\n var be = segment.bigendian, sg = segment.signed;\n $line(\"byteoffset = offset / 8; offset += bits\");\n $line(\"if (offset > binsize) { return false; }\");\n $line(\"else { result = %s(bin, byteoffset, bits / 8, %s, %s); }\",\n parser, be, sg);\n}\n\nfunction get_binary(segment) {\n $line(\"byteoffset = offset / 8;\");\n if (segment.size === true) {\n $line(\"offset = binsize;\");\n $line(\"result = bin.slice(byteoffset);\");\n }\n else {\n $line(\"bits = %s;\", bits_expr(segment));\n $line(\"offset += bits;\");\n $line(\"if (offset > binsize) { return false; }\");\n $line(\"else { result = bin.slice(byteoffset,\",\n \"byteoffset + bits / 8); }\");\n }\n}\n\nfunction get_string(segment) {\n $line(\"byteoffset = offset / 8;\");\n var strlen = segment.value.length;\n var strlenbits = strlen * 8;\n $line(\"offset += %d;\", strlenbits);\n $line(\"if (offset > binsize) { return false; }\");\n $line(\"else { result = bin.toString(byteoffset,\",\n $(\"byteoffset + %d); }\", strlen));\n}\n\nfunction skip_bits(segment) {\n if (typeof segment.size === 'string') {\n // Damn. Have to look up the size.\n $line(\"var skipbits = %s * %d;\",\n var_name(segment.size), segment.unit);\n $line(\"if (offset + skipbits > binsize) { return false; }\");\n $line(\"else { offset += skipbits; }\");\n }\n else if (segment.size === true) {\n $line(\"if (offset % 8 === 0) { offset = binsize; }\");\n $line(\"else { return false; }\");\n }\n else {\n var bits = segment.unit * segment.size;\n $line(\"if (offset + %d > binsize) { return false; }\", bits);\n $line(\"else { offset += %d; }\", bits);\n }\n}\n\nfunction match_seg(segment) {\n if (segment.name === '_') {\n skip_bits(segment);\n }\n else {\n var assign_result;\n switch (segment.type) {\n case 'integer':\n case 'float':\n get_number(segment);\n break;\n case 'binary':\n get_binary(segment);\n break;\n case 'string':\n get_string(segment);\n break;\n }\n $line(\"if (result === false) return false;\");\n if (segment.name) {\n // variable is given a value in the environment\n $line(\"else if (%s !== undefined) {\", var_name(segment.name));\n // .. and it is not the same as that matched\n $line(\"if (%s != result) return false;\",\n var_name(segment.name));\n $line(\"}\");\n // variable is free\n $line('else %s = result;', var_name(segment.name));\n }\n else {\n var repr = JSON.stringify(segment.value);\n $line(\"else if (result != %s) return false;\", repr);\n }\n }\n}\n\nfunction var_name(name) {\n return 'var_' + name;\n}\n\nfunction variables(segments) {\n var names = {};\n for (var i = 0; i < segments.length; i++) {\n var name = segments[i].name;\n if (name && name !== '_') {\n names[name] = true;\n }\n name = segments[i].size;\n if (typeof name === 'string') {\n names[name] = true;\n }\n }\n return Object.keys(names);\n}\n\nfunction compile_pattern(segments) {\n $start();\n $line(\"return function(binary, env) {\");\n $line(\"'use strict';\");\n $line(\"var bin = binary, env = env || {};\");\n $line(\"var offset = 0, binsize = bin.length * 8;\");\n $line(\"var bits, result, byteoffset;\");\n var varnames = variables(segments);\n for (var v = 0; v < varnames.length; v++) {\n var name = varnames[v];\n $line(\"var %s = env['%s'];\", var_name(name), name);\n }\n\n var len = segments.length;\n for (var i = 0; i < len; i++) {\n var segment = segments[i];\n $line(\"// \" + JSON.stringify(segment));\n match_seg(segment);\n }\n\n $line(\"if (offset == binsize) {\");\n $line(\"return {\");\n for (var v = 0; v < varnames.length; v++) {\n var name = varnames[v];\n $line(\"%s: %s,\", name, var_name(name));\n }\n $line('};');\n $line('}'); // if offset == binsize\n $line(\"else return false;\");\n $line(\"}\"); // end function\n\n var fn = new Function('parse_int', 'parse_float', $result());\n return fn(parse_int, parse_float);\n}\n\n\nfunction write_seg(segment) {\n switch (segment.type) {\n case 'string':\n $line(\"offset += buf.write(%s, offset, 'utf8');\",\n JSON.stringify(segment.value));\n break;\n case 'binary':\n $line(\"val = bindings['%s'];\", segment.name);\n if (segment.size === true) {\n $line('size = val.length;');\n }\n else if (typeof segment.size === 'string') {\n $line(\"size = (bindings['%s'] * %d) / 8;\",\n segment.size, segment.unit);\n }\n else {\n $line(\"size = %d;\", (segment.size * segment.unit) / 8);\n }\n $line('val.copy(buf, offset, 0, size);');\n $line('offset += size;');\n break;\n case 'integer':\n case 'float':\n write_number(segment);\n break;\n }\n}\n\nfunction write_number(segment) {\n if (segment.name) {\n $line(\"val = bindings['%s'];\", segment.name);\n }\n else {\n $line(\"val = %d\", segment.value);\n }\n var writer = (segment.type === 'integer') ?\n 'write_int' : 'write_float';\n if (typeof segment.size === 'string') {\n $line(\"size = (bindings['%s'] * %d) / 8;\",\n segment.size, segment.unit);\n }\n else {\n $line('size = %d;', (segment.size * segment.unit) / 8);\n }\n $line('%s(buf, val, offset, size, %s);',\n writer, segment.bigendian);\n $line('offset += size;');\n}\n\nfunction size_of(segments) {\n var variable = [];\n var fixed = 0;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (typeof segment.size === 'string' ||\n segment.size === true) {\n variable.push(segment);\n }\n else if (segment.type === 'string') {\n fixed += Buffer.byteLength(segment.value);\n }\n else {\n fixed += (segment.size * segment.unit) / 8;\n }\n }\n\n $line('var buffersize = %d;', fixed);\n\n if (variable.length > 0) {\n for (var j = 0; j < variable.length; j++) {\n var segment = variable[j];\n if (segment.size === true) {\n $line(\"buffersize += bindings['%s'].length;\", segment.name);\n }\n else {\n $line(\"buffersize += (bindings['%s'] * %d) / 8;\",\n segment.size, segment.unit);\n }\n }\n }\n}\n\nfunction emit_write(segments) {\n $line('var val, size;');\n\n var len = segments.length;\n for (var i = 0; i < len; i++) {\n var segment = segments[i];\n $line('// %s', JSON.stringify(segment));\n write_seg(segment);\n }\n}\n\nfunction compile_ctor(segments) {\n $start();\n $line('return function(bindings) {');\n $line(\"'use strict';\");\n size_of(segments);\n $line('var buf = Buffer.alloc(buffersize);');\n $line('var offset = 0;');\n emit_write(segments);\n $line('return buf;');\n $line('}'); // end function\n\n return new Function('write_int', 'write_float', 'Buffer',\n $result())(write_int, write_float, Buffer);\n}\n\nmodule.exports.compile_pattern = compile_pattern;\nmodule.exports.compile = function() {\n var str = [].join.call(arguments, ',');\n var p = parse(str);\n return compile_pattern(p);\n};\nmodule.exports.compile_builder = function() {\n var str = [].join.call(arguments, ',');\n var p = parse(str);\n return compile_ctor(p);\n};\n","// -*- js-indent-level: 2 -*-\n\n// Constructors given patterns\n\n'use strict';\n\nvar ints = require('buffer-more-ints');\nvar Buffer = require('safe-buffer').Buffer;\n\n// Interpret the pattern, writing values into a buffer\nfunction write(buf, offset, pattern, bindings) {\n for (var i=0, len = pattern.length; i < len; i++) {\n var segment = pattern[i];\n switch (segment.type) {\n case 'string':\n offset += buf.write(segment.value, offset, 'utf8');\n break;\n case 'binary':\n offset += writeBinary(segment, buf, offset, bindings);\n break;\n case 'integer':\n offset += writeInteger(segment, buf, offset, bindings);\n break;\n case 'float':\n offset += writeFloat(segment, buf, offset, bindings);\n break;\n }\n }\n return offset;\n}\n\nfunction build(pattern, bindings) {\n var bufsize = size_of(pattern, bindings);\n var buf = Buffer.alloc(bufsize);\n write(buf, 0, pattern, bindings);\n return buf;\n}\n\n// In bytes\nfunction size_of_segment(segment, bindings) {\n // size refers to a variable\n if (typeof segment.size === 'string') {\n return (bindings[segment.size] * segment.unit) / 8;\n }\n if (segment.type === 'string') {\n return Buffer.byteLength(segment.value, 'utf8');\n }\n if (segment.type === 'binary' && segment.size === true) {\n var val = bindings[segment.name];\n return val.length;\n }\n return (segment.size * segment.unit) / 8;\n}\n\n// size of the to-be-constructed binary, in bytes\nfunction size_of(segments, bindings) {\n var size = 0;\n for (var i=0, len = segments.length; i < len; i++) {\n size += size_of_segment(segments[i], bindings);\n }\n return size;\n}\n\nfunction writeBinary(segment, buf, offset, bindings) {\n var bin = bindings[segment.name];\n var size = size_of_segment(segment, bindings);\n bin.copy(buf, offset, 0, size);\n return size;\n}\n\n// TODO in ff might use the noAssert argument to Buffer.write*() but\n// need to check that it does the right thing wrt little-endian\n\nfunction writeInteger(segment, buf, offset, bindings) {\n var value = (segment.name) ? bindings[segment.name] : segment.value;\n var size = size_of_segment(segment, bindings);\n return write_int(buf, value, offset, size, segment.bigendian);\n}\n\nfunction write_int(buf, value, offset, size, bigendian) {\n switch (size) {\n case 1:\n buf.writeUInt8(value, offset);\n break;\n case 2:\n (bigendian) ?\n buf.writeUInt16BE(value, offset) :\n buf.writeUInt16LE(value, offset);\n break;\n case 4:\n (bigendian) ?\n buf.writeUInt32BE(value, offset) :\n buf.writeUInt32LE(value, offset);\n break;\n case 8:\n (bigendian) ?\n ints.writeUInt64BE(buf, value, offset) :\n ints.writeUInt64LE(buf, value, offset);\n break;\n default:\n throw new Error(\"integer size * unit must be 8, 16, 32 or 64\");\n }\n return size;\n}\n\nfunction writeFloat(segment, buf, offset, bindings) {\n var value = (segment.name) ? bindings[segment.name] : segment.value;\n var size = size_of_segment(segment, bindings);\n return write_float(buf, value, offset, size, segment.bigendian);\n}\n\nfunction write_float(buf, value, offset, size, bigendian) {\n if (size === 4) {\n (bigendian) ?\n buf.writeFloatBE(value, offset) :\n buf.writeFloatLE(value, offset);\n }\n else if (size === 8) {\n (bigendian) ?\n buf.writeDoubleBE(value, offset) :\n buf.writeDoubleLE(value, offset);\n }\n else {\n throw new Error(\"float size * unit must be 32 or 64\");\n }\n return size;\n}\n\nvar parse = require('./parse').parse;\n\nmodule.exports.write = write;\nmodule.exports.build = build;\nmodule.exports.write_int = write_int;\nmodule.exports.write_float = write_float;\n\nmodule.exports.builder = function(pstr) {\n pstr = (arguments.length > 1) ? [].join.call(arguments, ',') : pstr;\n var pattern = parse(pstr);\n return function(vars) {\n return build(pattern, vars);\n };\n};\n","// -*- js-indent: 2 -*-\n// Interpreter for bit syntax AST.\n// Grammar:\n//\n// pattern := segment (\",\" segment)*\n// segment := (value | var) (\":\" size)? (\"/\" specifier (\"-\" specifier)*)? | string\n// var := \"_\" | identifier\n// size := integer | var\n// specifier := \"little\" | \"big\" | \"signed\" | \"unsigned\" | \"unit\" \":\" 0..256 | type\n// type := \"integer\" | \"binary\" | \"float\"\n//\n// where integer has the obvious meaning, and identifier is anything\n// other than \"_\" that fits the JavaScript identifier specification.\n//\n\n// We'll use an object to represent each segment, and an array of\n// segments for a pattern. We won't try to optimise for groups of\n// patterns; we'll just step through each to see if it works. We rely\n// a hypothetical prior step to check that it's a valid pattern.\n\n// ? compile to intermediate instructions ?\n\n// A segment looks like\n// {\n// type: string, // 'string' is special case\n// size: integer | true, // true means 'all remaining'\n// name: string | null, // (may be '_')\n// value: value | null, // either name OR value\n// unit: integer,\n// signed: boolean,\n// bigendian: boolean\n// }\n\n'use strict';\n\nvar ints = require('buffer-more-ints'),\n debug = require('debug')('bitsyntax-Interpreter');\n\nfunction parse_int(bin, off, sizeInBytes, bigendian, signed) {\n switch (sizeInBytes) {\n case 1:\n return (signed) ? bin.readInt8(off) : bin.readUInt8(off);\n case 2:\n return (bigendian) ?\n (signed) ? bin.readInt16BE(off) : bin.readUInt16BE(off) :\n (signed) ? bin.readInt16LE(off) : bin.readUInt16LE(off);\n case 4:\n return (bigendian) ?\n (signed) ? bin.readInt32BE(off) : bin.readUInt32BE(off) :\n (signed) ? bin.readInt32LE(off) : bin.readUInt32LE(off);\n case 8:\n return (bigendian) ?\n ((signed) ? ints.readInt64BE : ints.readUInt64BE)(bin, off) :\n ((signed) ? ints.readInt64LE : ints.readUInt64LE)(bin, off);\n default:\n throw \"Integers must be 8-, 16-, 32- or 64-bit\";\n }\n}\n\nfunction parse_float(bin, off, sizeInBytes, bigendian) {\n switch (sizeInBytes) {\n case 4:\n return (bigendian) ? bin.readFloatBE(off) : bin.readFloatLE(off);\n case 8:\n return (bigendian) ? bin.readDoubleBE(off) : bin.readDoubleLE(off);\n default:\n throw \"Floats must be 32- or 64-bit\";\n }\n}\n\nfunction size_of(segment, bound) {\n var size = segment.size;\n if (typeof size === 'string') {\n return bound[size];\n }\n else {\n return size;\n }\n}\n\nfunction new_scope(env) {\n function scope() {};\n scope.prototype = env;\n return new scope();\n}\n\nfunction bindings(scope) {\n var s = {};\n for (var k in scope) {\n if (scope.hasOwnProperty(k)) {\n s[k] = scope[k];\n }\n }\n return s;\n}\n\nfunction match(pattern, binary, boundvars) {\n var offset = 0, vars = new_scope(boundvars);\n var binsize = binary.length * 8;\n\n function skip_bits(segment) {\n debug(\"skip bits\"); debug(segment);\n var size = size_of(segment, vars);\n if (size === true) {\n if (offset % 8 === 0) {\n offset = binsize;\n return true;\n }\n else {\n return false;\n }\n }\n\n var bits = segment.unit * size;\n if (offset + bits > binsize) {\n return false;\n }\n else {\n offset += bits;\n }\n }\n\n function get_integer(segment) {\n debug(\"get_integer\"); debug(segment);\n // let's do only multiples of eight bits for now\n var unit = segment.unit, size = size_of(segment, vars);\n var bitsize = size * unit;\n var byteoffset = offset / 8; // NB assumes aligned\n offset += bitsize;\n if (bitsize % 8 > 0 || (offset > binsize)) {\n return false;\n }\n else {\n return parse_int(binary, byteoffset, bitsize / 8,\n segment.bigendian, segment.signed);\n }\n }\n\n function get_float(segment) {\n debug(\"get_float\"); debug(segment);\n var unit = segment.unit; var size = size_of(segment, vars);\n var bitsize = size * unit;\n var byteoffset = offset / 8; // assume aligned\n offset += bitsize;\n if (offset > binsize) {\n return false;\n }\n else {\n return parse_float(binary, byteoffset,\n bitsize / 8, segment.bigendian);\n }\n }\n\n function get_binary(segment) {\n debug(\"get_binary\"); debug(segment);\n var unit = segment.unit, size = size_of(segment, vars);\n var byteoffset = offset / 8; // NB alignment\n\n if (size === true) {\n offset = binsize;\n return binary.slice(byteoffset);\n }\n else {\n var bitsize = size * unit;\n if (bitsize % 8 > 0 || (offset + bitsize) > binsize) {\n return false;\n }\n else {\n offset += bitsize;\n return binary.slice(byteoffset, byteoffset + bitsize / 8);\n }\n }\n }\n\n function get_string(segment) {\n debug(\"get_string\"); debug(segment);\n var len = segment.value.length;\n var byteoffset = offset / 8;\n\n offset += len * 8;\n if (offset > binsize) {\n return false;\n }\n // FIXME bytes vs UTF8 characters\n return binary.slice(byteoffset, byteoffset + len).toString('utf8');\n }\n\n var patternlen = pattern.length;\n for (var i = 0; i < patternlen; i++) {\n var segment = pattern[i];\n var result = false;\n if (segment.name === '_') {\n result = skip_bits(segment);\n }\n else {\n switch (segment.type) {\n case 'string':\n result = get_string(segment);\n break;\n case 'integer':\n result = get_integer(segment);\n break;\n case 'float':\n result = get_float(segment);\n break;\n case 'binary':\n result = get_binary(segment);\n break;\n }\n\n if (result === false) {\n return false;\n }\n else if (segment.name) {\n vars[segment.name] = result;\n }\n else if (segment.value != result) {\n return false;\n }\n }\n }\n if (offset == binsize) {\n return bindings(vars);\n }\n else {\n return false;\n }\n}\n\nmodule.exports.match = match;\nmodule.exports.parse_int = parse_int;\nmodule.exports.parse_float = parse_float;\n","// Parse patterns in string form into the form we use for interpreting\n// (and later, for compiling).\n\n'use strict';\n\nvar ast = require('./pattern');\nvar parser = require('./parser');\n\nfunction parse_pattern(string) {\n var segments = parser.parse(string);\n for (var i=0, len = segments.length; i < len; i++) {\n var s = segments[i];\n if (s.string != undefined) {\n segments[i] = ast.string(s.string);\n }\n else if (s.value != undefined) {\n segments[i] = ast.value(s.value, s.size, s.specifiers);\n }\n else if (s.name != undefined) {\n segments[i] = ast.variable(s.name, s.size, s.specifiers);\n }\n else {\n throw \"Unknown segment \" + s;\n }\n }\n return segments;\n}\n\nmodule.exports.parse = function() {\n var str = [].join.call(arguments, ',');\n return parse_pattern(str);\n};\n","module.exports = (function(){\n /*\n * Generated by PEG.js 0.7.0.\n *\n * http://pegjs.majda.cz/\n */\n \n function quote(s) {\n /*\n * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a\n * string literal except for the closing quote character, backslash,\n * carriage return, line separator, paragraph separator, and line feed.\n * Any character may appear in the form of an escape sequence.\n *\n * For portability, we also escape escape all control and non-ASCII\n * characters. Note that \"\\0\" and \"\\v\" escape sequences are not used\n * because JSHint does not like the first and IE the second.\n */\n return '\"' + s\n .replace(/\\\\/g, '\\\\\\\\') // backslash\n .replace(/\"/g, '\\\\\"') // closing quote character\n .replace(/\\x08/g, '\\\\b') // backspace\n .replace(/\\t/g, '\\\\t') // horizontal tab\n .replace(/\\n/g, '\\\\n') // line feed\n .replace(/\\f/g, '\\\\f') // form feed\n .replace(/\\r/g, '\\\\r') // carriage return\n .replace(/[\\x00-\\x07\\x0B\\x0E-\\x1F\\x80-\\uFFFF]/g, escape)\n + '\"';\n }\n \n var result = {\n /*\n * Parses the input with a generated parser. If the parsing is successfull,\n * returns a value explicitly or implicitly specified by the grammar from\n * which the parser was generated (see |PEG.buildParser|). If the parsing is\n * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.\n */\n parse: function(input, startRule) {\n var parseFunctions = {\n \"start\": parse_start,\n \"segmentTail\": parse_segmentTail,\n \"segment\": parse_segment,\n \"string\": parse_string,\n \"chars\": parse_chars,\n \"char\": parse_char,\n \"hexDigit\": parse_hexDigit,\n \"identifier\": parse_identifier,\n \"number\": parse_number,\n \"size\": parse_size,\n \"specifierList\": parse_specifierList,\n \"specifierTail\": parse_specifierTail,\n \"specifier\": parse_specifier,\n \"unit\": parse_unit,\n \"ws\": parse_ws\n };\n \n if (startRule !== undefined) {\n if (parseFunctions[startRule] === undefined) {\n throw new Error(\"Invalid rule name: \" + quote(startRule) + \".\");\n }\n } else {\n startRule = \"start\";\n }\n \n var pos = 0;\n var reportFailures = 0;\n var rightmostFailuresPos = 0;\n var rightmostFailuresExpected = [];\n \n function padLeft(input, padding, length) {\n var result = input;\n \n var padLength = length - input.length;\n for (var i = 0; i < padLength; i++) {\n result = padding + result;\n }\n \n return result;\n }\n \n function escape(ch) {\n var charCode = ch.charCodeAt(0);\n var escapeChar;\n var length;\n \n if (charCode <= 0xFF) {\n escapeChar = 'x';\n length = 2;\n } else {\n escapeChar = 'u';\n length = 4;\n }\n \n return '\\\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);\n }\n \n function matchFailed(failure) {\n if (pos < rightmostFailuresPos) {\n return;\n }\n \n if (pos > rightmostFailuresPos) {\n rightmostFailuresPos = pos;\n rightmostFailuresExpected = [];\n }\n \n rightmostFailuresExpected.push(failure);\n }\n \n function parse_start() {\n var result0, result1, result2, result3;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n result0 = parse_ws();\n if (result0 !== null) {\n result1 = parse_segment();\n if (result1 !== null) {\n result2 = [];\n result3 = parse_segmentTail();\n while (result3 !== null) {\n result2.push(result3);\n result3 = parse_segmentTail();\n }\n if (result2 !== null) {\n result0 = [result0, result1, result2];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, head, tail) { tail.unshift(head); return tail; })(pos0, result0[1], result0[2]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n return result0;\n }\n \n function parse_segmentTail() {\n var result0, result1, result2, result3;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n result0 = parse_ws();\n if (result0 !== null) {\n if (input.charCodeAt(pos) === 44) {\n result1 = \",\";\n pos++;\n } else {\n result1 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\",\\\"\");\n }\n }\n if (result1 !== null) {\n result2 = parse_ws();\n if (result2 !== null) {\n result3 = parse_segment();\n if (result3 !== null) {\n result0 = [result0, result1, result2, result3];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, seg) { return seg; })(pos0, result0[3]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n return result0;\n }\n \n function parse_segment() {\n var result0, result1, result2;\n var pos0, pos1;\n \n pos0 = pos;\n result0 = parse_string();\n if (result0 !== null) {\n result0 = (function(offset, str) { return {string: str}; })(pos0, result0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n pos1 = pos;\n result0 = parse_identifier();\n if (result0 !== null) {\n result1 = parse_size();\n result1 = result1 !== null ? result1 : \"\";\n if (result1 !== null) {\n result2 = parse_specifierList();\n result2 = result2 !== null ? result2 : \"\";\n if (result2 !== null) {\n result0 = [result0, result1, result2];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, v, size, specs) { return {name: v, size: size, specifiers: specs}; })(pos0, result0[0], result0[1], result0[2]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n pos1 = pos;\n result0 = parse_number();\n if (result0 !== null) {\n result1 = parse_size();\n result1 = result1 !== null ? result1 : \"\";\n if (result1 !== null) {\n result2 = parse_specifierList();\n result2 = result2 !== null ? result2 : \"\";\n if (result2 !== null) {\n result0 = [result0, result1, result2];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, v, size, specs) { return {value: v, size: size, specifiers: specs}; })(pos0, result0[0], result0[1], result0[2]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n }\n }\n return result0;\n }\n \n function parse_string() {\n var result0, result1, result2;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n if (input.charCodeAt(pos) === 34) {\n result0 = \"\\\"\";\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\"\\\"\");\n }\n }\n if (result0 !== null) {\n if (input.charCodeAt(pos) === 34) {\n result1 = \"\\\"\";\n pos++;\n } else {\n result1 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\"\\\"\");\n }\n }\n if (result1 !== null) {\n result0 = [result0, result1];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n pos1 = pos;\n if (input.charCodeAt(pos) === 34) {\n result0 = \"\\\"\";\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\"\\\"\");\n }\n }\n if (result0 !== null) {\n result1 = parse_chars();\n if (result1 !== null) {\n if (input.charCodeAt(pos) === 34) {\n result2 = \"\\\"\";\n pos++;\n } else {\n result2 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\"\\\"\");\n }\n }\n if (result2 !== null) {\n result0 = [result0, result1, result2];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, chars) { return chars; })(pos0, result0[1]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n }\n return result0;\n }\n \n function parse_chars() {\n var result0, result1;\n var pos0;\n \n pos0 = pos;\n result1 = parse_char();\n if (result1 !== null) {\n result0 = [];\n while (result1 !== null) {\n result0.push(result1);\n result1 = parse_char();\n }\n } else {\n result0 = null;\n }\n if (result0 !== null) {\n result0 = (function(offset, chars) { return chars.join(\"\"); })(pos0, result0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n return result0;\n }\n \n function parse_char() {\n var result0, result1, result2, result3, result4;\n var pos0, pos1;\n \n if (/^[^\"\\\\\\0-\\x1F]/.test(input.charAt(pos))) {\n result0 = input.charAt(pos);\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"[^\\\"\\\\\\\\\\\\0-\\\\x1F]\");\n }\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\\\\"\") {\n result0 = \"\\\\\\\"\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\\\\\\\\"\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return '\"'; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\\\\\\") {\n result0 = \"\\\\\\\\\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\\\\\\\\\\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"\\\\\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\/\") {\n result0 = \"\\\\/\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\/\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"/\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\b\") {\n result0 = \"\\\\b\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\b\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"\\b\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\f\") {\n result0 = \"\\\\f\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\f\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"\\f\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\n\") {\n result0 = \"\\\\n\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\n\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"\\n\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\r\") {\n result0 = \"\\\\r\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\r\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"\\r\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n if (input.substr(pos, 2) === \"\\\\t\") {\n result0 = \"\\\\t\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\t\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return \"\\t\"; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n pos1 = pos;\n if (input.substr(pos, 2) === \"\\\\u\") {\n result0 = \"\\\\u\";\n pos += 2;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"\\\\\\\\u\\\"\");\n }\n }\n if (result0 !== null) {\n result1 = parse_hexDigit();\n if (result1 !== null) {\n result2 = parse_hexDigit();\n if (result2 !== null) {\n result3 = parse_hexDigit();\n if (result3 !== null) {\n result4 = parse_hexDigit();\n if (result4 !== null) {\n result0 = [result0, result1, result2, result3, result4];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, h1, h2, h3, h4) {\n return String.fromCharCode(parseInt(\"0x\" + h1 + h2 + h3 + h4));\n })(pos0, result0[1], result0[2], result0[3], result0[4]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return result0;\n }\n \n function parse_hexDigit() {\n var result0;\n \n if (/^[0-9a-fA-F]/.test(input.charAt(pos))) {\n result0 = input.charAt(pos);\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"[0-9a-fA-F]\");\n }\n }\n return result0;\n }\n \n function parse_identifier() {\n var result0, result1, result2;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n if (/^[_a-zA-Z]/.test(input.charAt(pos))) {\n result0 = input.charAt(pos);\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"[_a-zA-Z]\");\n }\n }\n if (result0 !== null) {\n result1 = [];\n if (/^[_a-zA-Z0-9]/.test(input.charAt(pos))) {\n result2 = input.charAt(pos);\n pos++;\n } else {\n result2 = null;\n if (reportFailures === 0) {\n matchFailed(\"[_a-zA-Z0-9]\");\n }\n }\n while (result2 !== null) {\n result1.push(result2);\n if (/^[_a-zA-Z0-9]/.test(input.charAt(pos))) {\n result2 = input.charAt(pos);\n pos++;\n } else {\n result2 = null;\n if (reportFailures === 0) {\n matchFailed(\"[_a-zA-Z0-9]\");\n }\n }\n }\n if (result1 !== null) {\n result0 = [result0, result1];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, head, tail) { return head + tail.join(''); })(pos0, result0[0], result0[1]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n return result0;\n }\n \n function parse_number() {\n var result0, result1, result2;\n var pos0, pos1;\n \n pos0 = pos;\n if (input.charCodeAt(pos) === 48) {\n result0 = \"0\";\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"0\\\"\");\n }\n }\n if (result0 !== null) {\n result0 = (function(offset) { return 0; })(pos0);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n pos1 = pos;\n if (/^[1-9]/.test(input.charAt(pos))) {\n result0 = input.charAt(pos);\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"[1-9]\");\n }\n }\n if (result0 !== null) {\n result1 = [];\n if (/^[0-9]/.test(input.charAt(pos))) {\n result2 = input.charAt(pos);\n pos++;\n } else {\n result2 = null;\n if (reportFailures === 0) {\n matchFailed(\"[0-9]\");\n }\n }\n while (result2 !== null) {\n result1.push(result2);\n if (/^[0-9]/.test(input.charAt(pos))) {\n result2 = input.charAt(pos);\n pos++;\n } else {\n result2 = null;\n if (reportFailures === 0) {\n matchFailed(\"[0-9]\");\n }\n }\n }\n if (result1 !== null) {\n result0 = [result0, result1];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, head, tail) { return parseInt(head + tail.join('')); })(pos0, result0[0], result0[1]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n }\n return result0;\n }\n \n function parse_size() {\n var result0, result1;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n if (input.charCodeAt(pos) === 58) {\n result0 = \":\";\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\":\\\"\");\n }\n }\n if (result0 !== null) {\n result1 = parse_number();\n if (result1 !== null) {\n result0 = [result0, result1];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, num) { return num; })(pos0, result0[1]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n if (result0 === null) {\n pos0 = pos;\n pos1 = pos;\n if (input.charCodeAt(pos) === 58) {\n result0 = \":\";\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\":\\\"\");\n }\n }\n if (result0 !== null) {\n result1 = parse_identifier();\n if (result1 !== null) {\n result0 = [result0, result1];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, id) { return id; })(pos0, result0[1]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n }\n return result0;\n }\n \n function parse_specifierList() {\n var result0, result1, result2, result3;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n if (input.charCodeAt(pos) === 47) {\n result0 = \"/\";\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"/\\\"\");\n }\n }\n if (result0 !== null) {\n result1 = parse_specifier();\n if (result1 !== null) {\n result2 = [];\n result3 = parse_specifierTail();\n while (result3 !== null) {\n result2.push(result3);\n result3 = parse_specifierTail();\n }\n if (result2 !== null) {\n result0 = [result0, result1, result2];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, head, tail) { tail.unshift(head); return tail; })(pos0, result0[1], result0[2]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n return result0;\n }\n \n function parse_specifierTail() {\n var result0, result1;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n if (input.charCodeAt(pos) === 45) {\n result0 = \"-\";\n pos++;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"-\\\"\");\n }\n }\n if (result0 !== null) {\n result1 = parse_specifier();\n if (result1 !== null) {\n result0 = [result0, result1];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, spec) { return spec; })(pos0, result0[1]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n return result0;\n }\n \n function parse_specifier() {\n var result0;\n \n if (input.substr(pos, 6) === \"little\") {\n result0 = \"little\";\n pos += 6;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"little\\\"\");\n }\n }\n if (result0 === null) {\n if (input.substr(pos, 3) === \"big\") {\n result0 = \"big\";\n pos += 3;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"big\\\"\");\n }\n }\n if (result0 === null) {\n if (input.substr(pos, 6) === \"signed\") {\n result0 = \"signed\";\n pos += 6;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"signed\\\"\");\n }\n }\n if (result0 === null) {\n if (input.substr(pos, 8) === \"unsigned\") {\n result0 = \"unsigned\";\n pos += 8;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"unsigned\\\"\");\n }\n }\n if (result0 === null) {\n if (input.substr(pos, 7) === \"integer\") {\n result0 = \"integer\";\n pos += 7;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"integer\\\"\");\n }\n }\n if (result0 === null) {\n if (input.substr(pos, 6) === \"binary\") {\n result0 = \"binary\";\n pos += 6;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"binary\\\"\");\n }\n }\n if (result0 === null) {\n if (input.substr(pos, 5) === \"float\") {\n result0 = \"float\";\n pos += 5;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"float\\\"\");\n }\n }\n if (result0 === null) {\n result0 = parse_unit();\n }\n }\n }\n }\n }\n }\n }\n return result0;\n }\n \n function parse_unit() {\n var result0, result1;\n var pos0, pos1;\n \n pos0 = pos;\n pos1 = pos;\n if (input.substr(pos, 5) === \"unit:\") {\n result0 = \"unit:\";\n pos += 5;\n } else {\n result0 = null;\n if (reportFailures === 0) {\n matchFailed(\"\\\"unit:\\\"\");\n }\n }\n if (result0 !== null) {\n result1 = parse_number();\n if (result1 !== null) {\n result0 = [result0, result1];\n } else {\n result0 = null;\n pos = pos1;\n }\n } else {\n result0 = null;\n pos = pos1;\n }\n if (result0 !== null) {\n result0 = (function(offset, num) { return 'unit:' + num; })(pos0, result0[1]);\n }\n if (result0 === null) {\n pos = pos0;\n }\n return result0;\n }\n \n function parse_ws() {\n var result0, result1;\n \n result0 = [];\n if (/^[ \\t\\n]/.test(input.charAt(pos))) {\n result1 = input.charAt(pos);\n pos++;\n } else {\n result1 = null;\n if (reportFailures === 0) {\n matchFailed(\"[ \\\\t\\\\n]\");\n }\n }\n while (result1 !== null) {\n result0.push(result1);\n if (/^[ \\t\\n]/.test(input.charAt(pos))) {\n result1 = input.charAt(pos);\n pos++;\n } else {\n result1 = null;\n if (reportFailures === 0) {\n matchFailed(\"[ \\\\t\\\\n]\");\n }\n }\n }\n return result0;\n }\n \n \n function cleanupExpected(expected) {\n expected.sort();\n \n var lastExpected = null;\n var cleanExpected = [];\n for (var i = 0; i < expected.length; i++) {\n if (expected[i] !== lastExpected) {\n cleanExpected.push(expected[i]);\n lastExpected = expected[i];\n }\n }\n return cleanExpected;\n }\n \n function computeErrorPosition() {\n /*\n * The first idea was to use |String.split| to break the input up to the\n * error position along newlines and derive the line and column from\n * there. However IE's |split| implementation is so broken that it was\n * enough to prevent it.\n */\n \n var line = 1;\n var column = 1;\n var seenCR = false;\n \n for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) {\n var ch = input.charAt(i);\n if (ch === \"\\n\") {\n if (!seenCR) { line++; }\n column = 1;\n seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n line++;\n column = 1;\n seenCR = true;\n } else {\n column++;\n seenCR = false;\n }\n }\n \n return { line: line, column: column };\n }\n \n \n var result = parseFunctions[startRule]();\n \n /*\n * The parser is now in one of the following three states:\n *\n * 1. The parser successfully parsed the whole input.\n *\n * - |result !== null|\n * - |pos === input.length|\n * - |rightmostFailuresExpected| may or may not contain something\n *\n * 2. The parser successfully parsed only a part of the input.\n *\n * - |result !== null|\n * - |pos < input.length|\n * - |rightmostFailuresExpected| may or may not contain something\n *\n * 3. The parser did not successfully parse any part of the input.\n *\n * - |result === null|\n * - |pos === 0|\n * - |rightmostFailuresExpected| contains at least one failure\n *\n * All code following this comment (including called functions) must\n * handle these states.\n */\n if (result === null || pos !== input.length) {\n var offset = Math.max(pos, rightmostFailuresPos);\n var found = offset < input.length ? input.charAt(offset) : null;\n var errorPosition = computeErrorPosition();\n \n throw new this.SyntaxError(\n cleanupExpected(rightmostFailuresExpected),\n found,\n offset,\n errorPosition.line,\n errorPosition.column\n );\n }\n \n return result;\n },\n \n /* Returns the parser source code. */\n toSource: function() { return this._source; }\n };\n \n /* Thrown when a parser encounters a syntax error. */\n \n result.SyntaxError = function(expected, found, offset, line, column) {\n function buildMessage(expected, found) {\n var expectedHumanized, foundHumanized;\n \n switch (expected.length) {\n case 0:\n expectedHumanized = \"end of input\";\n break;\n case 1:\n expectedHumanized = expected[0];\n break;\n default:\n expectedHumanized = expected.slice(0, expected.length - 1).join(\", \")\n + \" or \"\n + expected[expected.length - 1];\n }\n \n foundHumanized = found ? quote(found) : \"end of input\";\n \n return \"Expected \" + expectedHumanized + \" but \" + foundHumanized + \" found.\";\n }\n \n this.name = \"SyntaxError\";\n this.expected = expected;\n this.found = found;\n this.message = buildMessage(expected, found);\n this.offset = offset;\n this.line = line;\n this.column = column;\n };\n \n result.SyntaxError.prototype = Error.prototype;\n \n return result;\n})();\n","// -*- js-indent-level: 2 -*-\n// Constructing patterns\n\n'use strict';\n\nfunction set(values) {\n var s = {};\n for (var i in values) {\n s[values[i]] = 1;\n }\n return s;\n}\n\n// Construct a segment bound to a variable, e.g., from a segment like\n// \"Len:32/unsigned-big\". `specifiers0` is an array.\nfunction variable(name, size, specifiers0) {\n var specifiers = set(specifiers0);\n var segment = {name: name};\n segment.type = type_in(specifiers);\n specs(segment, segment.type, specifiers);\n segment.size = size_of(segment, segment.type, size, segment.unit);\n return segment;\n}\n\nmodule.exports.variable = variable;\nmodule.exports.rest = function() {\n return variable('_', true, ['binary']);\n}\n\n// Construct a segment with a literal value, e.g., from a segment like\n// \"206\". `specifiers0` is an array.\n\nfunction value(val, size, specifiers0) {\n var specifiers = set(specifiers0);\n var segment = {value: val};\n segment.type = type_in(specifiers);\n // TODO check type v. value ..\n specs(segment, segment.type, specifiers);\n segment.size = size_of(segment, segment.type, size, segment.unit);\n return segment;\n}\n\nmodule.exports.value = value;\n\n// A string can appear as a literal, but it must appear without\n// specifiers.\nfunction string(val) {\n return {value: val, type: 'string'};\n}\nmodule.exports.string = string;\n\nvar TYPES = {'integer': 1, 'binary': 1, 'float': 1};\nfunction type_in(specifiers) {\n for (var t in specifiers) {\n if (TYPES[t]) { return t; }\n }\n return 'integer';\n}\n\nfunction specs(segment, type, specifiers) {\n switch (type) {\n case 'integer':\n segment.signed = signed_in(specifiers);\n // fall through\n case 'float':\n segment.bigendian = endian_in(specifiers);\n // fall through\n default:\n segment.unit = unit_in(specifiers, segment.type);\n }\n return segment;\n}\n\nfunction endian_in(specifiers) {\n // default is big, but I have chosen true = bigendian\n return !specifiers['little'];\n}\n\nfunction signed_in(specifiers) {\n // this time I got it right; default is unsigned\n return specifiers['signed'];\n}\n\nfunction unit_in(specifiers, type) {\n for (var s in specifiers) {\n if (s.substr(0, 5) == 'unit:') {\n var unit = parseInt(s.substr(5));\n // TODO check sane for type\n return unit;\n }\n }\n // OK defaults then\n switch (type) {\n case 'binary':\n return 8;\n case 'integer':\n case 'float':\n return 1;\n }\n}\n\nfunction size_of(segment, type, size, unit) {\n if (size !== undefined && size !== '') {\n return size;\n }\n else {\n switch (type) {\n case 'integer':\n return 8;\n case 'float':\n return 64;\n case 'binary':\n return true;\n }\n }\n}\n","/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2018 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n/**\n * bluebird build version 3.7.2\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o 0) {\n _drainQueueStep(queue);\n }\n}\n\nfunction _drainQueueStep(queue) {\n var fn = queue.shift();\n if (typeof fn !== \"function\") {\n fn._settlePromises();\n } else {\n var receiver = queue.shift();\n var arg = queue.shift();\n fn.call(receiver, arg);\n }\n}\n\nAsync.prototype._drainQueues = function () {\n _drainQueue(this._normalQueue);\n this._reset();\n this._haveDrainedQueues = true;\n _drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n if (!this._isTickUsed) {\n this._isTickUsed = true;\n this._schedule(this.drainQueues);\n }\n};\n\nAsync.prototype._reset = function () {\n this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue\":26,\"./schedule\":29}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n context.promiseRejectionQueued = true;\n context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n if (((this._bitField & 50397184) === 0)) {\n this._resolveCallback(context.target);\n }\n};\n\nvar bindingRejected = function(e, context) {\n if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n if (!calledBind) {\n calledBind = true;\n Promise.prototype._propagateFrom = debug.propagateFromFunction();\n Promise.prototype._boundValue = debug.boundValueFunction();\n }\n var maybePromise = tryConvertToPromise(thisArg);\n var ret = new Promise(INTERNAL);\n ret._propagateFrom(this, 1);\n var target = this._target();\n ret._setBoundTo(maybePromise);\n if (maybePromise instanceof Promise) {\n var context = {\n promiseRejectionQueued: false,\n promise: ret,\n target: target,\n bindingPromise: maybePromise\n };\n target._then(INTERNAL, targetRejected, undefined, ret, context);\n maybePromise._then(\n bindingResolved, bindingRejected, undefined, ret, context);\n ret._setOnCancel(maybePromise);\n } else {\n ret._resolveCallback(target);\n }\n return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n if (obj !== undefined) {\n this._bitField = this._bitField | 2097152;\n this._boundTo = obj;\n } else {\n this._bitField = this._bitField & (~2097152);\n }\n};\n\nPromise.prototype._isBound = function () {\n return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n return Promise.resolve(value).bind(thisArg);\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n try { if (Promise === bluebird) Promise = old; }\n catch (e) {}\n return bluebird;\n}\nvar bluebird = _dereq_(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise\":22}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n var callerCache = cr(null);\n var getterCache = cr(null);\n callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!true) {\nvar makeMethodCaller = function (methodName) {\n return new Function(\"ensureMethod\", \" \\n\\\n return function(obj) { \\n\\\n 'use strict' \\n\\\n var len = this.length; \\n\\\n ensureMethod(obj, 'methodName'); \\n\\\n switch(len) { \\n\\\n case 1: return obj.methodName(this[0]); \\n\\\n case 2: return obj.methodName(this[0], this[1]); \\n\\\n case 3: return obj.methodName(this[0], this[1], this[2]); \\n\\\n case 0: return obj.methodName(); \\n\\\n default: \\n\\\n return obj.methodName.apply(obj, this); \\n\\\n } \\n\\\n }; \\n\\\n \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n return new Function(\"obj\", \" \\n\\\n 'use strict'; \\n\\\n return obj.propertyName; \\n\\\n \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n var ret = cache[name];\n if (typeof ret !== \"function\") {\n if (!isIdentifier(name)) {\n return null;\n }\n ret = compiler(name);\n cache[name] = ret;\n cache[\" size\"]++;\n if (cache[\" size\"] > 512) {\n var keys = Object.keys(cache);\n for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n cache[\" size\"] = keys.length - 256;\n }\n }\n return ret;\n};\n\ngetMethodCaller = function(name) {\n return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n var fn;\n if (obj != null) fn = obj[methodName];\n if (typeof fn !== \"function\") {\n var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n util.toString(methodName) + \"'\";\n throw new Promise.TypeError(message);\n }\n return fn;\n}\n\nfunction caller(obj) {\n var methodName = this.pop();\n var fn = ensureMethod(obj, methodName);\n return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n var args = [].slice.call(arguments, 1);;\n if (!true) {\n if (canEvaluate) {\n var maybeCaller = getMethodCaller(methodName);\n if (maybeCaller !== null) {\n return this._then(\n maybeCaller, undefined, undefined, args, undefined);\n }\n }\n }\n args.push(methodName);\n return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n return obj[this];\n}\nfunction indexedGetter(obj) {\n var index = +this;\n if (index < 0) index = Math.max(0, index + obj.length);\n return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n var isIndex = (typeof propertyName === \"number\");\n var getter;\n if (!isIndex) {\n if (canEvaluate) {\n var maybeGetter = getGetter(propertyName);\n getter = maybeGetter !== null ? maybeGetter : namedGetter;\n } else {\n getter = namedGetter;\n }\n } else {\n getter = indexedGetter;\n }\n return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util\":36}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n var promise = this;\n var child = promise;\n while (promise._isCancellable()) {\n if (!promise._cancelBy(child)) {\n if (child._isFollowing()) {\n child._followee().cancel();\n } else {\n child._cancelBranched();\n }\n break;\n }\n\n var parent = promise._cancellationParent;\n if (parent == null || !parent._isCancellable()) {\n if (promise._isFollowing()) {\n promise._followee().cancel();\n } else {\n promise._cancelBranched();\n }\n break;\n } else {\n if (promise._isFollowing()) promise._followee().cancel();\n promise._setWillBeCancelled();\n child = promise;\n promise = parent;\n }\n }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n return this._branchesRemainingToCancel === undefined ||\n this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n if (canceller === this) {\n this._branchesRemainingToCancel = 0;\n this._invokeOnCancel();\n return true;\n } else {\n this._branchHasCancelled();\n if (this._enoughBranchesHaveCancelled()) {\n this._invokeOnCancel();\n return true;\n }\n }\n return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n if (this._enoughBranchesHaveCancelled()) {\n this._cancel();\n }\n};\n\nPromise.prototype._cancel = function() {\n if (!this._isCancellable()) return;\n this._setCancelled();\n async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n if (util.isArray(onCancelCallback)) {\n for (var i = 0; i < onCancelCallback.length; ++i) {\n this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n }\n } else if (onCancelCallback !== undefined) {\n if (typeof onCancelCallback === \"function\") {\n if (!internalOnly) {\n var e = tryCatch(onCancelCallback).call(this._boundValue());\n if (e === errorObj) {\n this._attachExtraTrace(e.e);\n async.throwLater(e.e);\n }\n }\n } else {\n onCancelCallback._resultCancelled(this);\n }\n }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n var onCancelCallback = this._onCancel();\n this._unsetOnCancel();\n async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n if (this._isCancellable()) {\n this._doInvokeOnCancel(this._onCancel(), true);\n this._unsetOnCancel();\n }\n};\n\nPromise.prototype._resultCancelled = function() {\n this.cancel();\n};\n\n};\n\n},{\"./util\":36}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar getKeys = _dereq_(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n return function(e) {\n var boundTo = promise._boundValue();\n predicateLoop: for (var i = 0; i < instances.length; ++i) {\n var item = instances[i];\n\n if (item === Error ||\n (item != null && item.prototype instanceof Error)) {\n if (e instanceof item) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (typeof item === \"function\") {\n var matchesPredicate = tryCatch(item).call(boundTo, e);\n if (matchesPredicate === errorObj) {\n return matchesPredicate;\n } else if (matchesPredicate) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (util.isObject(e)) {\n var keys = getKeys(item);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n if (item[key] != e[key]) {\n continue predicateLoop;\n }\n }\n return tryCatch(cb).call(boundTo, e);\n }\n }\n return NEXT_FILTER;\n };\n}\n\nreturn catchFilter;\n};\n\n},{\"./es5\":13,\"./util\":36}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n if (this._trace !== undefined) {\n this._trace._promiseCreated = null;\n contextStack.push(this._trace);\n }\n};\n\nContext.prototype._popContext = function () {\n if (this._trace !== undefined) {\n var trace = contextStack.pop();\n var ret = trace._promiseCreated;\n trace._promiseCreated = null;\n return ret;\n }\n return null;\n};\n\nfunction createContext() {\n if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n var lastIndex = contextStack.length - 1;\n if (lastIndex >= 0) {\n return contextStack[lastIndex];\n }\n return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n var Promise_pushContext = Promise.prototype._pushContext;\n var Promise_popContext = Promise.prototype._popContext;\n var Promise_PeekContext = Promise._peekContext;\n var Promise_peekContext = Promise.prototype._peekContext;\n var Promise_promiseCreated = Promise.prototype._promiseCreated;\n Context.deactivateLongStackTraces = function() {\n Promise.prototype._pushContext = Promise_pushContext;\n Promise.prototype._popContext = Promise_popContext;\n Promise._peekContext = Promise_PeekContext;\n Promise.prototype._peekContext = Promise_peekContext;\n Promise.prototype._promiseCreated = Promise_promiseCreated;\n longStackTraces = false;\n };\n longStackTraces = true;\n Promise.prototype._pushContext = Context.prototype._pushContext;\n Promise.prototype._popContext = Context.prototype._popContext;\n Promise._peekContext = Promise.prototype._peekContext = peekContext;\n Promise.prototype._promiseCreated = function() {\n var ctx = this._peekContext();\n if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n };\n};\nreturn Context;\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, Context,\n enableAsyncHooks, disableAsyncHooks) {\nvar async = Promise._async;\nvar Warning = _dereq_(\"./errors\").Warning;\nvar util = _dereq_(\"./util\");\nvar es5 = _dereq_(\"./es5\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n (true ||\n util.env(\"BLUEBIRD_DEBUG\") ||\n util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nvar deferUnhandledRejectionCheck;\n(function() {\n var promises = [];\n\n function unhandledRejectionCheck() {\n for (var i = 0; i < promises.length; ++i) {\n promises[i]._notifyUnhandledRejection();\n }\n unhandledRejectionClear();\n }\n\n function unhandledRejectionClear() {\n promises.length = 0;\n }\n\n deferUnhandledRejectionCheck = function(promise) {\n promises.push(promise);\n setTimeout(unhandledRejectionCheck, 1);\n };\n\n es5.defineProperty(Promise, \"_unhandledRejectionCheck\", {\n value: unhandledRejectionCheck\n });\n es5.defineProperty(Promise, \"_unhandledRejectionClear\", {\n value: unhandledRejectionClear\n });\n})();\n\nPromise.prototype.suppressUnhandledRejections = function() {\n var target = this._target();\n target._bitField = ((target._bitField & (~1048576)) |\n 524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n if ((this._bitField & 524288) !== 0) return;\n this._setRejectionIsUnhandled();\n deferUnhandledRejectionCheck(this);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n fireRejectionEvent(\"rejectionHandled\",\n unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n if (this._isRejectionUnhandled()) {\n var reason = this._settledValue();\n this._setUnhandledRejectionIsNotified();\n fireRejectionEvent(\"unhandledRejection\",\n possiblyUnhandledRejection, reason, this);\n }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n this._bitField = this._bitField & (~1048576);\n if (this._isUnhandledRejectionNotified()) {\n this._unsetUnhandledRejectionIsNotified();\n this._notifyUnhandledRejectionIsHandled();\n }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n var context = Promise._getContext();\n possiblyUnhandledRejection = util.contextBind(context, fn);\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n var context = Promise._getContext();\n unhandledRejectionHandled = util.contextBind(context, fn);\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (!config.longStackTraces && longStackTracesIsSupported()) {\n var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n config.longStackTraces = true;\n disableLongStackTraces = function() {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n Context.deactivateLongStackTraces();\n config.longStackTraces = false;\n };\n Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n Context.activateLongStackTraces();\n }\n};\n\nPromise.hasLongStackTraces = function () {\n return config.longStackTraces && longStackTracesIsSupported();\n};\n\n\nvar legacyHandlers = {\n unhandledrejection: {\n before: function() {\n var ret = util.global.onunhandledrejection;\n util.global.onunhandledrejection = null;\n return ret;\n },\n after: function(fn) {\n util.global.onunhandledrejection = fn;\n }\n },\n rejectionhandled: {\n before: function() {\n var ret = util.global.onrejectionhandled;\n util.global.onrejectionhandled = null;\n return ret;\n },\n after: function(fn) {\n util.global.onrejectionhandled = fn;\n }\n }\n};\n\nvar fireDomEvent = (function() {\n var dispatch = function(legacy, e) {\n if (legacy) {\n var fn;\n try {\n fn = legacy.before();\n return !util.global.dispatchEvent(e);\n } finally {\n legacy.after(fn);\n }\n } else {\n return !util.global.dispatchEvent(e);\n }\n };\n try {\n if (typeof CustomEvent === \"function\") {\n var event = new CustomEvent(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var eventData = {\n detail: event,\n cancelable: true\n };\n var domEvent = new CustomEvent(name, eventData);\n es5.defineProperty(\n domEvent, \"promise\", {value: event.promise});\n es5.defineProperty(\n domEvent, \"reason\", {value: event.reason});\n\n return dispatch(legacyHandlers[name], domEvent);\n };\n } else if (typeof Event === \"function\") {\n var event = new Event(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var domEvent = new Event(name, {\n cancelable: true\n });\n domEvent.detail = event;\n es5.defineProperty(domEvent, \"promise\", {value: event.promise});\n es5.defineProperty(domEvent, \"reason\", {value: event.reason});\n return dispatch(legacyHandlers[name], domEvent);\n };\n } else {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"testingtheevent\", false, true, {});\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var domEvent = document.createEvent(\"CustomEvent\");\n domEvent.initCustomEvent(name, false, true,\n event);\n return dispatch(legacyHandlers[name], domEvent);\n };\n }\n } catch (e) {}\n return function() {\n return false;\n };\n})();\n\nvar fireGlobalEvent = (function() {\n if (util.isNode) {\n return function() {\n return process.emit.apply(process, arguments);\n };\n } else {\n if (!util.global) {\n return function() {\n return false;\n };\n }\n return function(name) {\n var methodName = \"on\" + name.toLowerCase();\n var method = util.global[methodName];\n if (!method) return false;\n method.apply(util.global, [].slice.call(arguments, 1));\n return true;\n };\n }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n promiseCreated: generatePromiseLifecycleEventObject,\n promiseFulfilled: generatePromiseLifecycleEventObject,\n promiseRejected: generatePromiseLifecycleEventObject,\n promiseResolved: generatePromiseLifecycleEventObject,\n promiseCancelled: generatePromiseLifecycleEventObject,\n promiseChained: function(name, promise, child) {\n return {promise: promise, child: child};\n },\n warning: function(name, warning) {\n return {warning: warning};\n },\n unhandledRejection: function (name, reason, promise) {\n return {reason: reason, promise: promise};\n },\n rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n var globalEventFired = false;\n try {\n globalEventFired = fireGlobalEvent.apply(null, arguments);\n } catch (e) {\n async.throwLater(e);\n globalEventFired = true;\n }\n\n var domEventFired = false;\n try {\n domEventFired = fireDomEvent(name,\n eventToObjectGenerator[name].apply(null, arguments));\n } catch (e) {\n async.throwLater(e);\n domEventFired = true;\n }\n\n return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n opts = Object(opts);\n if (\"longStackTraces\" in opts) {\n if (opts.longStackTraces) {\n Promise.longStackTraces();\n } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n disableLongStackTraces();\n }\n }\n if (\"warnings\" in opts) {\n var warningsOption = opts.warnings;\n config.warnings = !!warningsOption;\n wForgottenReturn = config.warnings;\n\n if (util.isObject(warningsOption)) {\n if (\"wForgottenReturn\" in warningsOption) {\n wForgottenReturn = !!warningsOption.wForgottenReturn;\n }\n }\n }\n if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n if (async.haveItemsQueued()) {\n throw new Error(\n \"cannot enable cancellation after promises are in use\");\n }\n Promise.prototype._clearCancellationData =\n cancellationClearCancellationData;\n Promise.prototype._propagateFrom = cancellationPropagateFrom;\n Promise.prototype._onCancel = cancellationOnCancel;\n Promise.prototype._setOnCancel = cancellationSetOnCancel;\n Promise.prototype._attachCancellationCallback =\n cancellationAttachCancellationCallback;\n Promise.prototype._execute = cancellationExecute;\n propagateFromFunction = cancellationPropagateFrom;\n config.cancellation = true;\n }\n if (\"monitoring\" in opts) {\n if (opts.monitoring && !config.monitoring) {\n config.monitoring = true;\n Promise.prototype._fireEvent = activeFireEvent;\n } else if (!opts.monitoring && config.monitoring) {\n config.monitoring = false;\n Promise.prototype._fireEvent = defaultFireEvent;\n }\n }\n if (\"asyncHooks\" in opts && util.nodeSupportsAsyncResource) {\n var prev = config.asyncHooks;\n var cur = !!opts.asyncHooks;\n if (prev !== cur) {\n config.asyncHooks = cur;\n if (cur) {\n enableAsyncHooks();\n } else {\n disableAsyncHooks();\n }\n }\n }\n return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n try {\n executor(resolve, reject);\n } catch (e) {\n return e;\n }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._dereferenceTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n ;\n ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n var promise = this;\n try {\n executor(resolve, reject, function(onCancel) {\n if (typeof onCancel !== \"function\") {\n throw new TypeError(\"onCancel must be a function, got: \" +\n util.toString(onCancel));\n }\n promise._attachCancellationCallback(onCancel);\n });\n } catch (e) {\n return e;\n }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n if (!this._isCancellable()) return this;\n\n var previousOnCancel = this._onCancel();\n if (previousOnCancel !== undefined) {\n if (util.isArray(previousOnCancel)) {\n previousOnCancel.push(onCancel);\n } else {\n this._setOnCancel([previousOnCancel, onCancel]);\n }\n } else {\n this._setOnCancel(onCancel);\n }\n}\n\nfunction cancellationOnCancel() {\n return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n this._cancellationParent = undefined;\n this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n if ((flags & 1) !== 0) {\n this._cancellationParent = parent;\n var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n if (branchesRemainingToCancel === undefined) {\n branchesRemainingToCancel = 0;\n }\n parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n }\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n var ret = this._boundTo;\n if (ret !== undefined) {\n if (ret instanceof Promise) {\n if (ret.isFulfilled()) {\n return ret.value();\n } else {\n return undefined;\n }\n }\n }\n return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n if (canAttachTrace(error)) {\n var trace = this._trace;\n if (trace !== undefined) {\n if (ignoreSelf) trace = trace._parent;\n }\n if (trace !== undefined) {\n trace.attachExtraTrace(error);\n } else if (!error.__stackCleaned__) {\n var parsed = parseStackAndMessage(error);\n util.notEnumerableProp(error, \"stack\",\n parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n }\n }\n}\n\nfunction longStackTracesDereferenceTrace() {\n this._trace = undefined;\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n parent) {\n if (returnValue === undefined && promiseCreated !== null &&\n wForgottenReturn) {\n if (parent !== undefined && parent._returnedNonUndefined()) return;\n if ((promise._bitField & 65535) === 0) return;\n\n if (name) name = name + \" \";\n var handlerLine = \"\";\n var creatorLine = \"\";\n if (promiseCreated._trace) {\n var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n var stack = cleanStack(traceLines);\n for (var i = stack.length - 1; i >= 0; --i) {\n var line = stack[i];\n if (!nodeFramePattern.test(line)) {\n var lineMatches = line.match(parseLinePattern);\n if (lineMatches) {\n handlerLine = \"at \" + lineMatches[1] +\n \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n }\n break;\n }\n }\n\n if (stack.length > 0) {\n var firstUserLine = stack[0];\n for (var i = 0; i < traceLines.length; ++i) {\n\n if (traceLines[i] === firstUserLine) {\n if (i > 0) {\n creatorLine = \"\\n\" + traceLines[i - 1];\n }\n break;\n }\n }\n\n }\n }\n var msg = \"a promise was created in a \" + name +\n \"handler \" + handlerLine + \"but was not returned from it, \" +\n \"see http://goo.gl/rRqMUw\" +\n creatorLine;\n promise._warn(msg, true, promiseCreated);\n }\n}\n\nfunction deprecated(name, replacement) {\n var message = name +\n \" is deprecated and will be removed in a future version.\";\n if (replacement) message += \" Use \" + replacement + \" instead.\";\n return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n if (!config.warnings) return;\n var warning = new Warning(message);\n var ctx;\n if (shouldUseOwnTrace) {\n promise._attachExtraTrace(warning);\n } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n ctx.attachExtraTrace(warning);\n } else {\n var parsed = parseStackAndMessage(warning);\n warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n }\n\n if (!activeFireEvent(\"warning\", warning)) {\n formatAndLogError(warning, \"\", true);\n }\n}\n\nfunction reconstructStack(message, stacks) {\n for (var i = 0; i < stacks.length - 1; ++i) {\n stacks[i].push(\"From previous event:\");\n stacks[i] = stacks[i].join(\"\\n\");\n }\n if (i < stacks.length) {\n stacks[i] = stacks[i].join(\"\\n\");\n }\n return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n for (var i = 0; i < stacks.length; ++i) {\n if (stacks[i].length === 0 ||\n ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n stacks.splice(i, 1);\n i--;\n }\n }\n}\n\nfunction removeCommonRoots(stacks) {\n var current = stacks[0];\n for (var i = 1; i < stacks.length; ++i) {\n var prev = stacks[i];\n var currentLastIndex = current.length - 1;\n var currentLastLine = current[currentLastIndex];\n var commonRootMeetPoint = -1;\n\n for (var j = prev.length - 1; j >= 0; --j) {\n if (prev[j] === currentLastLine) {\n commonRootMeetPoint = j;\n break;\n }\n }\n\n for (var j = commonRootMeetPoint; j >= 0; --j) {\n var line = prev[j];\n if (current[currentLastIndex] === line) {\n current.pop();\n currentLastIndex--;\n } else {\n break;\n }\n }\n current = prev;\n }\n}\n\nfunction cleanStack(stack) {\n var ret = [];\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n var isTraceLine = \" (No stack trace)\" === line ||\n stackFramePattern.test(line);\n var isInternalFrame = isTraceLine && shouldIgnore(line);\n if (isTraceLine && !isInternalFrame) {\n if (indentStackFrames && line.charAt(0) !== \" \") {\n line = \" \" + line;\n }\n ret.push(line);\n }\n }\n return ret;\n}\n\nfunction stackFramesAsArray(error) {\n var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n if (\" (No stack trace)\" === line || stackFramePattern.test(line)) {\n break;\n }\n }\n if (i > 0 && error.name != \"SyntaxError\") {\n stack = stack.slice(i);\n }\n return stack;\n}\n\nfunction parseStackAndMessage(error) {\n var stack = error.stack;\n var message = error.toString();\n stack = typeof stack === \"string\" && stack.length > 0\n ? stackFramesAsArray(error) : [\" (No stack trace)\"];\n return {\n message: message,\n stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n if (typeof console !== \"undefined\") {\n var message;\n if (util.isObject(error)) {\n var stack = error.stack;\n message = title + formatStack(stack, error);\n } else {\n message = title + String(error);\n }\n if (typeof printWarning === \"function\") {\n printWarning(message, isSoft);\n } else if (typeof console.log === \"function\" ||\n typeof console.log === \"object\") {\n console.log(message);\n }\n }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n var localEventFired = false;\n try {\n if (typeof localHandler === \"function\") {\n localEventFired = true;\n if (name === \"rejectionHandled\") {\n localHandler(promise);\n } else {\n localHandler(reason, promise);\n }\n }\n } catch (e) {\n async.throwLater(e);\n }\n\n if (name === \"unhandledRejection\") {\n if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n formatAndLogError(reason, \"Unhandled rejection \");\n }\n } else {\n activeFireEvent(name, promise);\n }\n}\n\nfunction formatNonError(obj) {\n var str;\n if (typeof obj === \"function\") {\n str = \"[function \" +\n (obj.name || \"anonymous\") +\n \"]\";\n } else {\n str = obj && typeof obj.toString === \"function\"\n ? obj.toString() : util.toString(obj);\n var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n if (ruselessToString.test(str)) {\n try {\n var newStr = JSON.stringify(obj);\n str = newStr;\n }\n catch(e) {\n\n }\n }\n if (str.length === 0) {\n str = \"(empty array)\";\n }\n }\n return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n var maxChars = 41;\n if (str.length < maxChars) {\n return str;\n }\n return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n var matches = line.match(parseLineInfoRegex);\n if (matches) {\n return {\n fileName: matches[1],\n line: parseInt(matches[2], 10)\n };\n }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n if (!longStackTracesIsSupported()) return;\n var firstStackLines = (firstLineError.stack || \"\").split(\"\\n\");\n var lastStackLines = (lastLineError.stack || \"\").split(\"\\n\");\n var firstIndex = -1;\n var lastIndex = -1;\n var firstFileName;\n var lastFileName;\n for (var i = 0; i < firstStackLines.length; ++i) {\n var result = parseLineInfo(firstStackLines[i]);\n if (result) {\n firstFileName = result.fileName;\n firstIndex = result.line;\n break;\n }\n }\n for (var i = 0; i < lastStackLines.length; ++i) {\n var result = parseLineInfo(lastStackLines[i]);\n if (result) {\n lastFileName = result.fileName;\n lastIndex = result.line;\n break;\n }\n }\n if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n firstFileName !== lastFileName || firstIndex >= lastIndex) {\n return;\n }\n\n shouldIgnore = function(line) {\n if (bluebirdFramePattern.test(line)) return true;\n var info = parseLineInfo(line);\n if (info) {\n if (info.fileName === firstFileName &&\n (firstIndex <= info.line && info.line <= lastIndex)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction CapturedTrace(parent) {\n this._parent = parent;\n this._promisesCreated = 0;\n var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n captureStackTrace(this, CapturedTrace);\n if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n var length = this._length;\n if (length < 2) return;\n var nodes = [];\n var stackToIndex = {};\n\n for (var i = 0, node = this; node !== undefined; ++i) {\n nodes.push(node);\n node = node._parent;\n }\n length = this._length = i;\n for (var i = length - 1; i >= 0; --i) {\n var stack = nodes[i].stack;\n if (stackToIndex[stack] === undefined) {\n stackToIndex[stack] = i;\n }\n }\n for (var i = 0; i < length; ++i) {\n var currentStack = nodes[i].stack;\n var index = stackToIndex[currentStack];\n if (index !== undefined && index !== i) {\n if (index > 0) {\n nodes[index - 1]._parent = undefined;\n nodes[index - 1]._length = 1;\n }\n nodes[i]._parent = undefined;\n nodes[i]._length = 1;\n var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n if (index < length - 1) {\n cycleEdgeNode._parent = nodes[index + 1];\n cycleEdgeNode._parent.uncycle();\n cycleEdgeNode._length =\n cycleEdgeNode._parent._length + 1;\n } else {\n cycleEdgeNode._parent = undefined;\n cycleEdgeNode._length = 1;\n }\n var currentChildLength = cycleEdgeNode._length + 1;\n for (var j = i - 2; j >= 0; --j) {\n nodes[j]._length = currentChildLength;\n currentChildLength++;\n }\n return;\n }\n }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n if (error.__stackCleaned__) return;\n this.uncycle();\n var parsed = parseStackAndMessage(error);\n var message = parsed.message;\n var stacks = [parsed.stack];\n\n var trace = this;\n while (trace !== undefined) {\n stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n trace = trace._parent;\n }\n removeCommonRoots(stacks);\n removeDuplicateOrEmptyJumps(stacks);\n util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n var v8stackFramePattern = /^\\s*at\\s*/;\n var v8stackFormatter = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if (error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n if (typeof Error.stackTraceLimit === \"number\" &&\n typeof Error.captureStackTrace === \"function\") {\n Error.stackTraceLimit += 6;\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n var captureStackTrace = Error.captureStackTrace;\n\n shouldIgnore = function(line) {\n return bluebirdFramePattern.test(line);\n };\n return function(receiver, ignoreUntil) {\n Error.stackTraceLimit += 6;\n captureStackTrace(receiver, ignoreUntil);\n Error.stackTraceLimit -= 6;\n };\n }\n var err = new Error();\n\n if (typeof err.stack === \"string\" &&\n err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n stackFramePattern = /@/;\n formatStack = v8stackFormatter;\n indentStackFrames = true;\n return function captureStackTrace(o) {\n o.stack = new Error().stack;\n };\n }\n\n var hasStackAfterThrow;\n try { throw new Error(); }\n catch(e) {\n hasStackAfterThrow = (\"stack\" in e);\n }\n if (!(\"stack\" in err) && hasStackAfterThrow &&\n typeof Error.stackTraceLimit === \"number\") {\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n return function captureStackTrace(o) {\n Error.stackTraceLimit += 6;\n try { throw new Error(); }\n catch(e) { o.stack = e.stack; }\n Error.stackTraceLimit -= 6;\n };\n }\n\n formatStack = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if ((typeof error === \"object\" ||\n typeof error === \"function\") &&\n error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n printWarning = function (message) {\n console.warn(message);\n };\n if (util.isNode && process.stderr.isTTY) {\n printWarning = function(message, isSoft) {\n var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n console.warn(color + message + \"\\u001b[0m\\n\");\n };\n } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n printWarning = function(message, isSoft) {\n console.warn(\"%c\" + message,\n isSoft ? \"color: darkorange\" : \"color: red\");\n };\n }\n}\n\nvar config = {\n warnings: warnings,\n longStackTraces: false,\n cancellation: false,\n monitoring: false,\n asyncHooks: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n asyncHooks: function() {\n return config.asyncHooks;\n },\n longStackTraces: function() {\n return config.longStackTraces;\n },\n warnings: function() {\n return config.warnings;\n },\n cancellation: function() {\n return config.cancellation;\n },\n monitoring: function() {\n return config.monitoring;\n },\n propagateFromFunction: function() {\n return propagateFromFunction;\n },\n boundValueFunction: function() {\n return boundValueFunction;\n },\n checkForgottenReturns: checkForgottenReturns,\n setBounds: setBounds,\n warn: warn,\n deprecated: deprecated,\n CapturedTrace: CapturedTrace,\n fireDomEvent: fireDomEvent,\n fireGlobalEvent: fireGlobalEvent\n};\n};\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n return this.value;\n}\nfunction thrower() {\n throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n return this._then(\n thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n if (arguments.length <= 1) {\n return this._then(\n undefined, thrower, undefined, {reason: reason}, undefined);\n } else {\n var _reason = arguments[1];\n var handler = function() {throw _reason;};\n return this.caught(reason, handler);\n }\n};\n\nPromise.prototype.catchReturn = function (value) {\n if (arguments.length <= 1) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n undefined, returner, undefined, {value: value}, undefined);\n } else {\n var _value = arguments[1];\n if (_value instanceof Promise) _value.suppressUnhandledRejections();\n var handler = function() {return _value;};\n return this.caught(value, handler);\n }\n};\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n\n},{}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n function SubError(message) {\n if (!(this instanceof SubError)) return new SubError(message);\n notEnumerableProp(this, \"message\",\n typeof message === \"string\" ? message : defaultMessage);\n notEnumerableProp(this, \"name\", nameProperty);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n Error.call(this);\n }\n }\n inherits(SubError, Error);\n return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n _TypeError = TypeError;\n _RangeError = RangeError;\n} catch(e) {\n _TypeError = subError(\"TypeError\", \"type error\");\n _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n if (typeof Array.prototype[methods[i]] === \"function\") {\n AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n value: 0,\n configurable: false,\n writable: true,\n enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n var indent = Array(level * 4 + 1).join(\" \");\n var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n level++;\n indent = Array(level * 4 + 1).join(\" \");\n for (var i = 0; i < this.length; ++i) {\n var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n var lines = str.split(\"\\n\");\n for (var j = 0; j < lines.length; ++j) {\n lines[j] = indent + lines[j];\n }\n str = lines.join(\"\\n\");\n ret += str + \"\\n\";\n }\n level--;\n return ret;\n};\n\nfunction OperationalError(message) {\n if (!(this instanceof OperationalError))\n return new OperationalError(message);\n notEnumerableProp(this, \"name\", \"OperationalError\");\n notEnumerableProp(this, \"message\", message);\n this.cause = message;\n this[\"isOperational\"] = true;\n\n if (message instanceof Error) {\n notEnumerableProp(this, \"message\", message.message);\n notEnumerableProp(this, \"stack\", message.stack);\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n errorTypes = Objectfreeze({\n CancellationError: CancellationError,\n TimeoutError: TimeoutError,\n OperationalError: OperationalError,\n RejectionError: OperationalError,\n AggregateError: AggregateError\n });\n es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n value: errorTypes,\n writable: false,\n enumerable: false,\n configurable: false\n });\n}\n\nmodule.exports = {\n Error: Error,\n TypeError: _TypeError,\n RangeError: _RangeError,\n CancellationError: errorTypes.CancellationError,\n OperationalError: errorTypes.OperationalError,\n TimeoutError: errorTypes.TimeoutError,\n AggregateError: errorTypes.AggregateError,\n Warning: Warning\n};\n\n},{\"./es5\":13,\"./util\":36}],13:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n \"use strict\";\n return this === undefined;\n})();\n\nif (isES5) {\n module.exports = {\n freeze: Object.freeze,\n defineProperty: Object.defineProperty,\n getDescriptor: Object.getOwnPropertyDescriptor,\n keys: Object.keys,\n names: Object.getOwnPropertyNames,\n getPrototypeOf: Object.getPrototypeOf,\n isArray: Array.isArray,\n isES5: isES5,\n propertyIsWritable: function(obj, prop) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n return !!(!descriptor || descriptor.writable || descriptor.set);\n }\n };\n} else {\n var has = {}.hasOwnProperty;\n var str = {}.toString;\n var proto = {}.constructor.prototype;\n\n var ObjectKeys = function (o) {\n var ret = [];\n for (var key in o) {\n if (has.call(o, key)) {\n ret.push(key);\n }\n }\n return ret;\n };\n\n var ObjectGetDescriptor = function(o, key) {\n return {value: o[key]};\n };\n\n var ObjectDefineProperty = function (o, key, desc) {\n o[key] = desc.value;\n return o;\n };\n\n var ObjectFreeze = function (obj) {\n return obj;\n };\n\n var ObjectGetPrototypeOf = function (obj) {\n try {\n return Object(obj).constructor.prototype;\n }\n catch (e) {\n return proto;\n }\n };\n\n var ArrayIsArray = function (obj) {\n try {\n return str.call(obj) === \"[object Array]\";\n }\n catch(e) {\n return false;\n }\n };\n\n module.exports = {\n isArray: ArrayIsArray,\n keys: ObjectKeys,\n names: ObjectKeys,\n defineProperty: ObjectDefineProperty,\n getDescriptor: ObjectGetDescriptor,\n freeze: ObjectFreeze,\n getPrototypeOf: ObjectGetPrototypeOf,\n isES5: isES5,\n propertyIsWritable: function() {\n return true;\n }\n };\n}\n\n},{}],14:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n this.promise = promise;\n this.type = type;\n this.handler = handler;\n this.called = false;\n this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n if (ctx.cancelPromise != null) {\n if (arguments.length > 1) {\n ctx.cancelPromise._reject(reason);\n } else {\n ctx.cancelPromise._cancel();\n }\n ctx.cancelPromise = null;\n return true;\n }\n return false;\n}\n\nfunction succeed() {\n return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n if (checkCancel(this, reason)) return;\n errorObj.e = reason;\n return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n var promise = this.promise;\n var handler = this.handler;\n\n if (!this.called) {\n this.called = true;\n var ret = this.isFinallyHandler()\n ? handler.call(promise._boundValue())\n : handler.call(promise._boundValue(), reasonOrValue);\n if (ret === NEXT_FILTER) {\n return ret;\n } else if (ret !== undefined) {\n promise._setReturnedNonUndefined();\n var maybePromise = tryConvertToPromise(ret, promise);\n if (maybePromise instanceof Promise) {\n if (this.cancelPromise != null) {\n if (maybePromise._isCancelled()) {\n var reason =\n new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n errorObj.e = reason;\n return errorObj;\n } else if (maybePromise.isPending()) {\n maybePromise._attachCancellationCallback(\n new FinallyHandlerCancelReaction(this));\n }\n }\n return maybePromise._then(\n succeed, fail, undefined, this, undefined);\n }\n }\n }\n\n if (promise.isRejected()) {\n checkCancel(this);\n errorObj.e = reasonOrValue;\n return errorObj;\n } else {\n checkCancel(this);\n return reasonOrValue;\n }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n if (typeof handler !== \"function\") return this.then();\n return this._then(success,\n fail,\n undefined,\n new PassThroughHandlerContext(this, type, handler),\n undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n return this._passThrough(handler,\n 0,\n finallyHandler,\n finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n var len = arguments.length;\n if(len === 1) {\n return this._passThrough(handlerOrPredicate,\n 1,\n undefined,\n finallyHandler);\n } else {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return Promise.reject(new TypeError(\n \"tapCatch statement predicate: \"\n + \"expecting an object but got \" + util.classString(item)\n ));\n }\n }\n catchInstances.length = j;\n var handler = arguments[i];\n return this._passThrough(catchFilter(catchInstances, handler, this),\n 1,\n undefined,\n finallyHandler);\n }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n\n},{\"./catch_filter\":7,\"./util\":36}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n apiRejection,\n INTERNAL,\n tryConvertToPromise,\n Proxyable,\n debug) {\nvar errors = _dereq_(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n for (var i = 0; i < yieldHandlers.length; ++i) {\n traceParent._pushContext();\n var result = tryCatch(yieldHandlers[i])(value);\n traceParent._popContext();\n if (result === errorObj) {\n traceParent._pushContext();\n var ret = Promise.reject(errorObj.e);\n traceParent._popContext();\n return ret;\n }\n var maybePromise = tryConvertToPromise(result, traceParent);\n if (maybePromise instanceof Promise) return maybePromise;\n }\n return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n if (debug.cancellation()) {\n var internal = new Promise(INTERNAL);\n var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n this._promise = internal.lastly(function() {\n return _finallyPromise;\n });\n internal._captureStackTrace();\n internal._setOnCancel(this);\n } else {\n var promise = this._promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n }\n this._stack = stack;\n this._generatorFunction = generatorFunction;\n this._receiver = receiver;\n this._generator = undefined;\n this._yieldHandlers = typeof yieldHandler === \"function\"\n ? [yieldHandler].concat(yieldHandlers)\n : yieldHandlers;\n this._yieldedPromise = null;\n this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n this._promise = this._generator = null;\n if (debug.cancellation() && this._finallyPromise !== null) {\n this._finallyPromise._fulfill();\n this._finallyPromise = null;\n }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n if (this._isResolved()) return;\n var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n var result;\n if (!implementsReturn) {\n var reason = new Promise.CancellationError(\n \"generator .return() sentinel\");\n Promise.coroutine.returnSentinel = reason;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n reason);\n this._promise._popContext();\n } else {\n this._promise._pushContext();\n result = tryCatch(this._generator[\"return\"]).call(this._generator,\n undefined);\n this._promise._popContext();\n }\n this._cancellationPhase = true;\n this._yieldedPromise = null;\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n this._yieldedPromise = null;\n this._promise._pushContext();\n var result = tryCatch(this._generator.next).call(this._generator, value);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n this._yieldedPromise = null;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n var result = tryCatch(this._generator[\"throw\"])\n .call(this._generator, reason);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n if (this._yieldedPromise instanceof Promise) {\n var promise = this._yieldedPromise;\n this._yieldedPromise = null;\n promise.cancel();\n }\n};\n\nPromiseSpawn.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n this._generator = this._generatorFunction.call(this._receiver);\n this._receiver =\n this._generatorFunction = undefined;\n this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n var promise = this._promise;\n if (result === errorObj) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._rejectCallback(result.e, false);\n }\n }\n\n var value = result.value;\n if (result.done === true) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._resolveCallback(value);\n }\n } else {\n var maybePromise = tryConvertToPromise(value, this._promise);\n if (!(maybePromise instanceof Promise)) {\n maybePromise =\n promiseFromYieldHandler(maybePromise,\n this._yieldHandlers,\n this._promise);\n if (maybePromise === null) {\n this._promiseRejected(\n new TypeError(\n \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n \"From coroutine:\\u000a\" +\n this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n )\n );\n return;\n }\n }\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n this._yieldedPromise = maybePromise;\n maybePromise._proxy(this, null);\n } else if (((bitField & 33554432) !== 0)) {\n Promise._async.invoke(\n this._promiseFulfilled, this, maybePromise._value()\n );\n } else if (((bitField & 16777216) !== 0)) {\n Promise._async.invoke(\n this._promiseRejected, this, maybePromise._reason()\n );\n } else {\n this._promiseCancelled();\n }\n }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n if (typeof generatorFunction !== \"function\") {\n throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var yieldHandler = Object(options).yieldHandler;\n var PromiseSpawn$ = PromiseSpawn;\n var stack = new Error().stack;\n return function () {\n var generator = generatorFunction.apply(this, arguments);\n var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n stack);\n var ret = spawn.promise();\n spawn._generator = generator;\n spawn._promiseFulfilled(undefined);\n return ret;\n };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n if (typeof generatorFunction !== \"function\") {\n return apiRejection(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var spawn = new PromiseSpawn(generatorFunction, this);\n var ret = spawn.promise();\n spawn._run(Promise.spawn);\n return ret;\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!true) {\nif (canEvaluate) {\n var thenCallback = function(i) {\n return new Function(\"value\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = value; \\n\\\n holder.checkFulfillment(this); \\n\\\n \".replace(/Index/g, i));\n };\n\n var promiseSetter = function(i) {\n return new Function(\"promise\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = promise; \\n\\\n \".replace(/Index/g, i));\n };\n\n var generateHolderClass = function(total) {\n var props = new Array(total);\n for (var i = 0; i < props.length; ++i) {\n props[i] = \"this.p\" + (i+1);\n }\n var assignment = props.join(\" = \") + \" = null;\";\n var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n return \" \\n\\\n promise = \" + prop + \"; \\n\\\n if (promise instanceof Promise) { \\n\\\n promise.cancel(); \\n\\\n } \\n\\\n \";\n }).join(\"\\n\");\n var passedArguments = props.join(\", \");\n var name = \"Holder$\" + total;\n\n\n var code = \"return function(tryCatch, errorObj, Promise, async) { \\n\\\n 'use strict'; \\n\\\n function [TheName](fn) { \\n\\\n [TheProperties] \\n\\\n this.fn = fn; \\n\\\n this.asyncNeeded = true; \\n\\\n this.now = 0; \\n\\\n } \\n\\\n \\n\\\n [TheName].prototype._callFunction = function(promise) { \\n\\\n promise._pushContext(); \\n\\\n var ret = tryCatch(this.fn)([ThePassedArguments]); \\n\\\n promise._popContext(); \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(ret.e, false); \\n\\\n } else { \\n\\\n promise._resolveCallback(ret); \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype.checkFulfillment = function(promise) { \\n\\\n var now = ++this.now; \\n\\\n if (now === [TheTotal]) { \\n\\\n if (this.asyncNeeded) { \\n\\\n async.invoke(this._callFunction, this, promise); \\n\\\n } else { \\n\\\n this._callFunction(promise); \\n\\\n } \\n\\\n \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype._resultCancelled = function() { \\n\\\n [CancellationCode] \\n\\\n }; \\n\\\n \\n\\\n return [TheName]; \\n\\\n }(tryCatch, errorObj, Promise, async); \\n\\\n \";\n\n code = code.replace(/\\[TheName\\]/g, name)\n .replace(/\\[TheTotal\\]/g, total)\n .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n .replace(/\\[TheProperties\\]/g, assignment)\n .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n (tryCatch, errorObj, Promise, async);\n };\n\n var holderClasses = [];\n var thenCallbacks = [];\n var promiseSetters = [];\n\n for (var i = 0; i < 8; ++i) {\n holderClasses.push(generateHolderClass(i + 1));\n thenCallbacks.push(thenCallback(i + 1));\n promiseSetters.push(promiseSetter(i + 1));\n }\n\n reject = function (reason) {\n this._reject(reason);\n };\n}}\n\nPromise.join = function () {\n var last = arguments.length - 1;\n var fn;\n if (last > 0 && typeof arguments[last] === \"function\") {\n fn = arguments[last];\n if (!true) {\n if (last <= 8 && canEvaluate) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var HolderClass = holderClasses[last - 1];\n var holder = new HolderClass(fn);\n var callbacks = thenCallbacks;\n\n for (var i = 0; i < last; ++i) {\n var maybePromise = tryConvertToPromise(arguments[i], ret);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n maybePromise._then(callbacks[i], reject,\n undefined, ret, holder);\n promiseSetters[i](maybePromise, holder);\n holder.asyncNeeded = false;\n } else if (((bitField & 33554432) !== 0)) {\n callbacks[i].call(ret,\n maybePromise._value(), holder);\n } else if (((bitField & 16777216) !== 0)) {\n ret._reject(maybePromise._reason());\n } else {\n ret._cancel();\n }\n } else {\n callbacks[i].call(ret, maybePromise, holder);\n }\n }\n\n if (!ret._isFateSealed()) {\n if (holder.asyncNeeded) {\n var context = Promise._getContext();\n holder.fn = util.contextBind(context, holder.fn);\n }\n ret._setAsyncGuaranteed();\n ret._setOnCancel(holder);\n }\n return ret;\n }\n }\n }\n var args = [].slice.call(arguments);;\n if (fn) args.pop();\n var ret = new PromiseArray(args).promise();\n return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util\":36}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n this.constructor$(promises);\n this._promise._captureStackTrace();\n var context = Promise._getContext();\n this._callback = util.contextBind(context, fn);\n this._preservedValues = _filter === INTERNAL\n ? new Array(this.length())\n : null;\n this._limit = limit;\n this._inFlight = 0;\n this._queue = [];\n async.invoke(this._asyncInit, this, undefined);\n if (util.isArray(promises)) {\n for (var i = 0; i < promises.length; ++i) {\n var maybePromise = promises[i];\n if (maybePromise instanceof Promise) {\n maybePromise.suppressUnhandledRejections();\n }\n }\n }\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var values = this._values;\n var length = this.length();\n var preservedValues = this._preservedValues;\n var limit = this._limit;\n\n if (index < 0) {\n index = (index * -1) - 1;\n values[index] = value;\n if (limit >= 1) {\n this._inFlight--;\n this._drainQueue();\n if (this._isResolved()) return true;\n }\n } else {\n if (limit >= 1 && this._inFlight >= limit) {\n values[index] = value;\n this._queue.push(index);\n return false;\n }\n if (preservedValues !== null) preservedValues[index] = value;\n\n var promise = this._promise;\n var callback = this._callback;\n var receiver = promise._boundValue();\n promise._pushContext();\n var ret = tryCatch(callback).call(receiver, value, index, length);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n promise\n );\n if (ret === errorObj) {\n this._reject(ret.e);\n return true;\n }\n\n var maybePromise = tryConvertToPromise(ret, this._promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n if (limit >= 1) this._inFlight++;\n values[index] = maybePromise;\n maybePromise._proxy(this, (index + 1) * -1);\n return false;\n } else if (((bitField & 33554432) !== 0)) {\n ret = maybePromise._value();\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(maybePromise._reason());\n return true;\n } else {\n this._cancel();\n return true;\n }\n }\n values[index] = ret;\n }\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= length) {\n if (preservedValues !== null) {\n this._filter(values, preservedValues);\n } else {\n this._resolve(values);\n }\n return true;\n }\n return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n var queue = this._queue;\n var limit = this._limit;\n var values = this._values;\n while (queue.length > 0 && this._inFlight < limit) {\n if (this._isResolved()) return;\n var index = queue.pop();\n this._promiseFulfilled(values[index], index);\n }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n var len = values.length;\n var ret = new Array(len);\n var j = 0;\n for (var i = 0; i < len; ++i) {\n if (booleans[i]) ret[j++] = values[i];\n }\n ret.length = j;\n this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n\n var limit = 0;\n if (options !== undefined) {\n if (typeof options === \"object\" && options !== null) {\n if (typeof options.concurrency !== \"number\") {\n return Promise.reject(\n new TypeError(\"'concurrency' must be a number but it is \" +\n util.classString(options.concurrency)));\n }\n limit = options.concurrency;\n } else {\n return Promise.reject(new TypeError(\n \"options argument must be an object but it is \" +\n util.classString(options)));\n }\n }\n limit = typeof limit === \"number\" &&\n isFinite(limit) && limit >= 1 ? limit : 0;\n return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n return map(promises, fn, options, _filter);\n};\n\n\n};\n\n},{\"./util\":36}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n if (typeof fn !== \"function\") {\n throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return function () {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value = tryCatch(fn).apply(this, arguments);\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.method\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value;\n if (arguments.length > 1) {\n debug.deprecated(\"calling Promise.try with more than 1 argument\");\n var arg = arguments[1];\n var ctx = arguments[2];\n value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n : tryCatch(fn).call(ctx, arg);\n } else {\n value = tryCatch(fn)();\n }\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.try\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n if (value === util.errorObj) {\n this._rejectCallback(value.e, false);\n } else {\n this._resolveCallback(value, true);\n }\n};\n};\n\n},{\"./util\":36}],20:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = _dereq_(\"./es5\");\n\nfunction isUntypedError(obj) {\n return obj instanceof Error &&\n es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n var ret;\n if (isUntypedError(obj)) {\n ret = new OperationalError(obj);\n ret.name = obj.name;\n ret.message = obj.message;\n ret.stack = obj.stack;\n var keys = es5.keys(obj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!rErrorKey.test(key)) {\n ret[key] = obj[key];\n }\n }\n return ret;\n }\n util.markAsOriginatingFromRejection(obj);\n return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n return function(err, value) {\n if (promise === null) return;\n if (err) {\n var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n promise._attachExtraTrace(wrapped);\n promise._reject(wrapped);\n } else if (!multiArgs) {\n promise._fulfill(value);\n } else {\n var args = [].slice.call(arguments, 1);;\n promise._fulfill(args);\n }\n promise = null;\n };\n}\n\nmodule.exports = nodebackForPromise;\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n var promise = this;\n if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n var ret =\n tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nfunction successAdapter(val, nodeback) {\n var promise = this;\n var receiver = promise._boundValue();\n var ret = val === undefined\n ? tryCatch(nodeback).call(receiver, null)\n : tryCatch(nodeback).call(receiver, null, val);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\nfunction errorAdapter(reason, nodeback) {\n var promise = this;\n if (!reason) {\n var newReason = new Error(reason + \"\");\n newReason.cause = reason;\n reason = newReason;\n }\n var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n options) {\n if (typeof nodeback == \"function\") {\n var adapter = successAdapter;\n if (options !== undefined && Object(options).spread) {\n adapter = spreadAdapter;\n }\n this._then(\n adapter,\n errorAdapter,\n undefined,\n this,\n nodeback\n );\n }\n return this;\n};\n};\n\n},{\"./util\":36}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n return new TypeError(\"circular promise resolution chain\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = _dereq_(\"./util\");\nutil.setReflectHandler(reflectHandler);\n\nvar getDomain = function() {\n var domain = process.domain;\n if (domain === undefined) {\n return null;\n }\n return domain;\n};\nvar getContextDefault = function() {\n return null;\n};\nvar getContextDomain = function() {\n return {\n domain: getDomain(),\n async: null\n };\n};\nvar AsyncResource = util.isNode && util.nodeSupportsAsyncResource ?\n _dereq_(\"async_hooks\").AsyncResource : null;\nvar getContextAsyncHooks = function() {\n return {\n domain: getDomain(),\n async: new AsyncResource(\"Bluebird::Promise\")\n };\n};\nvar getContext = util.isNode ? getContextDomain : getContextDefault;\nutil.notEnumerableProp(Promise, \"_getContext\", getContext);\nvar enableAsyncHooks = function() {\n getContext = getContextAsyncHooks;\n util.notEnumerableProp(Promise, \"_getContext\", getContextAsyncHooks);\n};\nvar disableAsyncHooks = function() {\n getContext = getContextDomain;\n util.notEnumerableProp(Promise, \"_getContext\", getContextDomain);\n};\n\nvar es5 = _dereq_(\"./es5\");\nvar Async = _dereq_(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = _dereq_(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n _dereq_(\"./promise_array\")(Promise, INTERNAL,\n tryConvertToPromise, apiRejection, Proxyable);\nvar Context = _dereq_(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\n\nvar debug = _dereq_(\"./debuggability\")(Promise, Context,\n enableAsyncHooks, disableAsyncHooks);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n if (self == null || self.constructor !== Promise) {\n throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (typeof executor !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n }\n\n}\n\nfunction Promise(executor) {\n if (executor !== INTERNAL) {\n check(this, executor);\n }\n this._bitField = 0;\n this._fulfillmentHandler0 = undefined;\n this._rejectionHandler0 = undefined;\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._resolveFromExecutor(executor);\n this._promiseCreated();\n this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n var len = arguments.length;\n if (len > 1) {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return apiRejection(\"Catch statement predicate: \" +\n \"expecting an object but got \" + util.classString(item));\n }\n }\n catchInstances.length = j;\n fn = arguments[i];\n\n if (typeof fn !== \"function\") {\n throw new TypeError(\"The last argument to .catch() \" +\n \"must be a function, got \" + util.toString(fn));\n }\n return this.then(undefined, catchFilter(catchInstances, fn, this));\n }\n return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n return this._then(reflectHandler,\n reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n if (debug.warnings() && arguments.length > 0 &&\n typeof didFulfill !== \"function\" &&\n typeof didReject !== \"function\") {\n var msg = \".then() only accepts functions but was passed: \" +\n util.classString(didFulfill);\n if (arguments.length > 1) {\n msg += \", \" + util.classString(didReject);\n }\n this._warn(msg);\n }\n return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n var promise =\n this._then(didFulfill, didReject, undefined, undefined, undefined);\n promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n var ret = {\n isFulfilled: false,\n isRejected: false,\n fulfillmentValue: undefined,\n rejectionReason: undefined\n };\n if (this.isFulfilled()) {\n ret.fulfillmentValue = this.value();\n ret.isFulfilled = true;\n } else if (this.isRejected()) {\n ret.rejectionReason = this.reason();\n ret.isRejected = true;\n }\n return ret;\n};\n\nPromise.prototype.all = function () {\n if (arguments.length > 0) {\n this._warn(\".all() was passed arguments but it does not take any\");\n }\n return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n : false;\n var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n if (result === errorObj) {\n ret._rejectCallback(result.e, true);\n }\n if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.all = function (promises) {\n return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n var ret = tryConvertToPromise(obj);\n if (!(ret instanceof Promise)) {\n ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._setFulfilled();\n ret._rejectionHandler0 = obj;\n }\n return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._rejectCallback(reason, true);\n return ret;\n};\n\nPromise.setScheduler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n didFulfill,\n didReject,\n _, receiver,\n internalData\n) {\n var haveInternalData = internalData !== undefined;\n var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n var target = this._target();\n var bitField = target._bitField;\n\n if (!haveInternalData) {\n promise._propagateFrom(this, 3);\n promise._captureStackTrace();\n if (receiver === undefined &&\n ((this._bitField & 2097152) !== 0)) {\n if (!((bitField & 50397184) === 0)) {\n receiver = this._boundValue();\n } else {\n receiver = target === this ? undefined : this._boundTo;\n }\n }\n this._fireEvent(\"promiseChained\", this, promise);\n }\n\n var context = getContext();\n if (!((bitField & 50397184) === 0)) {\n var handler, value, settler = target._settlePromiseCtx;\n if (((bitField & 33554432) !== 0)) {\n value = target._rejectionHandler0;\n handler = didFulfill;\n } else if (((bitField & 16777216) !== 0)) {\n value = target._fulfillmentHandler0;\n handler = didReject;\n target._unsetRejectionIsUnhandled();\n } else {\n settler = target._settlePromiseLateCancellationObserver;\n value = new CancellationError(\"late cancellation observer\");\n target._attachExtraTrace(value);\n handler = didReject;\n }\n\n async.invoke(settler, target, {\n handler: util.contextBind(context, handler),\n promise: promise,\n receiver: receiver,\n value: value\n });\n } else {\n target._addCallbacks(didFulfill, didReject, promise,\n receiver, context);\n }\n\n return promise;\n};\n\nPromise.prototype._length = function () {\n return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n this._bitField = (this._bitField & -65536) |\n (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n this._bitField = this._bitField | 33554432;\n this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n this._bitField = this._bitField | 16777216;\n this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n this._bitField = this._bitField | 67108864;\n this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n this._bitField = this._bitField | 65536;\n this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n if (async.hasCustomScheduler()) return;\n var bitField = this._bitField;\n this._bitField = bitField |\n (((bitField & 536870912) >> 2) ^\n 134217728);\n};\n\nPromise.prototype._setNoAsyncGuarantee = function() {\n this._bitField = (this._bitField | 536870912) &\n (~134217728);\n};\n\nPromise.prototype._receiverAt = function (index) {\n var ret = index === 0 ? this._receiver0 : this[\n index * 4 - 4 + 3];\n if (ret === UNDEFINED_BINDING) {\n return undefined;\n } else if (ret === undefined && this._isBound()) {\n return this._boundValue();\n }\n return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n return this[\n index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n var bitField = follower._bitField;\n var fulfill = follower._fulfillmentHandler0;\n var reject = follower._rejectionHandler0;\n var promise = follower._promise0;\n var receiver = follower._receiverAt(0);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n var fulfill = follower._fulfillmentHandlerAt(index);\n var reject = follower._rejectionHandlerAt(index);\n var promise = follower._promiseAt(index);\n var receiver = follower._receiverAt(index);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n fulfill,\n reject,\n promise,\n receiver,\n context\n) {\n var index = this._length();\n\n if (index >= 65535 - 4) {\n index = 0;\n this._setLength(0);\n }\n\n if (index === 0) {\n this._promise0 = promise;\n this._receiver0 = receiver;\n if (typeof fulfill === \"function\") {\n this._fulfillmentHandler0 = util.contextBind(context, fulfill);\n }\n if (typeof reject === \"function\") {\n this._rejectionHandler0 = util.contextBind(context, reject);\n }\n } else {\n var base = index * 4 - 4;\n this[base + 2] = promise;\n this[base + 3] = receiver;\n if (typeof fulfill === \"function\") {\n this[base + 0] =\n util.contextBind(context, fulfill);\n }\n if (typeof reject === \"function\") {\n this[base + 1] =\n util.contextBind(context, reject);\n }\n }\n this._setLength(index + 1);\n return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n if (((this._bitField & 117506048) !== 0)) return;\n if (value === this)\n return this._rejectCallback(makeSelfResolutionError(), false);\n var maybePromise = tryConvertToPromise(value, this);\n if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n\n var promise = maybePromise._target();\n\n if (promise === this) {\n this._reject(makeSelfResolutionError());\n return;\n }\n\n var bitField = promise._bitField;\n if (((bitField & 50397184) === 0)) {\n var len = this._length();\n if (len > 0) promise._migrateCallback0(this);\n for (var i = 1; i < len; ++i) {\n promise._migrateCallbackAt(this, i);\n }\n this._setFollowing();\n this._setLength(0);\n this._setFollowee(maybePromise);\n } else if (((bitField & 33554432) !== 0)) {\n this._fulfill(promise._value());\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(promise._reason());\n } else {\n var reason = new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n this._reject(reason);\n }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n var trace = util.ensureErrorObject(reason);\n var hasStack = trace === reason;\n if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n var message = \"a promise was rejected with a non-error: \" +\n util.classString(reason);\n this._warn(message, true);\n }\n this._attachExtraTrace(trace, synchronous ? hasStack : false);\n this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n if (executor === INTERNAL) return;\n var promise = this;\n this._captureStackTrace();\n this._pushContext();\n var synchronous = true;\n var r = this._execute(executor, function(value) {\n promise._resolveCallback(value);\n }, function (reason) {\n promise._rejectCallback(reason, synchronous);\n });\n synchronous = false;\n this._popContext();\n\n if (r !== undefined) {\n promise._rejectCallback(r, true);\n }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n handler, receiver, value, promise\n) {\n var bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n promise._pushContext();\n var x;\n if (receiver === APPLY) {\n if (!value || typeof value.length !== \"number\") {\n x = errorObj;\n x.e = new TypeError(\"cannot .spread() a non-array: \" +\n util.classString(value));\n } else {\n x = tryCatch(handler).apply(this._boundValue(), value);\n }\n } else {\n x = tryCatch(handler).call(receiver, value);\n }\n var promiseCreated = promise._popContext();\n bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n\n if (x === NEXT_FILTER) {\n promise._reject(value);\n } else if (x === errorObj) {\n promise._rejectCallback(x.e, false);\n } else {\n debug.checkForgottenReturns(x, promiseCreated, \"\", promise, this);\n promise._resolveCallback(x);\n }\n};\n\nPromise.prototype._target = function() {\n var ret = this;\n while (ret._isFollowing()) ret = ret._followee();\n return ret;\n};\n\nPromise.prototype._followee = function() {\n return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n var isPromise = promise instanceof Promise;\n var bitField = this._bitField;\n var asyncGuaranteed = ((bitField & 134217728) !== 0);\n if (((bitField & 65536) !== 0)) {\n if (isPromise) promise._invokeInternalOnCancel();\n\n if (receiver instanceof PassThroughHandlerContext &&\n receiver.isFinallyHandler()) {\n receiver.cancelPromise = promise;\n if (tryCatch(handler).call(receiver, value) === errorObj) {\n promise._reject(errorObj.e);\n }\n } else if (handler === reflectHandler) {\n promise._fulfill(reflectHandler.call(receiver));\n } else if (receiver instanceof Proxyable) {\n receiver._promiseCancelled(promise);\n } else if (isPromise || promise instanceof PromiseArray) {\n promise._cancel();\n } else {\n receiver.cancel();\n }\n } else if (typeof handler === \"function\") {\n if (!isPromise) {\n handler.call(receiver, value, promise);\n } else {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (receiver instanceof Proxyable) {\n if (!receiver._isResolved()) {\n if (((bitField & 33554432) !== 0)) {\n receiver._promiseFulfilled(value, promise);\n } else {\n receiver._promiseRejected(value, promise);\n }\n }\n } else if (isPromise) {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n if (((bitField & 33554432) !== 0)) {\n promise._fulfill(value);\n } else {\n promise._reject(value);\n }\n }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n var handler = ctx.handler;\n var promise = ctx.promise;\n var receiver = ctx.receiver;\n var value = ctx.value;\n if (typeof handler === \"function\") {\n if (!(promise instanceof Promise)) {\n handler.call(receiver, value, promise);\n } else {\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (promise instanceof Promise) {\n promise._reject(value);\n }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n var promise = this._promise0;\n var receiver = this._receiverAt(0);\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n var base = index * 4 - 4;\n this[base + 2] =\n this[base + 3] =\n this[base + 0] =\n this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n if (value === this) {\n var err = makeSelfResolutionError();\n this._attachExtraTrace(err);\n return this._reject(err);\n }\n this._setFulfilled();\n this._rejectionHandler0 = value;\n\n if ((bitField & 65535) > 0) {\n if (((bitField & 134217728) !== 0)) {\n this._settlePromises();\n } else {\n async.settlePromises(this);\n }\n this._dereferenceTrace();\n }\n};\n\nPromise.prototype._reject = function (reason) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n this._setRejected();\n this._fulfillmentHandler0 = reason;\n\n if (this._isFinal()) {\n return async.fatalError(reason, util.isNode);\n }\n\n if ((bitField & 65535) > 0) {\n async.settlePromises(this);\n } else {\n this._ensurePossibleRejectionHandled();\n }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n for (var i = 1; i < len; i++) {\n var handler = this._fulfillmentHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, value);\n }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n for (var i = 1; i < len; i++) {\n var handler = this._rejectionHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, reason);\n }\n};\n\nPromise.prototype._settlePromises = function () {\n var bitField = this._bitField;\n var len = (bitField & 65535);\n\n if (len > 0) {\n if (((bitField & 16842752) !== 0)) {\n var reason = this._fulfillmentHandler0;\n this._settlePromise0(this._rejectionHandler0, reason, bitField);\n this._rejectPromises(len, reason);\n } else {\n var value = this._rejectionHandler0;\n this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n this._fulfillPromises(len, value);\n }\n this._setLength(0);\n }\n this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n var bitField = this._bitField;\n if (((bitField & 33554432) !== 0)) {\n return this._rejectionHandler0;\n } else if (((bitField & 16777216) !== 0)) {\n return this._fulfillmentHandler0;\n }\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.toStringTag) {\n es5.defineProperty(Promise.prototype, Symbol.toStringTag, {\n get: function () {\n return \"Object\";\n }\n });\n}\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n debug.deprecated(\"Promise.defer\", \"new Promise\");\n var promise = new Promise(INTERNAL);\n return {\n promise: promise,\n resolve: deferResolve,\n reject: deferReject\n };\n};\n\nutil.notEnumerableProp(Promise,\n \"_makeSelfResolutionError\",\n makeSelfResolutionError);\n\n_dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n debug);\n_dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n_dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n_dereq_(\"./direct_resolve\")(Promise);\n_dereq_(\"./synchronous_inspection\")(Promise);\n_dereq_(\"./join\")(\n Promise, PromiseArray, tryConvertToPromise, INTERNAL, async);\nPromise.Promise = Promise;\nPromise.version = \"3.7.2\";\n_dereq_('./call_get.js')(Promise);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./settle.js')(Promise, PromiseArray, debug);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./timers.js')(Promise, INTERNAL, debug);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n_dereq_('./any.js')(Promise);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./filter.js')(Promise, INTERNAL);\n \n util.toFastProperties(Promise); \n util.toFastProperties(Promise.prototype); \n function fillTypes(value) { \n var p = new Promise(INTERNAL); \n p._fulfillmentHandler0 = value; \n p._rejectionHandler0 = value; \n p._promise0 = value; \n p._receiver0 = value; \n } \n // Complete slack tracking, opt out of field-type tracking and \n // stabilize map \n fillTypes({a: 1}); \n fillTypes({b: 2}); \n fillTypes({c: 3}); \n fillTypes(1); \n fillTypes(function(){}); \n fillTypes(undefined); \n fillTypes(false); \n fillTypes(new Promise(INTERNAL)); \n debug.setBounds(Async.firstLineError, util.lastLineError); \n return Promise; \n\n};\n\n},{\"./any.js\":1,\"./async\":2,\"./bind\":3,\"./call_get.js\":5,\"./cancel\":6,\"./catch_filter\":7,\"./context\":8,\"./debuggability\":9,\"./direct_resolve\":10,\"./each.js\":11,\"./errors\":12,\"./es5\":13,\"./filter.js\":14,\"./finally\":15,\"./generators.js\":16,\"./join\":17,\"./map.js\":18,\"./method\":19,\"./nodeback\":20,\"./nodeify.js\":21,\"./promise_array\":23,\"./promisify.js\":24,\"./props.js\":25,\"./race.js\":27,\"./reduce.js\":28,\"./settle.js\":30,\"./some.js\":31,\"./synchronous_inspection\":32,\"./thenables\":33,\"./timers.js\":34,\"./using.js\":35,\"./util\":36,\"async_hooks\":undefined}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n apiRejection, Proxyable) {\nvar util = _dereq_(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n switch(val) {\n case -2: return [];\n case -3: return {};\n case -6: return new Map();\n }\n}\n\nfunction PromiseArray(values) {\n var promise = this._promise = new Promise(INTERNAL);\n if (values instanceof Promise) {\n promise._propagateFrom(values, 3);\n values.suppressUnhandledRejections();\n }\n promise._setOnCancel(this);\n this._values = values;\n this._length = 0;\n this._totalResolved = 0;\n this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n var values = tryConvertToPromise(this._values, this._promise);\n if (values instanceof Promise) {\n values = values._target();\n var bitField = values._bitField;\n ;\n this._values = values;\n\n if (((bitField & 50397184) === 0)) {\n this._promise._setAsyncGuaranteed();\n return values._then(\n init,\n this._reject,\n undefined,\n this,\n resolveValueIfEmpty\n );\n } else if (((bitField & 33554432) !== 0)) {\n values = values._value();\n } else if (((bitField & 16777216) !== 0)) {\n return this._reject(values._reason());\n } else {\n return this._cancel();\n }\n }\n values = util.asArray(values);\n if (values === null) {\n var err = apiRejection(\n \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n this._promise._rejectCallback(err, false);\n return;\n }\n\n if (values.length === 0) {\n if (resolveValueIfEmpty === -5) {\n this._resolveEmptyArray();\n }\n else {\n this._resolve(toResolutionValue(resolveValueIfEmpty));\n }\n return;\n }\n this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n var len = this.getActualLength(values.length);\n this._length = len;\n this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n var result = this._promise;\n var isResolved = false;\n var bitField = null;\n for (var i = 0; i < len; ++i) {\n var maybePromise = tryConvertToPromise(values[i], result);\n\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n bitField = maybePromise._bitField;\n } else {\n bitField = null;\n }\n\n if (isResolved) {\n if (bitField !== null) {\n maybePromise.suppressUnhandledRejections();\n }\n } else if (bitField !== null) {\n if (((bitField & 50397184) === 0)) {\n maybePromise._proxy(this, i);\n this._values[i] = maybePromise;\n } else if (((bitField & 33554432) !== 0)) {\n isResolved = this._promiseFulfilled(maybePromise._value(), i);\n } else if (((bitField & 16777216) !== 0)) {\n isResolved = this._promiseRejected(maybePromise._reason(), i);\n } else {\n isResolved = this._promiseCancelled(i);\n }\n } else {\n isResolved = this._promiseFulfilled(maybePromise, i);\n }\n }\n if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n this._values = null;\n this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n if (this._isResolved() || !this._promise._isCancellable()) return;\n this._values = null;\n this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n this._values = null;\n this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n this._cancel();\n return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n this._totalResolved++;\n this._reject(reason);\n return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n if (this._isResolved()) return;\n var values = this._values;\n this._cancel();\n if (values instanceof Promise) {\n values.cancel();\n } else {\n for (var i = 0; i < values.length; ++i) {\n if (values[i] instanceof Promise) {\n values[i].cancel();\n }\n }\n }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util\":36}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util\");\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n \"arity\", \"length\",\n \"name\",\n \"arguments\",\n \"caller\",\n \"callee\",\n \"prototype\",\n \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n return util.isIdentifier(name) &&\n name.charAt(0) !== \"_\" &&\n name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n try {\n return fn.__isPromisified__ === true;\n }\n catch (e) {\n return false;\n }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n var val = util.getDataPropertyOrDefault(obj, key + suffix,\n defaultPromisified);\n return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n for (var i = 0; i < ret.length; i += 2) {\n var key = ret[i];\n if (suffixRegexp.test(key)) {\n var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n for (var j = 0; j < ret.length; j += 2) {\n if (ret[j] === keyWithoutAsyncSuffix) {\n throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\"\n .replace(\"%s\", suffix));\n }\n }\n }\n }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n var keys = util.inheritedDataKeys(obj);\n var ret = [];\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var value = obj[key];\n var passesDefaultFilter = filter === defaultFilter\n ? true : defaultFilter(key, value, obj);\n if (typeof value === \"function\" &&\n !isPromisified(value) &&\n !hasPromisified(obj, key, suffix) &&\n filter(key, value, obj, passesDefaultFilter)) {\n ret.push(key, value);\n }\n }\n checkValid(ret, suffix, suffixRegexp);\n return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!true) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n var ret = [likelyArgumentCount];\n var min = Math.max(0, likelyArgumentCount - 1 - 3);\n for(var i = likelyArgumentCount - 1; i >= min; --i) {\n ret.push(i);\n }\n for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n ret.push(i);\n }\n return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n return util.filledRange(\n Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n if (typeof fn.length === \"number\") {\n return Math.max(Math.min(fn.length, 1023 + 1), 0);\n }\n return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n function generateCallForArgumentCount(count) {\n var args = argumentSequence(count).join(\", \");\n var comma = count > 0 ? \", \" : \"\";\n var ret;\n if (shouldProxyThis) {\n ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n } else {\n ret = receiver === undefined\n ? \"ret = callback({{args}}, nodeback); break;\\n\"\n : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n }\n return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n }\n\n function generateArgumentSwitchCase() {\n var ret = \"\";\n for (var i = 0; i < argumentOrder.length; ++i) {\n ret += \"case \" + argumentOrder[i] +\":\" +\n generateCallForArgumentCount(argumentOrder[i]);\n }\n\n ret += \" \\n\\\n default: \\n\\\n var args = new Array(len + 1); \\n\\\n var i = 0; \\n\\\n for (var i = 0; i < len; ++i) { \\n\\\n args[i] = arguments[i]; \\n\\\n } \\n\\\n args[i] = nodeback; \\n\\\n [CodeForCall] \\n\\\n break; \\n\\\n \".replace(\"[CodeForCall]\", (shouldProxyThis\n ? \"ret = callback.apply(this, args);\\n\"\n : \"ret = callback.apply(receiver, args);\\n\"));\n return ret;\n }\n\n var getFunctionCode = typeof callback === \"string\"\n ? (\"this != null ? this['\"+callback+\"'] : fn\")\n : \"fn\";\n var body = \"'use strict'; \\n\\\n var ret = function (Parameters) { \\n\\\n 'use strict'; \\n\\\n var len = arguments.length; \\n\\\n var promise = new Promise(INTERNAL); \\n\\\n promise._captureStackTrace(); \\n\\\n var nodeback = nodebackForPromise(promise, \" + multiArgs + \"); \\n\\\n var ret; \\n\\\n var callback = tryCatch([GetFunctionCode]); \\n\\\n switch(len) { \\n\\\n [CodeForSwitchCase] \\n\\\n } \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n } \\n\\\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \\n\\\n return promise; \\n\\\n }; \\n\\\n notEnumerableProp(ret, '__isPromisified__', true); \\n\\\n return ret; \\n\\\n \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n .replace(\"[GetFunctionCode]\", getFunctionCode);\n body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n return new Function(\"Promise\",\n \"fn\",\n \"receiver\",\n \"withAppended\",\n \"maybeWrapAsError\",\n \"nodebackForPromise\",\n \"tryCatch\",\n \"errorObj\",\n \"notEnumerableProp\",\n \"INTERNAL\",\n body)(\n Promise,\n fn,\n receiver,\n withAppended,\n maybeWrapAsError,\n nodebackForPromise,\n util.tryCatch,\n util.errorObj,\n util.notEnumerableProp,\n INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n var defaultThis = (function() {return this;})();\n var method = callback;\n if (typeof method === \"string\") {\n callback = fn;\n }\n function promisified() {\n var _receiver = receiver;\n if (receiver === THIS) _receiver = this;\n var promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n var cb = typeof method === \"string\" && this !== defaultThis\n ? this[method] : callback;\n var fn = nodebackForPromise(promise, multiArgs);\n try {\n cb.apply(_receiver, withAppended(arguments, fn));\n } catch(e) {\n promise._rejectCallback(maybeWrapAsError(e), true, true);\n }\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n return promise;\n }\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n ? makeNodePromisifiedEval\n : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n var methods =\n promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n for (var i = 0, len = methods.length; i < len; i+= 2) {\n var key = methods[i];\n var fn = methods[i+1];\n var promisifiedKey = key + suffix;\n if (promisifier === makeNodePromisified) {\n obj[promisifiedKey] =\n makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n } else {\n var promisified = promisifier(fn, function() {\n return makeNodePromisified(key, THIS, key,\n fn, suffix, multiArgs);\n });\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n obj[promisifiedKey] = promisified;\n }\n }\n util.toFastProperties(obj);\n return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n return makeNodePromisified(callback, receiver, undefined,\n callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n if (isPromisified(fn)) {\n return fn;\n }\n options = Object(options);\n var receiver = options.context === undefined ? THIS : options.context;\n var multiArgs = !!options.multiArgs;\n var ret = promisify(fn, receiver, multiArgs);\n util.copyDescriptors(fn, ret, propsFilter);\n return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n if (typeof target !== \"function\" && typeof target !== \"object\") {\n throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n options = Object(options);\n var multiArgs = !!options.multiArgs;\n var suffix = options.suffix;\n if (typeof suffix !== \"string\") suffix = defaultSuffix;\n var filter = options.filter;\n if (typeof filter !== \"function\") filter = defaultFilter;\n var promisifier = options.promisifier;\n if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n if (!util.isIdentifier(suffix)) {\n throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n\n var keys = util.inheritedDataKeys(target);\n for (var i = 0; i < keys.length; ++i) {\n var value = target[keys[i]];\n if (keys[i] !== \"constructor\" &&\n util.isClass(value)) {\n promisifyAll(value.prototype, suffix, filter, promisifier,\n multiArgs);\n promisifyAll(value, suffix, filter, promisifier, multiArgs);\n }\n }\n\n return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n\n},{\"./errors\":12,\"./nodeback\":20,\"./util\":36}],25:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n var index = 0;\n var size = 0;\n\n function extractEntry(value, key) {\n this[index] = value;\n this[index + size] = key;\n index++;\n }\n\n return function mapToEntries(map) {\n size = map.size;\n index = 0;\n var ret = new Array(map.size * 2);\n map.forEach(extractEntry, ret);\n return ret;\n };\n})();\n\nvar entriesToMap = function(entries) {\n var ret = new Es6Map();\n var length = entries.length / 2 | 0;\n for (var i = 0; i < length; ++i) {\n var key = entries[length + i];\n var value = entries[i];\n ret.set(key, value);\n }\n return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n var isMap = false;\n var entries;\n if (Es6Map !== undefined && obj instanceof Es6Map) {\n entries = mapToEntries(obj);\n isMap = true;\n } else {\n var keys = es5.keys(obj);\n var len = keys.length;\n entries = new Array(len * 2);\n for (var i = 0; i < len; ++i) {\n var key = keys[i];\n entries[i] = obj[key];\n entries[i + len] = key;\n }\n }\n this.constructor$(entries);\n this._isMap = isMap;\n this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n var val;\n if (this._isMap) {\n val = entriesToMap(this._values);\n } else {\n val = {};\n var keyOffset = this.length();\n for (var i = 0, len = this.length(); i < len; ++i) {\n val[this._values[i + keyOffset]] = this._values[i];\n }\n }\n this._resolve(val);\n return true;\n }\n return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n return len >> 1;\n};\n\nfunction props(promises) {\n var ret;\n var castValue = tryConvertToPromise(promises);\n\n if (!isObject(castValue)) {\n return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n } else if (castValue instanceof Promise) {\n ret = castValue._then(\n Promise.props, undefined, undefined, undefined, undefined);\n } else {\n ret = new PropertiesPromiseArray(castValue).promise();\n }\n\n if (castValue instanceof Promise) {\n ret._propagateFrom(castValue, 2);\n }\n return ret;\n}\n\nPromise.prototype.props = function () {\n return props(this);\n};\n\nPromise.props = function (promises) {\n return props(promises);\n};\n};\n\n},{\"./es5\":13,\"./util\":36}],26:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n for (var j = 0; j < len; ++j) {\n dst[j + dstIndex] = src[j + srcIndex];\n src[j + srcIndex] = void 0;\n }\n}\n\nfunction Queue(capacity) {\n this._capacity = capacity;\n this._length = 0;\n this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n var length = this.length();\n this._checkCapacity(length + 1);\n var i = (this._front + length) & (this._capacity - 1);\n this[i] = arg;\n this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n var length = this.length() + 3;\n if (this._willBeOverCapacity(length)) {\n this._pushOne(fn);\n this._pushOne(receiver);\n this._pushOne(arg);\n return;\n }\n var j = this._front + length - 3;\n this._checkCapacity(length);\n var wrapMask = this._capacity - 1;\n this[(j + 0) & wrapMask] = fn;\n this[(j + 1) & wrapMask] = receiver;\n this[(j + 2) & wrapMask] = arg;\n this._length = length;\n};\n\nQueue.prototype.shift = function () {\n var front = this._front,\n ret = this[front];\n\n this[front] = undefined;\n this._front = (front + 1) & (this._capacity - 1);\n this._length--;\n return ret;\n};\n\nQueue.prototype.length = function () {\n return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n if (this._capacity < size) {\n this._resizeTo(this._capacity << 1);\n }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n var oldCapacity = this._capacity;\n this._capacity = capacity;\n var front = this._front;\n var length = this._length;\n var moveItemsCount = (front + length) & (oldCapacity - 1);\n arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\n\nvar raceLater = function (promise) {\n return promise.then(function(array) {\n return race(array, promise);\n });\n};\n\nfunction race(promises, parent) {\n var maybePromise = tryConvertToPromise(promises);\n\n if (maybePromise instanceof Promise) {\n return raceLater(maybePromise);\n } else {\n promises = util.asArray(promises);\n if (promises === null)\n return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n }\n\n var ret = new Promise(INTERNAL);\n if (parent !== undefined) {\n ret._propagateFrom(parent, 3);\n }\n var fulfill = ret._fulfill;\n var reject = ret._reject;\n for (var i = 0, len = promises.length; i < len; ++i) {\n var val = promises[i];\n\n if (val === undefined && !(i in promises)) {\n continue;\n }\n\n Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n }\n return ret;\n}\n\nPromise.race = function (promises) {\n return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n return race(this, undefined);\n};\n\n};\n\n},{\"./util\":36}],28:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n this.constructor$(promises);\n var context = Promise._getContext();\n this._fn = util.contextBind(context, fn);\n if (initialValue !== undefined) {\n initialValue = Promise.resolve(initialValue);\n initialValue._attachCancellationCallback(this);\n }\n this._initialValue = initialValue;\n this._currentCancellable = null;\n if(_each === INTERNAL) {\n this._eachValues = Array(this._length);\n } else if (_each === 0) {\n this._eachValues = null;\n } else {\n this._eachValues = undefined;\n }\n this._promise._captureStackTrace();\n this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n if (this._eachValues !== undefined &&\n this._eachValues !== null &&\n accum !== INTERNAL) {\n this._eachValues.push(accum);\n }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n if (this._eachValues !== null) {\n this._eachValues.push(value);\n }\n return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n this._resolve(this._eachValues !== undefined ? this._eachValues\n : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n this._promise._resolveCallback(value);\n this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n if (sender === this._initialValue) return this._cancel();\n if (this._isResolved()) return;\n this._resultCancelled$();\n if (this._currentCancellable instanceof Promise) {\n this._currentCancellable.cancel();\n }\n if (this._initialValue instanceof Promise) {\n this._initialValue.cancel();\n }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n this._values = values;\n var value;\n var i;\n var length = values.length;\n if (this._initialValue !== undefined) {\n value = this._initialValue;\n i = 0;\n } else {\n value = Promise.resolve(values[0]);\n i = 1;\n }\n\n this._currentCancellable = value;\n\n for (var j = i; j < length; ++j) {\n var maybePromise = values[j];\n if (maybePromise instanceof Promise) {\n maybePromise.suppressUnhandledRejections();\n }\n }\n\n if (!value.isRejected()) {\n for (; i < length; ++i) {\n var ctx = {\n accum: null,\n value: values[i],\n index: i,\n length: length,\n array: this\n };\n\n value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n\n if ((i & 127) === 0) {\n value._setNoAsyncGuarantee();\n }\n }\n }\n\n if (this._eachValues !== undefined) {\n value = value\n ._then(this._eachComplete, undefined, undefined, this, undefined);\n }\n value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n if (this.isFulfilled()) {\n array._resolve(valueOrReason);\n } else {\n array._reject(valueOrReason);\n }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n return array.promise();\n}\n\nfunction gotAccum(accum) {\n this.accum = accum;\n this.array._gotAccum(accum);\n var value = tryConvertToPromise(this.value, this.array._promise);\n if (value instanceof Promise) {\n this.array._currentCancellable = value;\n return value._then(gotValue, undefined, undefined, this, undefined);\n } else {\n return gotValue.call(this, value);\n }\n}\n\nfunction gotValue(value) {\n var array = this.array;\n var promise = array._promise;\n var fn = tryCatch(array._fn);\n promise._pushContext();\n var ret;\n if (array._eachValues !== undefined) {\n ret = fn.call(promise._boundValue(), value, this.index, this.length);\n } else {\n ret = fn.call(promise._boundValue(),\n this.accum, value, this.index, this.length);\n }\n if (ret instanceof Promise) {\n array._currentCancellable = ret;\n }\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n promise\n );\n return ret;\n}\n};\n\n},{\"./util\":36}],29:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n var GlobalSetImmediate = global.setImmediate;\n var ProcessNextTick = process.nextTick;\n schedule = util.isRecentNode\n ? function(fn) { GlobalSetImmediate.call(global, fn); }\n : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n typeof NativePromise.resolve === \"function\") {\n var nativePromise = NativePromise.resolve();\n schedule = function(fn) {\n nativePromise.then(fn);\n };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n !(typeof window !== \"undefined\" &&\n window.navigator &&\n (window.navigator.standalone || window.cordova)) &&\n (\"classList\" in document.documentElement)) {\n schedule = (function() {\n var div = document.createElement(\"div\");\n var opts = {attributes: true};\n var toggleScheduled = false;\n var div2 = document.createElement(\"div\");\n var o2 = new MutationObserver(function() {\n div.classList.toggle(\"foo\");\n toggleScheduled = false;\n });\n o2.observe(div2, opts);\n\n var scheduleToggle = function() {\n if (toggleScheduled) return;\n toggleScheduled = true;\n div2.classList.toggle(\"foo\");\n };\n\n return function schedule(fn) {\n var o = new MutationObserver(function() {\n o.disconnect();\n fn();\n });\n o.observe(div, opts);\n scheduleToggle();\n };\n })();\n} else if (typeof setImmediate !== \"undefined\") {\n schedule = function (fn) {\n setImmediate(fn);\n };\n} else if (typeof setTimeout !== \"undefined\") {\n schedule = function (fn) {\n setTimeout(fn, 0);\n };\n} else {\n schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":36}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util\");\n\nfunction SettledPromiseArray(values) {\n this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n this._values[index] = inspection;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var ret = new PromiseInspection();\n ret._bitField = 33554432;\n ret._settledValueField = value;\n return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n var ret = new PromiseInspection();\n ret._bitField = 16777216;\n ret._settledValueField = reason;\n return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n debug.deprecated(\".settle()\", \".reflect()\");\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.allSettled = function (promises) {\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n return Promise.settle(this);\n};\n};\n\n},{\"./util\":36}],31:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar RangeError = _dereq_(\"./errors\").RangeError;\nvar AggregateError = _dereq_(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n this.constructor$(values);\n this._howMany = 0;\n this._unwrap = false;\n this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n if (!this._initialized) {\n return;\n }\n if (this._howMany === 0) {\n this._resolve([]);\n return;\n }\n this._init$(undefined, -5);\n var isArrayResolved = isArray(this._values);\n if (!this._isResolved() &&\n isArrayResolved &&\n this._howMany > this._canPossiblyFulfill()) {\n this._reject(this._getRangeError(this.length()));\n }\n};\n\nSomePromiseArray.prototype.init = function () {\n this._initialized = true;\n this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n this._addFulfilled(value);\n if (this._fulfilled() === this.howMany()) {\n this._values.length = this.howMany();\n if (this.howMany() === 1 && this._unwrap) {\n this._resolve(this._values[0]);\n } else {\n this._resolve(this._values);\n }\n return true;\n }\n return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n this._addRejected(reason);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n if (this._values instanceof Promise || this._values == null) {\n return this._cancel();\n }\n this._addRejected(CANCELLATION);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n if (this.howMany() > this._canPossiblyFulfill()) {\n var e = new AggregateError();\n for (var i = this.length(); i < this._values.length; ++i) {\n if (this._values[i] !== CANCELLATION) {\n e.push(this._values[i]);\n }\n }\n if (e.length > 0) {\n this._reject(e);\n } else {\n this._cancel();\n }\n return true;\n }\n return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n var message = \"Input array must contain at least \" +\n this._howMany + \" items but contains only \" + count + \" items\";\n return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n if ((howMany | 0) !== howMany || howMany < 0) {\n return apiRejection(\"expecting a positive integer\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(howMany);\n ret.init();\n return promise;\n}\n\nPromise.some = function (promises, howMany) {\n return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors\":12,\"./util\":36}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n if (promise !== undefined) {\n promise = promise._target();\n this._bitField = promise._bitField;\n this._settledValueField = promise._isFateSealed()\n ? promise._settledValue() : undefined;\n }\n else {\n this._bitField = 0;\n this._settledValueField = undefined;\n }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n if (!this.isFulfilled()) {\n throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n if (!this.isRejected()) {\n throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n var target = this._target();\n target._unsetRejectionIsUnhandled();\n return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n this._unsetRejectionIsUnhandled();\n return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n if (isObject(obj)) {\n if (obj instanceof Promise) return obj;\n var then = getThen(obj);\n if (then === errorObj) {\n if (context) context._pushContext();\n var ret = Promise.reject(then.e);\n if (context) context._popContext();\n return ret;\n } else if (typeof then === \"function\") {\n if (isAnyBluebirdPromise(obj)) {\n var ret = new Promise(INTERNAL);\n obj._then(\n ret._fulfill,\n ret._reject,\n undefined,\n ret,\n null\n );\n return ret;\n }\n return doThenable(obj, then, context);\n }\n }\n return obj;\n}\n\nfunction doGetThen(obj) {\n return obj.then;\n}\n\nfunction getThen(obj) {\n try {\n return doGetThen(obj);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n try {\n return hasProp.call(obj, \"_promise0\");\n } catch (e) {\n return false;\n }\n}\n\nfunction doThenable(x, then, context) {\n var promise = new Promise(INTERNAL);\n var ret = promise;\n if (context) context._pushContext();\n promise._captureStackTrace();\n if (context) context._popContext();\n var synchronous = true;\n var result = util.tryCatch(then).call(x, resolve, reject);\n synchronous = false;\n\n if (promise && result === errorObj) {\n promise._rejectCallback(result.e, true, true);\n promise = null;\n }\n\n function resolve(value) {\n if (!promise) return;\n promise._resolveCallback(value);\n promise = null;\n }\n\n function reject(reason) {\n if (!promise) return;\n promise._rejectCallback(reason, synchronous, true);\n promise = null;\n }\n return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util\":36}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = _dereq_(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle) {\n this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n var ret;\n var handle;\n if (value !== undefined) {\n ret = Promise.resolve(value)\n ._then(afterValue, null, null, ms, undefined);\n if (debug.cancellation() && value instanceof Promise) {\n ret._setOnCancel(value);\n }\n } else {\n ret = new Promise(INTERNAL);\n handle = setTimeout(function() { ret._fulfill(); }, +ms);\n if (debug.cancellation()) {\n ret._setOnCancel(new HandleWrapper(handle));\n }\n ret._captureStackTrace();\n }\n ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n var err;\n if (typeof message !== \"string\") {\n if (message instanceof Error) {\n err = message;\n } else {\n err = new TimeoutError(\"operation timed out\");\n }\n } else {\n err = new TimeoutError(message);\n }\n util.markAsOriginatingFromRejection(err);\n promise._attachExtraTrace(err);\n promise._reject(err);\n\n if (parent != null) {\n parent.cancel();\n }\n};\n\nfunction successClear(value) {\n clearTimeout(this.handle);\n return value;\n}\n\nfunction failureClear(reason) {\n clearTimeout(this.handle);\n throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n ms = +ms;\n var ret, parent;\n\n var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n if (ret.isPending()) {\n afterTimeout(ret, message, parent);\n }\n }, ms));\n\n if (debug.cancellation()) {\n parent = this.then();\n ret = parent._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n ret._setOnCancel(handleWrapper);\n } else {\n ret = this._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n }\n\n return ret;\n};\n\n};\n\n},{\"./util\":36}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n createContext, INTERNAL, debug) {\n var util = _dereq_(\"./util\");\n var TypeError = _dereq_(\"./errors\").TypeError;\n var inherits = _dereq_(\"./util\").inherits;\n var errorObj = util.errorObj;\n var tryCatch = util.tryCatch;\n var NULL = {};\n\n function thrower(e) {\n setTimeout(function(){throw e;}, 0);\n }\n\n function castPreservingDisposable(thenable) {\n var maybePromise = tryConvertToPromise(thenable);\n if (maybePromise !== thenable &&\n typeof thenable._isDisposable === \"function\" &&\n typeof thenable._getDisposer === \"function\" &&\n thenable._isDisposable()) {\n maybePromise._setDisposable(thenable._getDisposer());\n }\n return maybePromise;\n }\n function dispose(resources, inspection) {\n var i = 0;\n var len = resources.length;\n var ret = new Promise(INTERNAL);\n function iterator() {\n if (i >= len) return ret._fulfill();\n var maybePromise = castPreservingDisposable(resources[i++]);\n if (maybePromise instanceof Promise &&\n maybePromise._isDisposable()) {\n try {\n maybePromise = tryConvertToPromise(\n maybePromise._getDisposer().tryDispose(inspection),\n resources.promise);\n } catch (e) {\n return thrower(e);\n }\n if (maybePromise instanceof Promise) {\n return maybePromise._then(iterator, thrower,\n null, null, null);\n }\n }\n iterator();\n }\n iterator();\n return ret;\n }\n\n function Disposer(data, promise, context) {\n this._data = data;\n this._promise = promise;\n this._context = context;\n }\n\n Disposer.prototype.data = function () {\n return this._data;\n };\n\n Disposer.prototype.promise = function () {\n return this._promise;\n };\n\n Disposer.prototype.resource = function () {\n if (this.promise().isFulfilled()) {\n return this.promise().value();\n }\n return NULL;\n };\n\n Disposer.prototype.tryDispose = function(inspection) {\n var resource = this.resource();\n var context = this._context;\n if (context !== undefined) context._pushContext();\n var ret = resource !== NULL\n ? this.doDispose(resource, inspection) : null;\n if (context !== undefined) context._popContext();\n this._promise._unsetDisposable();\n this._data = null;\n return ret;\n };\n\n Disposer.isDisposer = function (d) {\n return (d != null &&\n typeof d.resource === \"function\" &&\n typeof d.tryDispose === \"function\");\n };\n\n function FunctionDisposer(fn, promise, context) {\n this.constructor$(fn, promise, context);\n }\n inherits(FunctionDisposer, Disposer);\n\n FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n var fn = this.data();\n return fn.call(resource, resource, inspection);\n };\n\n function maybeUnwrapDisposer(value) {\n if (Disposer.isDisposer(value)) {\n this.resources[this.index]._setDisposable(value);\n return value.promise();\n }\n return value;\n }\n\n function ResourceList(length) {\n this.length = length;\n this.promise = null;\n this[length-1] = null;\n }\n\n ResourceList.prototype._resultCancelled = function() {\n var len = this.length;\n for (var i = 0; i < len; ++i) {\n var item = this[i];\n if (item instanceof Promise) {\n item.cancel();\n }\n }\n };\n\n Promise.using = function () {\n var len = arguments.length;\n if (len < 2) return apiRejection(\n \"you must pass at least 2 arguments to Promise.using\");\n var fn = arguments[len - 1];\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var input;\n var spreadArgs = true;\n if (len === 2 && Array.isArray(arguments[0])) {\n input = arguments[0];\n len = input.length;\n spreadArgs = false;\n } else {\n input = arguments;\n len--;\n }\n var resources = new ResourceList(len);\n for (var i = 0; i < len; ++i) {\n var resource = input[i];\n if (Disposer.isDisposer(resource)) {\n var disposer = resource;\n resource = resource.promise();\n resource._setDisposable(disposer);\n } else {\n var maybePromise = tryConvertToPromise(resource);\n if (maybePromise instanceof Promise) {\n resource =\n maybePromise._then(maybeUnwrapDisposer, null, null, {\n resources: resources,\n index: i\n }, undefined);\n }\n }\n resources[i] = resource;\n }\n\n var reflectedResources = new Array(resources.length);\n for (var i = 0; i < reflectedResources.length; ++i) {\n reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n }\n\n var resultPromise = Promise.all(reflectedResources)\n .then(function(inspections) {\n for (var i = 0; i < inspections.length; ++i) {\n var inspection = inspections[i];\n if (inspection.isRejected()) {\n errorObj.e = inspection.error();\n return errorObj;\n } else if (!inspection.isFulfilled()) {\n resultPromise.cancel();\n return;\n }\n inspections[i] = inspection.value();\n }\n promise._pushContext();\n\n fn = tryCatch(fn);\n var ret = spreadArgs\n ? fn.apply(undefined, inspections) : fn(inspections);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret, promiseCreated, \"Promise.using\", promise);\n return ret;\n });\n\n var promise = resultPromise.lastly(function() {\n var inspection = new Promise.PromiseInspection(resultPromise);\n return dispose(resources, inspection);\n });\n resources.promise = promise;\n promise._setOnCancel(resources);\n return promise;\n };\n\n Promise.prototype._setDisposable = function (disposer) {\n this._bitField = this._bitField | 131072;\n this._disposer = disposer;\n };\n\n Promise.prototype._isDisposable = function () {\n return (this._bitField & 131072) > 0;\n };\n\n Promise.prototype._getDisposer = function () {\n return this._disposer;\n };\n\n Promise.prototype._unsetDisposable = function () {\n this._bitField = this._bitField & (~131072);\n this._disposer = undefined;\n };\n\n Promise.prototype.disposer = function (fn) {\n if (typeof fn === \"function\") {\n return new FunctionDisposer(fn, this, createContext());\n }\n throw new TypeError();\n };\n\n};\n\n},{\"./errors\":12,\"./util\":36}],36:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n typeof global !== \"undefined\" ? global :\n this !== undefined ? this : null;\n\nfunction tryCatcher() {\n try {\n var target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n var hasProp = {}.hasOwnProperty;\n\n function T() {\n this.constructor = Child;\n this.constructor$ = Parent;\n for (var propertyName in Parent.prototype) {\n if (hasProp.call(Parent.prototype, propertyName) &&\n propertyName.charAt(propertyName.length-1) !== \"$\"\n ) {\n this[propertyName + \"$\"] = Parent.prototype[propertyName];\n }\n }\n }\n T.prototype = Parent.prototype;\n Child.prototype = new T();\n return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n return val == null || val === true || val === false ||\n typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n return typeof value === \"function\" ||\n typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n if (!isPrimitive(maybeError)) return maybeError;\n\n return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n var len = target.length;\n var ret = new Array(len + 1);\n var i;\n for (i = 0; i < len; ++i) {\n ret[i] = target[i];\n }\n ret[i] = appendee;\n return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n if (es5.isES5) {\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n if (desc != null) {\n return desc.get == null && desc.set == null\n ? desc.value\n : defaultValue;\n }\n } else {\n return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n if (isPrimitive(obj)) return obj;\n var descriptor = {\n value: value,\n configurable: true,\n enumerable: false,\n writable: true\n };\n es5.defineProperty(obj, name, descriptor);\n return obj;\n}\n\nfunction thrower(r) {\n throw r;\n}\n\nvar inheritedDataKeys = (function() {\n var excludedPrototypes = [\n Array.prototype,\n Object.prototype,\n Function.prototype\n ];\n\n var isExcludedProto = function(val) {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (excludedPrototypes[i] === val) {\n return true;\n }\n }\n return false;\n };\n\n if (es5.isES5) {\n var getKeys = Object.getOwnPropertyNames;\n return function(obj) {\n var ret = [];\n var visitedKeys = Object.create(null);\n while (obj != null && !isExcludedProto(obj)) {\n var keys;\n try {\n keys = getKeys(obj);\n } catch (e) {\n return ret;\n }\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (visitedKeys[key]) continue;\n visitedKeys[key] = true;\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n if (desc != null && desc.get == null && desc.set == null) {\n ret.push(key);\n }\n }\n obj = es5.getPrototypeOf(obj);\n }\n return ret;\n };\n } else {\n var hasProp = {}.hasOwnProperty;\n return function(obj) {\n if (isExcludedProto(obj)) return [];\n var ret = [];\n\n /*jshint forin:false */\n enumeration: for (var key in obj) {\n if (hasProp.call(obj, key)) {\n ret.push(key);\n } else {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (hasProp.call(excludedPrototypes[i], key)) {\n continue enumeration;\n }\n }\n ret.push(key);\n }\n }\n return ret;\n };\n }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n try {\n if (typeof fn === \"function\") {\n var keys = es5.names(fn.prototype);\n\n var hasMethods = es5.isES5 && keys.length > 1;\n var hasMethodsOtherThanConstructor = keys.length > 0 &&\n !(keys.length === 1 && keys[0] === \"constructor\");\n var hasThisAssignmentAndStaticMethods =\n thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n if (hasMethods || hasMethodsOtherThanConstructor ||\n hasThisAssignmentAndStaticMethods) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n}\n\nfunction toFastProperties(obj) {\n /*jshint -W027,-W055,-W031*/\n function FakeConstructor() {}\n FakeConstructor.prototype = obj;\n var receiver = new FakeConstructor();\n function ic() {\n return typeof receiver.foo;\n }\n ic();\n ic();\n return obj;\n eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n var ret = new Array(count);\n for(var i = 0; i < count; ++i) {\n ret[i] = prefix + i + suffix;\n }\n return ret;\n}\n\nfunction safeToString(obj) {\n try {\n return obj + \"\";\n } catch (e) {\n return \"[no string representation]\";\n }\n}\n\nfunction isError(obj) {\n return obj instanceof Error ||\n (obj !== null &&\n typeof obj === \"object\" &&\n typeof obj.message === \"string\" &&\n typeof obj.name === \"string\");\n}\n\nfunction markAsOriginatingFromRejection(e) {\n try {\n notEnumerableProp(e, \"isOperational\", true);\n }\n catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n if (e == null) return false;\n return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n if (!(\"stack\" in new Error())) {\n return function(value) {\n if (canAttachTrace(value)) return value;\n try {throw new Error(safeToString(value));}\n catch(err) {return err;}\n };\n } else {\n return function(value) {\n if (canAttachTrace(value)) return value;\n return new Error(safeToString(value));\n };\n }\n})();\n\nfunction classString(obj) {\n return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n var keys = es5.names(from);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (filter(key)) {\n try {\n es5.defineProperty(to, key, es5.getDescriptor(from, key));\n } catch (ignore) {}\n }\n }\n}\n\nvar asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n }\n return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n return Array.from(v);\n } : function(v) {\n var ret = [];\n var it = v[Symbol.iterator]();\n var itResult;\n while (!((itResult = it.next()).done)) {\n ret.push(itResult.value);\n }\n return ret;\n };\n\n asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n return ArrayFrom(v);\n }\n return null;\n };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\";\n\nfunction env(key) {\n return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n if (typeof Promise === \"function\") {\n try {\n var promise = new Promise(function(){});\n if (classString(promise) === \"[object Promise]\") {\n return Promise;\n }\n } catch (e) {}\n }\n}\n\nvar reflectHandler;\nfunction contextBind(ctx, cb) {\n if (ctx === null ||\n typeof cb !== \"function\" ||\n cb === reflectHandler) {\n return cb;\n }\n\n if (ctx.domain !== null) {\n cb = ctx.domain.bind(cb);\n }\n\n var async = ctx.async;\n if (async !== null) {\n var old = cb;\n cb = function() {\n var args = (new Array(2)).concat([].slice.call(arguments));;\n args[0] = old;\n args[1] = this;\n return async.runInAsyncScope.apply(async, args);\n };\n }\n return cb;\n}\n\nvar ret = {\n setReflectHandler: function(fn) {\n reflectHandler = fn;\n },\n isClass: isClass,\n isIdentifier: isIdentifier,\n inheritedDataKeys: inheritedDataKeys,\n getDataPropertyOrDefault: getDataPropertyOrDefault,\n thrower: thrower,\n isArray: es5.isArray,\n asArray: asArray,\n notEnumerableProp: notEnumerableProp,\n isPrimitive: isPrimitive,\n isObject: isObject,\n isError: isError,\n canEvaluate: canEvaluate,\n errorObj: errorObj,\n tryCatch: tryCatch,\n inherits: inherits,\n withAppended: withAppended,\n maybeWrapAsError: maybeWrapAsError,\n toFastProperties: toFastProperties,\n filledRange: filledRange,\n toString: safeToString,\n canAttachTrace: canAttachTrace,\n ensureErrorObject: ensureErrorObject,\n originatesFromRejection: originatesFromRejection,\n markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n classString: classString,\n copyDescriptors: copyDescriptors,\n isNode: isNode,\n hasEnvVariables: hasEnvVariables,\n env: env,\n global: globalObject,\n getNativePromise: getNativePromise,\n contextBind: contextBind\n};\nret.isRecentNode = ret.isNode && (function() {\n var version;\n if (process.versions && process.versions.node) {\n version = process.versions.node.split(\".\").map(Number);\n } else if (process.version) {\n version = process.version.split(\".\").map(Number);\n }\n return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\nret.nodeSupportsAsyncResource = ret.isNode && (function() {\n var supportsAsync = false;\n try {\n var res = _dereq_(\"async_hooks\").AsyncResource;\n supportsAsync = typeof res.prototype.runInAsyncScope === \"function\";\n } catch (e) {\n supportsAsync = false;\n }\n return supportsAsync;\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5\":13,\"async_hooks\":undefined}]},{},[4])(4)\n}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; }","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","module.exports = require('./browser/algorithms.json')\n","var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","/*jshint node:true */\n'use strict';\nvar Buffer = require('buffer').Buffer; // browserify\nvar SlowBuffer = require('buffer').SlowBuffer;\n\nmodule.exports = bufferEq;\n\nfunction bufferEq(a, b) {\n\n // shortcutting on type is necessary for correctness\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n return false;\n }\n\n // buffer sizes should be well-known information, so despite this\n // shortcutting, it doesn't leak any information about the *contents* of the\n // buffers.\n if (a.length !== b.length) {\n return false;\n }\n\n var c = 0;\n for (var i = 0; i < a.length; i++) {\n /*jshint bitwise:false */\n c |= a[i] ^ b[i]; // XOR\n }\n return c === 0;\n}\n\nbufferEq.install = function() {\n Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal(that) {\n return bufferEq(this, that);\n };\n};\n\nvar origBufEqual = Buffer.prototype.equal;\nvar origSlowBufEqual = SlowBuffer.prototype.equal;\nbufferEq.restore = function() {\n Buffer.prototype.equal = origBufEqual;\n SlowBuffer.prototype.equal = origSlowBufEqual;\n};\n","'use strict';\n\n// JavaScript is numerically challenged\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nvar SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// The maximum contiguous integer that can be held in a IEEE754 double\nvar MAX_INT = 0x1fffffffffffff;\n\nfunction isContiguousInt(val) {\n return val <= MAX_INT && val >= -MAX_INT;\n}\n\nfunction assertContiguousInt(val) {\n if (!isContiguousInt(val)) {\n throw new TypeError(\"number cannot be represented as a contiguous integer\");\n }\n}\n\nmodule.exports.isContiguousInt = isContiguousInt;\nmodule.exports.assertContiguousInt = assertContiguousInt;\n\n// Fill in the regular procedures\n['UInt', 'Int'].forEach(function (sign) {\n var suffix = sign + '8';\n module.exports['read' + suffix] =\n Buffer.prototype['read' + suffix].call;\n module.exports['write' + suffix] =\n Buffer.prototype['write' + suffix].call;\n\n ['16', '32'].forEach(function (size) {\n ['LE', 'BE'].forEach(function (endian) {\n var suffix = sign + size + endian;\n var read = Buffer.prototype['read' + suffix];\n module.exports['read' + suffix] =\n function (buf, offset) {\n return read.call(buf, offset);\n };\n var write = Buffer.prototype['write' + suffix];\n module.exports['write' + suffix] =\n function (buf, val, offset) {\n return write.call(buf, val, offset);\n };\n });\n });\n});\n\n// Check that a value is an integer within the given range\nfunction check_value(val, min, max) {\n val = +val;\n if (typeof(val) != 'number' || val < min || val > max || Math.floor(val) !== val) {\n throw new TypeError(\"\\\"value\\\" argument is out of bounds\");\n }\n return val;\n}\n\n// Check that something is within the Buffer bounds\nfunction check_bounds(buf, offset, len) {\n if (offset < 0 || offset + len > buf.length) {\n throw new RangeError(\"Index out of range\");\n }\n}\n\nfunction readUInt24BE(buf, offset) {\n return buf.readUInt8(offset) << 16 | buf.readUInt16BE(offset + 1);\n}\nmodule.exports.readUInt24BE = readUInt24BE;\n\nfunction writeUInt24BE(buf, val, offset) {\n val = check_value(val, 0, 0xffffff);\n check_bounds(buf, offset, 3);\n buf.writeUInt8(val >>> 16, offset);\n buf.writeUInt16BE(val & 0xffff, offset + 1);\n}\nmodule.exports.writeUInt24BE = writeUInt24BE;\n\nfunction readUInt40BE(buf, offset) {\n return (buf.readUInt8(offset) || 0) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 1);\n}\nmodule.exports.readUInt40BE = readUInt40BE;\n\nfunction writeUInt40BE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffff);\n check_bounds(buf, offset, 5);\n buf.writeUInt8(Math.floor(val * SHIFT_RIGHT_32), offset);\n buf.writeInt32BE(val & -1, offset + 1);\n}\nmodule.exports.writeUInt40BE = writeUInt40BE;\n\nfunction readUInt48BE(buf, offset) {\n return buf.readUInt16BE(offset) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 2);\n}\nmodule.exports.readUInt48BE = readUInt48BE;\n\nfunction writeUInt48BE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffffff);\n check_bounds(buf, offset, 6);\n buf.writeUInt16BE(Math.floor(val * SHIFT_RIGHT_32), offset);\n buf.writeInt32BE(val & -1, offset + 2);\n}\nmodule.exports.writeUInt48BE = writeUInt48BE;\n\nfunction readUInt56BE(buf, offset) {\n return ((buf.readUInt8(offset) || 0) << 16 | buf.readUInt16BE(offset + 1)) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 3);\n}\nmodule.exports.readUInt56BE = readUInt56BE;\n\nfunction writeUInt56BE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffffffff);\n check_bounds(buf, offset, 7);\n\n if (val < 0x100000000000000) {\n var hi = Math.floor(val * SHIFT_RIGHT_32);\n buf.writeUInt8(hi >>> 16, offset);\n buf.writeUInt16BE(hi & 0xffff, offset + 1);\n buf.writeInt32BE(val & -1, offset + 3);\n } else {\n // Special case because 2^56-1 gets rounded up to 2^56\n buf[offset] = 0xff;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0xff;\n }\n}\nmodule.exports.writeUInt56BE = writeUInt56BE;\n\nfunction readUInt64BE(buf, offset) {\n return buf.readUInt32BE(offset) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 4);\n}\nmodule.exports.readUInt64BE = readUInt64BE;\n\nfunction writeUInt64BE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffffffffff);\n check_bounds(buf, offset, 8);\n\n if (val < 0x10000000000000000) {\n buf.writeUInt32BE(Math.floor(val * SHIFT_RIGHT_32), offset);\n buf.writeInt32BE(val & -1, offset + 4);\n } else {\n // Special case because 2^64-1 gets rounded up to 2^64\n buf[offset] = 0xff;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0xff;\n buf[offset+7] = 0xff;\n }\n}\nmodule.exports.writeUInt64BE = writeUInt64BE;\n\nfunction readUInt24LE(buf, offset) {\n return buf.readUInt8(offset + 2) << 16 | buf.readUInt16LE(offset);\n}\nmodule.exports.readUInt24LE = readUInt24LE;\n\nfunction writeUInt24LE(buf, val, offset) {\n val = check_value(val, 0, 0xffffff);\n check_bounds(buf, offset, 3);\n\n buf.writeUInt16LE(val & 0xffff, offset);\n buf.writeUInt8(val >>> 16, offset + 2);\n}\nmodule.exports.writeUInt24LE = writeUInt24LE;\n\nfunction readUInt40LE(buf, offset) {\n return (buf.readUInt8(offset + 4) || 0) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readUInt40LE = readUInt40LE;\n\nfunction writeUInt40LE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffff);\n check_bounds(buf, offset, 5);\n buf.writeInt32LE(val & -1, offset);\n buf.writeUInt8(Math.floor(val * SHIFT_RIGHT_32), offset + 4);\n}\nmodule.exports.writeUInt40LE = writeUInt40LE;\n\nfunction readUInt48LE(buf, offset) {\n return buf.readUInt16LE(offset + 4) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readUInt48LE = readUInt48LE;\n\nfunction writeUInt48LE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffffff);\n check_bounds(buf, offset, 6);\n buf.writeInt32LE(val & -1, offset);\n buf.writeUInt16LE(Math.floor(val * SHIFT_RIGHT_32), offset + 4);\n}\nmodule.exports.writeUInt48LE = writeUInt48LE;\n\nfunction readUInt56LE(buf, offset) {\n return ((buf.readUInt8(offset + 6) || 0) << 16 | buf.readUInt16LE(offset + 4)) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readUInt56LE = readUInt56LE;\n\nfunction writeUInt56LE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffffffff);\n check_bounds(buf, offset, 7);\n\n if (val < 0x100000000000000) {\n buf.writeInt32LE(val & -1, offset);\n var hi = Math.floor(val * SHIFT_RIGHT_32);\n buf.writeUInt16LE(hi & 0xffff, offset + 4);\n buf.writeUInt8(hi >>> 16, offset + 6);\n } else {\n // Special case because 2^56-1 gets rounded up to 2^56\n buf[offset] = 0xff;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0xff;\n }\n}\nmodule.exports.writeUInt56LE = writeUInt56LE;\n\nfunction readUInt64LE(buf, offset) {\n return buf.readUInt32LE(offset + 4) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readUInt64LE = readUInt64LE;\n\nfunction writeUInt64LE(buf, val, offset) {\n val = check_value(val, 0, 0xffffffffffffffff);\n check_bounds(buf, offset, 8);\n\n if (val < 0x10000000000000000) {\n buf.writeInt32LE(val & -1, offset);\n buf.writeUInt32LE(Math.floor(val * SHIFT_RIGHT_32), offset + 4);\n } else {\n // Special case because 2^64-1 gets rounded up to 2^64\n buf[offset] = 0xff;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0xff;\n buf[offset+7] = 0xff;\n }\n}\nmodule.exports.writeUInt64LE = writeUInt64LE;\n\n\nfunction readInt24BE(buf, offset) {\n return (buf.readInt8(offset) << 16) + buf.readUInt16BE(offset + 1);\n}\nmodule.exports.readInt24BE = readInt24BE;\n\nfunction writeInt24BE(buf, val, offset) {\n val = check_value(val, -0x800000, 0x7fffff);\n check_bounds(buf, offset, 3);\n buf.writeInt8(val >> 16, offset);\n buf.writeUInt16BE(val & 0xffff, offset + 1);\n}\nmodule.exports.writeInt24BE = writeInt24BE;\n\nfunction readInt40BE(buf, offset) {\n return (buf.readInt8(offset) || 0) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 1);\n}\nmodule.exports.readInt40BE = readInt40BE;\n\nfunction writeInt40BE(buf, val, offset) {\n val = check_value(val, -0x8000000000, 0x7fffffffff);\n check_bounds(buf, offset, 5);\n buf.writeInt8(Math.floor(val * SHIFT_RIGHT_32), offset);\n buf.writeInt32BE(val & -1, offset + 1);\n}\nmodule.exports.writeInt40BE = writeInt40BE;\n\nfunction readInt48BE(buf, offset) {\n return buf.readInt16BE(offset) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 2);\n}\nmodule.exports.readInt48BE = readInt48BE;\n\nfunction writeInt48BE(buf, val, offset) {\n val = check_value(val, -0x800000000000, 0x7fffffffffff);\n check_bounds(buf, offset, 6);\n buf.writeInt16BE(Math.floor(val * SHIFT_RIGHT_32), offset);\n buf.writeInt32BE(val & -1, offset + 2);\n}\nmodule.exports.writeInt48BE = writeInt48BE;\n\nfunction readInt56BE(buf, offset) {\n return (((buf.readInt8(offset) || 0) << 16) + buf.readUInt16BE(offset + 1)) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 3);\n}\nmodule.exports.readInt56BE = readInt56BE;\n\nfunction writeInt56BE(buf, val, offset) {\n val = check_value(val, -0x800000000000000, 0x7fffffffffffff);\n check_bounds(buf, offset, 7);\n\n if (val < 0x80000000000000) {\n var hi = Math.floor(val * SHIFT_RIGHT_32);\n buf.writeInt8(hi >> 16, offset);\n buf.writeUInt16BE(hi & 0xffff, offset + 1);\n buf.writeInt32BE(val & -1, offset + 3);\n } else {\n // Special case because 2^55-1 gets rounded up to 2^55\n buf[offset] = 0x7f;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0xff;\n }\n}\nmodule.exports.writeInt56BE = writeInt56BE;\n\nfunction readInt64BE(buf, offset) {\n return buf.readInt32BE(offset) * SHIFT_LEFT_32 + buf.readUInt32BE(offset + 4);\n}\nmodule.exports.readInt64BE = readInt64BE;\n\nfunction writeInt64BE(buf, val, offset) {\n val = check_value(val, -0x800000000000000000, 0x7fffffffffffffff);\n check_bounds(buf, offset, 8);\n\n if (val < 0x8000000000000000) {\n buf.writeInt32BE(Math.floor(val * SHIFT_RIGHT_32), offset);\n buf.writeInt32BE(val & -1, offset + 4);\n } else {\n // Special case because 2^63-1 gets rounded up to 2^63\n buf[offset] = 0x7f;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0xff;\n buf[offset+7] = 0xff;\n }\n}\nmodule.exports.writeInt64BE = writeInt64BE;\n\nfunction readInt24LE(buf, offset) {\n return (buf.readInt8(offset + 2) << 16) + buf.readUInt16LE(offset);\n}\nmodule.exports.readInt24LE = readInt24LE;\n\nfunction writeInt24LE(buf, val, offset) {\n val = check_value(val, -0x800000, 0x7fffff);\n check_bounds(buf, offset, 3);\n buf.writeUInt16LE(val & 0xffff, offset);\n buf.writeInt8(val >> 16, offset + 2);\n}\nmodule.exports.writeInt24LE = writeInt24LE;\n\nfunction readInt40LE(buf, offset) {\n return (buf.readInt8(offset + 4) || 0) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readInt40LE = readInt40LE;\n\nfunction writeInt40LE(buf, val, offset) {\n val = check_value(val, -0x8000000000, 0x7fffffffff);\n check_bounds(buf, offset, 5);\n buf.writeInt32LE(val & -1, offset);\n buf.writeInt8(Math.floor(val * SHIFT_RIGHT_32), offset + 4);\n}\nmodule.exports.writeInt40LE = writeInt40LE;\n\nfunction readInt48LE(buf, offset) {\n return buf.readInt16LE(offset + 4) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readInt48LE = readInt48LE;\n\nfunction writeInt48LE(buf, val, offset) {\n val = check_value(val, -0x800000000000, 0x7fffffffffff);\n check_bounds(buf, offset, 6);\n buf.writeInt32LE(val & -1, offset);\n buf.writeInt16LE(Math.floor(val * SHIFT_RIGHT_32), offset + 4);\n}\nmodule.exports.writeInt48LE = writeInt48LE;\n\nfunction readInt56LE(buf, offset) {\n return (((buf.readInt8(offset + 6) || 0) << 16) + buf.readUInt16LE(offset + 4)) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readInt56LE = readInt56LE;\n\nfunction writeInt56LE(buf, val, offset) {\n val = check_value(val, -0x80000000000000, 0x7fffffffffffff);\n check_bounds(buf, offset, 7);\n\n if (val < 0x80000000000000) {\n buf.writeInt32LE(val & -1, offset);\n var hi = Math.floor(val * SHIFT_RIGHT_32);\n buf.writeUInt16LE(hi & 0xffff, offset + 4);\n buf.writeInt8(hi >> 16, offset + 6);\n } else {\n // Special case because 2^55-1 gets rounded up to 2^55\n buf[offset] = 0xff;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0x7f;\n }\n}\nmodule.exports.writeInt56LE = writeInt56LE;\n\nfunction readInt64LE(buf, offset) {\n return buf.readInt32LE(offset + 4) * SHIFT_LEFT_32 + buf.readUInt32LE(offset);\n}\nmodule.exports.readInt64LE = readInt64LE;\n\nfunction writeInt64LE(buf, val, offset) {\n val = check_value(val, -0x8000000000000000, 0x7fffffffffffffff);\n check_bounds(buf, offset, 8);\n\n if (val < 0x8000000000000000) {\n buf.writeInt32LE(val & -1, offset);\n buf.writeInt32LE(Math.floor(val * SHIFT_RIGHT_32), offset + 4);\n } else {\n // Special case because 2^55-1 gets rounded up to 2^55\n buf[offset] = 0xff;\n buf[offset+1] = 0xff;\n buf[offset+2] = 0xff;\n buf[offset+3] = 0xff;\n buf[offset+4] = 0xff;\n buf[offset+5] = 0xff;\n buf[offset+6] = 0xff;\n buf[offset+7] = 0x7f;\n }\n}\nmodule.exports.writeInt64LE = writeInt64LE;\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","module.exports = {\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Unordered Collection\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","function Caseless (dict) {\n this.dict = dict || {}\n}\nCaseless.prototype.set = function (name, value, clobber) {\n if (typeof name === 'object') {\n for (var i in name) {\n this.set(i, name[i], value)\n }\n } else {\n if (typeof clobber === 'undefined') clobber = true\n var has = this.has(name)\n\n if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value\n else this.dict[has || name] = value\n return has\n }\n}\nCaseless.prototype.has = function (name) {\n var keys = Object.keys(this.dict)\n , name = name.toLowerCase()\n ;\n for (var i=0;i (0, axios_1.default)({\r\n method: 'POST',\r\n url: this.options.url,\r\n timeout: this.options.timeout,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `apikey ${this.options.token}`\r\n },\r\n data: { method, params }\r\n })\r\n .then(({ data }) => data === null || data === void 0 ? void 0 : data.result)\r\n .catch(err => {\r\n throw new cent_exception_1.CentException(err);\r\n });\r\n }\r\n}\r\nexports.CentClient = CentClient;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.CentException = void 0;\r\nclass CentException extends Error {\r\n}\r\nexports.CentException = CentException;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__exportStar(require(\"./interfaces\"), exports);\r\n__exportStar(require(\"./cent-methods.enum\"), exports);\r\n__exportStar(require(\"./cent.exception\"), exports);\r\n__exportStar(require(\"./cent.client\"), exports);\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst cent_methods_enum_1 = require(\"../cent-methods.enum\");\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst cent_methods_enum_1 = require(\"../cent-methods.enum\");\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__exportStar(require(\"./client-info.interface\"), exports);\r\n__exportStar(require(\"./node.interface\"), exports);\r\n__exportStar(require(\"./publication.interface\"), exports);\r\n__exportStar(require(\"./stream-position.interface\"), exports);\r\n__exportStar(require(\"./cent-options.interface\"), exports);\r\n__exportStar(require(\"./cent-params.interface\"), exports);\r\n__exportStar(require(\"./cent-responses.interface\"), exports);\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n throw new Error('No Websocket support and no SockJS configured, can not connect');\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n if (sub._subscribeData) {\n msg.params.data = sub._subscribeData;\n }\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUBSCRIBE) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUBSCRIBE) {\n const sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe(opts);\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe(opts);\n return sub;\n };\n}\n","import { Centrifuge } from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this._subscribeData = null;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () { }, function () { });\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n _setSubscribeData(data) {\n this._subscribeData = data;\n }\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n if (opts && opts.data) {\n this._setSubscribeData(opts.data);\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({ 'code': 0, 'message': 'timeout' });\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(579);\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var crypto = require(\"crypto\");\nvar BigInteger = require(\"jsbn\").BigInteger;\nvar ECPointFp = require(\"./lib/ec.js\").ECPointFp;\nvar Buffer = require(\"safer-buffer\").Buffer;\nexports.ECCurves = require(\"./lib/sec.js\");\n\n// zero prepad\nfunction unstupid(hex,len)\n{\n\treturn (hex.length >= len) ? hex : unstupid(\"0\"+hex,len);\n}\n\nexports.ECKey = function(curve, key, isPublic)\n{\n var priv;\n\tvar c = curve();\n\tvar n = c.getN();\n var bytes = Math.floor(n.bitLength()/8);\n\n if(key)\n {\n if(isPublic)\n {\n var curve = c.getCurve();\n// var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format\n// var y = key.slice(bytes+1);\n// this.P = new ECPointFp(curve,\n// curve.fromBigInteger(new BigInteger(x.toString(\"hex\"), 16)),\n// curve.fromBigInteger(new BigInteger(y.toString(\"hex\"), 16))); \n this.P = curve.decodePointHex(key.toString(\"hex\"));\n }else{\n if(key.length != bytes) return false;\n priv = new BigInteger(key.toString(\"hex\"), 16); \n }\n }else{\n var n1 = n.subtract(BigInteger.ONE);\n var r = new BigInteger(crypto.randomBytes(n.bitLength()));\n priv = r.mod(n1).add(BigInteger.ONE);\n this.P = c.getG().multiply(priv);\n }\n if(this.P)\n {\n// var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2);\n// this.PublicKey = Buffer.from(\"04\"+pubhex,\"hex\");\n this.PublicKey = Buffer.from(c.getCurve().encodeCompressedPointHex(this.P),\"hex\");\n }\n if(priv)\n {\n this.PrivateKey = Buffer.from(unstupid(priv.toString(16),bytes*2),\"hex\");\n this.deriveSharedSecret = function(key)\n {\n if(!key || !key.P) return false;\n var S = key.P.multiply(priv);\n return Buffer.from(unstupid(S.getX().toBigInteger().toString(16),bytes*2),\"hex\");\n } \n }\n}\n\n","// Basic Javascript Elliptic Curve implementation\n// Ported loosely from BouncyCastle's Java EC code\n// Only Fp curves implemented for now\n\n// Requires jsbn.js and jsbn2.js\nvar BigInteger = require('jsbn').BigInteger\nvar Barrett = BigInteger.prototype.Barrett\n\n// ----------------\n// ECFieldElementFp\n\n// constructor\nfunction ECFieldElementFp(q,x) {\n this.x = x;\n // TODO if(x.compareTo(q) >= 0) error\n this.q = q;\n}\n\nfunction feFpEquals(other) {\n if(other == this) return true;\n return (this.q.equals(other.q) && this.x.equals(other.x));\n}\n\nfunction feFpToBigInteger() {\n return this.x;\n}\n\nfunction feFpNegate() {\n return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));\n}\n\nfunction feFpAdd(b) {\n return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpSubtract(b) {\n return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpMultiply(b) {\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpSquare() {\n return new ECFieldElementFp(this.q, this.x.square().mod(this.q));\n}\n\nfunction feFpDivide(b) {\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q));\n}\n\nECFieldElementFp.prototype.equals = feFpEquals;\nECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;\nECFieldElementFp.prototype.negate = feFpNegate;\nECFieldElementFp.prototype.add = feFpAdd;\nECFieldElementFp.prototype.subtract = feFpSubtract;\nECFieldElementFp.prototype.multiply = feFpMultiply;\nECFieldElementFp.prototype.square = feFpSquare;\nECFieldElementFp.prototype.divide = feFpDivide;\n\n// ----------------\n// ECPointFp\n\n// constructor\nfunction ECPointFp(curve,x,y,z) {\n this.curve = curve;\n this.x = x;\n this.y = y;\n // Projective coordinates: either zinv == null or z * zinv == 1\n // z and zinv are just BigIntegers, not fieldElements\n if(z == null) {\n this.z = BigInteger.ONE;\n }\n else {\n this.z = z;\n }\n this.zinv = null;\n //TODO: compression flag\n}\n\nfunction pointFpGetX() {\n if(this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n var r = this.x.toBigInteger().multiply(this.zinv);\n this.curve.reduce(r);\n return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpGetY() {\n if(this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n var r = this.y.toBigInteger().multiply(this.zinv);\n this.curve.reduce(r);\n return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpEquals(other) {\n if(other == this) return true;\n if(this.isInfinity()) return other.isInfinity();\n if(other.isInfinity()) return this.isInfinity();\n var u, v;\n // u = Y2 * Z1 - Y1 * Z2\n u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q);\n if(!u.equals(BigInteger.ZERO)) return false;\n // v = X2 * Z1 - X1 * Z2\n v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q);\n return v.equals(BigInteger.ZERO);\n}\n\nfunction pointFpIsInfinity() {\n if((this.x == null) && (this.y == null)) return true;\n return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);\n}\n\nfunction pointFpNegate() {\n return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);\n}\n\nfunction pointFpAdd(b) {\n if(this.isInfinity()) return b;\n if(b.isInfinity()) return this;\n\n // u = Y2 * Z1 - Y1 * Z2\n var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q);\n // v = X2 * Z1 - X1 * Z2\n var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q);\n\n if(BigInteger.ZERO.equals(v)) {\n if(BigInteger.ZERO.equals(u)) {\n return this.twice(); // this == b, so double\n }\n\treturn this.curve.getInfinity(); // this = -b, so infinity\n }\n\n var THREE = new BigInteger(\"3\");\n var x1 = this.x.toBigInteger();\n var y1 = this.y.toBigInteger();\n var x2 = b.x.toBigInteger();\n var y2 = b.y.toBigInteger();\n\n var v2 = v.square();\n var v3 = v2.multiply(v);\n var x1v2 = x1.multiply(v2);\n var zu2 = u.square().multiply(this.z);\n\n // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)\n var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q);\n // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3\n var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q);\n // z3 = v^3 * z1 * z2\n var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q);\n\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\nfunction pointFpTwice() {\n if(this.isInfinity()) return this;\n if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity();\n\n // TODO: optimized handling of constants\n var THREE = new BigInteger(\"3\");\n var x1 = this.x.toBigInteger();\n var y1 = this.y.toBigInteger();\n\n var y1z1 = y1.multiply(this.z);\n var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q);\n var a = this.curve.a.toBigInteger();\n\n // w = 3 * x1^2 + a * z1^2\n var w = x1.square().multiply(THREE);\n if(!BigInteger.ZERO.equals(a)) {\n w = w.add(this.z.square().multiply(a));\n }\n w = w.mod(this.curve.q);\n //this.curve.reduce(w);\n // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)\n var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q);\n // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3\n var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q);\n // z3 = 8 * (y1 * z1)^3\n var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q);\n\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\n// Simple NAF (Non-Adjacent Form) multiplication algorithm\n// TODO: modularize the multiplication algorithm\nfunction pointFpMultiply(k) {\n if(this.isInfinity()) return this;\n if(k.signum() == 0) return this.curve.getInfinity();\n\n var e = k;\n var h = e.multiply(new BigInteger(\"3\"));\n\n var neg = this.negate();\n var R = this;\n\n var i;\n for(i = h.bitLength() - 2; i > 0; --i) {\n\tR = R.twice();\n\n\tvar hBit = h.testBit(i);\n\tvar eBit = e.testBit(i);\n\n\tif (hBit != eBit) {\n\t R = R.add(hBit ? this : neg);\n\t}\n }\n\n return R;\n}\n\n// Compute this*j + x*k (simultaneous multiplication)\nfunction pointFpMultiplyTwo(j,x,k) {\n var i;\n if(j.bitLength() > k.bitLength())\n i = j.bitLength() - 1;\n else\n i = k.bitLength() - 1;\n\n var R = this.curve.getInfinity();\n var both = this.add(x);\n while(i >= 0) {\n R = R.twice();\n if(j.testBit(i)) {\n if(k.testBit(i)) {\n R = R.add(both);\n }\n else {\n R = R.add(this);\n }\n }\n else {\n if(k.testBit(i)) {\n R = R.add(x);\n }\n }\n --i;\n }\n\n return R;\n}\n\nECPointFp.prototype.getX = pointFpGetX;\nECPointFp.prototype.getY = pointFpGetY;\nECPointFp.prototype.equals = pointFpEquals;\nECPointFp.prototype.isInfinity = pointFpIsInfinity;\nECPointFp.prototype.negate = pointFpNegate;\nECPointFp.prototype.add = pointFpAdd;\nECPointFp.prototype.twice = pointFpTwice;\nECPointFp.prototype.multiply = pointFpMultiply;\nECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;\n\n// ----------------\n// ECCurveFp\n\n// constructor\nfunction ECCurveFp(q,a,b) {\n this.q = q;\n this.a = this.fromBigInteger(a);\n this.b = this.fromBigInteger(b);\n this.infinity = new ECPointFp(this, null, null);\n this.reducer = new Barrett(this.q);\n}\n\nfunction curveFpGetQ() {\n return this.q;\n}\n\nfunction curveFpGetA() {\n return this.a;\n}\n\nfunction curveFpGetB() {\n return this.b;\n}\n\nfunction curveFpEquals(other) {\n if(other == this) return true;\n return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b));\n}\n\nfunction curveFpGetInfinity() {\n return this.infinity;\n}\n\nfunction curveFpFromBigInteger(x) {\n return new ECFieldElementFp(this.q, x);\n}\n\nfunction curveReduce(x) {\n this.reducer.reduce(x);\n}\n\n// for now, work with hex strings because they're easier in JS\nfunction curveFpDecodePointHex(s) {\n switch(parseInt(s.substr(0,2), 16)) { // first byte\n case 0:\n\treturn this.infinity;\n case 2:\n case 3:\n\t// point compression not supported yet\n\treturn null;\n case 4:\n case 6:\n case 7:\n\tvar len = (s.length - 2) / 2;\n\tvar xHex = s.substr(2, len);\n\tvar yHex = s.substr(len+2, len);\n\n\treturn new ECPointFp(this,\n\t\t\t this.fromBigInteger(new BigInteger(xHex, 16)),\n\t\t\t this.fromBigInteger(new BigInteger(yHex, 16)));\n\n default: // unsupported\n\treturn null;\n }\n}\n\nfunction curveFpEncodePointHex(p) {\n\tif (p.isInfinity()) return \"00\";\n\tvar xHex = p.getX().toBigInteger().toString(16);\n\tvar yHex = p.getY().toBigInteger().toString(16);\n\tvar oLen = this.getQ().toString(16).length;\n\tif ((oLen % 2) != 0) oLen++;\n\twhile (xHex.length < oLen) {\n\t\txHex = \"0\" + xHex;\n\t}\n\twhile (yHex.length < oLen) {\n\t\tyHex = \"0\" + yHex;\n\t}\n\treturn \"04\" + xHex + yHex;\n}\n\nECCurveFp.prototype.getQ = curveFpGetQ;\nECCurveFp.prototype.getA = curveFpGetA;\nECCurveFp.prototype.getB = curveFpGetB;\nECCurveFp.prototype.equals = curveFpEquals;\nECCurveFp.prototype.getInfinity = curveFpGetInfinity;\nECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;\nECCurveFp.prototype.reduce = curveReduce;\n//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;\nECCurveFp.prototype.encodePointHex = curveFpEncodePointHex;\n\n// from: https://github.com/kaielvin/jsbn-ec-point-compression\nECCurveFp.prototype.decodePointHex = function(s)\n{\n\tvar yIsEven;\n switch(parseInt(s.substr(0,2), 16)) { // first byte\n case 0:\n\treturn this.infinity;\n case 2:\n\tyIsEven = false;\n case 3:\n\tif(yIsEven == undefined) yIsEven = true;\n\tvar len = s.length - 2;\n\tvar xHex = s.substr(2, len);\n\tvar x = this.fromBigInteger(new BigInteger(xHex,16));\n\tvar alpha = x.multiply(x.square().add(this.getA())).add(this.getB());\n\tvar beta = alpha.sqrt();\n\n if (beta == null) throw \"Invalid point compression\";\n\n var betaValue = beta.toBigInteger();\n if (betaValue.testBit(0) != yIsEven)\n {\n // Use the other root\n beta = this.fromBigInteger(this.getQ().subtract(betaValue));\n }\n return new ECPointFp(this,x,beta);\n case 4:\n case 6:\n case 7:\n\tvar len = (s.length - 2) / 2;\n\tvar xHex = s.substr(2, len);\n\tvar yHex = s.substr(len+2, len);\n\n\treturn new ECPointFp(this,\n\t\t\t this.fromBigInteger(new BigInteger(xHex, 16)),\n\t\t\t this.fromBigInteger(new BigInteger(yHex, 16)));\n\n default: // unsupported\n\treturn null;\n }\n}\nECCurveFp.prototype.encodeCompressedPointHex = function(p)\n{\n\tif (p.isInfinity()) return \"00\";\n\tvar xHex = p.getX().toBigInteger().toString(16);\n\tvar oLen = this.getQ().toString(16).length;\n\tif ((oLen % 2) != 0) oLen++;\n\twhile (xHex.length < oLen)\n\t\txHex = \"0\" + xHex;\n\tvar yPrefix;\n\tif(p.getY().toBigInteger().isEven()) yPrefix = \"02\";\n\telse yPrefix = \"03\";\n\n\treturn yPrefix + xHex;\n}\n\n\nECFieldElementFp.prototype.getR = function()\n{\n\tif(this.r != undefined) return this.r;\n\n this.r = null;\n var bitLength = this.q.bitLength();\n if (bitLength > 128)\n {\n var firstWord = this.q.shiftRight(bitLength - 64);\n if (firstWord.intValue() == -1)\n {\n this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q);\n }\n }\n return this.r;\n}\nECFieldElementFp.prototype.modMult = function(x1,x2)\n{\n return this.modReduce(x1.multiply(x2));\n}\nECFieldElementFp.prototype.modReduce = function(x)\n{\n if (this.getR() != null)\n {\n var qLen = q.bitLength();\n while (x.bitLength() > (qLen + 1))\n {\n var u = x.shiftRight(qLen);\n var v = x.subtract(u.shiftLeft(qLen));\n if (!this.getR().equals(BigInteger.ONE))\n {\n u = u.multiply(this.getR());\n }\n x = u.add(v); \n }\n while (x.compareTo(q) >= 0)\n {\n x = x.subtract(q);\n }\n }\n else\n {\n x = x.mod(q);\n }\n return x;\n}\nECFieldElementFp.prototype.sqrt = function()\n{\n if (!this.q.testBit(0)) throw \"unsupported\";\n\n // p mod 4 == 3\n if (this.q.testBit(1))\n {\n \tvar z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q));\n \treturn z.square().equals(this) ? z : null;\n }\n\n // p mod 4 == 1\n var qMinusOne = this.q.subtract(BigInteger.ONE);\n\n var legendreExponent = qMinusOne.shiftRight(1);\n if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE)))\n {\n return null;\n }\n\n var u = qMinusOne.shiftRight(2);\n var k = u.shiftLeft(1).add(BigInteger.ONE);\n\n var Q = this.x;\n var fourQ = modDouble(modDouble(Q));\n\n var U, V;\n do\n {\n var P;\n do\n {\n P = new BigInteger(this.q.bitLength(), new SecureRandom());\n }\n while (P.compareTo(this.q) >= 0\n || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne)));\n\n var result = this.lucasSequence(P, Q, k);\n U = result[0];\n V = result[1];\n\n if (this.modMult(V, V).equals(fourQ))\n {\n // Integer division by 2, mod q\n if (V.testBit(0))\n {\n V = V.add(q);\n }\n\n V = V.shiftRight(1);\n\n return new ECFieldElementFp(q,V);\n }\n }\n while (U.equals(BigInteger.ONE) || U.equals(qMinusOne));\n\n return null;\n}\nECFieldElementFp.prototype.lucasSequence = function(P,Q,k)\n{\n var n = k.bitLength();\n var s = k.getLowestSetBit();\n\n var Uh = BigInteger.ONE;\n var Vl = BigInteger.TWO;\n var Vh = P;\n var Ql = BigInteger.ONE;\n var Qh = BigInteger.ONE;\n\n for (var j = n - 1; j >= s + 1; --j)\n {\n Ql = this.modMult(Ql, Qh);\n\n if (k.testBit(j))\n {\n Qh = this.modMult(Ql, Q);\n Uh = this.modMult(Uh, Vh);\n Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1)));\n }\n else\n {\n Qh = Ql;\n Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));\n Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));\n }\n }\n\n Ql = this.modMult(Ql, Qh);\n Qh = this.modMult(Ql, Q);\n Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));\n Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n Ql = this.modMult(Ql, Qh);\n\n for (var j = 1; j <= s; ++j)\n {\n Uh = this.modMult(Uh, Vl);\n Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));\n Ql = this.modMult(Ql, Ql);\n }\n\n return [ Uh, Vl ];\n}\n\nvar exports = {\n ECCurveFp: ECCurveFp,\n ECPointFp: ECPointFp,\n ECFieldElementFp: ECFieldElementFp\n}\n\nmodule.exports = exports\n","// Named EC curves\n\n// Requires ec.js, jsbn.js, and jsbn2.js\nvar BigInteger = require('jsbn').BigInteger\nvar ECCurveFp = require('./ec.js').ECCurveFp\n\n\n// ----------------\n// X9ECParameters\n\n// constructor\nfunction X9ECParameters(curve,g,n,h) {\n this.curve = curve;\n this.g = g;\n this.n = n;\n this.h = h;\n}\n\nfunction x9getCurve() {\n return this.curve;\n}\n\nfunction x9getG() {\n return this.g;\n}\n\nfunction x9getN() {\n return this.n;\n}\n\nfunction x9getH() {\n return this.h;\n}\n\nX9ECParameters.prototype.getCurve = x9getCurve;\nX9ECParameters.prototype.getG = x9getG;\nX9ECParameters.prototype.getN = x9getN;\nX9ECParameters.prototype.getH = x9getH;\n\n// ----------------\n// SECNamedCurves\n\nfunction fromHex(s) { return new BigInteger(s, 16); }\n\nfunction secp128r1() {\n // p = 2^128 - 2^97 - 1\n var p = fromHex(\"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF\");\n var a = fromHex(\"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC\");\n var b = fromHex(\"E87579C11079F43DD824993C2CEE5ED3\");\n //byte[] S = Hex.decode(\"000E0D4D696E6768756151750CC03A4473D03679\");\n var n = fromHex(\"FFFFFFFE0000000075A30D1B9038A115\");\n var h = BigInteger.ONE;\n var curve = new ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"161FF7528B899B2D0C28607CA52C5B86\"\n\t\t+ \"CF5AC8395BAFEB13C02DA292DDED7A83\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp160k1() {\n // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1\n var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73\");\n var a = BigInteger.ZERO;\n var b = fromHex(\"7\");\n //byte[] S = null;\n var n = fromHex(\"0100000000000000000001B8FA16DFAB9ACA16B6B3\");\n var h = BigInteger.ONE;\n var curve = new ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"3B4C382CE37AA192A4019E763036F4F5DD4D7EBB\"\n + \"938CF935318FDCED6BC28286531733C3F03C4FEE\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp160r1() {\n // p = 2^160 - 2^31 - 1\n var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF\");\n var a = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC\");\n var b = fromHex(\"1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45\");\n //byte[] S = Hex.decode(\"1053CDE42C14D696E67687561517533BF3F83345\");\n var n = fromHex(\"0100000000000000000001F4C8F927AED3CA752257\");\n var h = BigInteger.ONE;\n var curve = new ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n\t\t+ \"4A96B5688EF573284664698968C38BB913CBFC82\"\n\t\t+ \"23A628553168947D59DCC912042351377AC5FB32\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp192k1() {\n // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1\n var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37\");\n var a = BigInteger.ZERO;\n var b = fromHex(\"3\");\n //byte[] S = null;\n var n = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D\");\n var h = BigInteger.ONE;\n var curve = new ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D\"\n + \"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp192r1() {\n // p = 2^192 - 2^64 - 1\n var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF\");\n var a = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC\");\n var b = fromHex(\"64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1\");\n //byte[] S = Hex.decode(\"3045AE6FC8422F64ED579528D38120EAE12196D5\");\n var n = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831\");\n var h = BigInteger.ONE;\n var curve = new ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012\"\n + \"07192B95FFC8DA78631011ED6B24CDD573F977A11E794811\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp224r1() {\n // p = 2^224 - 2^96 + 1\n var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001\");\n var a = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE\");\n var b = fromHex(\"B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4\");\n //byte[] S = Hex.decode(\"BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5\");\n var n = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D\");\n var h = BigInteger.ONE;\n var curve = new ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21\"\n + \"BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp256r1() {\n // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1\n var p = fromHex(\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\");\n var a = fromHex(\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC\");\n var b = fromHex(\"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B\");\n //byte[] S = Hex.decode(\"C49D360886E704936A6678E1139D26B7819F7E90\");\n var n = fromHex(\"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\");\n var h = BigInteger.ONE;\n var curve = new ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\"\n\t\t+ \"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\");\n return new X9ECParameters(curve, G, n, h);\n}\n\n// TODO: make this into a proper hashtable\nfunction getSECCurveByName(name) {\n if(name == \"secp128r1\") return secp128r1();\n if(name == \"secp160k1\") return secp160k1();\n if(name == \"secp160r1\") return secp160r1();\n if(name == \"secp192k1\") return secp192k1();\n if(name == \"secp192r1\") return secp192r1();\n if(name == \"secp224r1\") return secp224r1();\n if(name == \"secp256r1\") return secp256r1();\n return null;\n}\n\nmodule.exports = {\n \"secp128r1\":secp128r1,\n \"secp160k1\":secp160k1,\n \"secp160r1\":secp160r1,\n \"secp192k1\":secp192k1,\n \"secp192r1\":secp192r1,\n \"secp224r1\":secp224r1,\n \"secp256r1\":secp256r1\n}\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar getParamBytesForAlg = require('./param-bytes-for-alg');\n\nvar MAX_OCTET = 0x80,\n\tCLASS_UNIVERSAL = 0,\n\tPRIMITIVE_BIT = 0x20,\n\tTAG_SEQ = 0x10,\n\tTAG_INT = 0x02,\n\tENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6),\n\tENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6);\n\nfunction base64Url(base64) {\n\treturn base64\n\t\t.replace(/=/g, '')\n\t\t.replace(/\\+/g, '-')\n\t\t.replace(/\\//g, '_');\n}\n\nfunction signatureAsBuffer(signature) {\n\tif (Buffer.isBuffer(signature)) {\n\t\treturn signature;\n\t} else if ('string' === typeof signature) {\n\t\treturn Buffer.from(signature, 'base64');\n\t}\n\n\tthrow new TypeError('ECDSA signature must be a Base64 string or a Buffer');\n}\n\nfunction derToJose(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\t// the DER encoded param should at most be the param size, plus a padding\n\t// zero, since due to being a signed integer\n\tvar maxEncodedParamLength = paramBytes + 1;\n\n\tvar inputLength = signature.length;\n\n\tvar offset = 0;\n\tif (signature[offset++] !== ENCODED_TAG_SEQ) {\n\t\tthrow new Error('Could not find expected \"seq\"');\n\t}\n\n\tvar seqLength = signature[offset++];\n\tif (seqLength === (MAX_OCTET | 1)) {\n\t\tseqLength = signature[offset++];\n\t}\n\n\tif (inputLength - offset < seqLength) {\n\t\tthrow new Error('\"seq\" specified length of \"' + seqLength + '\", only \"' + (inputLength - offset) + '\" remaining');\n\t}\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"r\"');\n\t}\n\n\tvar rLength = signature[offset++];\n\n\tif (inputLength - offset - 2 < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", only \"' + (inputLength - offset - 2) + '\" available');\n\t}\n\n\tif (maxEncodedParamLength < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar rOffset = offset;\n\toffset += rLength;\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"s\"');\n\t}\n\n\tvar sLength = signature[offset++];\n\n\tif (inputLength - offset !== sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", expected \"' + (inputLength - offset) + '\"');\n\t}\n\n\tif (maxEncodedParamLength < sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar sOffset = offset;\n\toffset += sLength;\n\n\tif (offset !== inputLength) {\n\t\tthrow new Error('Expected to consume entire buffer, but \"' + (inputLength - offset) + '\" bytes remain');\n\t}\n\n\tvar rPadding = paramBytes - rLength,\n\t\tsPadding = paramBytes - sLength;\n\n\tvar dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength);\n\n\tfor (offset = 0; offset < rPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength);\n\n\toffset = paramBytes;\n\n\tfor (var o = offset; offset < o + sPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength);\n\n\tdst = dst.toString('base64');\n\tdst = base64Url(dst);\n\n\treturn dst;\n}\n\nfunction countPadding(buf, start, stop) {\n\tvar padding = 0;\n\twhile (start + padding < stop && buf[start + padding] === 0) {\n\t\t++padding;\n\t}\n\n\tvar needsSign = buf[start + padding] >= MAX_OCTET;\n\tif (needsSign) {\n\t\t--padding;\n\t}\n\n\treturn padding;\n}\n\nfunction joseToDer(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\tvar signatureBytes = signature.length;\n\tif (signatureBytes !== paramBytes * 2) {\n\t\tthrow new TypeError('\"' + alg + '\" signatures must be \"' + paramBytes * 2 + '\" bytes, saw \"' + signatureBytes + '\"');\n\t}\n\n\tvar rPadding = countPadding(signature, 0, paramBytes);\n\tvar sPadding = countPadding(signature, paramBytes, signature.length);\n\tvar rLength = paramBytes - rPadding;\n\tvar sLength = paramBytes - sPadding;\n\n\tvar rsBytes = 1 + 1 + rLength + 1 + 1 + sLength;\n\n\tvar shortLength = rsBytes < MAX_OCTET;\n\n\tvar dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes);\n\n\tvar offset = 0;\n\tdst[offset++] = ENCODED_TAG_SEQ;\n\tif (shortLength) {\n\t\t// Bit 8 has value \"0\"\n\t\t// bits 7-1 give the length.\n\t\tdst[offset++] = rsBytes;\n\t} else {\n\t\t// Bit 8 of first octet has value \"1\"\n\t\t// bits 7-1 give the number of additional length octets.\n\t\tdst[offset++] = MAX_OCTET\t| 1;\n\t\t// length, base 256\n\t\tdst[offset++] = rsBytes & 0xff;\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = rLength;\n\tif (rPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\toffset += signature.copy(dst, offset, 0, paramBytes);\n\t} else {\n\t\toffset += signature.copy(dst, offset, rPadding, paramBytes);\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = sLength;\n\tif (sPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\tsignature.copy(dst, offset, paramBytes);\n\t} else {\n\t\tsignature.copy(dst, offset, paramBytes + sPadding);\n\t}\n\n\treturn dst;\n}\n\nmodule.exports = {\n\tderToJose: derToJose,\n\tjoseToDer: joseToDer\n};\n","'use strict';\n\nfunction getParamSize(keySize) {\n\tvar result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);\n\treturn result;\n}\n\nvar paramBytesForAlg = {\n\tES256: getParamSize(256),\n\tES384: getParamSize(384),\n\tES512: getParamSize(521)\n};\n\nfunction getParamBytesForAlg(alg) {\n\tvar paramBytes = paramBytesForAlg[alg];\n\tif (paramBytes) {\n\t\treturn paramBytes;\n\t}\n\n\tthrow new Error('Unknown algorithm \"' + alg + '\"');\n}\n\nmodule.exports = getParamBytesForAlg;\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n'use strict';\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n","import { Hash } from \"crypto\";\n\nexport function createHashFunction(\n hashConstructor: () => Hash\n): (msg: Buffer) => Buffer {\n return msg => {\n const hash = hashConstructor();\n hash.update(msg);\n return Buffer.from(hash.digest());\n };\n}\n","import { createHashFunction } from \"./hash-utils\";\n\nconst createKeccakHash = require(\"keccak\");\n\nexport const keccak224 = createHashFunction(() =>\n createKeccakHash(\"keccak224\")\n);\n\nexport const keccak256 = createHashFunction(() =>\n createKeccakHash(\"keccak256\")\n);\n\nexport const keccak384 = createHashFunction(() =>\n createKeccakHash(\"keccak384\")\n);\n\nexport const keccak512 = createHashFunction(() =>\n createKeccakHash(\"keccak512\")\n);\n","const randombytes = require(\"randombytes\");\n\nexport function getRandomBytes(bytes: number): Promise {\n return new Promise((resolve, reject) => {\n randombytes(bytes, function(err: any, resp: Buffer) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(resp);\n });\n });\n}\n\nexport function getRandomBytesSync(bytes: number): Buffer {\n return randombytes(bytes);\n}\n","import { privateKeyVerify } from \"secp256k1\";\nimport { getRandomBytes, getRandomBytesSync } from \"./random\";\n\nconst SECP256K1_PRIVATE_KEY_SIZE = 32;\n\nexport async function createPrivateKey(): Promise {\n while (true) {\n const pk = await getRandomBytes(SECP256K1_PRIVATE_KEY_SIZE);\n if (privateKeyVerify(pk)) {\n return pk;\n }\n }\n}\n\nexport function createPrivateKeySync(): Uint8Array {\n while (true) {\n const pk = getRandomBytesSync(SECP256K1_PRIVATE_KEY_SIZE);\n if (privateKeyVerify(pk)) {\n return pk;\n }\n }\n}\n\nexport * from \"secp256k1\";\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = \"4.0.49\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bignumber_1 = require(\"./utils/bignumber\");\nvar AddressZero = '0x0000000000000000000000000000000000000000';\nexports.AddressZero = AddressZero;\nvar HashZero = '0x0000000000000000000000000000000000000000000000000000000000000000';\nexports.HashZero = HashZero;\n// NFKD (decomposed)\n//const EtherSymbol = '\\uD835\\uDF63';\n// NFKC (composed)\nvar EtherSymbol = '\\u039e';\nexports.EtherSymbol = EtherSymbol;\nvar NegativeOne = bignumber_1.bigNumberify(-1);\nexports.NegativeOne = NegativeOne;\nvar Zero = bignumber_1.bigNumberify(0);\nexports.Zero = Zero;\nvar One = bignumber_1.bigNumberify(1);\nexports.One = One;\nvar Two = bignumber_1.bigNumberify(2);\nexports.Two = Two;\nvar WeiPerEther = bignumber_1.bigNumberify('1000000000000000000');\nexports.WeiPerEther = WeiPerEther;\nvar MaxUint256 = bignumber_1.bigNumberify('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nexports.MaxUint256 = MaxUint256;\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar _version_1 = require(\"./_version\");\n// Unknown Error\nexports.UNKNOWN_ERROR = 'UNKNOWN_ERROR';\n// Not implemented\nexports.NOT_IMPLEMENTED = 'NOT_IMPLEMENTED';\n// Missing new operator to an object\n// - name: The name of the class\nexports.MISSING_NEW = 'MISSING_NEW';\n// Call exception\n// - transaction: the transaction\n// - address?: the contract address\n// - args?: The arguments passed into the function\n// - method?: The Solidity method signature\n// - errorSignature?: The EIP848 error signature\n// - errorArgs?: The EIP848 error parameters\n// - reason: The reason (only for EIP848 \"Error(string)\")\nexports.CALL_EXCEPTION = 'CALL_EXCEPTION';\n// Invalid argument (e.g. value is incompatible with type) to a function:\n// - argument: The argument name that was invalid\n// - value: The value of the argument\nexports.INVALID_ARGUMENT = 'INVALID_ARGUMENT';\n// Missing argument to a function:\n// - count: The number of arguments received\n// - expectedCount: The number of arguments expected\nexports.MISSING_ARGUMENT = 'MISSING_ARGUMENT';\n// Too many arguments\n// - count: The number of arguments received\n// - expectedCount: The number of arguments expected\nexports.UNEXPECTED_ARGUMENT = 'UNEXPECTED_ARGUMENT';\n// Numeric Fault\n// - operation: the operation being executed\n// - fault: the reason this faulted\nexports.NUMERIC_FAULT = 'NUMERIC_FAULT';\n// Insufficien funds (< value + gasLimit * gasPrice)\n// - transaction: the transaction attempted\nexports.INSUFFICIENT_FUNDS = 'INSUFFICIENT_FUNDS';\n// Nonce has already been used\n// - transaction: the transaction attempted\nexports.NONCE_EXPIRED = 'NONCE_EXPIRED';\n// The replacement fee for the transaction is too low\n// - transaction: the transaction attempted\nexports.REPLACEMENT_UNDERPRICED = 'REPLACEMENT_UNDERPRICED';\n// Unsupported operation\n// - operation\nexports.UNSUPPORTED_OPERATION = 'UNSUPPORTED_OPERATION';\nvar _permanentCensorErrors = false;\nvar _censorErrors = false;\n// @TODO: Enum\nfunction throwError(message, code, params) {\n if (_censorErrors) {\n throw new Error('unknown error');\n }\n if (!code) {\n code = exports.UNKNOWN_ERROR;\n }\n if (!params) {\n params = {};\n }\n var messageDetails = [];\n Object.keys(params).forEach(function (key) {\n try {\n messageDetails.push(key + '=' + JSON.stringify(params[key]));\n }\n catch (error) {\n messageDetails.push(key + '=' + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(\"version=\" + _version_1.version);\n var reason = message;\n if (messageDetails.length) {\n message += ' (' + messageDetails.join(', ') + ')';\n }\n // @TODO: Any??\n var error = new Error(message);\n error.reason = reason;\n error.code = code;\n Object.keys(params).forEach(function (key) {\n error[key] = params[key];\n });\n throw error;\n}\nexports.throwError = throwError;\nfunction checkNew(self, kind) {\n if (!(self instanceof kind)) {\n throwError('missing new', exports.MISSING_NEW, { name: kind.name });\n }\n}\nexports.checkNew = checkNew;\nfunction checkArgumentCount(count, expectedCount, suffix) {\n if (!suffix) {\n suffix = '';\n }\n if (count < expectedCount) {\n throwError('missing argument' + suffix, exports.MISSING_ARGUMENT, { count: count, expectedCount: expectedCount });\n }\n if (count > expectedCount) {\n throwError('too many arguments' + suffix, exports.UNEXPECTED_ARGUMENT, { count: count, expectedCount: expectedCount });\n }\n}\nexports.checkArgumentCount = checkArgumentCount;\nfunction setCensorship(censorship, permanent) {\n if (_permanentCensorErrors) {\n throwError('error censorship permanent', exports.UNSUPPORTED_OPERATION, { operation: 'setCensorship' });\n }\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n}\nexports.setCensorship = setCensorship;\nfunction checkNormalize() {\n try {\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach(function (form) {\n try {\n \"test\".normalize(form);\n }\n catch (error) {\n throw new Error('missing ' + form);\n }\n });\n if (String.fromCharCode(0xe9).normalize('NFD') !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error('broken implementation');\n }\n }\n catch (error) {\n throwError('platform missing String.prototype.normalize', exports.UNSUPPORTED_OPERATION, { operation: 'String.prototype.normalize', form: error.message });\n }\n}\nexports.checkNormalize = checkNormalize;\nvar LogLevels = { debug: 1, \"default\": 2, info: 2, warn: 3, error: 4, off: 5 };\nvar LogLevel = LogLevels[\"default\"];\nfunction setLogLevel(logLevel) {\n var level = LogLevels[logLevel];\n if (level == null) {\n warn(\"invliad log level - \" + logLevel);\n return;\n }\n LogLevel = level;\n}\nexports.setLogLevel = setLogLevel;\nfunction log(logLevel, args) {\n if (LogLevel > LogLevels[logLevel]) {\n return;\n }\n console.log.apply(console, args);\n}\nfunction warn() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n log(\"warn\", args);\n}\nexports.warn = warn;\nfunction info() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n log(\"info\", args);\n}\nexports.info = info;\n","'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nvar constants_1 = require(\"../constants\");\nvar errors = __importStar(require(\"../errors\"));\nvar address_1 = require(\"./address\");\nvar bignumber_1 = require(\"./bignumber\");\nvar bytes_1 = require(\"./bytes\");\nvar utf8_1 = require(\"./utf8\");\nvar properties_1 = require(\"./properties\");\n///////////////////////////////\nvar paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nvar paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nvar paramTypeArray = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nexports.defaultCoerceFunc = function (type, value) {\n var match = type.match(paramTypeNumber);\n if (match && parseInt(match[2]) <= 48) {\n return value.toNumber();\n }\n return value;\n};\n///////////////////////////////////\n// Parsing for Solidity Signatures\nvar regexParen = new RegExp(\"^([^)(]*)\\\\((.*)\\\\)([^)(]*)$\");\nvar regexIdentifier = new RegExp(\"^[A-Za-z_][A-Za-z0-9_]*$\");\nfunction verifyType(type) {\n // These need to be transformed to their full description\n if (type.match(/^uint($|[^1-9])/)) {\n type = 'uint256' + type.substring(4);\n }\n else if (type.match(/^int($|[^1-9])/)) {\n type = 'int256' + type.substring(3);\n }\n return type;\n}\nfunction parseParam(param, allowIndexed) {\n var originalParam = param;\n function throwError(i) {\n throw new Error('unexpected character \"' + originalParam[i] + '\" at position ' + i + ' in \"' + originalParam + '\"');\n }\n param = param.replace(/\\s/g, ' ');\n var parent = { type: '', name: '', state: { allowType: true } };\n var node = parent;\n for (var i = 0; i < param.length; i++) {\n var c = param[i];\n switch (c) {\n case '(':\n if (!node.state.allowParams) {\n throwError(i);\n }\n node.state.allowType = false;\n node.type = verifyType(node.type);\n node.components = [{ type: '', name: '', parent: node, state: { allowType: true } }];\n node = node.components[0];\n break;\n case ')':\n delete node.state;\n if (allowIndexed && node.name === 'indexed') {\n node.indexed = true;\n node.name = '';\n }\n node.type = verifyType(node.type);\n var child = node;\n node = node.parent;\n if (!node) {\n throwError(i);\n }\n delete child.parent;\n node.state.allowParams = false;\n node.state.allowName = true;\n node.state.allowArray = true;\n break;\n case ',':\n delete node.state;\n if (allowIndexed && node.name === 'indexed') {\n node.indexed = true;\n node.name = '';\n }\n node.type = verifyType(node.type);\n var sibling = { type: '', name: '', parent: node.parent, state: { allowType: true } };\n node.parent.components.push(sibling);\n delete node.parent;\n node = sibling;\n break;\n // Hit a space...\n case ' ':\n // If reading type, the type is done and may read a param or name\n if (node.state.allowType) {\n if (node.type !== '') {\n node.type = verifyType(node.type);\n delete node.state.allowType;\n node.state.allowName = true;\n node.state.allowParams = true;\n }\n }\n // If reading name, the name is done\n if (node.state.allowName) {\n if (node.name !== '') {\n if (allowIndexed && node.name === 'indexed') {\n node.indexed = true;\n node.name = '';\n }\n else {\n node.state.allowName = false;\n }\n }\n }\n break;\n case '[':\n if (!node.state.allowArray) {\n throwError(i);\n }\n node.type += c;\n node.state.allowArray = false;\n node.state.allowName = false;\n node.state.readArray = true;\n break;\n case ']':\n if (!node.state.readArray) {\n throwError(i);\n }\n node.type += c;\n node.state.readArray = false;\n node.state.allowArray = true;\n node.state.allowName = true;\n break;\n default:\n if (node.state.allowType) {\n node.type += c;\n node.state.allowParams = true;\n node.state.allowArray = true;\n }\n else if (node.state.allowName) {\n node.name += c;\n delete node.state.allowArray;\n }\n else if (node.state.readArray) {\n node.type += c;\n }\n else {\n throwError(i);\n }\n }\n }\n if (node.parent) {\n throw new Error(\"unexpected eof\");\n }\n delete parent.state;\n if (allowIndexed && node.name === 'indexed') {\n node.indexed = true;\n node.name = '';\n }\n parent.type = verifyType(parent.type);\n return parent;\n}\n// @TODO: Better return type\nfunction parseSignatureEvent(fragment) {\n var abi = {\n anonymous: false,\n inputs: [],\n name: '',\n type: 'event'\n };\n var match = fragment.match(regexParen);\n if (!match) {\n throw new Error('invalid event: ' + fragment);\n }\n abi.name = match[1].trim();\n splitNesting(match[2]).forEach(function (param) {\n param = parseParam(param, true);\n param.indexed = !!param.indexed;\n abi.inputs.push(param);\n });\n match[3].split(' ').forEach(function (modifier) {\n switch (modifier) {\n case 'anonymous':\n abi.anonymous = true;\n break;\n case '':\n break;\n default:\n errors.info('unknown modifier: ' + modifier);\n }\n });\n if (abi.name && !abi.name.match(regexIdentifier)) {\n throw new Error('invalid identifier: \"' + abi.name + '\"');\n }\n return abi;\n}\nfunction parseSignatureFunction(fragment) {\n var abi = {\n constant: false,\n gas: null,\n inputs: [],\n name: '',\n outputs: [],\n payable: false,\n stateMutability: null,\n type: 'function'\n };\n var comps = fragment.split('@');\n if (comps.length !== 1) {\n if (comps.length > 2) {\n throw new Error('invalid signature');\n }\n if (!comps[1].match(/^[0-9]+$/)) {\n throw new Error('invalid signature gas');\n }\n abi.gas = bignumber_1.bigNumberify(comps[1]);\n fragment = comps[0];\n }\n comps = fragment.split(' returns ');\n var left = comps[0].match(regexParen);\n if (!left) {\n throw new Error('invalid signature');\n }\n abi.name = left[1].trim();\n if (!abi.name.match(regexIdentifier)) {\n throw new Error('invalid identifier: \"' + left[1] + '\"');\n }\n splitNesting(left[2]).forEach(function (param) {\n abi.inputs.push(parseParam(param));\n });\n left[3].split(' ').forEach(function (modifier) {\n switch (modifier) {\n case 'constant':\n abi.constant = true;\n break;\n case 'payable':\n abi.payable = true;\n abi.stateMutability = 'payable';\n break;\n case 'pure':\n abi.constant = true;\n abi.stateMutability = 'pure';\n break;\n case 'view':\n abi.constant = true;\n abi.stateMutability = 'view';\n break;\n case 'external':\n case 'public':\n case '':\n break;\n default:\n errors.info('unknown modifier: ' + modifier);\n }\n });\n // We have outputs\n if (comps.length > 1) {\n var right = comps[1].match(regexParen);\n if (right[1].trim() != '' || right[3].trim() != '') {\n throw new Error('unexpected tokens');\n }\n splitNesting(right[2]).forEach(function (param) {\n abi.outputs.push(parseParam(param));\n });\n }\n if (abi.name === 'constructor') {\n abi.type = \"constructor\";\n if (abi.outputs.length) {\n throw new Error('constructor may not have outputs');\n }\n delete abi.name;\n delete abi.outputs;\n }\n return abi;\n}\nfunction parseParamType(type) {\n return parseParam(type, true);\n}\nexports.parseParamType = parseParamType;\n// @TODO: Allow a second boolean to expose names\nfunction formatParamType(paramType) {\n return getParamCoder(exports.defaultCoerceFunc, paramType).type;\n}\nexports.formatParamType = formatParamType;\n// @TODO: Allow a second boolean to expose names and modifiers\nfunction formatSignature(fragment) {\n return fragment.name + '(' + fragment.inputs.map(function (i) { return formatParamType(i); }).join(',') + ')';\n}\nexports.formatSignature = formatSignature;\nfunction parseSignature(fragment) {\n if (typeof (fragment) === 'string') {\n // Make sure the \"returns\" is surrounded by a space and all whitespace is exactly one space\n fragment = fragment.replace(/\\s/g, ' ');\n fragment = fragment.replace(/\\(/g, ' (').replace(/\\)/g, ') ').replace(/\\s+/g, ' ');\n fragment = fragment.trim();\n if (fragment.substring(0, 6) === 'event ') {\n return parseSignatureEvent(fragment.substring(6).trim());\n }\n else {\n if (fragment.substring(0, 9) === 'function ') {\n fragment = fragment.substring(9);\n }\n return parseSignatureFunction(fragment.trim());\n }\n }\n throw new Error('unknown signature');\n}\nexports.parseSignature = parseSignature;\nvar Coder = /** @class */ (function () {\n function Coder(coerceFunc, name, type, localName, dynamic) {\n this.coerceFunc = coerceFunc;\n this.name = name;\n this.type = type;\n this.localName = localName;\n this.dynamic = dynamic;\n }\n return Coder;\n}());\n// Clones the functionality of an existing Coder, but without a localName\nvar CoderAnonymous = /** @class */ (function (_super) {\n __extends(CoderAnonymous, _super);\n function CoderAnonymous(coder) {\n var _this = _super.call(this, coder.coerceFunc, coder.name, coder.type, undefined, coder.dynamic) || this;\n properties_1.defineReadOnly(_this, 'coder', coder);\n return _this;\n }\n CoderAnonymous.prototype.encode = function (value) { return this.coder.encode(value); };\n CoderAnonymous.prototype.decode = function (data, offset) { return this.coder.decode(data, offset); };\n return CoderAnonymous;\n}(Coder));\nvar CoderNull = /** @class */ (function (_super) {\n __extends(CoderNull, _super);\n function CoderNull(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'null', '', localName, false) || this;\n }\n CoderNull.prototype.encode = function (value) {\n return bytes_1.arrayify([]);\n };\n CoderNull.prototype.decode = function (data, offset) {\n if (offset > data.length) {\n throw new Error('invalid null');\n }\n return {\n consumed: 0,\n value: this.coerceFunc('null', undefined)\n };\n };\n return CoderNull;\n}(Coder));\nvar CoderNumber = /** @class */ (function (_super) {\n __extends(CoderNumber, _super);\n function CoderNumber(coerceFunc, size, signed, localName) {\n var _this = this;\n var name = ((signed ? 'int' : 'uint') + (size * 8));\n _this = _super.call(this, coerceFunc, name, name, localName, false) || this;\n _this.size = size;\n _this.signed = signed;\n return _this;\n }\n CoderNumber.prototype.encode = function (value) {\n try {\n var v = bignumber_1.bigNumberify(value);\n if (this.signed) {\n var bounds = constants_1.MaxUint256.maskn(this.size * 8 - 1);\n if (v.gt(bounds)) {\n throw new Error('out-of-bounds');\n }\n bounds = bounds.add(constants_1.One).mul(constants_1.NegativeOne);\n if (v.lt(bounds)) {\n throw new Error('out-of-bounds');\n }\n }\n else if (v.lt(constants_1.Zero) || v.gt(constants_1.MaxUint256.maskn(this.size * 8))) {\n throw new Error('out-of-bounds');\n }\n v = v.toTwos(this.size * 8).maskn(this.size * 8);\n if (this.signed) {\n v = v.fromTwos(this.size * 8).toTwos(256);\n }\n return bytes_1.padZeros(bytes_1.arrayify(v), 32);\n }\n catch (error) {\n errors.throwError('invalid number value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: value\n });\n }\n return null;\n };\n CoderNumber.prototype.decode = function (data, offset) {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for ' + this.name + ' type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: bytes_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n var junkLength = 32 - this.size;\n var value = bignumber_1.bigNumberify(data.slice(offset + junkLength, offset + 32));\n if (this.signed) {\n value = value.fromTwos(this.size * 8);\n }\n else {\n value = value.maskn(this.size * 8);\n }\n return {\n consumed: 32,\n value: this.coerceFunc(this.name, value),\n };\n };\n return CoderNumber;\n}(Coder));\nvar uint256Coder = new CoderNumber(function (type, value) { return value; }, 32, false, 'none');\nvar CoderBoolean = /** @class */ (function (_super) {\n __extends(CoderBoolean, _super);\n function CoderBoolean(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'bool', 'bool', localName, false) || this;\n }\n CoderBoolean.prototype.encode = function (value) {\n return uint256Coder.encode(!!value ? 1 : 0);\n };\n CoderBoolean.prototype.decode = function (data, offset) {\n try {\n var result = uint256Coder.decode(data, offset);\n }\n catch (error) {\n if (error.reason === 'insufficient data for uint256 type') {\n errors.throwError('insufficient data for boolean type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'boolean',\n value: error.value\n });\n }\n throw error;\n }\n return {\n consumed: result.consumed,\n value: this.coerceFunc('bool', !result.value.isZero())\n };\n };\n return CoderBoolean;\n}(Coder));\nvar CoderFixedBytes = /** @class */ (function (_super) {\n __extends(CoderFixedBytes, _super);\n function CoderFixedBytes(coerceFunc, length, localName) {\n var _this = this;\n var name = ('bytes' + length);\n _this = _super.call(this, coerceFunc, name, name, localName, false) || this;\n _this.length = length;\n return _this;\n }\n CoderFixedBytes.prototype.encode = function (value) {\n var result = new Uint8Array(32);\n try {\n var data = bytes_1.arrayify(value);\n if (data.length !== this.length) {\n throw new Error('incorrect data length');\n }\n result.set(data);\n }\n catch (error) {\n errors.throwError('invalid ' + this.name + ' value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: (error.value || value)\n });\n }\n return result;\n };\n CoderFixedBytes.prototype.decode = function (data, offset) {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for ' + this.name + ' type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: bytes_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n return {\n consumed: 32,\n value: this.coerceFunc(this.name, bytes_1.hexlify(data.slice(offset, offset + this.length)))\n };\n };\n return CoderFixedBytes;\n}(Coder));\nvar CoderAddress = /** @class */ (function (_super) {\n __extends(CoderAddress, _super);\n function CoderAddress(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'address', 'address', localName, false) || this;\n }\n CoderAddress.prototype.encode = function (value) {\n var result = new Uint8Array(32);\n try {\n result.set(bytes_1.arrayify(address_1.getAddress(value)), 12);\n }\n catch (error) {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'address',\n value: value\n });\n }\n return result;\n };\n CoderAddress.prototype.decode = function (data, offset) {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for address type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'address',\n value: bytes_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n return {\n consumed: 32,\n value: this.coerceFunc('address', address_1.getAddress(bytes_1.hexlify(data.slice(offset + 12, offset + 32))))\n };\n };\n return CoderAddress;\n}(Coder));\nfunction _encodeDynamicBytes(value) {\n var dataLength = 32 * Math.ceil(value.length / 32);\n var padding = new Uint8Array(dataLength - value.length);\n return bytes_1.concat([\n uint256Coder.encode(value.length),\n value,\n padding\n ]);\n}\nfunction _decodeDynamicBytes(data, offset, localName) {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for dynamicBytes length', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: bytes_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n var length = uint256Coder.decode(data, offset).value;\n try {\n length = length.toNumber();\n }\n catch (error) {\n errors.throwError('dynamic bytes count too large', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: length.toString()\n });\n }\n if (data.length < offset + 32 + length) {\n errors.throwError('insufficient data for dynamicBytes type', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: bytes_1.hexlify(data.slice(offset, offset + 32 + length))\n });\n }\n return {\n consumed: 32 + 32 * Math.ceil(length / 32),\n value: data.slice(offset + 32, offset + 32 + length),\n };\n}\nvar CoderDynamicBytes = /** @class */ (function (_super) {\n __extends(CoderDynamicBytes, _super);\n function CoderDynamicBytes(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'bytes', 'bytes', localName, true) || this;\n }\n CoderDynamicBytes.prototype.encode = function (value) {\n try {\n return _encodeDynamicBytes(bytes_1.arrayify(value));\n }\n catch (error) {\n errors.throwError('invalid bytes value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'bytes',\n value: error.value\n });\n }\n return null;\n };\n CoderDynamicBytes.prototype.decode = function (data, offset) {\n var result = _decodeDynamicBytes(data, offset, this.localName);\n result.value = this.coerceFunc('bytes', bytes_1.hexlify(result.value));\n return result;\n };\n return CoderDynamicBytes;\n}(Coder));\nvar CoderString = /** @class */ (function (_super) {\n __extends(CoderString, _super);\n function CoderString(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'string', 'string', localName, true) || this;\n }\n CoderString.prototype.encode = function (value) {\n if (typeof (value) !== 'string') {\n errors.throwError('invalid string value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'string',\n value: value\n });\n }\n return _encodeDynamicBytes(utf8_1.toUtf8Bytes(value));\n };\n CoderString.prototype.decode = function (data, offset) {\n var result = _decodeDynamicBytes(data, offset, this.localName);\n result.value = this.coerceFunc('string', utf8_1.toUtf8String(result.value));\n return result;\n };\n return CoderString;\n}(Coder));\nfunction alignSize(size) {\n return 32 * Math.ceil(size / 32);\n}\nfunction pack(coders, values) {\n if (Array.isArray(values)) {\n // do nothing\n }\n else if (values && typeof (values) === 'object') {\n var arrayValues = [];\n coders.forEach(function (coder) {\n arrayValues.push(values[coder.localName]);\n });\n values = arrayValues;\n }\n else {\n errors.throwError('invalid tuple value', errors.INVALID_ARGUMENT, {\n coderType: 'tuple',\n value: values\n });\n }\n if (coders.length !== values.length) {\n errors.throwError('types/value length mismatch', errors.INVALID_ARGUMENT, {\n coderType: 'tuple',\n value: values\n });\n }\n var parts = [];\n coders.forEach(function (coder, index) {\n parts.push({ dynamic: coder.dynamic, value: coder.encode(values[index]) });\n });\n var staticSize = 0, dynamicSize = 0;\n parts.forEach(function (part) {\n if (part.dynamic) {\n staticSize += 32;\n dynamicSize += alignSize(part.value.length);\n }\n else {\n staticSize += alignSize(part.value.length);\n }\n });\n var offset = 0, dynamicOffset = staticSize;\n var data = new Uint8Array(staticSize + dynamicSize);\n parts.forEach(function (part) {\n if (part.dynamic) {\n //uint256Coder.encode(dynamicOffset).copy(data, offset);\n data.set(uint256Coder.encode(dynamicOffset), offset);\n offset += 32;\n //part.value.copy(data, dynamicOffset); @TODO\n data.set(part.value, dynamicOffset);\n dynamicOffset += alignSize(part.value.length);\n }\n else {\n //part.value.copy(data, offset); @TODO\n data.set(part.value, offset);\n offset += alignSize(part.value.length);\n }\n });\n return data;\n}\nfunction unpack(coders, data, offset) {\n var baseOffset = offset;\n var consumed = 0;\n var value = [];\n coders.forEach(function (coder) {\n if (coder.dynamic) {\n var dynamicOffset = uint256Coder.decode(data, offset);\n var result = coder.decode(data, baseOffset + dynamicOffset.value.toNumber());\n // The dynamic part is leap-frogged somewhere else; doesn't count towards size\n result.consumed = dynamicOffset.consumed;\n }\n else {\n var result = coder.decode(data, offset);\n }\n if (result.value != undefined) {\n value.push(result.value);\n }\n offset += result.consumed;\n consumed += result.consumed;\n });\n coders.forEach(function (coder, index) {\n var name = coder.localName;\n if (!name) {\n return;\n }\n if (name === 'length') {\n name = '_length';\n }\n if (value[name] != null) {\n return;\n }\n value[name] = value[index];\n });\n return {\n value: value,\n consumed: consumed\n };\n}\nvar CoderArray = /** @class */ (function (_super) {\n __extends(CoderArray, _super);\n function CoderArray(coerceFunc, coder, length, localName) {\n var _this = this;\n var type = (coder.type + '[' + (length >= 0 ? length : '') + ']');\n var dynamic = (length === -1 || coder.dynamic);\n _this = _super.call(this, coerceFunc, 'array', type, localName, dynamic) || this;\n _this.coder = coder;\n _this.length = length;\n return _this;\n }\n CoderArray.prototype.encode = function (value) {\n if (!Array.isArray(value)) {\n errors.throwError('expected array value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n value: value\n });\n }\n var count = this.length;\n var result = new Uint8Array(0);\n if (count === -1) {\n count = value.length;\n result = uint256Coder.encode(count);\n }\n errors.checkArgumentCount(count, value.length, ' in coder array' + (this.localName ? (\" \" + this.localName) : \"\"));\n var coders = [];\n for (var i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return bytes_1.concat([result, pack(coders, value)]);\n };\n CoderArray.prototype.decode = function (data, offset) {\n // @TODO:\n //if (data.length < offset + length * 32) { throw new Error('invalid array'); }\n var consumed = 0;\n var count = this.length;\n if (count === -1) {\n try {\n var decodedLength = uint256Coder.decode(data, offset);\n }\n catch (error) {\n errors.throwError('insufficient data for dynamic array length', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n value: error.value\n });\n }\n try {\n count = decodedLength.value.toNumber();\n }\n catch (error) {\n errors.throwError('array count too large', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n value: decodedLength.value.toString()\n });\n }\n consumed += decodedLength.consumed;\n offset += decodedLength.consumed;\n }\n var coders = [];\n for (var i = 0; i < count; i++) {\n coders.push(new CoderAnonymous(this.coder));\n }\n var result = unpack(coders, data, offset);\n result.consumed += consumed;\n result.value = this.coerceFunc(this.type, result.value);\n return result;\n };\n return CoderArray;\n}(Coder));\nvar CoderTuple = /** @class */ (function (_super) {\n __extends(CoderTuple, _super);\n function CoderTuple(coerceFunc, coders, localName) {\n var _this = this;\n var dynamic = false;\n var types = [];\n coders.forEach(function (coder) {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n var type = ('tuple(' + types.join(',') + ')');\n _this = _super.call(this, coerceFunc, 'tuple', type, localName, dynamic) || this;\n _this.coders = coders;\n return _this;\n }\n CoderTuple.prototype.encode = function (value) {\n return pack(this.coders, value);\n };\n CoderTuple.prototype.decode = function (data, offset) {\n var result = unpack(this.coders, data, offset);\n result.value = this.coerceFunc(this.type, result.value);\n return result;\n };\n return CoderTuple;\n}(Coder));\n/*\nfunction getTypes(coders) {\n var type = coderTuple(coders).type;\n return type.substring(6, type.length - 1);\n}\n*/\nfunction splitNesting(value) {\n value = value.trim();\n var result = [];\n var accum = '';\n var depth = 0;\n for (var offset = 0; offset < value.length; offset++) {\n var c = value[offset];\n if (c === ',' && depth === 0) {\n result.push(accum);\n accum = '';\n }\n else {\n accum += c;\n if (c === '(') {\n depth++;\n }\n else if (c === ')') {\n depth--;\n if (depth === -1) {\n throw new Error('unbalanced parenthsis');\n }\n }\n }\n }\n if (accum) {\n result.push(accum);\n }\n return result;\n}\n// @TODO: Is there a way to return \"class\"?\nvar paramTypeSimple = {\n address: CoderAddress,\n bool: CoderBoolean,\n string: CoderString,\n bytes: CoderDynamicBytes,\n};\nfunction getTupleParamCoder(coerceFunc, components, localName) {\n if (!components) {\n components = [];\n }\n var coders = [];\n components.forEach(function (component) {\n coders.push(getParamCoder(coerceFunc, component));\n });\n return new CoderTuple(coerceFunc, coders, localName);\n}\nfunction getParamCoder(coerceFunc, param) {\n var coder = paramTypeSimple[param.type];\n if (coder) {\n return new coder(coerceFunc, param.name);\n }\n var match = param.type.match(paramTypeNumber);\n if (match) {\n var size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n errors.throwError('invalid ' + match[1] + ' bit length', errors.INVALID_ARGUMENT, {\n arg: 'param',\n value: param\n });\n }\n return new CoderNumber(coerceFunc, size / 8, (match[1] === 'int'), param.name);\n }\n var match = param.type.match(paramTypeBytes);\n if (match) {\n var size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n errors.throwError('invalid bytes length', errors.INVALID_ARGUMENT, {\n arg: 'param',\n value: param\n });\n }\n return new CoderFixedBytes(coerceFunc, size, param.name);\n }\n var match = param.type.match(paramTypeArray);\n if (match) {\n var size = parseInt(match[2] || \"-1\");\n param = properties_1.shallowCopy(param);\n param.type = match[1];\n param = properties_1.deepCopy(param);\n return new CoderArray(coerceFunc, getParamCoder(coerceFunc, param), size, param.name);\n }\n if (param.type.substring(0, 5) === 'tuple') {\n return getTupleParamCoder(coerceFunc, param.components, param.name);\n }\n if (param.type === '') {\n return new CoderNull(coerceFunc, param.name);\n }\n errors.throwError('invalid type', errors.INVALID_ARGUMENT, {\n arg: 'type',\n value: param.type\n });\n return null;\n}\nvar AbiCoder = /** @class */ (function () {\n function AbiCoder(coerceFunc) {\n errors.checkNew(this, AbiCoder);\n if (!coerceFunc) {\n coerceFunc = exports.defaultCoerceFunc;\n }\n properties_1.defineReadOnly(this, 'coerceFunc', coerceFunc);\n }\n AbiCoder.prototype.encode = function (types, values) {\n if (types.length !== values.length) {\n errors.throwError('types/values length mismatch', errors.INVALID_ARGUMENT, {\n count: { types: types.length, values: values.length },\n value: { types: types, values: values }\n });\n }\n var coders = [];\n types.forEach(function (type) {\n // Convert types to type objects\n // - \"uint foo\" => { type: \"uint\", name: \"foo\" }\n // - \"tuple(uint, uint)\" => { type: \"tuple\", components: [ { type: \"uint\" }, { type: \"uint\" }, ] }\n var typeObject = null;\n if (typeof (type) === 'string') {\n typeObject = parseParam(type);\n }\n else {\n typeObject = type;\n }\n coders.push(getParamCoder(this.coerceFunc, typeObject));\n }, this);\n return bytes_1.hexlify(new CoderTuple(this.coerceFunc, coders, '_').encode(values));\n };\n AbiCoder.prototype.decode = function (types, data) {\n var coders = [];\n types.forEach(function (type) {\n // See encode for details\n var typeObject = null;\n if (typeof (type) === 'string') {\n typeObject = parseParam(type);\n }\n else {\n typeObject = properties_1.deepCopy(type);\n }\n coders.push(getParamCoder(this.coerceFunc, typeObject));\n }, this);\n return new CoderTuple(this.coerceFunc, coders, '_').decode(bytes_1.arrayify(data), 0).value;\n };\n return AbiCoder;\n}());\nexports.AbiCoder = AbiCoder;\nexports.defaultAbiCoder = new AbiCoder();\n","'use strict';\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// We use this for base 36 maths\nvar bn_js_1 = __importDefault(require(\"bn.js\"));\nvar bytes_1 = require(\"./bytes\");\nvar keccak256_1 = require(\"./keccak256\");\nvar rlp_1 = require(\"./rlp\");\nvar errors = require(\"../errors\");\n///////////////////////////////\nfunction getChecksumAddress(address) {\n if (typeof (address) !== 'string' || !address.match(/^0x[0-9A-Fa-f]{40}$/)) {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n address = address.toLowerCase();\n var chars = address.substring(2).split('');\n var hashed = new Uint8Array(40);\n for (var i_1 = 0; i_1 < 40; i_1++) {\n hashed[i_1] = chars[i_1].charCodeAt(0);\n }\n hashed = bytes_1.arrayify(keccak256_1.keccak256(hashed));\n for (var i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return '0x' + chars.join('');\n}\n// Shims for environments that are missing some required constants and functions\nvar MAX_SAFE_INTEGER = 0x1fffffffffffff;\nfunction log10(x) {\n if (Math.log10) {\n return Math.log10(x);\n }\n return Math.log(x) / Math.LN10;\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nvar ibanLookup = {};\nfor (var i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (var i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\nvar safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + '00';\n var expanded = '';\n address.split('').forEach(function (c) {\n expanded += ibanLookup[c];\n });\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n var block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n var checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = '0' + checksum;\n }\n return checksum;\n}\n;\nfunction getAddress(address) {\n var result = null;\n if (typeof (address) !== 'string') {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== '0x') {\n address = '0x' + address;\n }\n result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n errors.throwError('bad address checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n // Maybe ICAP? (we only support direct mode)\n }\n else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n errors.throwError('bad icap checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n result = (new bn_js_1.default.BN(address.substring(4), 36)).toString(16);\n while (result.length < 40) {\n result = '0' + result;\n }\n result = getChecksumAddress('0x' + result);\n }\n else {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n return result;\n}\nexports.getAddress = getAddress;\nfunction getIcapAddress(address) {\n var base36 = (new bn_js_1.default.BN(getAddress(address).substring(2), 16)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = '0' + base36;\n }\n return 'XE' + ibanChecksum('XE00' + base36) + base36;\n}\nexports.getIcapAddress = getIcapAddress;\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nfunction getContractAddress(transaction) {\n if (!transaction.from) {\n throw new Error('missing from address');\n }\n var nonce = transaction.nonce;\n return getAddress('0x' + keccak256_1.keccak256(rlp_1.encode([\n getAddress(transaction.from),\n bytes_1.stripZeros(bytes_1.hexlify(nonce))\n ])).substring(26));\n}\nexports.getContractAddress = getContractAddress;\n// See: https://eips.ethereum.org/EIPS/eip-1014\nfunction getCreate2Address(options) {\n var initCodeHash = options.initCodeHash;\n if (options.initCode) {\n if (initCodeHash) {\n if (keccak256_1.keccak256(options.initCode) !== initCodeHash) {\n errors.throwError(\"initCode/initCodeHash mismatch\", errors.INVALID_ARGUMENT, {\n arg: \"options\", value: options\n });\n }\n }\n else {\n initCodeHash = keccak256_1.keccak256(options.initCode);\n }\n }\n if (!initCodeHash) {\n errors.throwError(\"missing initCode or initCodeHash\", errors.INVALID_ARGUMENT, {\n arg: \"options\", value: options\n });\n }\n var from = getAddress(options.from);\n var salt = bytes_1.arrayify(options.salt);\n if (salt.length !== 32) {\n errors.throwError(\"invalid salt\", errors.INVALID_ARGUMENT, {\n arg: \"options\", value: options\n });\n }\n return getAddress(\"0x\" + keccak256_1.keccak256(bytes_1.concat([\n \"0xff\",\n from,\n salt,\n initCodeHash\n ])).substring(26));\n}\nexports.getCreate2Address = getCreate2Address;\n","'use strict';\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardles.\n *\n */\nvar bn_js_1 = __importDefault(require(\"bn.js\"));\nvar bytes_1 = require(\"./bytes\");\nvar properties_1 = require(\"./properties\");\nvar errors = __importStar(require(\"../errors\"));\nvar BN_1 = new bn_js_1.default.BN(-1);\nfunction toHex(bn) {\n var value = bn.toString(16);\n if (value[0] === '-') {\n if ((value.length % 2) === 0) {\n return '-0x0' + value.substring(1);\n }\n return \"-0x\" + value.substring(1);\n }\n if ((value.length % 2) === 1) {\n return '0x0' + value;\n }\n return '0x' + value;\n}\nfunction toBN(value) {\n return _bnify(bigNumberify(value));\n}\nfunction toBigNumber(bn) {\n return new BigNumber(toHex(bn));\n}\nfunction _bnify(value) {\n var hex = value._hex;\n if (hex[0] === '-') {\n return (new bn_js_1.default.BN(hex.substring(3), 16)).mul(BN_1);\n }\n return new bn_js_1.default.BN(hex.substring(2), 16);\n}\nvar BigNumber = /** @class */ (function () {\n function BigNumber(value) {\n errors.checkNew(this, BigNumber);\n properties_1.setType(this, 'BigNumber');\n if (typeof (value) === 'string') {\n if (bytes_1.isHexString(value)) {\n if (value == '0x') {\n value = '0x0';\n }\n properties_1.defineReadOnly(this, '_hex', value);\n }\n else if (value[0] === '-' && bytes_1.isHexString(value.substring(1))) {\n properties_1.defineReadOnly(this, '_hex', value);\n }\n else if (value.match(/^-?[0-9]*$/)) {\n if (value == '') {\n value = '0';\n }\n properties_1.defineReadOnly(this, '_hex', toHex(new bn_js_1.default.BN(value)));\n }\n else {\n errors.throwError('invalid BigNumber string value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n }\n else if (typeof (value) === 'number') {\n if (parseInt(String(value)) !== value) {\n errors.throwError('underflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'underflow', value: value, outputValue: parseInt(String(value)) });\n }\n try {\n properties_1.defineReadOnly(this, '_hex', toHex(new bn_js_1.default.BN(value)));\n }\n catch (error) {\n errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });\n }\n }\n else if (value instanceof BigNumber) {\n properties_1.defineReadOnly(this, '_hex', value._hex);\n }\n else if (value.toHexString) {\n properties_1.defineReadOnly(this, '_hex', toHex(toBN(value.toHexString())));\n }\n else if (value._hex && bytes_1.isHexString(value._hex)) {\n properties_1.defineReadOnly(this, '_hex', value._hex);\n }\n else if (bytes_1.isArrayish(value)) {\n properties_1.defineReadOnly(this, '_hex', toHex(new bn_js_1.default.BN(bytes_1.hexlify(value).substring(2), 16)));\n }\n else {\n errors.throwError('invalid BigNumber value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n }\n BigNumber.prototype.fromTwos = function (value) {\n return toBigNumber(_bnify(this).fromTwos(value));\n };\n BigNumber.prototype.toTwos = function (value) {\n return toBigNumber(_bnify(this).toTwos(value));\n };\n BigNumber.prototype.abs = function () {\n if (this._hex[0] === '-') {\n return toBigNumber(_bnify(this).mul(BN_1));\n }\n return this;\n };\n BigNumber.prototype.add = function (other) {\n return toBigNumber(_bnify(this).add(toBN(other)));\n };\n BigNumber.prototype.sub = function (other) {\n return toBigNumber(_bnify(this).sub(toBN(other)));\n };\n BigNumber.prototype.div = function (other) {\n var o = bigNumberify(other);\n if (o.isZero()) {\n errors.throwError('division by zero', errors.NUMERIC_FAULT, { operation: 'divide', fault: 'division by zero' });\n }\n return toBigNumber(_bnify(this).div(toBN(other)));\n };\n BigNumber.prototype.mul = function (other) {\n return toBigNumber(_bnify(this).mul(toBN(other)));\n };\n BigNumber.prototype.mod = function (other) {\n return toBigNumber(_bnify(this).mod(toBN(other)));\n };\n BigNumber.prototype.pow = function (other) {\n return toBigNumber(_bnify(this).pow(toBN(other)));\n };\n BigNumber.prototype.maskn = function (value) {\n return toBigNumber(_bnify(this).maskn(value));\n };\n BigNumber.prototype.eq = function (other) {\n return _bnify(this).eq(toBN(other));\n };\n BigNumber.prototype.lt = function (other) {\n return _bnify(this).lt(toBN(other));\n };\n BigNumber.prototype.lte = function (other) {\n return _bnify(this).lte(toBN(other));\n };\n BigNumber.prototype.gt = function (other) {\n return _bnify(this).gt(toBN(other));\n };\n BigNumber.prototype.gte = function (other) {\n return _bnify(this).gte(toBN(other));\n };\n BigNumber.prototype.isZero = function () {\n return _bnify(this).isZero();\n };\n BigNumber.prototype.toNumber = function () {\n try {\n return _bnify(this).toNumber();\n }\n catch (error) {\n errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });\n }\n return null;\n };\n BigNumber.prototype.toString = function () {\n return _bnify(this).toString(10);\n };\n BigNumber.prototype.toHexString = function () {\n return this._hex;\n };\n BigNumber.isBigNumber = function (value) {\n return properties_1.isType(value, 'BigNumber');\n };\n return BigNumber;\n}());\nexports.BigNumber = BigNumber;\nfunction bigNumberify(value) {\n if (BigNumber.isBigNumber(value)) {\n return value;\n }\n return new BigNumber(value);\n}\nexports.bigNumberify = bigNumberify;\n","\"use strict\";\n/**\n * Conversion Utilities\n *\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar errors = __importStar(require(\"../errors\"));\n///////////////////////////////\nfunction isHexable(value) {\n return !!(value.toHexString);\n}\nexports.isHexable = isHexable;\nfunction addSlice(array) {\n if (array.slice) {\n return array;\n }\n array.slice = function () {\n var args = Array.prototype.slice.call(arguments);\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\n };\n return array;\n}\nfunction isArrayish(value) {\n if (!value || parseInt(String(value.length)) != value.length || typeof (value) === 'string') {\n return false;\n }\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n if (v < 0 || v >= 256 || parseInt(String(v)) != v) {\n return false;\n }\n }\n return true;\n}\nexports.isArrayish = isArrayish;\nfunction arrayify(value) {\n if (value == null) {\n errors.throwError('cannot convert null value to array', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (isHexable(value)) {\n value = value.toHexString();\n }\n if (typeof (value) === 'string') {\n var match = value.match(/^(0x)?[0-9a-fA-F]*$/);\n if (!match) {\n errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (match[1] !== '0x') {\n errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n value = value.substring(2);\n if (value.length % 2) {\n value = '0' + value;\n }\n var result = [];\n for (var i = 0; i < value.length; i += 2) {\n result.push(parseInt(value.substr(i, 2), 16));\n }\n return addSlice(new Uint8Array(result));\n }\n if (isArrayish(value)) {\n return addSlice(new Uint8Array(value));\n }\n errors.throwError('invalid arrayify value', null, { arg: 'value', value: value, type: typeof (value) });\n return null;\n}\nexports.arrayify = arrayify;\nfunction concat(objects) {\n var arrays = [];\n var length = 0;\n for (var i = 0; i < objects.length; i++) {\n var object = arrayify(objects[i]);\n arrays.push(object);\n length += object.length;\n }\n var result = new Uint8Array(length);\n var offset = 0;\n for (var i = 0; i < arrays.length; i++) {\n result.set(arrays[i], offset);\n offset += arrays[i].length;\n }\n return addSlice(result);\n}\nexports.concat = concat;\nfunction stripZeros(value) {\n var result = arrayify(value);\n if (result.length === 0) {\n return result;\n }\n // Find the first non-zero entry\n var start = 0;\n while (result[start] === 0) {\n start++;\n }\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n return result;\n}\nexports.stripZeros = stripZeros;\nfunction padZeros(value, length) {\n value = arrayify(value);\n if (length < value.length) {\n throw new Error('cannot pad');\n }\n var result = new Uint8Array(length);\n result.set(value, length - value.length);\n return addSlice(result);\n}\nexports.padZeros = padZeros;\nfunction isHexString(value, length) {\n if (typeof (value) !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (length && value.length !== 2 + 2 * length) {\n return false;\n }\n return true;\n}\nexports.isHexString = isHexString;\nvar HexCharacters = '0123456789abcdef';\nfunction hexlify(value) {\n if (isHexable(value)) {\n return value.toHexString();\n }\n if (typeof (value) === 'number') {\n if (value < 0) {\n errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n // @TODO: Roll this into the above error as a numeric fault (overflow); next version, not backward compatible\n // We can about (value == MAX_INT) to as well, since that may indicate we underflowed already\n if (value >= 9007199254740991) {\n errors.throwError(\"out-of-range\", errors.NUMERIC_FAULT, {\n operartion: \"hexlify\",\n fault: \"out-of-safe-range\"\n });\n }\n var hex = '';\n while (value) {\n hex = HexCharacters[value & 0x0f] + hex;\n value = Math.floor(value / 16);\n }\n if (hex.length) {\n if (hex.length % 2) {\n hex = '0' + hex;\n }\n return '0x' + hex;\n }\n return '0x00';\n }\n if (typeof (value) === 'string') {\n var match = value.match(/^(0x)?[0-9a-fA-F]*$/);\n if (!match) {\n errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (match[1] !== '0x') {\n errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (value.length % 2) {\n value = '0x0' + value.substring(2);\n }\n return value;\n }\n if (isArrayish(value)) {\n var result = [];\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n result.push(HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]);\n }\n return '0x' + result.join('');\n }\n errors.throwError('invalid hexlify value', null, { arg: 'value', value: value });\n return 'never';\n}\nexports.hexlify = hexlify;\nfunction hexDataLength(data) {\n if (!isHexString(data) || (data.length % 2) !== 0) {\n return null;\n }\n return (data.length - 2) / 2;\n}\nexports.hexDataLength = hexDataLength;\nfunction hexDataSlice(data, offset, endOffset) {\n if (!isHexString(data)) {\n errors.throwError('invalid hex data', errors.INVALID_ARGUMENT, { arg: 'value', value: data });\n }\n if ((data.length % 2) !== 0) {\n errors.throwError('hex data length must be even', errors.INVALID_ARGUMENT, { arg: 'value', value: data });\n }\n offset = 2 + 2 * offset;\n if (endOffset != null) {\n return '0x' + data.substring(offset, 2 + 2 * endOffset);\n }\n return '0x' + data.substring(offset);\n}\nexports.hexDataSlice = hexDataSlice;\nfunction hexStripZeros(value) {\n if (!isHexString(value)) {\n errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n while (value.length > 3 && value.substring(0, 3) === '0x0') {\n value = '0x' + value.substring(3);\n }\n return value;\n}\nexports.hexStripZeros = hexStripZeros;\nfunction hexZeroPad(value, length) {\n if (!isHexString(value)) {\n errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n while (value.length < 2 * length + 2) {\n value = '0x0' + value.substring(2);\n }\n return value;\n}\nexports.hexZeroPad = hexZeroPad;\nfunction isSignature(value) {\n return (value && value.r != null && value.s != null);\n}\nfunction splitSignature(signature) {\n var v = 0;\n var r = '0x', s = '0x';\n if (isSignature(signature)) {\n if (signature.v == null && signature.recoveryParam == null) {\n errors.throwError('at least on of recoveryParam or v must be specified', errors.INVALID_ARGUMENT, { argument: 'signature', value: signature });\n }\n r = hexZeroPad(signature.r, 32);\n s = hexZeroPad(signature.s, 32);\n v = signature.v;\n if (typeof (v) === 'string') {\n v = parseInt(v, 16);\n }\n var recoveryParam = signature.recoveryParam;\n if (recoveryParam == null && signature.v != null) {\n recoveryParam = 1 - (v % 2);\n }\n v = 27 + recoveryParam;\n }\n else {\n var bytes = arrayify(signature);\n if (bytes.length !== 65) {\n throw new Error('invalid signature');\n }\n r = hexlify(bytes.slice(0, 32));\n s = hexlify(bytes.slice(32, 64));\n v = bytes[64];\n if (v !== 27 && v !== 28) {\n v = 27 + (v % 2);\n }\n }\n return {\n r: r,\n s: s,\n recoveryParam: (v - 27),\n v: v\n };\n}\nexports.splitSignature = splitSignature;\nfunction joinSignature(signature) {\n signature = splitSignature(signature);\n return hexlify(concat([\n signature.r,\n signature.s,\n (signature.recoveryParam ? '0x1c' : '0x1b')\n ]));\n}\nexports.joinSignature = joinSignature;\n","'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar errors = __importStar(require(\"../errors\"));\nvar bytes_1 = require(\"./bytes\");\nvar utf8_1 = require(\"./utf8\");\nvar keccak256_1 = require(\"./keccak256\");\n///////////////////////////////\nvar Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\nvar Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nvar UseSTD3ASCIIRules = new RegExp(\"^[a-z0-9.-]*$\");\nfunction namehash(name) {\n if (typeof (name) !== 'string') {\n errors.throwError('invalid address - ' + String(name), errors.INVALID_ARGUMENT, {\n argument: 'name',\n value: name\n });\n }\n name = name.toLowerCase();\n // Supporting the full UTF-8 space requires additional (and large)\n // libraries, so for now we simply do not support them.\n // It should be fairly easy in the future to support systems with\n // String.normalize, but that is future work.\n if (!name.match(UseSTD3ASCIIRules)) {\n errors.throwError('contains invalid UseSTD3ASCIIRules characters', errors.INVALID_ARGUMENT, {\n argument: 'name',\n value: name\n });\n }\n var result = Zeros;\n while (name.length) {\n var partition = name.match(Partition);\n var label = utf8_1.toUtf8Bytes(partition[3]);\n result = keccak256_1.keccak256(bytes_1.concat([result, keccak256_1.keccak256(label)]));\n name = partition[2] || '';\n }\n return bytes_1.hexlify(result);\n}\nexports.namehash = namehash;\nfunction id(text) {\n return keccak256_1.keccak256(utf8_1.toUtf8Bytes(text));\n}\nexports.id = id;\nfunction hashMessage(message) {\n return keccak256_1.keccak256(bytes_1.concat([\n utf8_1.toUtf8Bytes('\\x19Ethereum Signed Message:\\n'),\n utf8_1.toUtf8Bytes(String(message.length)),\n ((typeof (message) === 'string') ? utf8_1.toUtf8Bytes(message) : message)\n ]));\n}\nexports.hashMessage = hashMessage;\n","'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nvar address_1 = require(\"./address\");\nvar abi_coder_1 = require(\"./abi-coder\");\nvar bignumber_1 = require(\"./bignumber\");\nvar bytes_1 = require(\"./bytes\");\nvar hash_1 = require(\"./hash\");\nvar keccak256_1 = require(\"./keccak256\");\nvar properties_1 = require(\"./properties\");\nvar errors = __importStar(require(\"../errors\"));\n///////////////////////////////\nvar _Indexed = /** @class */ (function () {\n function _Indexed(hash) {\n properties_1.setType(this, 'Indexed');\n properties_1.defineReadOnly(this, 'hash', hash);\n }\n return _Indexed;\n}());\nvar Description = /** @class */ (function () {\n function Description(info) {\n properties_1.setType(this, 'Description');\n for (var key in info) {\n properties_1.defineReadOnly(this, key, properties_1.deepCopy(info[key], true));\n }\n Object.freeze(this);\n }\n return Description;\n}());\nvar _DeployDescription = /** @class */ (function (_super) {\n __extends(_DeployDescription, _super);\n function _DeployDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n _DeployDescription.prototype.encode = function (bytecode, params) {\n if (!bytes_1.isHexString(bytecode)) {\n errors.throwError('invalid contract bytecode', errors.INVALID_ARGUMENT, {\n arg: 'bytecode',\n value: bytecode\n });\n }\n errors.checkArgumentCount(params.length, this.inputs.length, ' in Interface constructor');\n try {\n return (bytecode + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2));\n }\n catch (error) {\n errors.throwError('invalid constructor argument', errors.INVALID_ARGUMENT, {\n arg: error.arg,\n reason: error.reason,\n value: error.value\n });\n }\n return null;\n };\n return _DeployDescription;\n}(Description));\nvar _FunctionDescription = /** @class */ (function (_super) {\n __extends(_FunctionDescription, _super);\n function _FunctionDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n _FunctionDescription.prototype.encode = function (params) {\n errors.checkArgumentCount(params.length, this.inputs.length, ' in interface function ' + this.name);\n try {\n return this.sighash + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2);\n }\n catch (error) {\n errors.throwError('invalid input argument', errors.INVALID_ARGUMENT, {\n arg: error.arg,\n reason: error.reason,\n value: error.value\n });\n }\n return null;\n };\n _FunctionDescription.prototype.decode = function (data) {\n try {\n return abi_coder_1.defaultAbiCoder.decode(this.outputs, bytes_1.arrayify(data));\n }\n catch (error) {\n errors.throwError('invalid data for function output', errors.INVALID_ARGUMENT, {\n arg: 'data',\n errorArg: error.arg,\n errorValue: error.value,\n value: data,\n reason: error.reason\n });\n }\n };\n return _FunctionDescription;\n}(Description));\nvar Result = /** @class */ (function (_super) {\n __extends(Result, _super);\n function Result() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Result;\n}(Description));\nvar _EventDescription = /** @class */ (function (_super) {\n __extends(_EventDescription, _super);\n function _EventDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n _EventDescription.prototype.encodeTopics = function (params) {\n var _this = this;\n if (params.length > this.inputs.length) {\n errors.throwError('too many arguments for ' + this.name, errors.UNEXPECTED_ARGUMENT, { maxCount: params.length, expectedCount: this.inputs.length });\n }\n var topics = [];\n if (!this.anonymous) {\n topics.push(this.topic);\n }\n params.forEach(function (arg, index) {\n var param = _this.inputs[index];\n if (!param.indexed) {\n if (arg != null) {\n errors.throwError('cannot filter non-indexed parameters; must be null', errors.INVALID_ARGUMENT, { argument: (param.name || index), value: arg });\n }\n return;\n }\n if (arg == null) {\n topics.push(null);\n }\n else if (param.type === 'string') {\n topics.push(hash_1.id(arg));\n }\n else if (param.type === 'bytes') {\n topics.push(keccak256_1.keccak256(arg));\n }\n else if (param.type.indexOf('[') !== -1 || param.type.substring(0, 5) === 'tuple') {\n errors.throwError('filtering with tuples or arrays not implemented yet; bug us on GitHub', errors.NOT_IMPLEMENTED, { operation: 'filter(array|tuple)' });\n }\n else {\n if (param.type === 'address') {\n address_1.getAddress(arg);\n }\n topics.push(bytes_1.hexZeroPad(bytes_1.hexlify(arg), 32).toLowerCase());\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n };\n _EventDescription.prototype.decode = function (data, topics) {\n // Strip the signature off of non-anonymous topics\n if (topics != null && !this.anonymous) {\n topics = topics.slice(1);\n }\n var inputIndexed = [];\n var inputNonIndexed = [];\n var inputDynamic = [];\n this.inputs.forEach(function (param, index) {\n if (param.indexed) {\n if (param.type === 'string' || param.type === 'bytes' || param.type.indexOf('[') >= 0 || param.type.substring(0, 5) === 'tuple') {\n inputIndexed.push({ type: 'bytes32', name: (param.name || '') });\n inputDynamic.push(true);\n }\n else {\n inputIndexed.push(param);\n inputDynamic.push(false);\n }\n }\n else {\n inputNonIndexed.push(param);\n inputDynamic.push(false);\n }\n });\n if (topics != null) {\n var resultIndexed = abi_coder_1.defaultAbiCoder.decode(inputIndexed, bytes_1.concat(topics));\n }\n var resultNonIndexed = abi_coder_1.defaultAbiCoder.decode(inputNonIndexed, bytes_1.arrayify(data));\n var result = {};\n var nonIndexedIndex = 0, indexedIndex = 0;\n this.inputs.forEach(function (input, index) {\n if (input.indexed) {\n if (topics == null) {\n result[index] = new _Indexed(null);\n }\n else if (inputDynamic[index]) {\n result[index] = new _Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n result[index] = resultIndexed[indexedIndex++];\n }\n }\n else {\n result[index] = resultNonIndexed[nonIndexedIndex++];\n }\n if (input.name) {\n result[input.name] = result[index];\n }\n });\n result.length = this.inputs.length;\n return new Result(result);\n };\n return _EventDescription;\n}(Description));\nvar _TransactionDescription = /** @class */ (function (_super) {\n __extends(_TransactionDescription, _super);\n function _TransactionDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return _TransactionDescription;\n}(Description));\nvar _LogDescription = /** @class */ (function (_super) {\n __extends(_LogDescription, _super);\n function _LogDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return _LogDescription;\n}(Description));\nfunction addMethod(method) {\n switch (method.type) {\n case 'constructor': {\n var description = new _DeployDescription({\n inputs: method.inputs,\n payable: (method.payable == null || !!method.payable)\n });\n if (!this.deployFunction) {\n this.deployFunction = description;\n }\n break;\n }\n case 'function': {\n var signature = abi_coder_1.formatSignature(method).replace(/tuple/g, '');\n var sighash = hash_1.id(signature).substring(0, 10);\n var isConst = false;\n if (method.constant != null) {\n isConst = method.constant;\n }\n else if (method.stateMutability != null) {\n isConst = (method.stateMutability == \"view\" || method.stateMutability == \"pure\");\n }\n var description = new _FunctionDescription({\n inputs: method.inputs,\n outputs: method.outputs,\n gas: method.gas,\n payable: (method.payable == null || !!method.payable),\n type: (isConst ? 'call' : 'transaction'),\n name: method.name,\n signature: signature,\n sighash: sighash,\n });\n // Expose the first (and hopefully unique named function)\n if (method.name) {\n if (this.functions[method.name] == null) {\n properties_1.defineReadOnly(this.functions, method.name, description);\n }\n else {\n errors.warn('WARNING: Multiple definitions for ' + method.name);\n }\n }\n // Expose all methods by their signature, for overloaded functions\n if (this.functions[description.signature] == null) {\n properties_1.defineReadOnly(this.functions, description.signature, description);\n }\n break;\n }\n case 'event': {\n var signature = abi_coder_1.formatSignature(method).replace(/tuple/g, '');\n var description = new _EventDescription({\n name: method.name,\n signature: signature,\n inputs: method.inputs,\n topic: hash_1.id(signature),\n anonymous: (!!method.anonymous)\n });\n // Expose the first (and hopefully unique) event name\n if (method.name && this.events[method.name] == null) {\n properties_1.defineReadOnly(this.events, method.name, description);\n }\n // Expose all events by their signature, for overloaded functions\n if (this.events[description.signature] == null) {\n properties_1.defineReadOnly(this.events, description.signature, description);\n }\n break;\n }\n case \"receive\":\n case 'fallback':\n // Nothing to do for fallback\n break;\n default:\n errors.warn('WARNING: unsupported ABI type - ' + method.type);\n break;\n }\n}\nvar Interface = /** @class */ (function () {\n // ParamType is not actually correct here, but for legacy reasons,\n // we need it. See #721.\n function Interface(abi) {\n errors.checkNew(this, Interface);\n if (typeof (abi) === 'string') {\n try {\n abi = JSON.parse(abi);\n }\n catch (error) {\n errors.throwError('could not parse ABI JSON', errors.INVALID_ARGUMENT, {\n arg: 'abi',\n errorMessage: error.message,\n value: abi\n });\n }\n if (!Array.isArray(abi)) {\n errors.throwError('invalid abi', errors.INVALID_ARGUMENT, { arg: 'abi', value: abi });\n return null;\n }\n }\n properties_1.defineReadOnly(this, 'functions', {});\n properties_1.defineReadOnly(this, 'events', {});\n // Convert any supported ABI format into a standard ABI format\n var _abi = [];\n abi.forEach(function (fragment) {\n if (typeof (fragment) === 'string') {\n fragment = abi_coder_1.parseSignature(fragment);\n }\n // @TODO: We should probable do some validation; create abiCoder.formatSignature for checking\n _abi.push(fragment);\n });\n properties_1.defineReadOnly(this, 'abi', properties_1.deepCopy(_abi, true));\n _abi.forEach(addMethod, this);\n // If there wasn't a constructor, create the default constructor\n if (!this.deployFunction) {\n addMethod.call(this, { type: 'constructor', inputs: [] });\n }\n properties_1.setType(this, 'Interface');\n }\n Interface.prototype.parseTransaction = function (tx) {\n var sighash = tx.data.substring(0, 10).toLowerCase();\n for (var name in this.functions) {\n if (name.indexOf('(') === -1) {\n continue;\n }\n var func = this.functions[name];\n if (func.sighash === sighash) {\n var result = abi_coder_1.defaultAbiCoder.decode(func.inputs, '0x' + tx.data.substring(10));\n return new _TransactionDescription({\n args: result,\n decode: func.decode,\n name: func.name,\n signature: func.signature,\n sighash: func.sighash,\n value: bignumber_1.bigNumberify(tx.value || '0'),\n });\n }\n }\n return null;\n };\n Interface.prototype.parseLog = function (log) {\n for (var name in this.events) {\n if (name.indexOf('(') === -1) {\n continue;\n }\n var event = this.events[name];\n if (event.anonymous) {\n continue;\n }\n if (event.topic !== log.topics[0]) {\n continue;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse and return it?\n return new _LogDescription({\n decode: event.decode,\n name: event.name,\n signature: event.signature,\n topic: event.topic,\n values: event.decode(log.data, log.topics)\n });\n }\n return null;\n };\n Interface.isInterface = function (value) {\n return properties_1.isType(value, 'Interface');\n };\n Interface.isIndexed = function (value) {\n return properties_1.isType(value, 'Indexed');\n };\n return Interface;\n}());\nexports.Interface = Interface;\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar sha3 = require(\"js-sha3\");\nvar bytes_1 = require(\"./bytes\");\nfunction keccak256(data) {\n return '0x' + sha3.keccak_256(bytes_1.arrayify(data));\n}\nexports.keccak256 = keccak256;\n","'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar errors = __importStar(require(\"../errors\"));\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\nexports.defineReadOnly = defineReadOnly;\n// There are some issues with instanceof with npm link, so we use this\n// to ensure types are what we expect.\nfunction setType(object, type) {\n Object.defineProperty(object, '_ethersType', { configurable: false, value: type, writable: false });\n}\nexports.setType = setType;\nfunction isType(object, type) {\n return (object && object._ethersType === type);\n}\nexports.isType = isType;\nfunction resolveProperties(object) {\n var result = {};\n var promises = [];\n Object.keys(object).forEach(function (key) {\n var value = object[key];\n if (value instanceof Promise) {\n promises.push(value.then(function (value) {\n result[key] = value;\n return null;\n }));\n }\n else {\n result[key] = value;\n }\n });\n return Promise.all(promises).then(function () {\n return result;\n });\n}\nexports.resolveProperties = resolveProperties;\nfunction checkProperties(object, properties) {\n if (!object || typeof (object) !== 'object') {\n errors.throwError('invalid object', errors.INVALID_ARGUMENT, {\n argument: 'object',\n value: object\n });\n }\n Object.keys(object).forEach(function (key) {\n if (!properties[key]) {\n errors.throwError('invalid object key - ' + key, errors.INVALID_ARGUMENT, {\n argument: 'transaction',\n value: object,\n key: key\n });\n }\n });\n}\nexports.checkProperties = checkProperties;\nfunction shallowCopy(object) {\n var result = {};\n for (var key in object) {\n result[key] = object[key];\n }\n return result;\n}\nexports.shallowCopy = shallowCopy;\nvar opaque = { boolean: true, number: true, string: true };\nfunction deepCopy(object, frozen) {\n // Opaque objects are not mutable, so safe to copy by assignment\n if (object === undefined || object === null || opaque[typeof (object)]) {\n return object;\n }\n // Arrays are mutable, so we need to create a copy\n if (Array.isArray(object)) {\n var result = object.map(function (item) { return deepCopy(item, frozen); });\n if (frozen) {\n Object.freeze(result);\n }\n return result;\n }\n if (typeof (object) === 'object') {\n // Some internal objects, which are already immutable\n if (isType(object, 'BigNumber')) {\n return object;\n }\n if (isType(object, 'Description')) {\n return object;\n }\n if (isType(object, 'Indexed')) {\n return object;\n }\n var result = {};\n for (var key in object) {\n var value = object[key];\n if (value === undefined) {\n continue;\n }\n defineReadOnly(result, key, deepCopy(value, frozen));\n }\n if (frozen) {\n Object.freeze(result);\n }\n return result;\n }\n // The function type is also immutable, so safe to copy by assignment\n if (typeof (object) === 'function') {\n return object;\n }\n throw new Error('Cannot deepCopy ' + typeof (object));\n}\nexports.deepCopy = deepCopy;\n// See: https://github.com/isaacs/inherits/blob/master/inherits_browser.js\nfunction inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n}\nfunction inheritable(parent) {\n return function (child) {\n inherits(child, parent);\n defineReadOnly(child, 'inherits', inheritable(child));\n };\n}\nexports.inheritable = inheritable;\n","\"use strict\";\n//See: https://github.com/ethereum/wiki/wiki/RLP\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bytes_1 = require(\"./bytes\");\nfunction arrayifyInteger(value) {\n var result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n var result = 0;\n for (var i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n var payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n var length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n var data = Array.prototype.slice.call(bytes_1.arrayify(object));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n var length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n}\nfunction encode(object) {\n return bytes_1.hexlify(_encode(object));\n}\nexports.encode = encode;\nfunction _decodeChildren(data, offset, childOffset, length) {\n var result = [];\n while (childOffset < offset + 1 + length) {\n var decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n throw new Error('invalid rlp');\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n throw new Error('invalid rlp data');\n }\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n var lengthLength = data[offset] - 0xf7;\n if (offset + 1 + lengthLength > data.length) {\n throw new Error('too short');\n }\n var length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n throw new Error('to short');\n }\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n var length = data[offset] - 0xc0;\n if (offset + 1 + length > data.length) {\n throw new Error('invalid rlp data');\n }\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n var lengthLength = data[offset] - 0xb7;\n if (offset + 1 + lengthLength > data.length) {\n throw new Error('invalid rlp data');\n }\n var length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n throw new Error('invalid rlp data');\n }\n var result = bytes_1.hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n var length = data[offset] - 0x80;\n if (offset + 1 + length > data.length) {\n throw new Error('invalid rlp data');\n }\n var result = bytes_1.hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: bytes_1.hexlify(data[offset]) };\n}\nfunction decode(data) {\n var bytes = bytes_1.arrayify(data);\n var decoded = _decode(bytes, 0);\n if (decoded.consumed !== bytes.length) {\n throw new Error('invalid rlp data');\n }\n return decoded.result;\n}\nexports.decode = decode;\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar constants_1 = require(\"../constants\");\nvar errors_1 = require(\"../errors\");\nvar bytes_1 = require(\"./bytes\");\n///////////////////////////////\nvar UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm = exports.UnicodeNormalizationForm || (exports.UnicodeNormalizationForm = {}));\n;\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nfunction toUtf8Bytes(str, form) {\n if (form === void 0) { form = UnicodeNormalizationForm.current; }\n if (form != UnicodeNormalizationForm.current) {\n errors_1.checkNormalize();\n str = str.normalize(form);\n }\n var result = [];\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n var c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error('invalid utf-8 string');\n }\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((c >> 18) | 0xf0);\n result.push(((c >> 12) & 0x3f) | 0x80);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return bytes_1.arrayify(result);\n}\nexports.toUtf8Bytes = toUtf8Bytes;\n;\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction toUtf8String(bytes, ignoreErrors) {\n bytes = bytes_1.arrayify(bytes);\n var result = '';\n var i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n var c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result += String.fromCharCode(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n var extraLength = null;\n var overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if (!ignoreErrors) {\n if ((c & 0xc0) === 0x80) {\n throw new Error('invalid utf8 byte sequence; unexpected continuation byte');\n }\n throw new Error('invalid utf8 byte sequence; invalid prefix');\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i + extraLength > bytes.length) {\n if (!ignoreErrors) {\n throw new Error('invalid utf8 byte sequence; too short');\n }\n // If there is an invalid unprocessed byte, skip continuation bytes\n for (; i < bytes.length; i++) {\n if (bytes[i] >> 6 !== 0x02) {\n break;\n }\n }\n continue;\n }\n // Remove the length prefix from the char\n var res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (var j = 0; j < extraLength; j++) {\n var nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n if (res === null) {\n if (!ignoreErrors) {\n throw new Error('invalid utf8 byte sequence; invalid continuation byte');\n }\n continue;\n }\n // Check for overlong seuences (more bytes than needed)\n if (res <= overlongMask) {\n if (!ignoreErrors) {\n throw new Error('invalid utf8 byte sequence; overlong');\n }\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n if (!ignoreErrors) {\n throw new Error('invalid utf8 byte sequence; out-of-range');\n }\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n if (!ignoreErrors) {\n throw new Error('invalid utf8 byte sequence; utf-16 surrogate');\n }\n continue;\n }\n if (res <= 0xffff) {\n result += String.fromCharCode(res);\n continue;\n }\n res -= 0x10000;\n result += String.fromCharCode(((res >> 10) & 0x3ff) + 0xd800, (res & 0x3ff) + 0xdc00);\n }\n return result;\n}\nexports.toUtf8String = toUtf8String;\nfunction formatBytes32String(text) {\n // Get the bytes\n var bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error('bytes32 string must be less than 32 bytes');\n }\n // Zero-pad (implicitly null-terminates)\n return bytes_1.hexlify(bytes_1.concat([bytes, constants_1.HashZero]).slice(0, 32));\n}\nexports.formatBytes32String = formatBytes32String;\nfunction parseBytes32String(bytes) {\n var data = bytes_1.arrayify(bytes);\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error('invalid bytes32 - not 32 bytes long');\n }\n if (data[31] !== 0) {\n throw new Error('invalid bytes32 string - no null terminator');\n }\n // Find the null termination\n var length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\nexports.parseBytes32String = parseBytes32String;\n","/**\r\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\r\n *\r\n * @version 0.5.7\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2015-2016\r\n * @license MIT\r\n */\r\n/*jslint bitwise: true */\r\n(function () {\r\n 'use strict';\r\n\r\n var root = typeof window === 'object' ? window : {};\r\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\r\n if (NODE_JS) {\r\n root = global;\r\n }\r\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\r\n var HEX_CHARS = '0123456789abcdef'.split('');\r\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\r\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\r\n var PADDING = [6, 1536, 393216, 100663296];\r\n var SHIFT = [0, 8, 16, 24];\r\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\r\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\r\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\r\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\r\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\r\n var BITS = [224, 256, 384, 512];\r\n var SHAKE_BITS = [128, 256];\r\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];\r\n\r\n var createOutputMethod = function (bits, padding, outputType) {\r\n return function (message) {\r\n return new Keccak(bits, padding, bits).update(message)[outputType]();\r\n };\r\n };\r\n\r\n var createShakeOutputMethod = function (bits, padding, outputType) {\r\n return function (message, outputBits) {\r\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\r\n };\r\n };\r\n\r\n var createMethod = function (bits, padding) {\r\n var method = createOutputMethod(bits, padding, 'hex');\r\n method.create = function () {\r\n return new Keccak(bits, padding, bits);\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createOutputMethod(bits, padding, type);\r\n }\r\n return method;\r\n };\r\n\r\n var createShakeMethod = function (bits, padding) {\r\n var method = createShakeOutputMethod(bits, padding, 'hex');\r\n method.create = function (outputBits) {\r\n return new Keccak(bits, padding, outputBits);\r\n };\r\n method.update = function (message, outputBits) {\r\n return method.create(outputBits).update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createShakeOutputMethod(bits, padding, type);\r\n }\r\n return method;\r\n };\r\n\r\n var algorithms = [\r\n {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},\r\n {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},\r\n {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}\r\n ];\r\n\r\n var methods = {}, methodNames = [];\r\n\r\n for (var i = 0; i < algorithms.length; ++i) {\r\n var algorithm = algorithms[i];\r\n var bits = algorithm.bits;\r\n for (var j = 0; j < bits.length; ++j) {\r\n var methodName = algorithm.name +'_' + bits[j];\r\n methodNames.push(methodName);\r\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\r\n }\r\n }\r\n\r\n function Keccak(bits, padding, outputBits) {\r\n this.blocks = [];\r\n this.s = [];\r\n this.padding = padding;\r\n this.outputBits = outputBits;\r\n this.reset = true;\r\n this.block = 0;\r\n this.start = 0;\r\n this.blockCount = (1600 - (bits << 1)) >> 5;\r\n this.byteCount = this.blockCount << 2;\r\n this.outputBlocks = outputBits >> 5;\r\n this.extraBytes = (outputBits & 31) >> 3;\r\n\r\n for (var i = 0; i < 50; ++i) {\r\n this.s[i] = 0;\r\n }\r\n }\r\n\r\n Keccak.prototype.update = function (message) {\r\n var notString = typeof message !== 'string';\r\n if (notString && message.constructor === ArrayBuffer) {\r\n message = new Uint8Array(message);\r\n }\r\n var length = message.length, blocks = this.blocks, byteCount = this.byteCount,\r\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\r\n\r\n while (index < length) {\r\n if (this.reset) {\r\n this.reset = false;\r\n blocks[0] = this.block;\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n if (notString) {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n }\r\n this.lastByteIndex = i;\r\n if (i >= byteCount) {\r\n this.start = i - byteCount;\r\n this.block = blocks[blockCount];\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n this.reset = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n Keccak.prototype.finalize = function () {\r\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\r\n blocks[i >> 2] |= this.padding[i & 3];\r\n if (this.lastByteIndex === this.byteCount) {\r\n blocks[0] = blocks[blockCount];\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n blocks[blockCount - 1] |= 0x80000000;\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n };\r\n\r\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var hex = '', block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n block = s[i];\r\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\r\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\r\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\r\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n i = 0;\r\n }\r\n }\r\n if (extraBytes) {\r\n block = s[i];\r\n if (extraBytes > 0) {\r\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\r\n }\r\n if (extraBytes > 1) {\r\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\r\n }\r\n if (extraBytes > 2) {\r\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\r\n }\r\n }\r\n return hex;\r\n };\r\n\r\n Keccak.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var bytes = this.outputBits >> 3;\r\n var buffer;\r\n if (extraBytes) {\r\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\r\n } else {\r\n buffer = new ArrayBuffer(bytes);\r\n }\r\n var array = new Uint32Array(buffer);\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n array[j] = s[i];\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n array[i] = s[i];\r\n buffer = buffer.slice(0, bytes);\r\n }\r\n return buffer;\r\n };\r\n\r\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\r\n\r\n Keccak.prototype.digest = Keccak.prototype.array = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var array = [], offset, block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n offset = j << 2;\r\n block = s[i];\r\n array[offset] = block & 0xFF;\r\n array[offset + 1] = (block >> 8) & 0xFF;\r\n array[offset + 2] = (block >> 16) & 0xFF;\r\n array[offset + 3] = (block >> 24) & 0xFF;\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n offset = j << 2;\r\n block = s[i];\r\n if (extraBytes > 0) {\r\n array[offset] = block & 0xFF;\r\n }\r\n if (extraBytes > 1) {\r\n array[offset + 1] = (block >> 8) & 0xFF;\r\n }\r\n if (extraBytes > 2) {\r\n array[offset + 2] = (block >> 16) & 0xFF;\r\n }\r\n }\r\n return array;\r\n };\r\n\r\n var f = function (s) {\r\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\r\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\r\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\r\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\r\n for (n = 0; n < 48; n += 2) {\r\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\r\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\r\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\r\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\r\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\r\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\r\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\r\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\r\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\r\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\r\n\r\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\r\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\r\n s[0] ^= h;\r\n s[1] ^= l;\r\n s[10] ^= h;\r\n s[11] ^= l;\r\n s[20] ^= h;\r\n s[21] ^= l;\r\n s[30] ^= h;\r\n s[31] ^= l;\r\n s[40] ^= h;\r\n s[41] ^= l;\r\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\r\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\r\n s[2] ^= h;\r\n s[3] ^= l;\r\n s[12] ^= h;\r\n s[13] ^= l;\r\n s[22] ^= h;\r\n s[23] ^= l;\r\n s[32] ^= h;\r\n s[33] ^= l;\r\n s[42] ^= h;\r\n s[43] ^= l;\r\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\r\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\r\n s[4] ^= h;\r\n s[5] ^= l;\r\n s[14] ^= h;\r\n s[15] ^= l;\r\n s[24] ^= h;\r\n s[25] ^= l;\r\n s[34] ^= h;\r\n s[35] ^= l;\r\n s[44] ^= h;\r\n s[45] ^= l;\r\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\r\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\r\n s[6] ^= h;\r\n s[7] ^= l;\r\n s[16] ^= h;\r\n s[17] ^= l;\r\n s[26] ^= h;\r\n s[27] ^= l;\r\n s[36] ^= h;\r\n s[37] ^= l;\r\n s[46] ^= h;\r\n s[47] ^= l;\r\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\r\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\r\n s[8] ^= h;\r\n s[9] ^= l;\r\n s[18] ^= h;\r\n s[19] ^= l;\r\n s[28] ^= h;\r\n s[29] ^= l;\r\n s[38] ^= h;\r\n s[39] ^= l;\r\n s[48] ^= h;\r\n s[49] ^= l;\r\n\r\n b0 = s[0];\r\n b1 = s[1];\r\n b32 = (s[11] << 4) | (s[10] >>> 28);\r\n b33 = (s[10] << 4) | (s[11] >>> 28);\r\n b14 = (s[20] << 3) | (s[21] >>> 29);\r\n b15 = (s[21] << 3) | (s[20] >>> 29);\r\n b46 = (s[31] << 9) | (s[30] >>> 23);\r\n b47 = (s[30] << 9) | (s[31] >>> 23);\r\n b28 = (s[40] << 18) | (s[41] >>> 14);\r\n b29 = (s[41] << 18) | (s[40] >>> 14);\r\n b20 = (s[2] << 1) | (s[3] >>> 31);\r\n b21 = (s[3] << 1) | (s[2] >>> 31);\r\n b2 = (s[13] << 12) | (s[12] >>> 20);\r\n b3 = (s[12] << 12) | (s[13] >>> 20);\r\n b34 = (s[22] << 10) | (s[23] >>> 22);\r\n b35 = (s[23] << 10) | (s[22] >>> 22);\r\n b16 = (s[33] << 13) | (s[32] >>> 19);\r\n b17 = (s[32] << 13) | (s[33] >>> 19);\r\n b48 = (s[42] << 2) | (s[43] >>> 30);\r\n b49 = (s[43] << 2) | (s[42] >>> 30);\r\n b40 = (s[5] << 30) | (s[4] >>> 2);\r\n b41 = (s[4] << 30) | (s[5] >>> 2);\r\n b22 = (s[14] << 6) | (s[15] >>> 26);\r\n b23 = (s[15] << 6) | (s[14] >>> 26);\r\n b4 = (s[25] << 11) | (s[24] >>> 21);\r\n b5 = (s[24] << 11) | (s[25] >>> 21);\r\n b36 = (s[34] << 15) | (s[35] >>> 17);\r\n b37 = (s[35] << 15) | (s[34] >>> 17);\r\n b18 = (s[45] << 29) | (s[44] >>> 3);\r\n b19 = (s[44] << 29) | (s[45] >>> 3);\r\n b10 = (s[6] << 28) | (s[7] >>> 4);\r\n b11 = (s[7] << 28) | (s[6] >>> 4);\r\n b42 = (s[17] << 23) | (s[16] >>> 9);\r\n b43 = (s[16] << 23) | (s[17] >>> 9);\r\n b24 = (s[26] << 25) | (s[27] >>> 7);\r\n b25 = (s[27] << 25) | (s[26] >>> 7);\r\n b6 = (s[36] << 21) | (s[37] >>> 11);\r\n b7 = (s[37] << 21) | (s[36] >>> 11);\r\n b38 = (s[47] << 24) | (s[46] >>> 8);\r\n b39 = (s[46] << 24) | (s[47] >>> 8);\r\n b30 = (s[8] << 27) | (s[9] >>> 5);\r\n b31 = (s[9] << 27) | (s[8] >>> 5);\r\n b12 = (s[18] << 20) | (s[19] >>> 12);\r\n b13 = (s[19] << 20) | (s[18] >>> 12);\r\n b44 = (s[29] << 7) | (s[28] >>> 25);\r\n b45 = (s[28] << 7) | (s[29] >>> 25);\r\n b26 = (s[38] << 8) | (s[39] >>> 24);\r\n b27 = (s[39] << 8) | (s[38] >>> 24);\r\n b8 = (s[48] << 14) | (s[49] >>> 18);\r\n b9 = (s[49] << 14) | (s[48] >>> 18);\r\n\r\n s[0] = b0 ^ (~b2 & b4);\r\n s[1] = b1 ^ (~b3 & b5);\r\n s[10] = b10 ^ (~b12 & b14);\r\n s[11] = b11 ^ (~b13 & b15);\r\n s[20] = b20 ^ (~b22 & b24);\r\n s[21] = b21 ^ (~b23 & b25);\r\n s[30] = b30 ^ (~b32 & b34);\r\n s[31] = b31 ^ (~b33 & b35);\r\n s[40] = b40 ^ (~b42 & b44);\r\n s[41] = b41 ^ (~b43 & b45);\r\n s[2] = b2 ^ (~b4 & b6);\r\n s[3] = b3 ^ (~b5 & b7);\r\n s[12] = b12 ^ (~b14 & b16);\r\n s[13] = b13 ^ (~b15 & b17);\r\n s[22] = b22 ^ (~b24 & b26);\r\n s[23] = b23 ^ (~b25 & b27);\r\n s[32] = b32 ^ (~b34 & b36);\r\n s[33] = b33 ^ (~b35 & b37);\r\n s[42] = b42 ^ (~b44 & b46);\r\n s[43] = b43 ^ (~b45 & b47);\r\n s[4] = b4 ^ (~b6 & b8);\r\n s[5] = b5 ^ (~b7 & b9);\r\n s[14] = b14 ^ (~b16 & b18);\r\n s[15] = b15 ^ (~b17 & b19);\r\n s[24] = b24 ^ (~b26 & b28);\r\n s[25] = b25 ^ (~b27 & b29);\r\n s[34] = b34 ^ (~b36 & b38);\r\n s[35] = b35 ^ (~b37 & b39);\r\n s[44] = b44 ^ (~b46 & b48);\r\n s[45] = b45 ^ (~b47 & b49);\r\n s[6] = b6 ^ (~b8 & b0);\r\n s[7] = b7 ^ (~b9 & b1);\r\n s[16] = b16 ^ (~b18 & b10);\r\n s[17] = b17 ^ (~b19 & b11);\r\n s[26] = b26 ^ (~b28 & b20);\r\n s[27] = b27 ^ (~b29 & b21);\r\n s[36] = b36 ^ (~b38 & b30);\r\n s[37] = b37 ^ (~b39 & b31);\r\n s[46] = b46 ^ (~b48 & b40);\r\n s[47] = b47 ^ (~b49 & b41);\r\n s[8] = b8 ^ (~b0 & b2);\r\n s[9] = b9 ^ (~b1 & b3);\r\n s[18] = b18 ^ (~b10 & b12);\r\n s[19] = b19 ^ (~b11 & b13);\r\n s[28] = b28 ^ (~b20 & b22);\r\n s[29] = b29 ^ (~b21 & b23);\r\n s[38] = b38 ^ (~b30 & b32);\r\n s[39] = b39 ^ (~b31 & b33);\r\n s[48] = b48 ^ (~b40 & b42);\r\n s[49] = b49 ^ (~b41 & b43);\r\n\r\n s[0] ^= RC[n];\r\n s[1] ^= RC[n + 1];\r\n }\r\n };\r\n\r\n if (COMMON_JS) {\r\n module.exports = methods;\r\n } else {\r\n for (var i = 0; i < methodNames.length; ++i) {\r\n root[methodNames[i]] = methods[methodNames[i]];\r\n }\r\n }\r\n})();\r\n","var {defaultAbiCoder} = require('ethers/utils/abi-coder');\nvar {Interface} = require('ethers/utils/interface');\nvar decodeTx = require('./decodeTransaction.js');\n\nmodule.exports = function FunctionDecoder(iface) {\n if (!(this instanceof FunctionDecoder)) { throw new Error('missing new'); }\n\n if (!(Interface.isInterface(iface))) { iface = new Interface(iface); }\n\n var functions = {};\n\n for (var fnName in iface.functions) {\n var fnInfo = iface.functions[fnName];\n functions[fnInfo.sighash] = fnName;\n };\n\n this.decodeFn = function(data) {\n var sighash = data.substring(0, 10);\n var raw_params = '0x'+data.substring(10);\n\n var fnName = functions[sighash];\n var fnInfo = iface.functions[fnName];\n\n var result = defaultAbiCoder.decode(\n fnInfo.inputs,\n raw_params\n );\n\n result.signature = fnInfo.signature;\n result.sighash = fnInfo.sighash;\n\n return result;\n }\n\n this.decodeFnFromTx = function(raw_tx) {\n var decodedTx = decodeTx(raw_tx);\n return this.decodeFn(decodedTx.data);\n }\n}\n","var {bigNumberify} = require('ethers/utils/bignumber');\nvar RLP = require('ethers/utils/rlp');\n\nmodule.exports = function decodeTx(raw_tx) {\n var decoded_tx = RLP.decode(raw_tx);\n\n var [\n raw_nonce,\n raw_gasPrice,\n raw_gasLimit,\n raw_to,\n raw_value,\n raw_data,\n raw_v,\n raw_r,\n raw_s\n ] = decoded_tx;\n\n var transaction = {\n nonce: bigNumberify(raw_nonce).toNumber(),\n gasPrice: bigNumberify(raw_gasPrice),\n gasLimit: bigNumberify(raw_gasLimit),\n to: raw_to,\n value: bigNumberify(raw_value),\n data: raw_data,\n v: bigNumberify(raw_v).toNumber(),\n r: raw_r,\n s: raw_s\n }\n\n if (transaction.to == '0x') delete transaction.to;\n\n return transaction;\n}\n","module.exports = {\n decodeTx: require('./decodeTransaction.js'),\n FunctionDecoder: require('./FunctionDecoder.js')\n};\n","module.exports = require('./lib/index.js')\n","/* eslint-disable no-useless-escape */\nconst utils = require('ethereumjs-util')\nconst BN = require('bn.js')\n\nvar ABI = function () {\n}\n\n// Convert from short to canonical names\n// FIXME: optimise or make this nicer?\nfunction elementaryName (name) {\n if (name.startsWith('int[')) {\n return 'int256' + name.slice(3)\n } else if (name === 'int') {\n return 'int256'\n } else if (name.startsWith('uint[')) {\n return 'uint256' + name.slice(4)\n } else if (name === 'uint') {\n return 'uint256'\n } else if (name.startsWith('fixed[')) {\n return 'fixed128x128' + name.slice(5)\n } else if (name === 'fixed') {\n return 'fixed128x128'\n } else if (name.startsWith('ufixed[')) {\n return 'ufixed128x128' + name.slice(6)\n } else if (name === 'ufixed') {\n return 'ufixed128x128'\n }\n return name\n}\n\nABI.eventID = function (name, types) {\n // FIXME: use node.js util.format?\n var sig = name + '(' + types.map(elementaryName).join(',') + ')'\n return utils.keccak256(Buffer.from(sig))\n}\n\nABI.methodID = function (name, types) {\n return ABI.eventID(name, types).slice(0, 4)\n}\n\n// Parse N from type\nfunction parseTypeN (type) {\n return parseInt(/^\\D+(\\d+)$/.exec(type)[1], 10)\n}\n\n// Parse N,M from typex\nfunction parseTypeNxM (type) {\n var tmp = /^\\D+(\\d+)x(\\d+)$/.exec(type)\n return [ parseInt(tmp[1], 10), parseInt(tmp[2], 10) ]\n}\n\n// Parse N in type[] where \"type\" can itself be an array type.\nfunction parseTypeArray (type) {\n var tmp = type.match(/(.*)\\[(.*?)\\]$/)\n if (tmp) {\n return tmp[2] === '' ? 'dynamic' : parseInt(tmp[2], 10)\n }\n return null\n}\n\nfunction parseNumber (arg) {\n var type = typeof arg\n if (type === 'string') {\n if (utils.isHexPrefixed(arg)) {\n return new BN(utils.stripHexPrefix(arg), 16)\n } else {\n return new BN(arg, 10)\n }\n } else if (type === 'number') {\n return new BN(arg)\n } else if (arg.toArray) {\n // assume this is a BN for the moment, replace with BN.isBN soon\n return arg\n } else {\n throw new Error('Argument is not a number')\n }\n}\n\n// someMethod(bytes,uint)\n// someMethod(bytes,uint):(boolean)\nfunction parseSignature (sig) {\n var tmp = /^(\\w+)\\((.*)\\)$/.exec(sig)\n\n if (tmp.length !== 3) {\n throw new Error('Invalid method signature')\n }\n\n var args = /^(.+)\\):\\((.+)$/.exec(tmp[2])\n\n if (args !== null && args.length === 3) {\n return {\n method: tmp[1],\n args: args[1].split(','),\n retargs: args[2].split(',')\n }\n } else {\n var params = tmp[2].split(',')\n if (params.length === 1 && params[0] === '') {\n // Special-case (possibly naive) fixup for functions that take no arguments.\n // TODO: special cases are always bad, but this makes the function return\n // match what the calling functions expect\n params = []\n }\n return {\n method: tmp[1],\n args: params\n }\n }\n}\n\n// Encodes a single item (can be dynamic array)\n// @returns: Buffer\nfunction encodeSingle (type, arg) {\n var size, num, ret, i\n\n if (type === 'address') {\n return encodeSingle('uint160', parseNumber(arg))\n } else if (type === 'bool') {\n return encodeSingle('uint8', arg ? 1 : 0)\n } else if (type === 'string') {\n return encodeSingle('bytes', Buffer.from(arg, 'utf8'))\n } else if (isArray(type)) {\n // this part handles fixed-length ([2]) and variable length ([]) arrays\n // NOTE: we catch here all calls to arrays, that simplifies the rest\n if (typeof arg.length === 'undefined') {\n throw new Error('Not an array?')\n }\n size = parseTypeArray(type)\n if (size !== 'dynamic' && size !== 0 && arg.length > size) {\n throw new Error('Elements exceed array size: ' + size)\n }\n ret = []\n type = type.slice(0, type.lastIndexOf('['))\n if (typeof arg === 'string') {\n arg = JSON.parse(arg)\n }\n for (i in arg) {\n ret.push(encodeSingle(type, arg[i]))\n }\n if (size === 'dynamic') {\n var length = encodeSingle('uint256', arg.length)\n ret.unshift(length)\n }\n return Buffer.concat(ret)\n } else if (type === 'bytes') {\n arg = Buffer.from(arg)\n\n ret = Buffer.concat([ encodeSingle('uint256', arg.length), arg ])\n\n if ((arg.length % 32) !== 0) {\n ret = Buffer.concat([ ret, utils.zeros(32 - (arg.length % 32)) ])\n }\n\n return ret\n } else if (type.startsWith('bytes')) {\n size = parseTypeN(type)\n if (size < 1 || size > 32) {\n throw new Error('Invalid bytes width: ' + size)\n }\n\n return utils.setLengthRight(arg, 32)\n } else if (type.startsWith('uint')) {\n size = parseTypeN(type)\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid uint width: ' + size)\n }\n\n num = parseNumber(arg)\n if (num.bitLength() > size) {\n throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength())\n }\n\n if (num < 0) {\n throw new Error('Supplied uint is negative')\n }\n\n return num.toArrayLike(Buffer, 'be', 32)\n } else if (type.startsWith('int')) {\n size = parseTypeN(type)\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid int width: ' + size)\n }\n\n num = parseNumber(arg)\n if (num.bitLength() > size) {\n throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength())\n }\n\n return num.toTwos(256).toArrayLike(Buffer, 'be', 32)\n } else if (type.startsWith('ufixed')) {\n size = parseTypeNxM(type)\n\n num = parseNumber(arg)\n\n if (num < 0) {\n throw new Error('Supplied ufixed is negative')\n }\n\n return encodeSingle('uint256', num.mul(new BN(2).pow(new BN(size[1]))))\n } else if (type.startsWith('fixed')) {\n size = parseTypeNxM(type)\n\n return encodeSingle('int256', parseNumber(arg).mul(new BN(2).pow(new BN(size[1]))))\n }\n\n throw new Error('Unsupported or invalid type: ' + type)\n}\n\n// Decodes a single item (can be dynamic array)\n// @returns: array\n// FIXME: this method will need a lot of attention at checking limits and validation\nfunction decodeSingle (parsedType, data, offset) {\n if (typeof parsedType === 'string') {\n parsedType = parseType(parsedType)\n }\n var size, num, ret, i\n\n if (parsedType.name === 'address') {\n return decodeSingle(parsedType.rawType, data, offset).toArrayLike(Buffer, 'be', 20).toString('hex')\n } else if (parsedType.name === 'bool') {\n return decodeSingle(parsedType.rawType, data, offset).toString() === new BN(1).toString()\n } else if (parsedType.name === 'string') {\n var bytes = decodeSingle(parsedType.rawType, data, offset)\n return Buffer.from(bytes, 'utf8').toString()\n } else if (parsedType.isArray) {\n // this part handles fixed-length arrays ([2]) and variable length ([]) arrays\n // NOTE: we catch here all calls to arrays, that simplifies the rest\n ret = []\n size = parsedType.size\n\n if (parsedType.size === 'dynamic') {\n offset = decodeSingle('uint256', data, offset).toNumber()\n size = decodeSingle('uint256', data, offset).toNumber()\n offset = offset + 32\n }\n for (i = 0; i < size; i++) {\n var decoded = decodeSingle(parsedType.subArray, data, offset)\n ret.push(decoded)\n offset += parsedType.subArray.memoryUsage\n }\n return ret\n } else if (parsedType.name === 'bytes') {\n offset = decodeSingle('uint256', data, offset).toNumber()\n size = decodeSingle('uint256', data, offset).toNumber()\n return data.slice(offset + 32, offset + 32 + size)\n } else if (parsedType.name.startsWith('bytes')) {\n return data.slice(offset, offset + parsedType.size)\n } else if (parsedType.name.startsWith('uint')) {\n num = new BN(data.slice(offset, offset + 32), 16, 'be')\n if (num.bitLength() > parsedType.size) {\n throw new Error('Decoded int exceeds width: ' + parsedType.size + ' vs ' + num.bitLength())\n }\n return num\n } else if (parsedType.name.startsWith('int')) {\n num = new BN(data.slice(offset, offset + 32), 16, 'be').fromTwos(256)\n if (num.bitLength() > parsedType.size) {\n throw new Error('Decoded uint exceeds width: ' + parsedType.size + ' vs ' + num.bitLength())\n }\n\n return num\n } else if (parsedType.name.startsWith('ufixed')) {\n size = new BN(2).pow(new BN(parsedType.size[1]))\n num = decodeSingle('uint256', data, offset)\n if (!num.mod(size).isZero()) {\n throw new Error('Decimals not supported yet')\n }\n return num.div(size)\n } else if (parsedType.name.startsWith('fixed')) {\n size = new BN(2).pow(new BN(parsedType.size[1]))\n num = decodeSingle('int256', data, offset)\n if (!num.mod(size).isZero()) {\n throw new Error('Decimals not supported yet')\n }\n return num.div(size)\n }\n throw new Error('Unsupported or invalid type: ' + parsedType.name)\n}\n\n// Parse the given type\n// @returns: {} containing the type itself, memory usage and (including size and subArray if applicable)\nfunction parseType (type) {\n var size\n var ret\n if (isArray(type)) {\n size = parseTypeArray(type)\n var subArray = type.slice(0, type.lastIndexOf('['))\n subArray = parseType(subArray)\n ret = {\n isArray: true,\n name: type,\n size: size,\n memoryUsage: size === 'dynamic' ? 32 : subArray.memoryUsage * size,\n subArray: subArray\n }\n return ret\n } else {\n var rawType\n switch (type) {\n case 'address':\n rawType = 'uint160'\n break\n case 'bool':\n rawType = 'uint8'\n break\n case 'string':\n rawType = 'bytes'\n break\n }\n ret = {\n rawType: rawType,\n name: type,\n memoryUsage: 32\n }\n\n if ((type.startsWith('bytes') && type !== 'bytes') || type.startsWith('uint') || type.startsWith('int')) {\n ret.size = parseTypeN(type)\n } else if (type.startsWith('ufixed') || type.startsWith('fixed')) {\n ret.size = parseTypeNxM(type)\n }\n\n if (type.startsWith('bytes') && type !== 'bytes' && (ret.size < 1 || ret.size > 32)) {\n throw new Error('Invalid bytes width: ' + ret.size)\n }\n if ((type.startsWith('uint') || type.startsWith('int')) && (ret.size % 8 || ret.size < 8 || ret.size > 256)) {\n throw new Error('Invalid int/uint width: ' + ret.size)\n }\n return ret\n }\n}\n\n// Is a type dynamic?\nfunction isDynamic (type) {\n // FIXME: handle all types? I don't think anything is missing now\n return (type === 'string') || (type === 'bytes') || (parseTypeArray(type) === 'dynamic')\n}\n\n// Is a type an array?\nfunction isArray (type) {\n return type.lastIndexOf(']') === type.length - 1\n}\n\n// Encode a method/event with arguments\n// @types an array of string type names\n// @args an array of the appropriate values\nABI.rawEncode = function (types, values) {\n var output = []\n var data = []\n\n var headLength = 0\n\n types.forEach(function (type) {\n if (isArray(type)) {\n var size = parseTypeArray(type)\n\n if (size !== 'dynamic') {\n headLength += 32 * size\n } else {\n headLength += 32\n }\n } else {\n headLength += 32\n }\n })\n\n for (var i = 0; i < types.length; i++) {\n var type = elementaryName(types[i])\n var value = values[i]\n var cur = encodeSingle(type, value)\n\n // Use the head/tail method for storing dynamic data\n if (isDynamic(type)) {\n output.push(encodeSingle('uint256', headLength))\n data.push(cur)\n headLength += cur.length\n } else {\n output.push(cur)\n }\n }\n\n return Buffer.concat(output.concat(data))\n}\n\nABI.rawDecode = function (types, data) {\n var ret = []\n data = Buffer.from(data)\n var offset = 0\n for (var i = 0; i < types.length; i++) {\n var type = elementaryName(types[i])\n var parsed = parseType(type, data, offset)\n var decoded = decodeSingle(parsed, data, offset)\n offset += parsed.memoryUsage\n ret.push(decoded)\n }\n return ret\n}\n\nABI.simpleEncode = function (method) {\n var args = Array.prototype.slice.call(arguments).slice(1)\n var sig = parseSignature(method)\n\n // FIXME: validate/convert arguments\n if (args.length !== sig.args.length) {\n throw new Error('Argument count mismatch')\n }\n\n return Buffer.concat([ ABI.methodID(sig.method, sig.args), ABI.rawEncode(sig.args, args) ])\n}\n\nABI.simpleDecode = function (method, data) {\n var sig = parseSignature(method)\n\n // FIXME: validate/convert arguments\n if (!sig.retargs) {\n throw new Error('No return values in method')\n }\n\n return ABI.rawDecode(sig.retargs, data)\n}\n\nfunction stringify (type, value) {\n if (type.startsWith('address') || type.startsWith('bytes')) {\n return '0x' + value.toString('hex')\n } else {\n return value.toString()\n }\n}\n\nABI.stringify = function (types, values) {\n var ret = []\n\n for (var i in types) {\n var type = types[i]\n var value = values[i]\n\n // if it is an array type, concat the items\n if (/^[^\\[]+\\[.*\\]$/.test(type)) {\n value = value.map(function (item) {\n return stringify(type, item)\n }).join(', ')\n } else {\n value = stringify(type, value)\n }\n\n ret.push(value)\n }\n\n return ret\n}\n\nABI.solidityHexValue = function (type, value, bitsize) {\n // pass in bitsize = null if use default bitsize\n var size, num\n if (isArray(type)) {\n var subType = type.replace(/\\[.*?\\]/, '')\n if (!isArray(subType)) {\n var arraySize = parseTypeArray(type)\n if (arraySize !== 'dynamic' && arraySize !== 0 && value.length > arraySize) {\n throw new Error('Elements exceed array size: ' + arraySize)\n }\n }\n var arrayValues = value.map(function (v) {\n return ABI.solidityHexValue(subType, v, 256)\n })\n return Buffer.concat(arrayValues)\n } else if (type === 'bytes') {\n return value\n } else if (type === 'string') {\n return Buffer.from(value, 'utf8')\n } else if (type === 'bool') {\n bitsize = bitsize || 8\n var padding = Array((bitsize) / 4).join('0')\n return Buffer.from(value ? padding + '1' : padding + '0', 'hex')\n } else if (type === 'address') {\n var bytesize = 20\n if (bitsize) {\n bytesize = bitsize / 8\n }\n return utils.setLengthLeft(value, bytesize)\n } else if (type.startsWith('bytes')) {\n size = parseTypeN(type)\n if (size < 1 || size > 32) {\n throw new Error('Invalid bytes width: ' + size)\n }\n\n return utils.setLengthRight(value, size)\n } else if (type.startsWith('uint')) {\n size = parseTypeN(type)\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid uint width: ' + size)\n }\n\n num = parseNumber(value)\n if (num.bitLength() > size) {\n throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength())\n }\n\n bitsize = bitsize || size\n return num.toArrayLike(Buffer, 'be', bitsize / 8)\n } else if (type.startsWith('int')) {\n size = parseTypeN(type)\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid int width: ' + size)\n }\n\n num = parseNumber(value)\n if (num.bitLength() > size) {\n throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength())\n }\n\n bitsize = bitsize || size\n return num.toTwos(size).toArrayLike(Buffer, 'be', bitsize / 8)\n } else {\n // FIXME: support all other types\n throw new Error('Unsupported or invalid type: ' + type)\n }\n}\n\nABI.solidityPack = function (types, values) {\n if (types.length !== values.length) {\n throw new Error('Number of types are not matching the values')\n }\n\n var ret = []\n\n for (var i = 0; i < types.length; i++) {\n var type = elementaryName(types[i])\n var value = values[i]\n ret.push(ABI.solidityHexValue(type, value, null))\n }\n\n return Buffer.concat(ret)\n}\n\nABI.soliditySHA3 = function (types, values) {\n return utils.keccak256(ABI.solidityPack(types, values))\n}\n\nABI.soliditySHA256 = function (types, values) {\n return utils.sha256(ABI.solidityPack(types, values))\n}\n\nABI.solidityRIPEMD160 = function (types, values) {\n return utils.ripemd160(ABI.solidityPack(types, values), true)\n}\n\n// Serpent's users are familiar with this encoding\n// - s: string\n// - b: bytes\n// - b: bytes\n// - i: int256\n// - a: int256[]\n\nfunction isNumeric (c) {\n // FIXME: is this correct? Seems to work\n return (c >= '0') && (c <= '9')\n}\n\n// For a \"documentation\" refer to https://github.com/ethereum/serpent/blob/develop/preprocess.cpp\nABI.fromSerpent = function (sig) {\n var ret = []\n for (var i = 0; i < sig.length; i++) {\n var type = sig[i]\n if (type === 's') {\n ret.push('bytes')\n } else if (type === 'b') {\n var tmp = 'bytes'\n var j = i + 1\n while ((j < sig.length) && isNumeric(sig[j])) {\n tmp += sig[j] - '0'\n j++\n }\n i = j - 1\n ret.push(tmp)\n } else if (type === 'i') {\n ret.push('int256')\n } else if (type === 'a') {\n ret.push('int256[]')\n } else {\n throw new Error('Unsupported or invalid type: ' + type)\n }\n }\n return ret\n}\n\nABI.toSerpent = function (types) {\n var ret = []\n for (var i = 0; i < types.length; i++) {\n var type = types[i]\n if (type === 'bytes') {\n ret.push('s')\n } else if (type.startsWith('bytes')) {\n ret.push('b' + parseTypeN(type))\n } else if (type === 'int256') {\n ret.push('i')\n } else if (type === 'int256[]') {\n ret.push('a')\n } else {\n throw new Error('Unsupported or invalid type: ' + type)\n }\n }\n return ret.join('')\n}\n\nmodule.exports = ABI\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n",null,null,null,null,null,null,null,null,null,"import assert from 'assert'\nimport { BN, rlp } from './externals'\nimport {\n privateKeyVerify,\n publicKeyCreate,\n publicKeyVerify,\n publicKeyConvert,\n} from 'ethereum-cryptography/secp256k1'\nimport { stripHexPrefix } from './internal'\nimport { KECCAK256_RLP, KECCAK256_NULL } from './constants'\nimport { zeros, bufferToHex, toBuffer } from './bytes'\nimport { keccak, keccak256, keccakFromString, rlphash } from './hash'\nimport { assertIsString, assertIsHexString, assertIsBuffer } from './helpers'\nimport { BNLike, BufferLike, bnToUnpaddedBuffer, toType, TypeOutput } from './types'\n\nexport interface AccountData {\n nonce?: BNLike\n balance?: BNLike\n stateRoot?: BufferLike\n codeHash?: BufferLike\n}\n\nexport class Account {\n nonce: BN\n balance: BN\n stateRoot: Buffer\n codeHash: Buffer\n\n static fromAccountData(accountData: AccountData) {\n const { nonce, balance, stateRoot, codeHash } = accountData\n\n return new Account(\n nonce ? new BN(toBuffer(nonce)) : undefined,\n balance ? new BN(toBuffer(balance)) : undefined,\n stateRoot ? toBuffer(stateRoot) : undefined,\n codeHash ? toBuffer(codeHash) : undefined\n )\n }\n\n public static fromRlpSerializedAccount(serialized: Buffer) {\n const values = rlp.decode(serialized)\n\n if (!Array.isArray(values)) {\n throw new Error('Invalid serialized account input. Must be array')\n }\n\n return this.fromValuesArray(values)\n }\n\n public static fromValuesArray(values: Buffer[]) {\n const [nonce, balance, stateRoot, codeHash] = values\n\n return new Account(new BN(nonce), new BN(balance), stateRoot, codeHash)\n }\n\n /**\n * This constructor assigns and validates the values.\n * Use the static factory methods to assist in creating an Account from varying data types.\n */\n constructor(\n nonce = new BN(0),\n balance = new BN(0),\n stateRoot = KECCAK256_RLP,\n codeHash = KECCAK256_NULL\n ) {\n this.nonce = nonce\n this.balance = balance\n this.stateRoot = stateRoot\n this.codeHash = codeHash\n\n this._validate()\n }\n\n private _validate() {\n if (this.nonce.lt(new BN(0))) {\n throw new Error('nonce must be greater than zero')\n }\n if (this.balance.lt(new BN(0))) {\n throw new Error('balance must be greater than zero')\n }\n if (this.stateRoot.length !== 32) {\n throw new Error('stateRoot must have a length of 32')\n }\n if (this.codeHash.length !== 32) {\n throw new Error('codeHash must have a length of 32')\n }\n }\n\n /**\n * Returns a Buffer Array of the raw Buffers for the account, in order.\n */\n raw(): Buffer[] {\n return [\n bnToUnpaddedBuffer(this.nonce),\n bnToUnpaddedBuffer(this.balance),\n this.stateRoot,\n this.codeHash,\n ]\n }\n\n /**\n * Returns the RLP serialization of the account as a `Buffer`.\n */\n serialize(): Buffer {\n return rlp.encode(this.raw())\n }\n\n /**\n * Returns a `Boolean` determining if the account is a contract.\n */\n isContract(): boolean {\n return !this.codeHash.equals(KECCAK256_NULL)\n }\n\n /**\n * Returns a `Boolean` determining if the account is empty complying to the definition of\n * account emptiness in [EIP-161](https://eips.ethereum.org/EIPS/eip-161):\n * \"An account is considered empty when it has no code and zero nonce and zero balance.\"\n */\n isEmpty(): boolean {\n return this.balance.isZero() && this.nonce.isZero() && this.codeHash.equals(KECCAK256_NULL)\n }\n}\n\n/**\n * Checks if the address is a valid. Accepts checksummed addresses too.\n */\nexport const isValidAddress = function (hexAddress: string): boolean {\n try {\n assertIsString(hexAddress)\n } catch (e: any) {\n return false\n }\n\n return /^0x[0-9a-fA-F]{40}$/.test(hexAddress)\n}\n\n/**\n * Returns a checksummed address.\n *\n * If an eip1191ChainId is provided, the chainId will be included in the checksum calculation. This\n * has the effect of checksummed addresses for one chain having invalid checksums for others.\n * For more details see [EIP-1191](https://eips.ethereum.org/EIPS/eip-1191).\n *\n * WARNING: Checksums with and without the chainId will differ and the EIP-1191 checksum is not\n * backwards compatible to the original widely adopted checksum format standard introduced in\n * [EIP-55](https://eips.ethereum.org/EIPS/eip-55), so this will break in existing applications.\n * Usage of this EIP is therefore discouraged unless you have a very targeted use case.\n */\nexport const toChecksumAddress = function (hexAddress: string, eip1191ChainId?: BNLike): string {\n assertIsHexString(hexAddress)\n const address = stripHexPrefix(hexAddress).toLowerCase()\n\n let prefix = ''\n if (eip1191ChainId) {\n const chainId = toType(eip1191ChainId, TypeOutput.BN)\n prefix = chainId.toString() + '0x'\n }\n\n const hash = keccakFromString(prefix + address).toString('hex')\n let ret = '0x'\n\n for (let i = 0; i < address.length; i++) {\n if (parseInt(hash[i], 16) >= 8) {\n ret += address[i].toUpperCase()\n } else {\n ret += address[i]\n }\n }\n\n return ret\n}\n\n/**\n * Checks if the address is a valid checksummed address.\n *\n * See toChecksumAddress' documentation for details about the eip1191ChainId parameter.\n */\nexport const isValidChecksumAddress = function (\n hexAddress: string,\n eip1191ChainId?: BNLike\n): boolean {\n return isValidAddress(hexAddress) && toChecksumAddress(hexAddress, eip1191ChainId) === hexAddress\n}\n\n/**\n * Generates an address of a newly created contract.\n * @param from The address which is creating this new address\n * @param nonce The nonce of the from account\n */\nexport const generateAddress = function (from: Buffer, nonce: Buffer): Buffer {\n assertIsBuffer(from)\n assertIsBuffer(nonce)\n const nonceBN = new BN(nonce)\n\n if (nonceBN.isZero()) {\n // in RLP we want to encode null in the case of zero nonce\n // read the RLP documentation for an answer if you dare\n return rlphash([from, null]).slice(-20)\n }\n\n // Only take the lower 160bits of the hash\n return rlphash([from, Buffer.from(nonceBN.toArray())]).slice(-20)\n}\n\n/**\n * Generates an address for a contract created using CREATE2.\n * @param from The address which is creating this new address\n * @param salt A salt\n * @param initCode The init code of the contract being created\n */\nexport const generateAddress2 = function (from: Buffer, salt: Buffer, initCode: Buffer): Buffer {\n assertIsBuffer(from)\n assertIsBuffer(salt)\n assertIsBuffer(initCode)\n\n assert(from.length === 20)\n assert(salt.length === 32)\n\n const address = keccak256(\n Buffer.concat([Buffer.from('ff', 'hex'), from, salt, keccak256(initCode)])\n )\n\n return address.slice(-20)\n}\n\n/**\n * Checks if the private key satisfies the rules of the curve secp256k1.\n */\nexport const isValidPrivate = function (privateKey: Buffer): boolean {\n return privateKeyVerify(privateKey)\n}\n\n/**\n * Checks if the public key satisfies the rules of the curve secp256k1\n * and the requirements of Ethereum.\n * @param publicKey The two points of an uncompressed key, unless sanitize is enabled\n * @param sanitize Accept public keys in other formats\n */\nexport const isValidPublic = function (publicKey: Buffer, sanitize: boolean = false): boolean {\n assertIsBuffer(publicKey)\n if (publicKey.length === 64) {\n // Convert to SEC1 for secp256k1\n return publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey]))\n }\n\n if (!sanitize) {\n return false\n }\n\n return publicKeyVerify(publicKey)\n}\n\n/**\n * Returns the ethereum address of a given public key.\n * Accepts \"Ethereum public keys\" and SEC1 encoded keys.\n * @param pubKey The two points of an uncompressed key, unless sanitize is enabled\n * @param sanitize Accept public keys in other formats\n */\nexport const pubToAddress = function (pubKey: Buffer, sanitize: boolean = false): Buffer {\n assertIsBuffer(pubKey)\n if (sanitize && pubKey.length !== 64) {\n pubKey = Buffer.from(publicKeyConvert(pubKey, false).slice(1))\n }\n assert(pubKey.length === 64)\n // Only take the lower 160bits of the hash\n return keccak(pubKey).slice(-20)\n}\nexport const publicToAddress = pubToAddress\n\n/**\n * Returns the ethereum public key of a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\nexport const privateToPublic = function (privateKey: Buffer): Buffer {\n assertIsBuffer(privateKey)\n // skip the type flag and use the X, Y points\n return Buffer.from(publicKeyCreate(privateKey, false)).slice(1)\n}\n\n/**\n * Returns the ethereum address of a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\nexport const privateToAddress = function (privateKey: Buffer): Buffer {\n return publicToAddress(privateToPublic(privateKey))\n}\n\n/**\n * Converts a public key to the Ethereum format.\n */\nexport const importPublic = function (publicKey: Buffer): Buffer {\n assertIsBuffer(publicKey)\n if (publicKey.length !== 64) {\n publicKey = Buffer.from(publicKeyConvert(publicKey, false).slice(1))\n }\n return publicKey\n}\n\n/**\n * Returns the zero address.\n */\nexport const zeroAddress = function (): string {\n const addressLength = 20\n const addr = zeros(addressLength)\n return bufferToHex(addr)\n}\n\n/**\n * Checks if a given address is the zero address.\n */\nexport const isZeroAddress = function (hexAddress: string): boolean {\n try {\n assertIsString(hexAddress)\n } catch (e: any) {\n return false\n }\n\n const zeroAddr = zeroAddress()\n return zeroAddr === hexAddress\n}\n","import assert from 'assert'\nimport { BN } from './externals'\nimport { toBuffer, zeros } from './bytes'\nimport {\n isValidAddress,\n pubToAddress,\n privateToAddress,\n generateAddress,\n generateAddress2,\n} from './account'\n\nexport class Address {\n public readonly buf: Buffer\n\n constructor(buf: Buffer) {\n assert(buf.length === 20, 'Invalid address length')\n this.buf = buf\n }\n\n /**\n * Returns the zero address.\n */\n static zero(): Address {\n return new Address(zeros(20))\n }\n\n /**\n * Returns an Address object from a hex-encoded string.\n * @param str - Hex-encoded address\n */\n static fromString(str: string): Address {\n assert(isValidAddress(str), 'Invalid address')\n return new Address(toBuffer(str))\n }\n\n /**\n * Returns an address for a given public key.\n * @param pubKey The two points of an uncompressed key\n */\n static fromPublicKey(pubKey: Buffer): Address {\n assert(Buffer.isBuffer(pubKey), 'Public key should be Buffer')\n const buf = pubToAddress(pubKey)\n return new Address(buf)\n }\n\n /**\n * Returns an address for a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\n static fromPrivateKey(privateKey: Buffer): Address {\n assert(Buffer.isBuffer(privateKey), 'Private key should be Buffer')\n const buf = privateToAddress(privateKey)\n return new Address(buf)\n }\n\n /**\n * Generates an address for a newly created contract.\n * @param from The address which is creating this new address\n * @param nonce The nonce of the from account\n */\n static generate(from: Address, nonce: BN): Address {\n assert(BN.isBN(nonce))\n return new Address(generateAddress(from.buf, nonce.toArrayLike(Buffer)))\n }\n\n /**\n * Generates an address for a contract created using CREATE2.\n * @param from The address which is creating this new address\n * @param salt A salt\n * @param initCode The init code of the contract being created\n */\n static generate2(from: Address, salt: Buffer, initCode: Buffer): Address {\n assert(Buffer.isBuffer(salt))\n assert(Buffer.isBuffer(initCode))\n return new Address(generateAddress2(from.buf, salt, initCode))\n }\n\n /**\n * Is address equal to another.\n */\n equals(address: Address): boolean {\n return this.buf.equals(address.buf)\n }\n\n /**\n * Is address zero.\n */\n isZero(): boolean {\n return this.equals(Address.zero())\n }\n\n /**\n * True if address is in the address range defined\n * by EIP-1352\n */\n isPrecompileOrSystemAddress(): boolean {\n const addressBN = new BN(this.buf)\n const rangeMin = new BN(0)\n const rangeMax = new BN('ffff', 'hex')\n\n return addressBN.gte(rangeMin) && addressBN.lte(rangeMax)\n }\n\n /**\n * Returns hex encoding of address.\n */\n toString(): string {\n return '0x' + this.buf.toString('hex')\n }\n\n /**\n * Returns Buffer representation of address.\n */\n toBuffer(): Buffer {\n return Buffer.from(this.buf)\n }\n}\n","import { BN } from './externals'\nimport { stripHexPrefix, padToEven, isHexString, isHexPrefixed } from './internal'\nimport {\n PrefixedHexString,\n TransformableToArray,\n TransformableToBuffer,\n NestedBufferArray,\n NestedUint8Array,\n} from './types'\nimport { assertIsBuffer, assertIsArray, assertIsHexString } from './helpers'\n\n/**\n * Converts a `Number` into a hex `String`\n * @param {Number} i\n * @return {String}\n */\nexport const intToHex = function (i: number) {\n if (!Number.isSafeInteger(i) || i < 0) {\n throw new Error(`Received an invalid integer type: ${i}`)\n }\n return `0x${i.toString(16)}`\n}\n\n/**\n * Converts an `Number` to a `Buffer`\n * @param {Number} i\n * @return {Buffer}\n */\nexport const intToBuffer = function (i: number) {\n const hex = intToHex(i)\n return Buffer.from(padToEven(hex.slice(2)), 'hex')\n}\n\n/**\n * Returns a buffer filled with 0s.\n * @param bytes the number of bytes the buffer should be\n */\nexport const zeros = function (bytes: number): Buffer {\n return Buffer.allocUnsafe(bytes).fill(0)\n}\n\n/**\n * Pads a `Buffer` with zeros till it has `length` bytes.\n * Truncates the beginning or end of input if its length exceeds `length`.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @param right whether to start padding form the left or right\n * @return (Buffer)\n */\nconst setLength = function (msg: Buffer, length: number, right: boolean) {\n const buf = zeros(length)\n if (right) {\n if (msg.length < length) {\n msg.copy(buf)\n return buf\n }\n return msg.slice(0, length)\n } else {\n if (msg.length < length) {\n msg.copy(buf, length - msg.length)\n return buf\n }\n return msg.slice(-length)\n }\n}\n\n/**\n * Left Pads a `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @return (Buffer)\n */\nexport const setLengthLeft = function (msg: Buffer, length: number) {\n assertIsBuffer(msg)\n return setLength(msg, length, false)\n}\n\n/**\n * Right Pads a `Buffer` with trailing zeros till it has `length` bytes.\n * it truncates the end if it exceeds.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @return (Buffer)\n */\nexport const setLengthRight = function (msg: Buffer, length: number) {\n assertIsBuffer(msg)\n return setLength(msg, length, true)\n}\n\n/**\n * Trims leading zeros from a `Buffer`, `String` or `Number[]`.\n * @param a (Buffer|Array|String)\n * @return (Buffer|Array|String)\n */\nconst stripZeros = function (a: any): Buffer | number[] | string {\n let first = a[0]\n while (a.length > 0 && first.toString() === '0') {\n a = a.slice(1)\n first = a[0]\n }\n return a\n}\n\n/**\n * Trims leading zeros from a `Buffer`.\n * @param a (Buffer)\n * @return (Buffer)\n */\nexport const unpadBuffer = function (a: Buffer): Buffer {\n assertIsBuffer(a)\n return stripZeros(a) as Buffer\n}\n\n/**\n * Trims leading zeros from an `Array` (of numbers).\n * @param a (number[])\n * @return (number[])\n */\nexport const unpadArray = function (a: number[]): number[] {\n assertIsArray(a)\n return stripZeros(a) as number[]\n}\n\n/**\n * Trims leading zeros from a hex-prefixed `String`.\n * @param a (String)\n * @return (String)\n */\nexport const unpadHexString = function (a: string): string {\n assertIsHexString(a)\n a = stripHexPrefix(a)\n return stripZeros(a) as string\n}\n\nexport type ToBufferInputTypes =\n | PrefixedHexString\n | number\n | BN\n | Buffer\n | Uint8Array\n | number[]\n | TransformableToArray\n | TransformableToBuffer\n | null\n | undefined\n\n/**\n * Attempts to turn a value into a `Buffer`.\n * Inputs supported: `Buffer`, `String` (hex-prefixed), `Number`, null/undefined, `BN` and other objects\n * with a `toArray()` or `toBuffer()` method.\n * @param v the value\n */\nexport const toBuffer = function (v: ToBufferInputTypes): Buffer {\n if (v === null || v === undefined) {\n return Buffer.allocUnsafe(0)\n }\n\n if (Buffer.isBuffer(v)) {\n return Buffer.from(v)\n }\n\n if (Array.isArray(v) || v instanceof Uint8Array) {\n return Buffer.from(v as Uint8Array)\n }\n\n if (typeof v === 'string') {\n if (!isHexString(v)) {\n throw new Error(\n `Cannot convert string to buffer. toBuffer only supports 0x-prefixed hex strings and this string was given: ${v}`\n )\n }\n return Buffer.from(padToEven(stripHexPrefix(v)), 'hex')\n }\n\n if (typeof v === 'number') {\n return intToBuffer(v)\n }\n\n if (BN.isBN(v)) {\n if (v.isNeg()) {\n throw new Error(`Cannot convert negative BN to buffer. Given: ${v}`)\n }\n return v.toArrayLike(Buffer)\n }\n\n if (v.toArray) {\n // converts a BN to a Buffer\n return Buffer.from(v.toArray())\n }\n\n if (v.toBuffer) {\n return Buffer.from(v.toBuffer())\n }\n\n throw new Error('invalid type')\n}\n\n/**\n * Converts a `Buffer` to a `Number`.\n * @param buf `Buffer` object to convert\n * @throws If the input number exceeds 53 bits.\n */\nexport const bufferToInt = function (buf: Buffer): number {\n return new BN(toBuffer(buf)).toNumber()\n}\n\n/**\n * Converts a `Buffer` into a `0x`-prefixed hex `String`.\n * @param buf `Buffer` object to convert\n */\nexport const bufferToHex = function (buf: Buffer): string {\n buf = toBuffer(buf)\n return '0x' + buf.toString('hex')\n}\n\n/**\n * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.\n * @param num Signed integer value\n */\nexport const fromSigned = function (num: Buffer): BN {\n return new BN(num).fromTwos(256)\n}\n\n/**\n * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.\n * @param num\n */\nexport const toUnsigned = function (num: BN): Buffer {\n return Buffer.from(num.toTwos(256).toArray())\n}\n\n/**\n * Adds \"0x\" to a given `String` if it does not already start with \"0x\".\n */\nexport const addHexPrefix = function (str: string): string {\n if (typeof str !== 'string') {\n return str\n }\n\n return isHexPrefixed(str) ? str : '0x' + str\n}\n\n/**\n * Returns the utf8 string representation from a hex string.\n *\n * Examples:\n *\n * Input 1: '657468657265756d000000000000000000000000000000000000000000000000'\n * Input 2: '657468657265756d'\n * Input 3: '000000000000000000000000000000000000000000000000657468657265756d'\n *\n * Output (all 3 input variants): 'ethereum'\n *\n * Note that this method is not intended to be used with hex strings\n * representing quantities in both big endian or little endian notation.\n *\n * @param string Hex string, should be `0x` prefixed\n * @return Utf8 string\n */\nexport const toUtf8 = function (hex: string): string {\n const zerosRegexp = /^(00)+|(00)+$/g\n hex = stripHexPrefix(hex)\n if (hex.length % 2 !== 0) {\n throw new Error('Invalid non-even hex string input for toUtf8() provided')\n }\n const bufferVal = Buffer.from(hex.replace(zerosRegexp, ''), 'hex')\n\n return bufferVal.toString('utf8')\n}\n\n/**\n * Converts a `Buffer` or `Array` to JSON.\n * @param ba (Buffer|Array)\n * @return (Array|String|null)\n */\nexport const baToJSON = function (ba: any): any {\n if (Buffer.isBuffer(ba)) {\n return `0x${ba.toString('hex')}`\n } else if (ba instanceof Array) {\n const array = []\n for (let i = 0; i < ba.length; i++) {\n array.push(baToJSON(ba[i]))\n }\n return array\n }\n}\n\n/**\n * Checks provided Buffers for leading zeroes and throws if found.\n *\n * Examples:\n *\n * Valid values: 0x1, 0x, 0x01, 0x1234\n * Invalid values: 0x0, 0x00, 0x001, 0x0001\n *\n * Note: This method is useful for validating that RLP encoded integers comply with the rule that all\n * integer values encoded to RLP must be in the most compact form and contain no leading zero bytes\n * @param values An object containing string keys and Buffer values\n * @throws if any provided value is found to have leading zero bytes\n */\nexport const validateNoLeadingZeroes = function (values: { [key: string]: Buffer | undefined }) {\n for (const [k, v] of Object.entries(values)) {\n if (v !== undefined && v.length > 0 && v[0] === 0) {\n throw new Error(`${k} cannot have leading zeroes, received: ${v.toString('hex')}`)\n }\n }\n}\n\n/**\n * Converts a {@link Uint8Array} or {@link NestedUint8Array} to {@link Buffer} or {@link NestedBufferArray}\n */\nexport function arrToBufArr(arr: Uint8Array): Buffer\nexport function arrToBufArr(arr: NestedUint8Array): NestedBufferArray\nexport function arrToBufArr(arr: Uint8Array | NestedUint8Array): Buffer | NestedBufferArray\nexport function arrToBufArr(arr: Uint8Array | NestedUint8Array): Buffer | NestedBufferArray {\n if (!Array.isArray(arr)) {\n return Buffer.from(arr)\n }\n return arr.map((a) => arrToBufArr(a))\n}\n\n/**\n * Converts a {@link Buffer} or {@link NestedBufferArray} to {@link Uint8Array} or {@link NestedUint8Array}\n */\nexport function bufArrToArr(arr: Buffer): Uint8Array\nexport function bufArrToArr(arr: NestedBufferArray): NestedUint8Array\nexport function bufArrToArr(arr: Buffer | NestedBufferArray): Uint8Array | NestedUint8Array\nexport function bufArrToArr(arr: Buffer | NestedBufferArray): Uint8Array | NestedUint8Array {\n if (!Array.isArray(arr)) {\n return Uint8Array.from(arr ?? [])\n }\n return arr.map((a) => bufArrToArr(a))\n}\n","import { Buffer } from 'buffer'\nimport { BN } from './externals'\n\n/**\n * 2^64-1\n */\nexport const MAX_UINT64 = new BN('ffffffffffffffff', 16)\n\n/**\n * The max integer that the evm can handle (2^256-1)\n */\nexport const MAX_INTEGER = new BN(\n 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',\n 16\n)\n\n/**\n * 2^256\n */\nexport const TWO_POW256 = new BN(\n '10000000000000000000000000000000000000000000000000000000000000000',\n 16\n)\n\n/**\n * Keccak-256 hash of null\n */\nexport const KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'\n\n/**\n * Keccak-256 hash of null\n */\nexport const KECCAK256_NULL = Buffer.from(KECCAK256_NULL_S, 'hex')\n\n/**\n * Keccak-256 of an RLP of an empty array\n */\nexport const KECCAK256_RLP_ARRAY_S =\n '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'\n\n/**\n * Keccak-256 of an RLP of an empty array\n */\nexport const KECCAK256_RLP_ARRAY = Buffer.from(KECCAK256_RLP_ARRAY_S, 'hex')\n\n/**\n * Keccak-256 hash of the RLP of null\n */\nexport const KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'\n\n/**\n * Keccak-256 hash of the RLP of null\n */\nexport const KECCAK256_RLP = Buffer.from(KECCAK256_RLP_S, 'hex')\n","/**\n * Re-exports commonly used modules:\n * * Exports [`BN`](https://github.com/indutny/bn.js), [`rlp`](https://github.com/ethereumjs/rlp).\n * @packageDocumentation\n */\n\nimport BN from 'bn.js'\nimport * as rlp from 'rlp'\n\n/**\n * [`BN`](https://github.com/indutny/bn.js)\n */\nexport { BN }\n\n/**\n * [`rlp`](https://github.com/ethereumjs/rlp)\n */\nexport { rlp }\n","import { keccak224, keccak384, keccak256 as k256, keccak512 } from 'ethereum-cryptography/keccak'\nconst createHash = require('create-hash')\nimport { rlp } from './externals'\nimport { toBuffer, setLengthLeft } from './bytes'\nimport { assertIsString, assertIsBuffer, assertIsArray, assertIsHexString } from './helpers'\n\n/**\n * Creates Keccak hash of a Buffer input\n * @param a The input data (Buffer)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccak = function (a: Buffer, bits: number = 256): Buffer {\n assertIsBuffer(a)\n switch (bits) {\n case 224: {\n return keccak224(a)\n }\n case 256: {\n return k256(a)\n }\n case 384: {\n return keccak384(a)\n }\n case 512: {\n return keccak512(a)\n }\n default: {\n throw new Error(`Invald algorithm: keccak${bits}`)\n }\n }\n}\n\n/**\n * Creates Keccak-256 hash of the input, alias for keccak(a, 256).\n * @param a The input data (Buffer)\n */\nexport const keccak256 = function (a: Buffer): Buffer {\n return keccak(a)\n}\n\n/**\n * Creates Keccak hash of a utf-8 string input\n * @param a The input data (String)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromString = function (a: string, bits: number = 256) {\n assertIsString(a)\n const buf = Buffer.from(a, 'utf8')\n return keccak(buf, bits)\n}\n\n/**\n * Creates Keccak hash of an 0x-prefixed string input\n * @param a The input data (String)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromHexString = function (a: string, bits: number = 256) {\n assertIsHexString(a)\n return keccak(toBuffer(a), bits)\n}\n\n/**\n * Creates Keccak hash of a number array input\n * @param a The input data (number[])\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromArray = function (a: number[], bits: number = 256) {\n assertIsArray(a)\n return keccak(toBuffer(a), bits)\n}\n\n/**\n * Creates SHA256 hash of an input.\n * @param a The input data (Buffer|Array|String)\n */\nconst _sha256 = function (a: any): Buffer {\n a = toBuffer(a)\n return createHash('sha256').update(a).digest()\n}\n\n/**\n * Creates SHA256 hash of a Buffer input.\n * @param a The input data (Buffer)\n */\nexport const sha256 = function (a: Buffer): Buffer {\n assertIsBuffer(a)\n return _sha256(a)\n}\n\n/**\n * Creates SHA256 hash of a string input.\n * @param a The input data (string)\n */\nexport const sha256FromString = function (a: string): Buffer {\n assertIsString(a)\n return _sha256(a)\n}\n\n/**\n * Creates SHA256 hash of a number[] input.\n * @param a The input data (number[])\n */\nexport const sha256FromArray = function (a: number[]): Buffer {\n assertIsArray(a)\n return _sha256(a)\n}\n\n/**\n * Creates RIPEMD160 hash of the input.\n * @param a The input data (Buffer|Array|String|Number)\n * @param padded Whether it should be padded to 256 bits or not\n */\nconst _ripemd160 = function (a: any, padded: boolean): Buffer {\n a = toBuffer(a)\n const hash = createHash('rmd160').update(a).digest()\n if (padded === true) {\n return setLengthLeft(hash, 32)\n } else {\n return hash\n }\n}\n\n/**\n * Creates RIPEMD160 hash of a Buffer input.\n * @param a The input data (Buffer)\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160 = function (a: Buffer, padded: boolean): Buffer {\n assertIsBuffer(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates RIPEMD160 hash of a string input.\n * @param a The input data (String)\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160FromString = function (a: string, padded: boolean): Buffer {\n assertIsString(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates RIPEMD160 hash of a number[] input.\n * @param a The input data (number[])\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160FromArray = function (a: number[], padded: boolean): Buffer {\n assertIsArray(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates SHA-3 hash of the RLP encoded version of the input.\n * @param a The input data\n */\nexport const rlphash = function (a: rlp.Input): Buffer {\n return keccak(rlp.encode(a))\n}\n","import { isHexString } from './internal'\n\n/**\n * Throws if a string is not hex prefixed\n * @param {string} input string to check hex prefix of\n */\nexport const assertIsHexString = function (input: string): void {\n if (!isHexString(input)) {\n const msg = `This method only supports 0x-prefixed hex strings but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not a buffer\n * @param {Buffer} input value to check\n */\nexport const assertIsBuffer = function (input: Buffer): void {\n if (!Buffer.isBuffer(input)) {\n const msg = `This method only supports Buffer but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not an array\n * @param {number[]} input value to check\n */\nexport const assertIsArray = function (input: number[]): void {\n if (!Array.isArray(input)) {\n const msg = `This method only supports number arrays but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not a string\n * @param {string} input value to check\n */\nexport const assertIsString = function (input: string): void {\n if (typeof input !== 'string') {\n const msg = `This method only supports strings but input was: ${input}`\n throw new Error(msg)\n }\n}\n","/**\n * Constants\n */\nexport * from './constants'\n\n/**\n * Account class and helper functions\n */\nexport * from './account'\n\n/**\n * Address type\n */\nexport * from './address'\n\n/**\n * Hash functions\n */\nexport * from './hash'\n\n/**\n * ECDSA signature\n */\nexport * from './signature'\n\n/**\n * Utilities for manipulating Buffers, byte arrays, etc.\n */\nexport * from './bytes'\n\n/**\n * Function for definining properties on an object\n */\nexport * from './object'\n\n/**\n * External exports (BN, rlp)\n */\nexport * from './externals'\n\n/**\n * Helpful TypeScript types\n */\nexport * from './types'\n\n/**\n * Export ethjs-util methods\n */\nexport {\n isHexPrefixed,\n stripHexPrefix,\n padToEven,\n getBinarySize,\n arrayContainsArray,\n toAscii,\n fromUtf8,\n fromAscii,\n getKeys,\n isHexString,\n} from './internal'\n","/*\nThe MIT License\n\nCopyright (c) 2016 Nick Dodson. nickdodson.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE\n */\n\n/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param str the string input value\n * @return a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nexport function isHexPrefixed(str: string): boolean {\n if (typeof str !== 'string') {\n throw new Error(`[isHexPrefixed] input must be type 'string', received type ${typeof str}`)\n }\n\n return str[0] === '0' && str[1] === 'x'\n}\n\n/**\n * Removes '0x' from a given `String` if present\n * @param str the string value\n * @returns the string without 0x prefix\n */\nexport const stripHexPrefix = (str: string): string => {\n if (typeof str !== 'string')\n throw new Error(`[stripHexPrefix] input must be type 'string', received ${typeof str}`)\n\n return isHexPrefixed(str) ? str.slice(2) : str\n}\n\n/**\n * Pads a `String` to have an even length\n * @param value\n * @return output\n */\nexport function padToEven(value: string): string {\n let a = value\n\n if (typeof a !== 'string') {\n throw new Error(`[padToEven] value must be type 'string', received ${typeof a}`)\n }\n\n if (a.length % 2) a = `0${a}`\n\n return a\n}\n\n/**\n * Get the binary size of a string\n * @param str\n * @returns the number of bytes contained within the string\n */\nexport function getBinarySize(str: string) {\n if (typeof str !== 'string') {\n throw new Error(`[getBinarySize] method requires input type 'string', recieved ${typeof str}`)\n }\n\n return Buffer.byteLength(str, 'utf8')\n}\n\n/**\n * Returns TRUE if the first specified array contains all elements\n * from the second one. FALSE otherwise.\n *\n * @param superset\n * @param subset\n *\n */\nexport function arrayContainsArray(\n superset: unknown[],\n subset: unknown[],\n some?: boolean\n): boolean {\n if (Array.isArray(superset) !== true) {\n throw new Error(\n `[arrayContainsArray] method requires input 'superset' to be an array, got type '${typeof superset}'`\n )\n }\n if (Array.isArray(subset) !== true) {\n throw new Error(\n `[arrayContainsArray] method requires input 'subset' to be an array, got type '${typeof subset}'`\n )\n }\n\n return subset[some ? 'some' : 'every']((value) => superset.indexOf(value) >= 0)\n}\n\n/**\n * Should be called to get ascii from its hex representation\n *\n * @param string in hex\n * @returns ascii string representation of hex value\n */\nexport function toAscii(hex: string): string {\n let str = ''\n let i = 0\n const l = hex.length\n\n if (hex.substring(0, 2) === '0x') i = 2\n\n for (; i < l; i += 2) {\n const code = parseInt(hex.substr(i, 2), 16)\n str += String.fromCharCode(code)\n }\n\n return str\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @param string\n * @param optional padding\n * @returns hex representation of input string\n */\nexport function fromUtf8(stringValue: string) {\n const str = Buffer.from(stringValue, 'utf8')\n\n return `0x${padToEven(str.toString('hex')).replace(/^0+|0+$/g, '')}`\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @param string\n * @param optional padding\n * @returns hex representation of input string\n */\nexport function fromAscii(stringValue: string) {\n let hex = ''\n for (let i = 0; i < stringValue.length; i++) {\n const code = stringValue.charCodeAt(i)\n const n = code.toString(16)\n hex += n.length < 2 ? `0${n}` : n\n }\n\n return `0x${hex}`\n}\n\n/**\n * Returns the keys from an array of objects.\n * @example\n * ```js\n * getKeys([{a: '1', b: '2'}, {a: '3', b: '4'}], 'a') => ['1', '3']\n *````\n * @param params\n * @param key\n * @param allowEmpty\n * @returns output just a simple array of output keys\n */\nexport function getKeys(params: Record[], key: string, allowEmpty?: boolean) {\n if (!Array.isArray(params)) {\n throw new Error(`[getKeys] method expects input 'params' to be an array, got ${typeof params}`)\n }\n if (typeof key !== 'string') {\n throw new Error(\n `[getKeys] method expects input 'key' to be type 'string', got ${typeof params}`\n )\n }\n\n const result = []\n\n for (let i = 0; i < params.length; i++) {\n let value = params[i][key]\n if (allowEmpty && !value) {\n value = ''\n } else if (typeof value !== 'string') {\n throw new Error(`invalid abi - expected type 'string', received ${typeof value}`)\n }\n result.push(value)\n }\n\n return result\n}\n\n/**\n * Is the string a hex string.\n *\n * @param value\n * @param length\n * @returns output the string is a hex string\n */\nexport function isHexString(value: string, length?: number): boolean {\n if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) return false\n\n if (length && value.length !== 2 + 2 * length) return false\n\n return true\n}\n","import assert from 'assert'\nimport { stripHexPrefix } from './internal'\nimport { rlp } from './externals'\nimport { toBuffer, baToJSON, unpadBuffer } from './bytes'\n\n/**\n * Defines properties on a `Object`. It make the assumption that underlying data is binary.\n * @param self the `Object` to define properties on\n * @param fields an array fields to define. Fields can contain:\n * * `name` - the name of the properties\n * * `length` - the number of bytes the field can have\n * * `allowLess` - if the field can be less than the length\n * * `allowEmpty`\n * @param data data to be validated against the definitions\n * @deprecated\n */\nexport const defineProperties = function (self: any, fields: any, data?: any) {\n self.raw = []\n self._fields = []\n\n // attach the `toJSON`\n self.toJSON = function (label: boolean = false) {\n if (label) {\n type Dict = { [key: string]: string }\n const obj: Dict = {}\n self._fields.forEach((field: string) => {\n obj[field] = `0x${self[field].toString('hex')}`\n })\n return obj\n }\n return baToJSON(self.raw)\n }\n\n self.serialize = function serialize() {\n return rlp.encode(self.raw)\n }\n\n fields.forEach((field: any, i: number) => {\n self._fields.push(field.name)\n function getter() {\n return self.raw[i]\n }\n function setter(v: any) {\n v = toBuffer(v)\n\n if (v.toString('hex') === '00' && !field.allowZero) {\n v = Buffer.allocUnsafe(0)\n }\n\n if (field.allowLess && field.length) {\n v = unpadBuffer(v)\n assert(\n field.length >= v.length,\n `The field ${field.name} must not have more ${field.length} bytes`\n )\n } else if (!(field.allowZero && v.length === 0) && field.length) {\n assert(\n field.length === v.length,\n `The field ${field.name} must have byte length of ${field.length}`\n )\n }\n\n self.raw[i] = v\n }\n\n Object.defineProperty(self, field.name, {\n enumerable: true,\n configurable: true,\n get: getter,\n set: setter,\n })\n\n if (field.default) {\n self[field.name] = field.default\n }\n\n // attach alias\n if (field.alias) {\n Object.defineProperty(self, field.alias, {\n enumerable: false,\n configurable: true,\n set: setter,\n get: getter,\n })\n }\n })\n\n // if the constuctor is passed data\n if (data) {\n if (typeof data === 'string') {\n data = Buffer.from(stripHexPrefix(data), 'hex')\n }\n\n if (Buffer.isBuffer(data)) {\n data = rlp.decode(data)\n }\n\n if (Array.isArray(data)) {\n if (data.length > self._fields.length) {\n throw new Error('wrong number of fields in data')\n }\n\n // make sure all the items are buffers\n data.forEach((d, i) => {\n self[self._fields[i]] = toBuffer(d)\n })\n } else if (typeof data === 'object') {\n const keys = Object.keys(data)\n fields.forEach((field: any) => {\n if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]\n if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]\n })\n } else {\n throw new Error('invalid data')\n }\n }\n}\n","import { ecdsaSign, ecdsaRecover, publicKeyConvert } from 'ethereum-cryptography/secp256k1'\nimport { BN } from './externals'\nimport { toBuffer, setLengthLeft, bufferToHex, bufferToInt } from './bytes'\nimport { keccak } from './hash'\nimport { assertIsBuffer } from './helpers'\nimport { BNLike, toType, TypeOutput } from './types'\n\nexport interface ECDSASignature {\n v: number\n r: Buffer\n s: Buffer\n}\n\nexport interface ECDSASignatureBuffer {\n v: Buffer\n r: Buffer\n s: Buffer\n}\n\n/**\n * Returns the ECDSA signature of a message hash.\n */\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId?: number): ECDSASignature\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId: BNLike): ECDSASignatureBuffer\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId: any): any {\n const { signature, recid: recovery } = ecdsaSign(msgHash, privateKey)\n\n const r = Buffer.from(signature.slice(0, 32))\n const s = Buffer.from(signature.slice(32, 64))\n\n if (!chainId || typeof chainId === 'number') {\n // return legacy type ECDSASignature (deprecated in favor of ECDSASignatureBuffer to handle large chainIds)\n if (chainId && !Number.isSafeInteger(chainId)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)'\n )\n }\n const v = chainId ? recovery + (chainId * 2 + 35) : recovery + 27\n return { r, s, v }\n }\n\n const chainIdBN = toType(chainId as BNLike, TypeOutput.BN)\n const v = chainIdBN.muln(2).addn(35).addn(recovery).toArrayLike(Buffer)\n return { r, s, v }\n}\n\nfunction calculateSigRecovery(v: BNLike, chainId?: BNLike): BN {\n const vBN = toType(v, TypeOutput.BN)\n\n if (vBN.eqn(0) || vBN.eqn(1)) return toType(v, TypeOutput.BN)\n\n if (!chainId) {\n return vBN.subn(27)\n }\n const chainIdBN = toType(chainId, TypeOutput.BN)\n return vBN.sub(chainIdBN.muln(2).addn(35))\n}\n\nfunction isValidSigRecovery(recovery: number | BN): boolean {\n const rec = new BN(recovery)\n return rec.eqn(0) || rec.eqn(1)\n}\n\n/**\n * ECDSA public key recovery from signature.\n * NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions\n * @returns Recovered public key\n */\nexport const ecrecover = function (\n msgHash: Buffer,\n v: BNLike,\n r: Buffer,\n s: Buffer,\n chainId?: BNLike\n): Buffer {\n const signature = Buffer.concat([setLengthLeft(r, 32), setLengthLeft(s, 32)], 64)\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n const senderPubKey = ecdsaRecover(signature, recovery.toNumber(), msgHash)\n return Buffer.from(publicKeyConvert(senderPubKey, false).slice(1))\n}\n\n/**\n * Convert signature parameters into the format of `eth_sign` RPC method.\n * NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions\n * @returns Signature\n */\nexport const toRpcSig = function (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike): string {\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n\n // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin\n return bufferToHex(Buffer.concat([setLengthLeft(r, 32), setLengthLeft(s, 32), toBuffer(v)]))\n}\n\n/**\n * Convert signature parameters into the format of Compact Signature Representation (EIP-2098).\n * NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions\n * @returns Signature\n */\nexport const toCompactSig = function (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike): string {\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n\n const vn = toType(v, TypeOutput.Number)\n let ss = s\n if ((vn > 28 && vn % 2 === 1) || vn === 1 || vn === 28) {\n ss = Buffer.from(s)\n ss[0] |= 0x80\n }\n\n return bufferToHex(Buffer.concat([setLengthLeft(r, 32), setLengthLeft(ss, 32)]))\n}\n\n/**\n * Convert signature format of the `eth_sign` RPC method to signature parameters\n * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053\n * NOTE: After EIP1559, `v` could be `0` or `1` but this function assumes\n * it's a signed message (EIP-191 or EIP-712) adding `27` at the end. Remove if needed.\n */\nexport const fromRpcSig = function (sig: string): ECDSASignature {\n const buf: Buffer = toBuffer(sig)\n\n let r: Buffer\n let s: Buffer\n let v: number\n if (buf.length >= 65) {\n r = buf.slice(0, 32)\n s = buf.slice(32, 64)\n v = bufferToInt(buf.slice(64))\n } else if (buf.length === 64) {\n // Compact Signature Representation (https://eips.ethereum.org/EIPS/eip-2098)\n r = buf.slice(0, 32)\n s = buf.slice(32, 64)\n v = bufferToInt(buf.slice(32, 33)) >> 7\n s[0] &= 0x7f\n } else {\n throw new Error('Invalid signature length')\n }\n\n // support both versions of `eth_sign` responses\n if (v < 27) {\n v += 27\n }\n\n return {\n v,\n r,\n s,\n }\n}\n\n/**\n * Validate a ECDSA signature.\n * NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions\n * @param homesteadOrLater Indicates whether this is being used on either the homestead hardfork or a later one\n */\nexport const isValidSignature = function (\n v: BNLike,\n r: Buffer,\n s: Buffer,\n homesteadOrLater: boolean = true,\n chainId?: BNLike\n): boolean {\n const SECP256K1_N_DIV_2 = new BN(\n '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0',\n 16\n )\n const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)\n\n if (r.length !== 32 || s.length !== 32) {\n return false\n }\n\n if (!isValidSigRecovery(calculateSigRecovery(v, chainId))) {\n return false\n }\n\n const rBN = new BN(r)\n const sBN = new BN(s)\n\n if (rBN.isZero() || rBN.gt(SECP256K1_N) || sBN.isZero() || sBN.gt(SECP256K1_N)) {\n return false\n }\n\n if (homesteadOrLater && sBN.cmp(SECP256K1_N_DIV_2) === 1) {\n return false\n }\n\n return true\n}\n\n/**\n * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.\n * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`\n * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key\n * used to produce the signature.\n */\nexport const hashPersonalMessage = function (message: Buffer): Buffer {\n assertIsBuffer(message)\n const prefix = Buffer.from(`\\u0019Ethereum Signed Message:\\n${message.length}`, 'utf-8')\n return keccak(Buffer.concat([prefix, message]))\n}\n","import { BN } from './externals'\nimport { isHexString } from './internal'\nimport { Address } from './address'\nimport { unpadBuffer, toBuffer, ToBufferInputTypes } from './bytes'\n\n/*\n * A type that represents a BNLike input that can be converted to a BN.\n */\nexport type BNLike = BN | PrefixedHexString | number | Buffer\n\n/*\n * A type that represents a BufferLike input that can be converted to a Buffer.\n */\nexport type BufferLike =\n | Buffer\n | Uint8Array\n | number[]\n | number\n | BN\n | TransformableToBuffer\n | PrefixedHexString\n\n/*\n * A type that represents a `0x`-prefixed hex string.\n */\nexport type PrefixedHexString = string\n\n/**\n * A type that represents an Address-like value.\n * To convert to address, use `new Address(toBuffer(value))`\n */\nexport type AddressLike = Address | Buffer | PrefixedHexString\n\n/*\n * A type that represents an object that has a `toArray()` method.\n */\nexport interface TransformableToArray {\n toArray(): Uint8Array\n toBuffer?(): Buffer\n}\n\n/*\n * A type that represents an object that has a `toBuffer()` method.\n */\nexport interface TransformableToBuffer {\n toBuffer(): Buffer\n toArray?(): Uint8Array\n}\n\nexport type NestedUint8Array = Array\nexport type NestedBufferArray = Array\n\n/**\n * Convert BN to 0x-prefixed hex string.\n */\nexport function bnToHex(value: BN): PrefixedHexString {\n return `0x${value.toString(16)}`\n}\n\n/**\n * Convert value from BN to an unpadded Buffer\n * (useful for RLP transport)\n * @param value value to convert\n */\nexport function bnToUnpaddedBuffer(value: BN): Buffer {\n // Using `bn.toArrayLike(Buffer)` instead of `bn.toBuffer()`\n // for compatibility with browserify and similar tools\n return unpadBuffer(value.toArrayLike(Buffer))\n}\n\n/**\n * Deprecated alias for {@link bnToUnpaddedBuffer}\n * @deprecated\n */\nexport function bnToRlp(value: BN): Buffer {\n return bnToUnpaddedBuffer(value)\n}\n\n/**\n * Type output options\n */\nexport enum TypeOutput {\n Number,\n BN,\n Buffer,\n PrefixedHexString,\n}\n\nexport type TypeOutputReturnType = {\n [TypeOutput.Number]: number\n [TypeOutput.BN]: BN\n [TypeOutput.Buffer]: Buffer\n [TypeOutput.PrefixedHexString]: PrefixedHexString\n}\n\n/**\n * Convert an input to a specified type.\n * Input of null/undefined returns null/undefined regardless of the output type.\n * @param input value to convert\n * @param outputType type to output\n */\nexport function toType(input: null, outputType: T): null\nexport function toType(input: undefined, outputType: T): undefined\nexport function toType(\n input: ToBufferInputTypes,\n outputType: T\n): TypeOutputReturnType[T]\nexport function toType(\n input: ToBufferInputTypes,\n outputType: T\n): TypeOutputReturnType[T] | undefined | null {\n if (input === null) {\n return null\n }\n if (input === undefined) {\n return undefined\n }\n\n if (typeof input === 'string' && !isHexString(input)) {\n throw new Error(`A string must be provided with a 0x-prefix, given: ${input}`)\n } else if (typeof input === 'number' && !Number.isSafeInteger(input)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)'\n )\n }\n\n const output = toBuffer(input)\n\n if (outputType === TypeOutput.Buffer) {\n return output as TypeOutputReturnType[T]\n } else if (outputType === TypeOutput.BN) {\n return new BN(output) as TypeOutputReturnType[T]\n } else if (outputType === TypeOutput.Number) {\n const bn = new BN(output)\n const max = new BN(Number.MAX_SAFE_INTEGER.toString())\n if (bn.gt(max)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative output type)'\n )\n }\n return bn.toNumber() as TypeOutputReturnType[T]\n } else {\n // outputType === TypeOutput.PrefixedHexString\n return `0x${output.toString('hex')}` as TypeOutputReturnType[T]\n }\n}\n","\"use strict\";\n\nimport { arrayify, BytesLike, hexZeroPad, isBytes } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { BigNumber, BigNumberish, isBigNumberish } from \"./bignumber\";\n\nconst _constructorGuard = { };\n\nconst Zero = BigNumber.from(0);\nconst NegativeOne = BigNumber.from(-1);\n\nfunction throwFault(message: string, fault: string, operation: string, value?: any): never {\n const params: any = { fault: fault, operation: operation };\n if (value !== undefined) { params.value = value; }\n return logger.throwError(message, Logger.errors.NUMERIC_FAULT, params);\n}\n\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) { zeros += zeros; }\n\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals: BigNumberish): string {\n\n if (typeof(decimals) !== \"number\") {\n try {\n decimals = BigNumber.from(decimals).toNumber();\n } catch (e) { }\n }\n\n if (typeof(decimals) === \"number\" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) {\n return (\"1\" + zeros.substring(0, decimals));\n }\n\n return logger.throwArgumentError(\"invalid decimal size\", \"decimals\", decimals);\n}\n\nexport function formatFixed(value: BigNumberish, decimals?: string | BigNumberish): string {\n if (decimals == null) { decimals = 0; }\n const multiplier = getMultiplier(decimals);\n\n // Make sure wei is a big number (convert as necessary)\n value = BigNumber.from(value);\n\n const negative = value.lt(Zero);\n if (negative) { value = value.mul(NegativeOne); }\n\n let fraction = value.mod(multiplier).toString();\n while (fraction.length < multiplier.length - 1) { fraction = \"0\" + fraction; }\n\n // Strip training 0\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\n\n const whole = value.div(multiplier).toString();\n if (multiplier.length === 1) {\n value = whole;\n } else {\n value = whole + \".\" + fraction;\n }\n\n if (negative) { value = \"-\" + value; }\n\n return value;\n}\n\nexport function parseFixed(value: string, decimals?: BigNumberish): BigNumber {\n\n if (decimals == null) { decimals = 0; }\n const multiplier = getMultiplier(decimals);\n\n if (typeof(value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) { value = value.substring(1); }\n\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n\n let whole = comps[0], fraction = comps[1];\n if (!whole) { whole = \"0\"; }\n if (!fraction) { fraction = \"0\"; }\n\n // Trim trailing zeros\n while (fraction[fraction.length - 1] === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n\n // Check the fraction doesn't exceed our decimals size\n if (fraction.length > multiplier.length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n\n // If decimals is 0, we have an empty string for fraction\n if (fraction === \"\") { fraction = \"0\"; }\n\n // Fully pad the string with zeros to get to wei\n while (fraction.length < multiplier.length - 1) { fraction += \"0\"; }\n\n const wholeValue = BigNumber.from(whole);\n const fractionValue = BigNumber.from(fraction);\n\n let wei = (wholeValue.mul(multiplier)).add(fractionValue);\n\n if (negative) { wei = wei.mul(NegativeOne); }\n\n return wei;\n}\n\n\nexport class FixedFormat {\n readonly signed: boolean;\n readonly width: number;\n readonly decimals: number;\n readonly name: string;\n readonly _multiplier: string;\n\n constructor(constructorGuard: any, signed: boolean, width: number, decimals: number) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new FixedFormat\"\n });\n }\n\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n\n this.name = (signed ? \"\": \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n\n this._multiplier = getMultiplier(decimals);\n\n Object.freeze(this);\n }\n\n static from(value: any): FixedFormat {\n if (value instanceof FixedFormat) { return value; }\n\n if (typeof(value) === \"number\") {\n value = `fixed128x${value}`\n }\n\n let signed = true;\n let width = 128;\n let decimals = 18;\n\n if (typeof(value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n } else if (value === \"ufixed\") {\n signed = false;\n } else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) { logger.throwArgumentError(\"invalid fixed format\", \"format\", value); }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n } else if (value) {\n const check = (key: string, type: string, defaultValue: any): any => {\n if (value[key] == null) { return defaultValue; }\n if (typeof(value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type +\")\", \"format.\" + key, value[key]);\n }\n return value[key];\n }\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\n\nexport class FixedNumber {\n readonly format: FixedFormat;\n readonly _hex: string;\n readonly _value: string;\n\n readonly _isFixedNumber: boolean;\n\n constructor(constructorGuard: any, hex: string, value: string, format?: FixedFormat) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new FixedFormat\"\n });\n }\n\n this.format = format;\n this._hex = hex;\n this._value = value;\n\n this._isFixedNumber = true;\n\n Object.freeze(this);\n }\n\n _checkFormat(other: FixedNumber): void {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n }\n\n addUnsafe(other: FixedNumber): FixedNumber {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format);\n }\n\n subUnsafe(other: FixedNumber): FixedNumber {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format);\n }\n\n mulUnsafe(other: FixedNumber): FixedNumber {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format);\n }\n\n divUnsafe(other: FixedNumber): FixedNumber {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format);\n }\n\n floor(): FixedNumber {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) { comps.push(\"0\"); }\n\n let result = FixedNumber.from(comps[0], this.format);\n\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE.toFormat(result.format));\n }\n\n return result;\n }\n\n ceiling(): FixedNumber {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) { comps.push(\"0\"); }\n\n let result = FixedNumber.from(comps[0], this.format);\n\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE.toFormat(result.format));\n }\n\n return result;\n }\n\n // @TODO: Support other rounding algorithms\n round(decimals?: number): FixedNumber {\n if (decimals == null) { decimals = 0; }\n\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) { comps.push(\"0\"); }\n\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n\n if (comps[1].length <= decimals) { return this; }\n\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n\n isZero(): boolean {\n return (this._value === \"0.0\" || this._value === \"0\");\n }\n\n isNegative(): boolean {\n return (this._value[0] === \"-\");\n }\n\n toString(): string { return this._value; }\n\n toHexString(width?: number): string {\n if (width == null) { return this._hex; }\n if (width % 8) { logger.throwArgumentError(\"invalid byte width\", \"width\", width); }\n const hex = BigNumber.from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return hexZeroPad(hex, width / 8);\n }\n\n toUnsafeFloat(): number { return parseFloat(this.toString()); }\n\n toFormat(format: FixedFormat | string): FixedNumber {\n return FixedNumber.fromString(this._value, format);\n }\n\n\n static fromValue(value: BigNumber, decimals?: BigNumberish, format?: FixedFormat | string | number): FixedNumber {\n // If decimals looks more like a format, and there is no format, shift the parameters\n if (format == null && decimals != null && !isBigNumberish(decimals)) {\n format = decimals;\n decimals = null;\n }\n\n if (decimals == null) { decimals = 0; }\n if (format == null) { format = \"fixed\"; }\n\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n\n\n static fromString(value: string, format?: FixedFormat | string | number): FixedNumber {\n if (format == null) { format = \"fixed\"; }\n\n const fixedFormat = FixedFormat.from(format);\n\n const numeric = parseFixed(value, fixedFormat.decimals);\n\n if (!fixedFormat.signed && numeric.lt(Zero)) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n\n let hex: string = null;\n if (fixedFormat.signed) {\n hex = numeric.toTwos(fixedFormat.width).toHexString();\n } else {\n hex = numeric.toHexString();\n hex = hexZeroPad(hex, fixedFormat.width / 8);\n }\n\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n\n static fromBytes(value: BytesLike, format?: FixedFormat | string | number): FixedNumber {\n if (format == null) { format = \"fixed\"; }\n\n const fixedFormat = FixedFormat.from(format);\n\n if (arrayify(value).length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n\n let numeric = BigNumber.from(value);\n if (fixedFormat.signed) { numeric = numeric.fromTwos(fixedFormat.width); }\n\n const hex = numeric.toTwos((fixedFormat.signed ? 0: 1) + fixedFormat.width).toHexString();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n\n static from(value: any, format?: FixedFormat | string | number) {\n if (typeof(value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n\n if (isBytes(value)) {\n return FixedNumber.fromBytes(value, format);\n }\n\n try {\n return FixedNumber.fromValue(value, 0, format);\n } catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== Logger.errors.INVALID_ARGUMENT) {\n throw error;\n }\n }\n\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n\n static isFixedNumber(value: any): value is FixedNumber {\n return !!(value && value._isFixedNumber);\n }\n}\n\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n","import { Bytes, concat } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\n\nexport const messagePrefix = \"\\x19Ethereum Signed Message:\\n\";\n\nexport function hashMessage(message: Bytes | string): string {\n if (typeof(message) === \"string\") { message = toUtf8Bytes(message); }\n return keccak256(concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n\n","export const version = \"hash/5.7.0\";\n","import { TypedDataDomain, TypedDataField } from \"@ethersproject/abstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { arrayify, BytesLike, hexConcat, hexlify, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { deepCopy, defineReadOnly, shallowCopy } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { id } from \"./id\";\n\nconst padding = new Uint8Array(32);\npadding.fill(0);\n\nconst NegativeOne: BigNumber = BigNumber.from(-1);\nconst Zero: BigNumber = BigNumber.from(0);\nconst One: BigNumber = BigNumber.from(1);\nconst MaxUint256: BigNumber = BigNumber.from(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\nfunction hexPadRight(value: BytesLike) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32\n if (padOffset) {\n return hexConcat([ bytes, padding.slice(padOffset) ]);\n }\n return hexlify(bytes);\n}\n\nconst hexTrue = hexZeroPad(One.toHexString(), 32);\nconst hexFalse = hexZeroPad(Zero.toHexString(), 32);\n\nconst domainFieldTypes: Record = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\n\nconst domainFieldNames: Array = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\n\nfunction checkString(key: string): (value: any) => string {\n return function (value: any){\n if (typeof(value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${ JSON.stringify(key) }`, `domain.${ key }`, value);\n }\n return value;\n }\n}\n\nconst domainChecks: Record any> = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function(value: any) {\n try {\n return BigNumber.from(value).toString()\n } catch (error) { }\n return logger.throwArgumentError(`invalid domain value for \"chainId\"`, \"domain.chainId\", value);\n },\n verifyingContract: function(value: any) {\n try {\n return getAddress(value).toLowerCase();\n } catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function(value: any) {\n try {\n const bytes = arrayify(value);\n if (bytes.length !== 32) { throw new Error(\"bad length\"); }\n return hexlify(bytes);\n } catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n}\n\nfunction getBaseEncoder(type: string): (value: any) => string {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n\n const boundsUpper = MaxUint256.mask(signed ? (width - 1): width);\n const boundsLower = signed ? boundsUpper.add(One).mul(NegativeOne): Zero;\n\n return function(value: BigNumberish) {\n const v = BigNumber.from(value);\n\n if (v.lt(boundsLower) || v.gt(boundsUpper)) {\n logger.throwArgumentError(`value out-of-bounds for ${ type }`, \"value\", value);\n }\n\n return hexZeroPad(v.toTwos(256).toHexString(), 32);\n };\n }\n }\n\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n\n return function(value: BytesLike) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${ type }`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n\n switch (type) {\n case \"address\": return function(value: string) {\n return hexZeroPad(getAddress(value), 32);\n };\n case \"bool\": return function(value: boolean) {\n return ((!value) ? hexFalse: hexTrue);\n };\n case \"bytes\": return function(value: BytesLike) {\n return keccak256(value);\n };\n case \"string\": return function(value: string) {\n return id(value);\n };\n }\n\n return null;\n}\n\nfunction encodeType(name: string, fields: Array): string {\n return `${ name }(${ fields.map(({ name, type }) => (type + \" \" + name)).join(\",\") })`;\n}\n\nexport class TypedDataEncoder {\n readonly primaryType: string;\n readonly types: Record>;\n\n readonly _encoderCache: Record string>;\n readonly _types: Record;\n\n constructor(types: Record>) {\n defineReadOnly(this, \"types\", Object.freeze(deepCopy(types)));\n\n defineReadOnly(this, \"_encoderCache\", { });\n defineReadOnly(this, \"_types\", { });\n\n // Link struct types to their direct child structs\n const links: Record> = { };\n\n // Link structs to structs which contain them as a child\n const parents: Record> = { };\n\n // Link all subtypes within a given struct\n const subtypes: Record> = { };\n\n Object.keys(types).forEach((type) => {\n links[type] = { };\n parents[type] = [ ];\n subtypes[type] = { }\n });\n\n for (const name in types) {\n\n const uniqueNames: Record = { };\n\n types[name].forEach((field) => {\n\n // Check each field has a unique name\n if (uniqueNames[field.name]) {\n logger.throwArgumentError(`duplicate variable name ${ JSON.stringify(field.name) } in ${ JSON.stringify(name) }`, \"types\", types);\n }\n uniqueNames[field.name] = true;\n\n // Get the base type (drop any array specifiers)\n const baseType = field.type.match(/^([^\\x5b]*)(\\x5b|$)/)[1];\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${ JSON.stringify(baseType) }`, \"types\", types);\n }\n\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) { return ;}\n\n if (!parents[baseType]) {\n logger.throwArgumentError(`unknown type ${ JSON.stringify(baseType) }`, \"types\", types);\n }\n\n // Add linkage\n parents[baseType].push(name);\n links[name][baseType] = true;\n });\n }\n\n // Deduce the primary type\n const primaryTypes = Object.keys(parents).filter((n) => (parents[n].length === 0));\n\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n } else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${ primaryTypes.map((t) => (JSON.stringify(t))).join(\", \") }`, \"types\", types);\n }\n\n defineReadOnly(this, \"primaryType\", primaryTypes[0]);\n\n // Check for circular type references\n function checkCircular(type: string, found: Record) {\n if (found[type]) {\n logger.throwArgumentError(`circular type reference to ${ JSON.stringify(type) }`, \"types\", types);\n }\n\n found[type] = true;\n\n Object.keys(links[type]).forEach((child) => {\n if (!parents[child]) { return; }\n\n // Recursively check children\n checkCircular(child, found);\n\n // Mark all ancestors as having this decendant\n Object.keys(found).forEach((subtype) => {\n subtypes[subtype][child] = true;\n });\n });\n\n delete found[type];\n }\n checkCircular(this.primaryType, { });\n\n // Compute each fully describe type\n for (const name in subtypes) {\n const st = Object.keys(subtypes[name]);\n st.sort();\n this._types[name] = encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\");\n }\n }\n\n getEncoder(type: string): (value: any) => string {\n let encoder = this._encoderCache[type];\n if (!encoder) {\n encoder = this._encoderCache[type] = this._getEncoder(type);\n }\n return encoder;\n }\n\n _getEncoder(type: string): (value: any) => string {\n\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) { return encoder; }\n }\n\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value: Array) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n\n let result = value.map(subEncoder);\n if (this._types[subtype]) {\n result = result.map(keccak256);\n }\n\n return keccak256(hexConcat(result));\n };\n }\n\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(this._types[type]);\n return (value: Record) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (this._types[type]) { return keccak256(result); }\n return result;\n });\n values.unshift(encodedType);\n return hexConcat(values);\n }\n }\n\n return logger.throwArgumentError(`unknown type: ${ type }`, \"type\", type);\n }\n\n encodeType(name: string): string {\n const result = this._types[name];\n if (!result) {\n logger.throwArgumentError(`unknown type: ${ JSON.stringify(name) }`, \"name\", name);\n }\n return result;\n }\n\n encodeData(type: string, value: any): string {\n return this.getEncoder(type)(value);\n }\n\n hashStruct(name: string, value: Record): string {\n return keccak256(this.encodeData(name, value));\n }\n\n encode(value: Record): string {\n return this.encodeData(this.primaryType, value);\n }\n\n hash(value: Record): string {\n return this.hashStruct(this.primaryType, value);\n }\n\n _visit(type: string, value: any, callback: (type: string, data: any) => any): any {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) { return callback(type, value); }\n }\n\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v: any) => this._visit(subtype, v, callback));\n }\n\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, >{});\n }\n\n return logger.throwArgumentError(`unknown type: ${ type }`, \"type\", type);\n }\n\n visit(value: Record, callback: (type: string, data: any) => any): any {\n return this._visit(this.primaryType, value, callback);\n }\n\n static from(types: Record>): TypedDataEncoder {\n return new TypedDataEncoder(types);\n }\n\n static getPrimaryType(types: Record>): string {\n return TypedDataEncoder.from(types).primaryType;\n }\n\n static hashStruct(name: string, types: Record>, value: Record): string {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n\n static hashDomain(domain: TypedDataDomain): string {\n const domainFields: Array = [ ];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${ JSON.stringify(name) }`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n\n static encode(domain: TypedDataDomain, types: Record>, value: Record): string {\n return hexConcat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n\n static hash(domain: TypedDataDomain, types: Record>, value: Record): string {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n\n // Replaces all address types with ENS names with their looked up address\n static async resolveNames(domain: TypedDataDomain, types: Record>, value: Record, resolveName: (name: string) => Promise): Promise<{ domain: TypedDataDomain, value: any }> {\n // Make a copy to isolate it from the object passed in\n domain = shallowCopy(domain);\n\n // Look up all ENS names\n const ensCache: Record = { };\n\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n\n // Get a list of all the addresses\n encoder.visit(value, (type: string, value: any) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = await resolveName(name);\n }\n\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n\n // Replace all ENS names with their address\n value = encoder.visit(value, (type: string, value: any) => {\n if (type === \"address\" && ensCache[value]) { return ensCache[value]; }\n return value;\n });\n\n return { domain, value };\n }\n\n static getPayload(domain: TypedDataDomain, types: Record>, value: Record): any {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n\n // Derive the EIP712Domain Struct reference type\n const domainValues: Record = { };\n const domainTypes: Array<{ name: string, type:string }> = [ ];\n\n domainFieldNames.forEach((name) => {\n const value = (domain)[name];\n if (value == null) { return; }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n\n const encoder = TypedDataEncoder.from(types);\n\n const typesWithDomain = shallowCopy(types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n } else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n\n // Validate the data structures and types\n encoder.encode(value);\n\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type: string, value: any) => {\n\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(arrayify(value));\n }\n\n // uint or int\n if (type.match(/^u?int/)) {\n return BigNumber.from(value).toString();\n }\n\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof(value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n\n","export enum SupportedAlgorithm { sha256 = \"sha256\", sha512 = \"sha512\" };\n\n","/**\n * var basex = require(\"base-x\");\n *\n * This implementation is heavily based on base-x. The main reason to\n * deviate was to prevent the dependency of Buffer.\n *\n * Contributors:\n *\n * base-x encoding\n * Forked from https://github.com/cryptocoinjs/bs58\n * Originally written by Mike Hearn for BitcoinJ\n * Copyright (c) 2011 Google Inc\n * Ported to JavaScript by Stefan Thomas\n * Merged Buffer refactorings from base58-native by Stephen Pair\n * Copyright (c) 2013 BitPay Inc\n *\n * The MIT License (MIT)\n *\n * Copyright base-x contributors (c) 2016\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n */\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nexport class BaseX {\n readonly alphabet: string;\n readonly base: number;\n\n _alphabetMap: { [ character: string ]: number };\n _leader: string;\n\n constructor(alphabet: string) {\n defineReadOnly(this, \"alphabet\", alphabet);\n defineReadOnly(this, \"base\", alphabet.length);\n\n defineReadOnly(this, \"_alphabetMap\", { });\n defineReadOnly(this, \"_leader\", alphabet.charAt(0));\n\n // pre-compute lookup table\n for (let i = 0; i < alphabet.length; i++) {\n this._alphabetMap[alphabet.charAt(i)] = i;\n }\n }\n\n encode(value: BytesLike): string {\n let source = arrayify(value);\n\n if (source.length === 0) { return \"\"; }\n\n let digits = [ 0 ]\n for (let i = 0; i < source.length; ++i) {\n let carry = source[i];\n for (let j = 0; j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % this.base;\n carry = (carry / this.base) | 0;\n }\n\n while (carry > 0) {\n digits.push(carry % this.base);\n carry = (carry / this.base) | 0;\n }\n }\n\n let string = \"\"\n\n // deal with leading zeros\n for (let k = 0; source[k] === 0 && k < source.length - 1; ++k) {\n string += this._leader;\n }\n\n // convert digits to a string\n for (let q = digits.length - 1; q >= 0; --q) {\n string += this.alphabet[digits[q]];\n }\n\n return string;\n }\n\n decode(value: string): Uint8Array {\n if (typeof(value) !== \"string\") {\n throw new TypeError(\"Expected String\");\n }\n\n let bytes: Array = [];\n if (value.length === 0) { return new Uint8Array(bytes); }\n\n bytes.push(0);\n for (let i = 0; i < value.length; i++) {\n let byte = this._alphabetMap[value[i]];\n\n if (byte === undefined) {\n throw new Error(\"Non-base\" + this.base + \" character\");\n }\n\n let carry = byte;\n for (let j = 0; j < bytes.length; ++j) {\n carry += bytes[j] * this.base;\n bytes[j] = carry & 0xff;\n carry >>= 8;\n }\n\n while (carry > 0) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n // deal with leading zeros\n for (let k = 0; value[k] === this._leader && k < value.length - 1; ++k) {\n bytes.push(0)\n }\n\n return arrayify(new Uint8Array(bytes.reverse()))\n }\n}\n\nconst Base32 = new BaseX(\"abcdefghijklmnopqrstuvwxyz234567\");\nconst Base58 = new BaseX(\"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\");\n\nexport { Base32, Base58 };\n\n//console.log(Base58.decode(\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\"))\n//console.log(Base58.encode(Base58.decode(\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\")))\n","export const version = \"sha2/5.7.0\";\n","\"use strict\";\n\nimport hash from \"hash.js\";\n//const _ripemd160 = _hash.ripemd160;\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\n\nimport { SupportedAlgorithm } from \"./types\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport function ripemd160(data: BytesLike): string {\n return \"0x\" + (hash.ripemd160().update(arrayify(data)).digest(\"hex\"));\n}\n\nexport function sha256(data: BytesLike): string {\n return \"0x\" + (hash.sha256().update(arrayify(data)).digest(\"hex\"));\n}\n\nexport function sha512(data: BytesLike): string {\n return \"0x\" + (hash.sha512().update(arrayify(data)).digest(\"hex\"));\n}\n\nexport function computeHmac(algorithm: SupportedAlgorithm, key: BytesLike, data: BytesLike): string {\n if (!SupportedAlgorithm[algorithm]) {\n logger.throwError(\"unsupported algorithm \" + algorithm, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"hmac\",\n algorithm: algorithm\n });\n }\n\n return \"0x\" + hash.hmac((hash)[algorithm], arrayify(key)).update(arrayify(data)).digest(\"hex\");\n}\n\n","\"use strict\";\n\nimport { arrayify, BytesLike, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac, SupportedAlgorithm } from \"@ethersproject/sha2\";\n\nexport function pbkdf2(password: BytesLike, salt: BytesLike, iterations: number, keylen: number, hashAlgorithm: string): string {\n password = arrayify(password);\n salt = arrayify(salt);\n let hLen;\n let l = 1;\n const DK = new Uint8Array(keylen)\n const block1 = new Uint8Array(salt.length + 4)\n block1.set(salt);\n //salt.copy(block1, 0, 0, salt.length)\n\n let r: number;\n let T: Uint8Array;\n\n for (let i = 1; i <= l; i++) {\n //block1.writeUInt32BE(i, salt.length)\n block1[salt.length] = (i >> 24) & 0xff;\n block1[salt.length + 1] = (i >> 16) & 0xff;\n block1[salt.length + 2] = (i >> 8) & 0xff;\n block1[salt.length + 3] = i & 0xff;\n\n //let U = createHmac(password).update(block1).digest();\n let U = arrayify(computeHmac(hashAlgorithm, password, block1));\n\n if (!hLen) {\n hLen = U.length\n T = new Uint8Array(hLen)\n l = Math.ceil(keylen / hLen)\n r = keylen - (l - 1) * hLen\n }\n\n //U.copy(T, 0, 0, hLen)\n T.set(U);\n\n\n for (let j = 1; j < iterations; j++) {\n //U = createHmac(password).update(U).digest();\n U = arrayify(computeHmac(hashAlgorithm, password, U));\n for (let k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n\n const destPos = (i - 1) * hLen\n const len = (i === l ? r : hLen)\n //T.copy(DK, destPos, 0, len)\n DK.set(arrayify(T).slice(0, len), destPos);\n }\n\n return hexlify(DK)\n}\n\n","\"use strict\";\n\n// This gets overridden by rollup\nconst exportWordlist = false;\n\nimport { id } from \"@ethersproject/hash\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nexport const logger = new Logger(version);\n\nexport abstract class Wordlist {\n readonly locale: string;\n\n constructor(locale: string) {\n logger.checkAbstract(new.target, Wordlist);\n defineReadOnly(this, \"locale\", locale);\n }\n\n abstract getWord(index: number): string;\n abstract getWordIndex(word: string): number;\n\n // Subclasses may override this\n split(mnemonic: string): Array {\n return mnemonic.toLowerCase().split(/ +/g)\n }\n\n // Subclasses may override this\n join(words: Array): string {\n return words.join(\" \");\n }\n\n static check(wordlist: Wordlist): string {\n const words = [];\n for (let i = 0; i < 2048; i++) {\n const word = wordlist.getWord(i);\n /* istanbul ignore if */\n if (i !== wordlist.getWordIndex(word)) { return \"0x\"; }\n words.push(word);\n }\n return id(words.join(\"\\n\") + \"\\n\");\n }\n\n static register(lang: Wordlist, name?: string): void {\n if (!name) { name = lang.locale; }\n\n /* istanbul ignore if */\n if (exportWordlist) {\n try {\n const anyGlobal = (window as any)\n if (anyGlobal._ethers && anyGlobal._ethers.wordlists) {\n if (!anyGlobal._ethers.wordlists[name]) {\n defineReadOnly(anyGlobal._ethers.wordlists, name, lang);\n }\n }\n } catch (error) { }\n }\n }\n\n}\n\n","export const version = \"wordlists/5.7.0\";\n","\"use strict\";\n\nimport { Wordlist } from \"./wordlist\";\n\n\nconst words = \"AbandonAbilityAbleAboutAboveAbsentAbsorbAbstractAbsurdAbuseAccessAccidentAccountAccuseAchieveAcidAcousticAcquireAcrossActActionActorActressActualAdaptAddAddictAddressAdjustAdmitAdultAdvanceAdviceAerobicAffairAffordAfraidAgainAgeAgentAgreeAheadAimAirAirportAisleAlarmAlbumAlcoholAlertAlienAllAlleyAllowAlmostAloneAlphaAlreadyAlsoAlterAlwaysAmateurAmazingAmongAmountAmusedAnalystAnchorAncientAngerAngleAngryAnimalAnkleAnnounceAnnualAnotherAnswerAntennaAntiqueAnxietyAnyApartApologyAppearAppleApproveAprilArchArcticAreaArenaArgueArmArmedArmorArmyAroundArrangeArrestArriveArrowArtArtefactArtistArtworkAskAspectAssaultAssetAssistAssumeAsthmaAthleteAtomAttackAttendAttitudeAttractAuctionAuditAugustAuntAuthorAutoAutumnAverageAvocadoAvoidAwakeAwareAwayAwesomeAwfulAwkwardAxisBabyBachelorBaconBadgeBagBalanceBalconyBallBambooBananaBannerBarBarelyBargainBarrelBaseBasicBasketBattleBeachBeanBeautyBecauseBecomeBeefBeforeBeginBehaveBehindBelieveBelowBeltBenchBenefitBestBetrayBetterBetweenBeyondBicycleBidBikeBindBiologyBirdBirthBitterBlackBladeBlameBlanketBlastBleakBlessBlindBloodBlossomBlouseBlueBlurBlushBoardBoatBodyBoilBombBoneBonusBookBoostBorderBoringBorrowBossBottomBounceBoxBoyBracketBrainBrandBrassBraveBreadBreezeBrickBridgeBriefBrightBringBriskBroccoliBrokenBronzeBroomBrotherBrownBrushBubbleBuddyBudgetBuffaloBuildBulbBulkBulletBundleBunkerBurdenBurgerBurstBusBusinessBusyButterBuyerBuzzCabbageCabinCableCactusCageCakeCallCalmCameraCampCanCanalCancelCandyCannonCanoeCanvasCanyonCapableCapitalCaptainCarCarbonCardCargoCarpetCarryCartCaseCashCasinoCastleCasualCatCatalogCatchCategoryCattleCaughtCauseCautionCaveCeilingCeleryCementCensusCenturyCerealCertainChairChalkChampionChangeChaosChapterChargeChaseChatCheapCheckCheeseChefCherryChestChickenChiefChildChimneyChoiceChooseChronicChuckleChunkChurnCigarCinnamonCircleCitizenCityCivilClaimClapClarifyClawClayCleanClerkCleverClickClientCliffClimbClinicClipClockClogCloseClothCloudClownClubClumpClusterClutchCoachCoastCoconutCodeCoffeeCoilCoinCollectColorColumnCombineComeComfortComicCommonCompanyConcertConductConfirmCongressConnectConsiderControlConvinceCookCoolCopperCopyCoralCoreCornCorrectCostCottonCouchCountryCoupleCourseCousinCoverCoyoteCrackCradleCraftCramCraneCrashCraterCrawlCrazyCreamCreditCreekCrewCricketCrimeCrispCriticCropCrossCrouchCrowdCrucialCruelCruiseCrumbleCrunchCrushCryCrystalCubeCultureCupCupboardCuriousCurrentCurtainCurveCushionCustomCuteCycleDadDamageDampDanceDangerDaringDashDaughterDawnDayDealDebateDebrisDecadeDecemberDecideDeclineDecorateDecreaseDeerDefenseDefineDefyDegreeDelayDeliverDemandDemiseDenialDentistDenyDepartDependDepositDepthDeputyDeriveDescribeDesertDesignDeskDespairDestroyDetailDetectDevelopDeviceDevoteDiagramDialDiamondDiaryDiceDieselDietDifferDigitalDignityDilemmaDinnerDinosaurDirectDirtDisagreeDiscoverDiseaseDishDismissDisorderDisplayDistanceDivertDivideDivorceDizzyDoctorDocumentDogDollDolphinDomainDonateDonkeyDonorDoorDoseDoubleDoveDraftDragonDramaDrasticDrawDreamDressDriftDrillDrinkDripDriveDropDrumDryDuckDumbDuneDuringDustDutchDutyDwarfDynamicEagerEagleEarlyEarnEarthEasilyEastEasyEchoEcologyEconomyEdgeEditEducateEffortEggEightEitherElbowElderElectricElegantElementElephantElevatorEliteElseEmbarkEmbodyEmbraceEmergeEmotionEmployEmpowerEmptyEnableEnactEndEndlessEndorseEnemyEnergyEnforceEngageEngineEnhanceEnjoyEnlistEnoughEnrichEnrollEnsureEnterEntireEntryEnvelopeEpisodeEqualEquipEraEraseErodeErosionErrorEruptEscapeEssayEssenceEstateEternalEthicsEvidenceEvilEvokeEvolveExactExampleExcessExchangeExciteExcludeExcuseExecuteExerciseExhaustExhibitExileExistExitExoticExpandExpectExpireExplainExposeExpressExtendExtraEyeEyebrowFabricFaceFacultyFadeFaintFaithFallFalseFameFamilyFamousFanFancyFantasyFarmFashionFatFatalFatherFatigueFaultFavoriteFeatureFebruaryFederalFeeFeedFeelFemaleFenceFestivalFetchFeverFewFiberFictionFieldFigureFileFilmFilterFinalFindFineFingerFinishFireFirmFirstFiscalFishFitFitnessFixFlagFlameFlashFlatFlavorFleeFlightFlipFloatFlockFloorFlowerFluidFlushFlyFoamFocusFogFoilFoldFollowFoodFootForceForestForgetForkFortuneForumForwardFossilFosterFoundFoxFragileFrameFrequentFreshFriendFringeFrogFrontFrostFrownFrozenFruitFuelFunFunnyFurnaceFuryFutureGadgetGainGalaxyGalleryGameGapGarageGarbageGardenGarlicGarmentGasGaspGateGatherGaugeGazeGeneralGeniusGenreGentleGenuineGestureGhostGiantGiftGiggleGingerGiraffeGirlGiveGladGlanceGlareGlassGlideGlimpseGlobeGloomGloryGloveGlowGlueGoatGoddessGoldGoodGooseGorillaGospelGossipGovernGownGrabGraceGrainGrantGrapeGrassGravityGreatGreenGridGriefGritGroceryGroupGrowGruntGuardGuessGuideGuiltGuitarGunGymHabitHairHalfHammerHamsterHandHappyHarborHardHarshHarvestHatHaveHawkHazardHeadHealthHeartHeavyHedgehogHeightHelloHelmetHelpHenHeroHiddenHighHillHintHipHireHistoryHobbyHockeyHoldHoleHolidayHollowHomeHoneyHoodHopeHornHorrorHorseHospitalHostHotelHourHoverHubHugeHumanHumbleHumorHundredHungryHuntHurdleHurryHurtHusbandHybridIceIconIdeaIdentifyIdleIgnoreIllIllegalIllnessImageImitateImmenseImmuneImpactImposeImproveImpulseInchIncludeIncomeIncreaseIndexIndicateIndoorIndustryInfantInflictInformInhaleInheritInitialInjectInjuryInmateInnerInnocentInputInquiryInsaneInsectInsideInspireInstallIntactInterestIntoInvestInviteInvolveIronIslandIsolateIssueItemIvoryJacketJaguarJarJazzJealousJeansJellyJewelJobJoinJokeJourneyJoyJudgeJuiceJumpJungleJuniorJunkJustKangarooKeenKeepKetchupKeyKickKidKidneyKindKingdomKissKitKitchenKiteKittenKiwiKneeKnifeKnockKnowLabLabelLaborLadderLadyLakeLampLanguageLaptopLargeLaterLatinLaughLaundryLavaLawLawnLawsuitLayerLazyLeaderLeafLearnLeaveLectureLeftLegLegalLegendLeisureLemonLendLengthLensLeopardLessonLetterLevelLiarLibertyLibraryLicenseLifeLiftLightLikeLimbLimitLinkLionLiquidListLittleLiveLizardLoadLoanLobsterLocalLockLogicLonelyLongLoopLotteryLoudLoungeLoveLoyalLuckyLuggageLumberLunarLunchLuxuryLyricsMachineMadMagicMagnetMaidMailMainMajorMakeMammalManManageMandateMangoMansionManualMapleMarbleMarchMarginMarineMarketMarriageMaskMassMasterMatchMaterialMathMatrixMatterMaximumMazeMeadowMeanMeasureMeatMechanicMedalMediaMelodyMeltMemberMemoryMentionMenuMercyMergeMeritMerryMeshMessageMetalMethodMiddleMidnightMilkMillionMimicMindMinimumMinorMinuteMiracleMirrorMiseryMissMistakeMixMixedMixtureMobileModelModifyMomMomentMonitorMonkeyMonsterMonthMoonMoralMoreMorningMosquitoMotherMotionMotorMountainMouseMoveMovieMuchMuffinMuleMultiplyMuscleMuseumMushroomMusicMustMutualMyselfMysteryMythNaiveNameNapkinNarrowNastyNationNatureNearNeckNeedNegativeNeglectNeitherNephewNerveNestNetNetworkNeutralNeverNewsNextNiceNightNobleNoiseNomineeNoodleNormalNorthNoseNotableNoteNothingNoticeNovelNowNuclearNumberNurseNutOakObeyObjectObligeObscureObserveObtainObviousOccurOceanOctoberOdorOffOfferOfficeOftenOilOkayOldOliveOlympicOmitOnceOneOnionOnlineOnlyOpenOperaOpinionOpposeOptionOrangeOrbitOrchardOrderOrdinaryOrganOrientOriginalOrphanOstrichOtherOutdoorOuterOutputOutsideOvalOvenOverOwnOwnerOxygenOysterOzonePactPaddlePagePairPalacePalmPandaPanelPanicPantherPaperParadeParentParkParrotPartyPassPatchPathPatientPatrolPatternPausePavePaymentPeacePeanutPearPeasantPelicanPenPenaltyPencilPeoplePepperPerfectPermitPersonPetPhonePhotoPhrasePhysicalPianoPicnicPicturePiecePigPigeonPillPilotPinkPioneerPipePistolPitchPizzaPlacePlanetPlasticPlatePlayPleasePledgePluckPlugPlungePoemPoetPointPolarPolePolicePondPonyPoolPopularPortionPositionPossiblePostPotatoPotteryPovertyPowderPowerPracticePraisePredictPreferPreparePresentPrettyPreventPricePridePrimaryPrintPriorityPrisonPrivatePrizeProblemProcessProduceProfitProgramProjectPromoteProofPropertyProsperProtectProudProvidePublicPuddingPullPulpPulsePumpkinPunchPupilPuppyPurchasePurityPurposePursePushPutPuzzlePyramidQualityQuantumQuarterQuestionQuickQuitQuizQuoteRabbitRaccoonRaceRackRadarRadioRailRainRaiseRallyRampRanchRandomRangeRapidRareRateRatherRavenRawRazorReadyRealReasonRebelRebuildRecallReceiveRecipeRecordRecycleReduceReflectReformRefuseRegionRegretRegularRejectRelaxReleaseReliefRelyRemainRememberRemindRemoveRenderRenewRentReopenRepairRepeatReplaceReportRequireRescueResembleResistResourceResponseResultRetireRetreatReturnReunionRevealReviewRewardRhythmRibRibbonRiceRichRideRidgeRifleRightRigidRingRiotRippleRiskRitualRivalRiverRoadRoastRobotRobustRocketRomanceRoofRookieRoomRoseRotateRoughRoundRouteRoyalRubberRudeRugRuleRunRunwayRuralSadSaddleSadnessSafeSailSaladSalmonSalonSaltSaluteSameSampleSandSatisfySatoshiSauceSausageSaveSayScaleScanScareScatterSceneSchemeSchoolScienceScissorsScorpionScoutScrapScreenScriptScrubSeaSearchSeasonSeatSecondSecretSectionSecuritySeedSeekSegmentSelectSellSeminarSeniorSenseSentenceSeriesServiceSessionSettleSetupSevenShadowShaftShallowShareShedShellSheriffShieldShiftShineShipShiverShockShoeShootShopShortShoulderShoveShrimpShrugShuffleShySiblingSickSideSiegeSightSignSilentSilkSillySilverSimilarSimpleSinceSingSirenSisterSituateSixSizeSkateSketchSkiSkillSkinSkirtSkullSlabSlamSleepSlenderSliceSlideSlightSlimSloganSlotSlowSlushSmallSmartSmileSmokeSmoothSnackSnakeSnapSniffSnowSoapSoccerSocialSockSodaSoftSolarSoldierSolidSolutionSolveSomeoneSongSoonSorrySortSoulSoundSoupSourceSouthSpaceSpareSpatialSpawnSpeakSpecialSpeedSpellSpendSphereSpiceSpiderSpikeSpinSpiritSplitSpoilSponsorSpoonSportSpotSpraySpreadSpringSpySquareSqueezeSquirrelStableStadiumStaffStageStairsStampStandStartStateStaySteakSteelStemStepStereoStickStillStingStockStomachStoneStoolStoryStoveStrategyStreetStrikeStrongStruggleStudentStuffStumbleStyleSubjectSubmitSubwaySuccessSuchSuddenSufferSugarSuggestSuitSummerSunSunnySunsetSuperSupplySupremeSureSurfaceSurgeSurpriseSurroundSurveySuspectSustainSwallowSwampSwapSwarmSwearSweetSwiftSwimSwingSwitchSwordSymbolSymptomSyrupSystemTableTackleTagTailTalentTalkTankTapeTargetTaskTasteTattooTaxiTeachTeamTellTenTenantTennisTentTermTestTextThankThatThemeThenTheoryThereTheyThingThisThoughtThreeThriveThrowThumbThunderTicketTideTigerTiltTimberTimeTinyTipTiredTissueTitleToastTobaccoTodayToddlerToeTogetherToiletTokenTomatoTomorrowToneTongueTonightToolToothTopTopicToppleTorchTornadoTortoiseTossTotalTouristTowardTowerTownToyTrackTradeTrafficTragicTrainTransferTrapTrashTravelTrayTreatTreeTrendTrialTribeTrickTriggerTrimTripTrophyTroubleTruckTrueTrulyTrumpetTrustTruthTryTubeTuitionTumbleTunaTunnelTurkeyTurnTurtleTwelveTwentyTwiceTwinTwistTwoTypeTypicalUglyUmbrellaUnableUnawareUncleUncoverUnderUndoUnfairUnfoldUnhappyUniformUniqueUnitUniverseUnknownUnlockUntilUnusualUnveilUpdateUpgradeUpholdUponUpperUpsetUrbanUrgeUsageUseUsedUsefulUselessUsualUtilityVacantVacuumVagueValidValleyValveVanVanishVaporVariousVastVaultVehicleVelvetVendorVentureVenueVerbVerifyVersionVeryVesselVeteranViableVibrantViciousVictoryVideoViewVillageVintageViolinVirtualVirusVisaVisitVisualVitalVividVocalVoiceVoidVolcanoVolumeVoteVoyageWageWagonWaitWalkWallWalnutWantWarfareWarmWarriorWashWaspWasteWaterWaveWayWealthWeaponWearWeaselWeatherWebWeddingWeekendWeirdWelcomeWestWetWhaleWhatWheatWheelWhenWhereWhipWhisperWideWidthWifeWildWillWinWindowWineWingWinkWinnerWinterWireWisdomWiseWishWitnessWolfWomanWonderWoodWoolWordWorkWorldWorryWorthWrapWreckWrestleWristWriteWrongYardYearYellowYouYoungYouthZebraZeroZoneZoo\";\n\nlet wordlist: Array = null;\n\n\nfunction loadWords(lang: Wordlist): void {\n if (wordlist != null) { return; }\n wordlist = words.replace(/([A-Z])/g, \" $1\").toLowerCase().substring(1).split(\" \");\n\n // Verify the computed list matches the official list\n /* istanbul ignore if */\n if (Wordlist.check(lang) !== \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\") {\n wordlist = null;\n throw new Error(\"BIP39 Wordlist for en (English) FAILED\");\n }\n}\n\nclass LangEn extends Wordlist {\n constructor() {\n super(\"en\");\n }\n\n getWord(index: number): string {\n loadWords(this);\n return wordlist[index];\n }\n\n getWordIndex(word: string): number {\n loadWords(this);\n return wordlist.indexOf(word);\n }\n}\n\nconst langEn = new LangEn();\nWordlist.register(langEn);\n\nexport { langEn };\n","\"use strict\";\n\n// Wordlists\n// See: https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md\n\n// Browser; only include English by default\n\nimport { Wordlist } from \"./wordlist\";\n\nimport { langEn as en } from \"./lang-en\";\n\nexport const wordlists: { [ locale: string ]: Wordlist } = {\n en: en\n}\n","\"use strict\";\n\n// See: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\n// See: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\n\n\nimport { ExternallyOwnedAccount } from \"@ethersproject/abstract-signer\";\nimport { Base58 } from \"@ethersproject/basex\";\nimport { arrayify, BytesLike, concat, hexDataSlice, hexZeroPad, hexlify } from \"@ethersproject/bytes\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from \"@ethersproject/strings\";\nimport { pbkdf2 } from \"@ethersproject/pbkdf2\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { computeHmac, ripemd160, sha256, SupportedAlgorithm } from \"@ethersproject/sha2\";\nimport { computeAddress } from \"@ethersproject/transactions\";\nimport { Wordlist, wordlists } from \"@ethersproject/wordlists\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nconst N = BigNumber.from(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\n\n\n// \"Bitcoin seed\"\nconst MasterSecret = toUtf8Bytes(\"Bitcoin seed\");\n\nconst HardenedBit = 0x80000000;\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n return ((1 << bits) - 1) << (8 - bits);\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n return (1 << bits) - 1;\n}\n\nfunction bytes32(value: BigNumber | Uint8Array): string {\n return hexZeroPad(hexlify(value), 32);\n}\n\nfunction base58check(data: Uint8Array): string {\n return Base58.encode(concat([ data, hexDataSlice(sha256(sha256(data)), 0, 4) ]));\n}\n\nfunction getWordlist(wordlist: string | Wordlist): Wordlist {\n if (wordlist == null) {\n return wordlists[\"en\"];\n }\n\n if (typeof(wordlist) === \"string\") {\n const words = wordlists[wordlist];\n if (words == null) {\n logger.throwArgumentError(\"unknown locale\", \"wordlist\", wordlist);\n }\n return words;\n }\n\n return wordlist;\n}\n\nconst _constructorGuard: any = {};\n\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n\nexport interface Mnemonic {\n readonly phrase: string;\n readonly path: string;\n readonly locale: string;\n};\n\nexport class HDNode implements ExternallyOwnedAccount {\n readonly privateKey: string;\n readonly publicKey: string;\n\n readonly fingerprint: string;\n readonly parentFingerprint: string;\n\n readonly address: string;\n\n readonly mnemonic?: Mnemonic;\n readonly path: string;\n\n readonly chainCode: string;\n\n readonly index: number;\n readonly depth: number;\n\n /**\n * This constructor should not be called directly.\n *\n * Please use:\n * - fromMnemonic\n * - fromSeed\n */\n constructor(constructorGuard: any, privateKey: string, publicKey: string, parentFingerprint: string, chainCode: string, index: number, depth: number, mnemonicOrPath: Mnemonic | string) {\n /* istanbul ignore if */\n if (constructorGuard !== _constructorGuard) {\n throw new Error(\"HDNode constructor cannot be called directly\");\n }\n\n if (privateKey) {\n const signingKey = new SigningKey(privateKey);\n defineReadOnly(this, \"privateKey\", signingKey.privateKey);\n defineReadOnly(this, \"publicKey\", signingKey.compressedPublicKey);\n } else {\n defineReadOnly(this, \"privateKey\", null);\n defineReadOnly(this, \"publicKey\", hexlify(publicKey));\n }\n\n defineReadOnly(this, \"parentFingerprint\", parentFingerprint);\n defineReadOnly(this, \"fingerprint\", hexDataSlice(ripemd160(sha256(this.publicKey)), 0, 4));\n\n defineReadOnly(this, \"address\", computeAddress(this.publicKey));\n\n defineReadOnly(this, \"chainCode\", chainCode);\n\n defineReadOnly(this, \"index\", index);\n defineReadOnly(this, \"depth\", depth);\n\n if (mnemonicOrPath == null) {\n // From a source that does not preserve the path (e.g. extended keys)\n defineReadOnly(this, \"mnemonic\", null);\n defineReadOnly(this, \"path\", null);\n\n } else if (typeof(mnemonicOrPath) === \"string\") {\n // From a source that does not preserve the mnemonic (e.g. neutered)\n defineReadOnly(this, \"mnemonic\", null);\n defineReadOnly(this, \"path\", mnemonicOrPath);\n\n } else {\n // From a fully qualified source\n defineReadOnly(this, \"mnemonic\", mnemonicOrPath);\n defineReadOnly(this, \"path\", mnemonicOrPath.path);\n }\n }\n\n get extendedKey(): string {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n\n if (this.depth >= 256) { throw new Error(\"Depth too large!\"); }\n\n return base58check(concat([\n ((this.privateKey != null) ? \"0x0488ADE4\": \"0x0488B21E\"),\n hexlify(this.depth),\n this.parentFingerprint,\n hexZeroPad(hexlify(this.index), 4),\n this.chainCode,\n ((this.privateKey != null) ? concat([ \"0x00\", this.privateKey ]): this.publicKey),\n ]));\n }\n\n neuter(): HDNode {\n return new HDNode(_constructorGuard, null, this.publicKey, this.parentFingerprint, this.chainCode, this.index, this.depth, this.path);\n }\n\n private _derive(index: number): HDNode {\n if (index > 0xffffffff) { throw new Error(\"invalid index - \" + String(index)); }\n\n // Base path\n let path = this.path;\n if (path) { path += \"/\" + (index & ~HardenedBit); }\n\n const data = new Uint8Array(37);\n\n if (index & HardenedBit) {\n if (!this.privateKey) {\n throw new Error(\"cannot derive child of neutered node\");\n }\n\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(this.privateKey), 1);\n\n // Hardened path\n if (path) { path += \"'\"; }\n\n } else {\n // Data = ser_p(point(k_par))\n data.set(arrayify(this.publicKey));\n }\n\n // Data += ser_32(i)\n for (let i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); }\n\n const I = arrayify(computeHmac(SupportedAlgorithm.sha512, this.chainCode, data));\n const IL = I.slice(0, 32);\n const IR = I.slice(32);\n\n // The private key\n let ki: string = null\n\n // The public key\n let Ki: string = null;\n\n if (this.privateKey) {\n ki = bytes32(BigNumber.from(IL).add(this.privateKey).mod(N));\n } else {\n const ek = new SigningKey(hexlify(IL));\n Ki = ek._addPoint(this.publicKey);\n }\n\n let mnemonicOrPath: Mnemonic | string = path;\n\n const srcMnemonic = this.mnemonic;\n if (srcMnemonic) {\n mnemonicOrPath = Object.freeze({\n phrase: srcMnemonic.phrase,\n path: path,\n locale: (srcMnemonic.locale || \"en\")\n });\n }\n\n return new HDNode(_constructorGuard, ki, Ki, this.fingerprint, bytes32(IR), index, this.depth + 1, mnemonicOrPath);\n }\n\n derivePath(path: string): HDNode {\n const components = path.split(\"/\");\n\n if (components.length === 0 || (components[0] === \"m\" && this.depth !== 0)) {\n throw new Error(\"invalid path - \" + path);\n }\n\n if (components[0] === \"m\") { components.shift(); }\n\n let result: HDNode = this;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n const index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) { throw new Error(\"invalid path index - \" + component); }\n result = result._derive(HardenedBit + index);\n } else if (component.match(/^[0-9]+$/)) {\n const index = parseInt(component);\n if (index >= HardenedBit) { throw new Error(\"invalid path index - \" + component); }\n result = result._derive(index);\n } else {\n throw new Error(\"invalid path component - \" + component);\n }\n }\n\n return result;\n }\n\n\n static _fromSeed(seed: BytesLike, mnemonic: Mnemonic): HDNode {\n const seedArray: Uint8Array = arrayify(seed);\n if (seedArray.length < 16 || seedArray.length > 64) { throw new Error(\"invalid seed\"); }\n\n const I: Uint8Array = arrayify(computeHmac(SupportedAlgorithm.sha512, MasterSecret, seedArray));\n\n return new HDNode(_constructorGuard, bytes32(I.slice(0, 32)), null, \"0x00000000\", bytes32(I.slice(32)), 0, 0, mnemonic);\n }\n\n static fromMnemonic(mnemonic: string, password?: string, wordlist?: string | Wordlist): HDNode {\n\n // If a locale name was passed in, find the associated wordlist\n wordlist = getWordlist(wordlist);\n\n // Normalize the case and spacing in the mnemonic (throws if the mnemonic is invalid)\n mnemonic = entropyToMnemonic(mnemonicToEntropy(mnemonic, wordlist), wordlist);\n\n return HDNode._fromSeed(mnemonicToSeed(mnemonic, password), {\n phrase: mnemonic,\n path: \"m\",\n locale: wordlist.locale\n });\n }\n\n static fromSeed(seed: BytesLike): HDNode {\n return HDNode._fromSeed(seed, null);\n }\n\n static fromExtendedKey(extendedKey: string): HDNode {\n const bytes = Base58.decode(extendedKey);\n\n if (bytes.length !== 82 || base58check(bytes.slice(0, 78)) !== extendedKey) {\n logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[REDACTED]\");\n }\n\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n\n switch (hexlify(bytes.slice(0, 4))) {\n // Public Key\n case \"0x0488b21e\": case \"0x043587cf\":\n return new HDNode(_constructorGuard, null, hexlify(key), parentFingerprint, chainCode, index, depth, null);\n\n // Private Key\n case \"0x0488ade4\": case \"0x04358394 \":\n if (key[0] !== 0) { break; }\n return new HDNode(_constructorGuard, hexlify(key.slice(1)), null, parentFingerprint, chainCode, index, depth, null);\n }\n\n return logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[REDACTED]\");\n }\n}\n\nexport function mnemonicToSeed(mnemonic: string, password?: string): string {\n if (!password) { password = \"\"; }\n\n const salt = toUtf8Bytes(\"mnemonic\" + password, UnicodeNormalizationForm.NFKD);\n\n return pbkdf2(toUtf8Bytes(mnemonic, UnicodeNormalizationForm.NFKD), salt, 2048, 64, \"sha512\");\n}\n\nexport function mnemonicToEntropy(mnemonic: string, wordlist?: string | Wordlist): string {\n wordlist = getWordlist(wordlist);\n\n logger.checkNormalize();\n\n const words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0) { throw new Error(\"invalid mnemonic\"); }\n\n const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n\n let offset = 0;\n for (let i = 0; i < words.length; i++) {\n let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n if (index === -1) { throw new Error(\"invalid mnemonic\"); }\n\n for (let bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n\n const entropyBits = 32 * words.length / 3;\n\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n throw new Error(\"invalid checksum\");\n }\n\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\n\nexport function entropyToMnemonic(entropy: BytesLike, wordlist?: string | Wordlist): string {\n wordlist = getWordlist(wordlist);\n\n entropy = arrayify(entropy);\n\n if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) {\n throw new Error(\"invalid entropy\");\n }\n\n const indices: Array = [ 0 ];\n\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i++) {\n\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n\n remainingBits -= 8;\n\n // This byte will complete an 11-bit index\n } else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n remainingBits += 3;\n }\n }\n\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = arrayify(sha256(entropy))[0] & getUpperMask(checksumBits);\n\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n\n return wordlist.join(indices.map((index) => (wordlist).getWord(index)));\n}\n\nexport function isValidMnemonic(mnemonic: string, wordlist?: Wordlist): boolean {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n return true;\n } catch (error) { }\n return false;\n}\n\nexport function getAccountPath(index: number): string {\n if (typeof(index) !== \"number\" || index < 0 || index >= HardenedBit || index % 1) {\n logger.throwArgumentError(\"invalid account index\", \"index\", index);\n }\n return `m/44'/60'/${ index }'/0/0`;\n}\n","export const version = \"hdnode/5.7.0\";\n","export const version = \"random/5.7.0\";\n","\"use strict\";\n\nimport { arrayify } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n// Debugging line for testing browser lib in node\n//const window = { crypto: { getRandomValues: () => { } } };\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis\nfunction getGlobal(): any {\n if (typeof self !== 'undefined') { return self; }\n if (typeof window !== 'undefined') { return window; }\n if (typeof global !== 'undefined') { return global; }\n throw new Error('unable to locate global object');\n};\n\nconst anyGlobal = getGlobal();\n\nlet crypto: any = anyGlobal.crypto || anyGlobal.msCrypto;\nif (!crypto || !crypto.getRandomValues) {\n\n logger.warn(\"WARNING: Missing strong random number source\");\n\n crypto = {\n getRandomValues: function(buffer: Uint8Array): Uint8Array {\n return logger.throwError(\"no secure random source avaialble\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"crypto.getRandomValues\"\n });\n }\n };\n}\n\nexport function randomBytes(length: number): Uint8Array {\n if (length <= 0 || length > 1024 || (length % 1) || length != length) {\n logger.throwArgumentError(\"invalid length\", \"length\", length);\n }\n\n const result = new Uint8Array(length);\n crypto.getRandomValues(result);\n return arrayify(result);\n};\n","\"use strict\";\n\nimport { arrayify, Bytes, BytesLike, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings';\n\nexport function looseArrayify(hexString: string): Uint8Array {\n if (typeof(hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\n\nexport function zpad(value: String | number, length: number): String {\n value = String(value);\n while (value.length < length) { value = '0' + value; }\n return value;\n}\n\nexport function getPassword(password: Bytes | string): Uint8Array {\n if (typeof(password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\n\nexport function searchPath(object: any, path: string): string {\n let currentChild = object;\n\n const comps = path.toLowerCase().split('/');\n for (let i = 0; i < comps.length; i++) {\n\n // Search for a child object with a case-insensitive matching key\n let matchingChild = null;\n for (const key in currentChild) {\n if (key.toLowerCase() === comps[i]) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n // Didn't find one. :'(\n if (matchingChild === null) {\n return null;\n }\n\n // Now check this child...\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\nexport function uuidV4(randomBytes: BytesLike): string {\n const bytes = arrayify(randomBytes);\n\n // Section: 4.1.3:\n // - time_hi_and_version[12:16] = 0b0100\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n\n // Section 4.4\n // - clock_seq_hi_and_reserved[6] = 0b0\n // - clock_seq_hi_and_reserved[7] = 0b1\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n const value = hexlify(bytes);\n\n return [\n value.substring(2, 10),\n value.substring(10, 14),\n value.substring(14, 18),\n value.substring(18, 22),\n value.substring(22, 34),\n ].join(\"-\");\n}\n\n","export const version = \"json-wallets/5.7.0\";\n","\"use strict\";\n\nimport aes from \"aes-js\";\nimport scrypt from \"scrypt-js\";\n\nimport { ExternallyOwnedAccount } from \"@ethersproject/abstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, Bytes, BytesLike, concat, hexlify } from \"@ethersproject/bytes\";\nimport { defaultPath, entropyToMnemonic, HDNode, Mnemonic, mnemonicToEntropy } from \"@ethersproject/hdnode\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { pbkdf2 as _pbkdf2 } from \"@ethersproject/pbkdf2\";\nimport { randomBytes } from \"@ethersproject/random\";\nimport { Description } from \"@ethersproject/properties\";\nimport { computeAddress } from \"@ethersproject/transactions\";\n\nimport { getPassword, looseArrayify, searchPath, uuidV4, zpad } from \"./utils\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n// Exported Types\n\nfunction hasMnemonic(value: any): value is { mnemonic: Mnemonic } {\n return (value != null && value.mnemonic && value.mnemonic.phrase);\n}\n\nexport interface _KeystoreAccount {\n address: string;\n privateKey: string;\n mnemonic?: Mnemonic;\n\n _isKeystoreAccount: boolean;\n}\n\nexport class KeystoreAccount extends Description<_KeystoreAccount> implements ExternallyOwnedAccount {\n readonly address: string;\n readonly privateKey: string;\n readonly mnemonic?: Mnemonic;\n\n readonly _isKeystoreAccount: boolean;\n\n isKeystoreAccount(value: any): value is KeystoreAccount {\n return !!(value && value._isKeystoreAccount);\n }\n}\n\nexport type ProgressCallback = (percent: number) => void;\n\nexport type EncryptOptions = {\n iv?: BytesLike;\n entropy?: BytesLike;\n client?: string;\n salt?: BytesLike;\n uuid?: string;\n scrypt?: {\n N?: number;\n r?: number;\n p?: number;\n }\n}\n\nfunction _decrypt(data: any, key: Uint8Array, ciphertext: Uint8Array): Uint8Array {\n const cipher = searchPath(data, \"crypto/cipher\");\n if (cipher === \"aes-128-ctr\") {\n const iv = looseArrayify(searchPath(data, \"crypto/cipherparams/iv\"))\n const counter = new aes.Counter(iv);\n\n const aesCtr = new aes.ModeOfOperation.ctr(key, counter);\n\n return arrayify(aesCtr.decrypt(ciphertext));\n }\n\n return null;\n}\n\nfunction _getAccount(data: any, key: Uint8Array): KeystoreAccount {\n const ciphertext = looseArrayify(searchPath(data, \"crypto/ciphertext\"));\n\n const computedMAC = hexlify(keccak256(concat([ key.slice(16, 32), ciphertext ]))).substring(2);\n if (computedMAC !== searchPath(data, \"crypto/mac\").toLowerCase()) {\n throw new Error(\"invalid password\");\n }\n\n const privateKey = _decrypt(data, key.slice(0, 16), ciphertext);\n\n if (!privateKey) {\n logger.throwError(\"unsupported cipher\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"decrypt\"\n });\n }\n\n const mnemonicKey = key.slice(32, 64);\n\n const address = computeAddress(privateKey);\n if (data.address) {\n let check = data.address.toLowerCase();\n if (check.substring(0, 2) !== \"0x\") { check = \"0x\" + check; }\n\n if (getAddress(check) !== address) {\n throw new Error(\"address mismatch\");\n }\n }\n\n const account: _KeystoreAccount = {\n _isKeystoreAccount: true,\n address: address,\n privateKey: hexlify(privateKey)\n };\n\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n if (searchPath(data, \"x-ethers/version\") === \"0.1\") {\n const mnemonicCiphertext = looseArrayify(searchPath(data, \"x-ethers/mnemonicCiphertext\"));\n const mnemonicIv = looseArrayify(searchPath(data, \"x-ethers/mnemonicCounter\"));\n\n const mnemonicCounter = new aes.Counter(mnemonicIv);\n const mnemonicAesCtr = new aes.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\n\n const path = searchPath(data, \"x-ethers/path\") || defaultPath;\n const locale = searchPath(data, \"x-ethers/locale\") || \"en\";\n\n const entropy = arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext));\n\n try {\n const mnemonic = entropyToMnemonic(entropy, locale);\n const node = HDNode.fromMnemonic(mnemonic, null, locale).derivePath(path);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n\n account.mnemonic = node.mnemonic;\n\n } catch (error) {\n // If we don't have the locale wordlist installed to\n // read this mnemonic, just bail and don't set the\n // mnemonic\n if (error.code !== Logger.errors.INVALID_ARGUMENT || error.argument !== \"wordlist\") {\n throw error;\n }\n }\n }\n\n return new KeystoreAccount(account);\n}\n\ntype ScryptFunc = (pw: Uint8Array, salt: Uint8Array, n: number, r: number, p: number, dkLen: number, callback?: ProgressCallback) => T;\ntype Pbkdf2Func = (pw: Uint8Array, salt: Uint8Array, c: number, dkLen: number, prfFunc: string) => T;\n\nfunction pbkdf2Sync(passwordBytes: Uint8Array, salt: Uint8Array, count: number, dkLen: number, prfFunc: string): Uint8Array {\n return arrayify(_pbkdf2(passwordBytes, salt, count, dkLen, prfFunc));\n}\n\nfunction pbkdf2(passwordBytes: Uint8Array, salt: Uint8Array, count: number, dkLen: number, prfFunc: string): Promise {\n return Promise.resolve(pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc));\n}\n\nfunction _computeKdfKey(data: any, password: Bytes | string, pbkdf2Func: Pbkdf2Func, scryptFunc: ScryptFunc, progressCallback?: ProgressCallback): T {\n const passwordBytes = getPassword(password);\n\n const kdf = searchPath(data, \"crypto/kdf\");\n\n if (kdf && typeof(kdf) === \"string\") {\n const throwError = function(name: string, value: any): never {\n return logger.throwArgumentError(\"invalid key-derivation function parameters\", name, value);\n }\n\n if (kdf.toLowerCase() === \"scrypt\") {\n const salt = looseArrayify(searchPath(data, \"crypto/kdfparams/salt\"));\n const N = parseInt(searchPath(data, \"crypto/kdfparams/n\"));\n const r = parseInt(searchPath(data, \"crypto/kdfparams/r\"));\n const p = parseInt(searchPath(data, \"crypto/kdfparams/p\"));\n\n // Check for all required parameters\n if (!N || !r || !p) { throwError(\"kdf\", kdf); }\n\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) { throwError(\"N\", N); }\n\n const dkLen = parseInt(searchPath(data, \"crypto/kdfparams/dklen\"));\n if (dkLen !== 32) { throwError(\"dklen\", dkLen); }\n\n return scryptFunc(passwordBytes, salt, N, r, p, 64, progressCallback);\n\n } else if (kdf.toLowerCase() === \"pbkdf2\") {\n\n const salt = looseArrayify(searchPath(data, \"crypto/kdfparams/salt\"));\n\n let prfFunc: string = null;\n const prf = searchPath(data, \"crypto/kdfparams/prf\");\n if (prf === \"hmac-sha256\") {\n prfFunc = \"sha256\";\n } else if (prf === \"hmac-sha512\") {\n prfFunc = \"sha512\";\n } else {\n throwError(\"prf\", prf);\n }\n\n const count = parseInt(searchPath(data, \"crypto/kdfparams/c\"));\n\n const dkLen = parseInt(searchPath(data, \"crypto/kdfparams/dklen\"));\n if (dkLen !== 32) { throwError(\"dklen\", dkLen); }\n\n return pbkdf2Func(passwordBytes, salt, count, dkLen, prfFunc);\n }\n }\n\n return logger.throwArgumentError(\"unsupported key-derivation function\", \"kdf\", kdf);\n}\n\n\nexport function decryptSync(json: string, password: Bytes | string): KeystoreAccount {\n const data = JSON.parse(json);\n\n const key = _computeKdfKey(data, password, pbkdf2Sync, scrypt.syncScrypt);\n return _getAccount(data, key);\n}\n\nexport async function decrypt(json: string, password: Bytes | string, progressCallback?: ProgressCallback): Promise {\n const data = JSON.parse(json);\n\n const key = await _computeKdfKey(data, password, pbkdf2, scrypt.scrypt, progressCallback);\n return _getAccount(data, key);\n}\n\n\nexport function encrypt(account: ExternallyOwnedAccount, password: Bytes | string, options?: EncryptOptions, progressCallback?: ProgressCallback): Promise {\n\n try {\n // Check the address matches the private key\n if (getAddress(account.address) !== computeAddress(account.privateKey)) {\n throw new Error(\"address/privateKey mismatch\");\n }\n\n // Check the mnemonic (if any) matches the private key\n if (hasMnemonic(account)) {\n const mnemonic = account.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n }\n\n } catch (e) {\n return Promise.reject(e);\n }\n\n // The options are optional, so adjust the call as needed\n if (typeof(options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) { options = {}; }\n\n const privateKey: Uint8Array = arrayify(account.privateKey);\n const passwordBytes = getPassword(password);\n\n let entropy: Uint8Array = null\n let path: string = null;\n let locale: string = null;\n if (hasMnemonic(account)) {\n const srcMnemonic = account.mnemonic;\n entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || \"en\"));\n path = srcMnemonic.path || defaultPath;\n locale = srcMnemonic.locale || \"en\";\n }\n\n let client = options.client;\n if (!client) { client = \"ethers.js\"; }\n\n // Check/generate the salt\n let salt: Uint8Array = null;\n if (options.salt) {\n salt = arrayify(options.salt);\n } else {\n salt = randomBytes(32);;\n }\n\n // Override initialization vector\n let iv: Uint8Array = null;\n if (options.iv) {\n iv = arrayify(options.iv);\n if (iv.length !== 16) { throw new Error(\"invalid iv\"); }\n } else {\n iv = randomBytes(16);\n }\n\n // Override the uuid\n let uuidRandom: Uint8Array = null;\n if (options.uuid) {\n uuidRandom = arrayify(options.uuid);\n if (uuidRandom.length !== 16) { throw new Error(\"invalid uuid\"); }\n } else {\n uuidRandom = randomBytes(16);\n }\n\n // Override the scrypt password-based key derivation function parameters\n let N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) { N = options.scrypt.N; }\n if (options.scrypt.r) { r = options.scrypt.r; }\n if (options.scrypt.p) { p = options.scrypt.p; }\n }\n\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n return scrypt.scrypt(passwordBytes, salt, N, r, p, 64, progressCallback).then((key) => {\n key = arrayify(key);\n\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n const derivedKey = key.slice(0, 16);\n const macPrefix = key.slice(16, 32);\n\n // This will be used to encrypt the mnemonic phrase (if any)\n const mnemonicKey = key.slice(32, 64);\n\n // Encrypt the private key\n const counter = new aes.Counter(iv);\n const aesCtr = new aes.ModeOfOperation.ctr(derivedKey, counter);\n const ciphertext = arrayify(aesCtr.encrypt(privateKey));\n\n // Compute the message authentication code, used to check the password\n const mac = keccak256(concat([macPrefix, ciphertext]))\n\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n const data: { [key: string]: any } = {\n address: account.address.substring(2).toLowerCase(),\n id: uuidV4(uuidRandom),\n version: 3,\n crypto: {\n cipher: \"aes-128-ctr\",\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: \"scrypt\",\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (entropy) {\n const mnemonicIv = randomBytes(16);\n const mnemonicCounter = new aes.Counter(mnemonicIv);\n const mnemonicAesCtr = new aes.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\n const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n const now = new Date();\n const timestamp = (now.getUTCFullYear() + \"-\" +\n zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n zpad(now.getUTCDate(), 2) + \"T\" +\n zpad(now.getUTCHours(), 2) + \"-\" +\n zpad(now.getUTCMinutes(), 2) + \"-\" +\n zpad(now.getUTCSeconds(), 2) + \".0Z\"\n );\n data[\"x-ethers\"] = {\n client: client,\n gethFilename: (\"UTC--\" + timestamp + \"--\" + data.address),\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n path: path,\n locale: locale,\n version: \"0.1\"\n };\n }\n\n return JSON.stringify(data);\n });\n}\n","\"use strict\";\n\nimport aes from \"aes-js\";\n\nimport { ExternallyOwnedAccount } from \"@ethersproject/abstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, Bytes } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { pbkdf2 } from \"@ethersproject/pbkdf2\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { Description } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { getPassword, looseArrayify, searchPath } from \"./utils\";\n\nexport interface _CrowdsaleAccount {\n address: string;\n privateKey: string;\n\n _isCrowdsaleAccount: boolean;\n}\n\nexport class CrowdsaleAccount extends Description<_CrowdsaleAccount> implements ExternallyOwnedAccount {\n readonly address: string;\n readonly privateKey: string;\n readonly mnemonic?: string;\n readonly path?: string;\n\n readonly _isCrowdsaleAccount: boolean;\n\n isCrowdsaleAccount(value: any): value is CrowdsaleAccount {\n return !!(value && value._isCrowdsaleAccount);\n }\n}\n\n// See: https://github.com/ethereum/pyethsaletool\nexport function decrypt(json: string, password: Bytes | string): ExternallyOwnedAccount {\n const data = JSON.parse(json);\n\n password = getPassword(password);\n\n // Ethereum Address\n const ethaddr = getAddress(searchPath(data, \"ethaddr\"));\n\n // Encrypted Seed\n const encseed = looseArrayify(searchPath(data, \"encseed\"));\n if (!encseed || (encseed.length % 16) !== 0) {\n logger.throwArgumentError(\"invalid encseed\", \"json\", json);\n }\n\n const key = arrayify(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n\n const iv = encseed.slice(0, 16);\n const encryptedSeed = encseed.slice(16);\n\n // Decrypt the seed\n const aesCbc = new aes.ModeOfOperation.cbc(key, iv);\n const seed = aes.padding.pkcs7.strip(arrayify(aesCbc.decrypt(encryptedSeed)));\n\n // This wallet format is weird... Convert the binary encoded hex to a string.\n let seedHex = \"\";\n for (let i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n\n const seedHexBytes = toUtf8Bytes(seedHex);\n\n const privateKey = keccak256(seedHexBytes);\n\n return new CrowdsaleAccount ({\n _isCrowdsaleAccount: true,\n address: ethaddr,\n privateKey: privateKey\n });\n}\n\n","\"use strict\";\n\nimport { getAddress } from \"@ethersproject/address\";\n\n\nexport function isCrowdsaleWallet(json: string): boolean {\n let data: any = null;\n try {\n data = JSON.parse(json);\n } catch (error) { return false; }\n\n return (data.encseed && data.ethaddr);\n}\n\nexport function isKeystoreWallet(json: string): boolean {\n let data: any = null;\n try {\n data = JSON.parse(json);\n } catch (error) { return false; }\n\n if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) {\n return false;\n }\n\n // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff\n return true;\n}\n\n//export function isJsonWallet(json: string): boolean {\n// return (isSecretStorageWallet(json) || isCrowdsaleWallet(json));\n//}\n\nexport function getJsonWalletAddress(json: string): string {\n if (isCrowdsaleWallet(json)) {\n try {\n return getAddress(JSON.parse(json).ethaddr);\n } catch (error) { return null; }\n }\n\n if (isKeystoreWallet(json)) {\n try {\n return getAddress(JSON.parse(json).address);\n } catch (error) { return null; }\n }\n\n return null;\n}\n\n","\"use strict\";\n\nimport { Bytes } from \"@ethersproject/bytes\";\nimport { ExternallyOwnedAccount } from \"@ethersproject/abstract-signer\";\n\nimport { decrypt as decryptCrowdsale } from \"./crowdsale\";\nimport { getJsonWalletAddress, isCrowdsaleWallet, isKeystoreWallet } from \"./inspect\";\nimport { decrypt as decryptKeystore, decryptSync as decryptKeystoreSync, encrypt as encryptKeystore, EncryptOptions, ProgressCallback } from \"./keystore\";\n\nfunction decryptJsonWallet(json: string, password: Bytes | string, progressCallback?: ProgressCallback): Promise {\n if (isCrowdsaleWallet(json)) {\n if (progressCallback) { progressCallback(0); }\n const account = decryptCrowdsale(json, password)\n if (progressCallback) { progressCallback(1); }\n return Promise.resolve(account);\n }\n\n if (isKeystoreWallet(json)) {\n return decryptKeystore(json, password, progressCallback);\n }\n\n return Promise.reject(new Error(\"invalid JSON wallet\"));\n}\n\nfunction decryptJsonWalletSync(json: string, password: Bytes | string): ExternallyOwnedAccount {\n if (isCrowdsaleWallet(json)) {\n return decryptCrowdsale(json, password)\n }\n\n if (isKeystoreWallet(json)) {\n return decryptKeystoreSync(json, password);\n }\n\n throw new Error(\"invalid JSON wallet\");\n}\n\nexport {\n decryptCrowdsale,\n\n decryptKeystore,\n decryptKeystoreSync,\n encryptKeystore,\n\n isCrowdsaleWallet,\n isKeystoreWallet,\n getJsonWalletAddress,\n\n decryptJsonWallet,\n decryptJsonWalletSync,\n\n ProgressCallback,\n EncryptOptions,\n};\n","export const version = \"wallet/5.7.0\";\n","\"use strict\";\n\nimport { getAddress } from \"@ethersproject/address\";\nimport { Provider, TransactionRequest } from \"@ethersproject/abstract-provider\";\nimport { ExternallyOwnedAccount, Signer, TypedDataDomain, TypedDataField, TypedDataSigner } from \"@ethersproject/abstract-signer\";\nimport { arrayify, Bytes, BytesLike, concat, hexDataSlice, isHexString, joinSignature, SignatureLike } from \"@ethersproject/bytes\";\nimport { hashMessage, _TypedDataEncoder } from \"@ethersproject/hash\";\nimport { defaultPath, HDNode, entropyToMnemonic, Mnemonic } from \"@ethersproject/hdnode\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { defineReadOnly, resolveProperties } from \"@ethersproject/properties\";\nimport { randomBytes } from \"@ethersproject/random\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { decryptJsonWallet, decryptJsonWalletSync, encryptKeystore, ProgressCallback } from \"@ethersproject/json-wallets\";\nimport { computeAddress, recoverAddress, serialize, UnsignedTransaction } from \"@ethersproject/transactions\";\nimport { Wordlist } from \"@ethersproject/wordlists\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nfunction isAccount(value: any): value is ExternallyOwnedAccount {\n return (value != null && isHexString(value.privateKey, 32) && value.address != null);\n}\n\nfunction hasMnemonic(value: any): value is { mnemonic: Mnemonic } {\n const mnemonic = value.mnemonic;\n return (mnemonic && mnemonic.phrase);\n}\n\nexport class Wallet extends Signer implements ExternallyOwnedAccount, TypedDataSigner {\n\n readonly address: string;\n readonly provider: Provider;\n\n // Wrapping the _signingKey and _mnemonic in a getter function prevents\n // leaking the private key in console.log; still, be careful! :)\n readonly _signingKey: () => SigningKey;\n readonly _mnemonic: () => Mnemonic;\n\n constructor(privateKey: BytesLike | ExternallyOwnedAccount | SigningKey, provider?: Provider) {\n super();\n\n if (isAccount(privateKey)) {\n const signingKey = new SigningKey(privateKey.privateKey);\n defineReadOnly(this, \"_signingKey\", () => signingKey);\n defineReadOnly(this, \"address\", computeAddress(this.publicKey));\n\n if (this.address !== getAddress(privateKey.address)) {\n logger.throwArgumentError(\"privateKey/address mismatch\", \"privateKey\", \"[REDACTED]\");\n }\n\n if (hasMnemonic(privateKey)) {\n const srcMnemonic = privateKey.mnemonic;\n defineReadOnly(this, \"_mnemonic\", () => (\n {\n phrase: srcMnemonic.phrase,\n path: srcMnemonic.path || defaultPath,\n locale: srcMnemonic.locale || \"en\"\n }\n ));\n const mnemonic = this.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path);\n if (computeAddress(node.privateKey) !== this.address) {\n logger.throwArgumentError(\"mnemonic/address mismatch\", \"privateKey\", \"[REDACTED]\");\n }\n } else {\n defineReadOnly(this, \"_mnemonic\", (): Mnemonic => null);\n }\n\n\n } else {\n if (SigningKey.isSigningKey(privateKey)) {\n /* istanbul ignore if */\n if (privateKey.curve !== \"secp256k1\") {\n logger.throwArgumentError(\"unsupported curve; must be secp256k1\", \"privateKey\", \"[REDACTED]\");\n }\n defineReadOnly(this, \"_signingKey\", () => (privateKey));\n\n } else {\n // A lot of common tools do not prefix private keys with a 0x (see: #1166)\n if (typeof(privateKey) === \"string\") {\n if (privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) {\n privateKey = \"0x\" + privateKey;\n }\n }\n\n const signingKey = new SigningKey(privateKey);\n defineReadOnly(this, \"_signingKey\", () => signingKey);\n }\n\n defineReadOnly(this, \"_mnemonic\", (): Mnemonic => null);\n defineReadOnly(this, \"address\", computeAddress(this.publicKey));\n }\n\n /* istanbul ignore if */\n if (provider && !Provider.isProvider(provider)) {\n logger.throwArgumentError(\"invalid provider\", \"provider\", provider);\n }\n\n defineReadOnly(this, \"provider\", provider || null);\n }\n\n get mnemonic(): Mnemonic { return this._mnemonic(); }\n get privateKey(): string { return this._signingKey().privateKey; }\n get publicKey(): string { return this._signingKey().publicKey; }\n\n getAddress(): Promise {\n return Promise.resolve(this.address);\n }\n\n connect(provider: Provider): Wallet {\n return new Wallet(this, provider);\n }\n\n signTransaction(transaction: TransactionRequest): Promise {\n return resolveProperties(transaction).then((tx) => {\n if (tx.from != null) {\n if (getAddress(tx.from) !== this.address) {\n logger.throwArgumentError(\"transaction from address mismatch\", \"transaction.from\", transaction.from);\n }\n delete tx.from;\n }\n\n const signature = this._signingKey().signDigest(keccak256(serialize(tx)));\n return serialize(tx, signature);\n });\n }\n\n async signMessage(message: Bytes | string): Promise {\n return joinSignature(this._signingKey().signDigest(hashMessage(message)));\n }\n\n async _signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise {\n // Populate any ENS names\n const populated = await _TypedDataEncoder.resolveNames(domain, types, value, (name: string) => {\n if (this.provider == null) {\n logger.throwError(\"cannot resolve ENS names without a provider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"resolveName\",\n value: name\n });\n }\n return this.provider.resolveName(name);\n });\n\n return joinSignature(this._signingKey().signDigest(_TypedDataEncoder.hash(populated.domain, types, populated.value)));\n }\n\n encrypt(password: Bytes | string, options?: any, progressCallback?: ProgressCallback): Promise {\n if (typeof(options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n\n if (progressCallback && typeof(progressCallback) !== \"function\") {\n throw new Error(\"invalid callback\");\n }\n\n if (!options) { options = {}; }\n\n return encryptKeystore(this, password, options, progressCallback);\n }\n\n\n /**\n * Static methods to create Wallet instances.\n */\n static createRandom(options?: any): Wallet {\n let entropy: Uint8Array = randomBytes(16);\n\n if (!options) { options = { }; }\n\n if (options.extraEntropy) {\n entropy = arrayify(hexDataSlice(keccak256(concat([ entropy, options.extraEntropy ])), 0, 16));\n }\n\n const mnemonic = entropyToMnemonic(entropy, options.locale);\n return Wallet.fromMnemonic(mnemonic, options.path, options.locale);\n }\n\n static fromEncryptedJson(json: string, password: Bytes | string, progressCallback?: ProgressCallback): Promise {\n return decryptJsonWallet(json, password, progressCallback).then((account) => {\n return new Wallet(account);\n });\n }\n\n static fromEncryptedJsonSync(json: string, password: Bytes | string): Wallet {\n return new Wallet(decryptJsonWalletSync(json, password));\n }\n\n static fromMnemonic(mnemonic: string, path?: string, wordlist?: Wordlist): Wallet {\n if (!path) { path = defaultPath; }\n return new Wallet(HDNode.fromMnemonic(mnemonic, null, wordlist).derivePath(path));\n }\n}\n\nexport function verifyMessage(message: Bytes | string, signature: SignatureLike): string {\n return recoverAddress(hashMessage(message), signature);\n}\n\nexport function verifyTypedData(domain: TypedDataDomain, types: Record>, value: Record, signature: SignatureLike): string {\n return recoverAddress(_TypedDataEncoder.hash(domain, types, value), signature);\n}\n","export const AddressZero = \"0x0000000000000000000000000000000000000000\";\n\n","export const HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\n","// NFKC (composed) // (decomposed)\nexport const EtherSymbol = \"\\u039e\"; // \"\\uD835\\uDF63\";\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { Network, Networkish } from \"./types\";\n\nexport {\n Network,\n Networkish\n};\n\ntype DefaultProviderFunc = (providers: any, options?: any) => any;\n\ninterface Renetworkable extends DefaultProviderFunc {\n renetwork: (network: Network) => DefaultProviderFunc;\n};\n\nfunction isRenetworkable(value: any): value is Renetworkable {\n return (value && typeof(value.renetwork) === \"function\");\n}\n\nfunction ethDefaultProvider(network: string | Network): Renetworkable {\n const func = function(providers: any, options?: any): any {\n if (options == null) { options = { }; }\n const providerList: Array = [];\n\n if (providers.InfuraProvider && options.infura !== \"-\") {\n try {\n providerList.push(new providers.InfuraProvider(network, options.infura));\n } catch(error) { }\n }\n\n if (providers.EtherscanProvider && options.etherscan !== \"-\") {\n try {\n providerList.push(new providers.EtherscanProvider(network, options.etherscan));\n } catch(error) { }\n }\n\n if (providers.AlchemyProvider && options.alchemy !== \"-\") {\n try {\n providerList.push(new providers.AlchemyProvider(network, options.alchemy));\n } catch(error) { }\n }\n\n if (providers.PocketProvider && options.pocket !== \"-\") {\n // These networks are currently faulty on Pocket as their\n // network does not handle the Berlin hardfork, which is\n // live on these ones.\n // @TODO: This goes away once Pocket has upgraded their nodes\n const skip = [ \"goerli\", \"ropsten\", \"rinkeby\", \"sepolia\" ];\n try {\n const provider = new providers.PocketProvider(network, options.pocket);\n if (provider.network && skip.indexOf(provider.network.name) === -1) {\n providerList.push(provider);\n }\n } catch(error) { }\n }\n\n if (providers.CloudflareProvider && options.cloudflare !== \"-\") {\n try {\n providerList.push(new providers.CloudflareProvider(network));\n } catch(error) { }\n }\n\n if (providers.AnkrProvider && options.ankr !== \"-\") {\n try {\n const skip = [ \"ropsten\" ];\n const provider = new providers.AnkrProvider(network, options.ankr);\n if (provider.network && skip.indexOf(provider.network.name) === -1) {\n providerList.push(provider);\n }\n } catch(error) { }\n }\n\n if (providerList.length === 0) { return null; }\n\n if (providers.FallbackProvider) {\n let quorum = 1;\n if (options.quorum != null) {\n quorum = options.quorum;\n } else if (network === \"homestead\") {\n quorum = 2;\n }\n return new providers.FallbackProvider(providerList, quorum);\n }\n\n return providerList[0];\n };\n\n func.renetwork = function(network: Network) {\n return ethDefaultProvider(network);\n };\n\n return func;\n}\n\nfunction etcDefaultProvider(url: string, network: string | Network): Renetworkable {\n const func = function(providers: any, options?: any): any {\n if (providers.JsonRpcProvider) {\n return new providers.JsonRpcProvider(url, network);\n }\n\n return null;\n };\n\n func.renetwork = function(network: Network) {\n return etcDefaultProvider(url, network);\n };\n\n return func;\n}\n\nconst homestead: Network = {\n chainId: 1,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"homestead\",\n _defaultProvider: ethDefaultProvider(\"homestead\")\n};\n\nconst ropsten: Network = {\n chainId: 3,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"ropsten\",\n _defaultProvider: ethDefaultProvider(\"ropsten\")\n};\n\nconst classicMordor: Network = {\n chainId: 63,\n name: \"classicMordor\",\n _defaultProvider: etcDefaultProvider(\"https://www.ethercluster.com/mordor\", \"classicMordor\")\n};\n\n// See: https://chainlist.org\nconst networks: { [name: string]: Network } = {\n unspecified: { chainId: 0, name: \"unspecified\" },\n\n homestead: homestead,\n mainnet: homestead,\n\n morden: { chainId: 2, name: \"morden\" },\n\n ropsten: ropsten,\n testnet: ropsten,\n\n rinkeby: {\n chainId: 4,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"rinkeby\",\n _defaultProvider: ethDefaultProvider(\"rinkeby\")\n },\n\n kovan: {\n chainId: 42,\n name: \"kovan\",\n _defaultProvider: ethDefaultProvider(\"kovan\")\n },\n\n goerli: {\n chainId: 5,\n ensAddress: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n name: \"goerli\",\n _defaultProvider: ethDefaultProvider(\"goerli\")\n },\n\n kintsugi: { chainId: 1337702, name: \"kintsugi\" },\n\n sepolia: {\n chainId: 11155111,\n name: \"sepolia\",\n _defaultProvider: ethDefaultProvider(\"sepolia\")\n },\n\n\n // ETC (See: #351)\n classic: {\n chainId: 61,\n name: \"classic\",\n _defaultProvider: etcDefaultProvider(\"https:/\\/www.ethercluster.com/etc\", \"classic\")\n },\n\n classicMorden: { chainId: 62, name: \"classicMorden\" },\n\n classicMordor: classicMordor,\n classicTestnet: classicMordor,\n\n classicKotti: {\n chainId: 6,\n name: \"classicKotti\",\n _defaultProvider: etcDefaultProvider(\"https:/\\/www.ethercluster.com/kotti\", \"classicKotti\")\n },\n\n xdai: { chainId: 100, name: \"xdai\" },\n\n matic: {\n chainId: 137,\n name: \"matic\",\n _defaultProvider: ethDefaultProvider(\"matic\")\n },\n maticmum: { chainId: 80001, name: \"maticmum\" },\n\n optimism: {\n chainId: 10,\n name: \"optimism\",\n _defaultProvider: ethDefaultProvider(\"optimism\")\n },\n \"optimism-kovan\": { chainId: 69, name: \"optimism-kovan\" },\n \"optimism-goerli\": { chainId: 420, name: \"optimism-goerli\" },\n\n arbitrum: { chainId: 42161, name: \"arbitrum\" },\n \"arbitrum-rinkeby\": { chainId: 421611, name: \"arbitrum-rinkeby\" },\n \"arbitrum-goerli\": { chainId: 421613, name: \"arbitrum-goerli\" },\n\n bnb: { chainId: 56, name: \"bnb\" },\n bnbt: { chainId: 97, name: \"bnbt\" },\n}\n\n/**\n * getNetwork\n *\n * Converts a named common networks or chain ID (network ID) to a Network\n * and verifies a network is a valid Network..\n */\nexport function getNetwork(network: Networkish): Network {\n // No network (null)\n if (network == null) { return null; }\n\n if (typeof(network) === \"number\") {\n for (const name in networks) {\n const standard = networks[name];\n if (standard.chainId === network) {\n return {\n name: standard.name,\n chainId: standard.chainId,\n ensAddress: (standard.ensAddress || null),\n _defaultProvider: (standard._defaultProvider || null)\n };\n }\n }\n\n return {\n chainId: network,\n name: \"unknown\"\n };\n }\n\n if (typeof(network) === \"string\") {\n const standard = networks[network];\n if (standard == null) { return null; }\n return {\n name: standard.name,\n chainId: standard.chainId,\n ensAddress: standard.ensAddress,\n _defaultProvider: (standard._defaultProvider || null)\n };\n }\n\n const standard = networks[network.name];\n\n // Not a standard network; check that it is a valid network in general\n if (!standard) {\n if (typeof(network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network chainId\", \"network\", network);\n }\n return network;\n }\n\n // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)\n if (network.chainId !== 0 && network.chainId !== standard.chainId) {\n logger.throwArgumentError(\"network chainId mismatch\", \"network\", network);\n }\n\n // @TODO: In the next major version add an attach function to a defaultProvider\n // class and move the _defaultProvider internal to this file (extend Network)\n let defaultProvider: DefaultProviderFunc = network._defaultProvider || null;\n if (defaultProvider == null && standard._defaultProvider) {\n if (isRenetworkable(standard._defaultProvider)) {\n defaultProvider = standard._defaultProvider.renetwork(network);\n } else {\n defaultProvider = standard._defaultProvider;\n }\n }\n\n // Standard Network (allow overriding the ENS address)\n return {\n name: network.name,\n chainId: standard.chainId,\n ensAddress: (network.ensAddress || standard.ensAddress || null),\n _defaultProvider: defaultProvider\n };\n}\n","export const version = \"networks/5.7.1\";\n","\"use strict\";\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\n\nexport function decode(textData: string): Uint8Array {\n textData = atob(textData);\n const data = [];\n for (let i = 0; i < textData.length; i++) {\n data.push(textData.charCodeAt(i));\n }\n return arrayify(data);\n}\n\nexport function encode(data: BytesLike): string {\n data = arrayify(data);\n let textData = \"\";\n for (let i = 0; i < data.length; i++) {\n textData += String.fromCharCode(data[i]);\n }\n return btoa(textData);\n}\n\n\n","/**\n * MIT License\n *\n * Copyright (c) 2021 Andrew Raffensperger\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * This is a near carbon-copy of the original source (link below) with the\n * TypeScript typings added and a few tweaks to make it ES3-compatible.\n *\n * See: https://github.com/adraffy/ens-normalize.js\n */\n\nexport type Numbers = Uint8Array | Array;\nexport type NextFunc = (...args: Array) => number;\n\n// https://github.com/behnammodi/polyfill/blob/master/array.polyfill.js\nfunction flat(array: Array, depth?: number): Array {\n if (depth == null) { depth = 1; }\n const result: Array = [];\n\n const forEach = result.forEach;\n\n const flatDeep = function (arr: Array, depth: number) {\n forEach.call(arr, function (val: any) {\n if (depth > 0 && Array.isArray(val)) {\n flatDeep(val, depth - 1);\n } else {\n result.push(val);\n }\n });\n };\n\n flatDeep(array, depth);\n return result;\n}\n\nfunction fromEntries(array: Array<[T, U]>): Record {\n const result: Record = >{ };\n for (let i = 0; i < array.length; i++) {\n const value = array[i];\n result[value[0]] = value[1];\n }\n return result;\n}\n\nexport function decode_arithmetic(bytes: Numbers): Array {\n\tlet pos = 0;\n\tfunction u16() { return (bytes[pos++] << 8) | bytes[pos++]; }\n\t\n\t// decode the frequency table\n\tlet symbol_count = u16();\n\tlet total = 1;\n\tlet acc = [0, 1]; // first symbol has frequency 1\n\tfor (let i = 1; i < symbol_count; i++) {\n\t\tacc.push(total += u16());\n\t}\n\n\t// skip the sized-payload that the last 3 symbols index into\n\tlet skip = u16();\n\tlet pos_payload = pos;\n\tpos += skip;\n\n\tlet read_width = 0;\n\tlet read_buffer = 0; \n\tfunction read_bit() {\n\t\tif (read_width == 0) {\n\t\t\t// this will read beyond end of buffer\n\t\t\t// but (undefined|0) => zero pad\n\t\t\tread_buffer = (read_buffer << 8) | bytes[pos++];\n\t\t\tread_width = 8;\n\t\t}\n\t\treturn (read_buffer >> --read_width) & 1;\n\t}\n\n\tconst N = 31;\n\tconst FULL = 2**N;\n\tconst HALF = FULL >>> 1;\n\tconst QRTR = HALF >> 1;\n\tconst MASK = FULL - 1;\n\n\t// fill register\n\tlet register = 0;\n\tfor (let i = 0; i < N; i++) register = (register << 1) | read_bit();\n\n\tlet symbols = [];\n\tlet low = 0;\n\tlet range = FULL; // treat like a float\n\twhile (true) {\n\t\tlet value = Math.floor((((register - low + 1) * total) - 1) / range);\n\t\tlet start = 0;\n\t\tlet end = symbol_count;\n\t\twhile (end - start > 1) { // binary search\n\t\t\tlet mid = (start + end) >>> 1;\n\t\t\tif (value < acc[mid]) {\n\t\t\t\tend = mid;\n\t\t\t} else {\n\t\t\t\tstart = mid;\n\t\t\t}\n\t\t}\n\t\tif (start == 0) break; // first symbol is end mark\n\t\tsymbols.push(start);\n\t\tlet a = low + Math.floor(range * acc[start] / total);\n\t\tlet b = low + Math.floor(range * acc[start+1] / total) - 1\n\t\twhile (((a ^ b) & HALF) == 0) {\n\t\t\tregister = (register << 1) & MASK | read_bit();\n\t\t\ta = (a << 1) & MASK;\n\t\t\tb = (b << 1) & MASK | 1;\n\t\t}\n\t\twhile (a & ~b & QRTR) {\n\t\t\tregister = (register & HALF) | ((register << 1) & (MASK >>> 1)) | read_bit();\n\t\t\ta = (a << 1) ^ HALF;\n\t\t\tb = ((b ^ HALF) << 1) | HALF | 1;\n\t\t}\n\t\tlow = a;\n\t\trange = 1 + b - a;\n\t}\n\tlet offset = symbol_count - 4;\n\treturn symbols.map(x => { // index into payload\n\t\tswitch (x - offset) {\n\t\t\tcase 3: return offset + 0x10100 + ((bytes[pos_payload++] << 16) | (bytes[pos_payload++] << 8) | bytes[pos_payload++]);\n\t\t\tcase 2: return offset + 0x100 + ((bytes[pos_payload++] << 8) | bytes[pos_payload++]);\n\t\t\tcase 1: return offset + bytes[pos_payload++];\n\t\t\tdefault: return x - 1;\n\t\t}\n\t});\n}\t\n\n\n// returns an iterator which returns the next symbol\nexport function read_payload(v: Numbers): NextFunc {\n\tlet pos = 0;\n\treturn () => v[pos++];\n}\nexport function read_compressed_payload(bytes: Numbers): NextFunc {\n\treturn read_payload(decode_arithmetic(bytes));\n}\n\n// eg. [0,1,2,3...] => [0,-1,1,-2,...]\nexport function signed(i: number): number { \n\treturn (i & 1) ? (~i >> 1) : (i >> 1);\n}\n\nfunction read_counts(n: number, next: NextFunc): Array {\n\tlet v = Array(n);\n\tfor (let i = 0; i < n; i++) v[i] = 1 + next();\n\treturn v;\n}\n\nfunction read_ascending(n: number, next: NextFunc): Array {\n\tlet v = Array(n);\n\tfor (let i = 0, x = -1; i < n; i++) v[i] = x += 1 + next();\n\treturn v;\n}\n\nfunction read_deltas(n: number, next: NextFunc): Array {\n\tlet v = Array(n);\n\tfor (let i = 0, x = 0; i < n; i++) v[i] = x += signed(next());\n\treturn v;\n}\n\nexport function read_member_array(next: NextFunc, lookup?: Record) {\n let v = read_ascending(next(), next);\n let n = next();\n let vX = read_ascending(n, next);\n let vN = read_counts(n, next);\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < vN[i]; j++) {\n v.push(vX[i] + j);\n }\n }\n return lookup ? v.map(x => lookup[x]) : v;\n}\n\n// returns array of \n// [x, ys] => single replacement rule\n// [x, ys, n, dx, dx] => linear map\nexport function read_mapped_map(next: NextFunc): Record> {\n\tlet ret = [];\n\twhile (true) {\n\t\tlet w = next();\n\t\tif (w == 0) break;\n\t\tret.push(read_linear_table(w, next));\n\t}\n\twhile (true) {\n\t\tlet w = next() - 1;\n\t\tif (w < 0) break;\n\t\tret.push(read_replacement_table(w, next));\n\t}\n\treturn fromEntries>(flat(ret));\n}\n\nexport function read_zero_terminated_array(next: NextFunc): Array {\n\tlet v = [];\n\twhile (true) {\n\t\tlet i = next();\n\t\tif (i == 0) break;\n\t\tv.push(i);\n\t}\n\treturn v;\n}\n\nfunction read_transposed(n: number, w: number, next: NextFunc): Array> {\n let m = Array(n).fill(undefined).map(() => []);\n for (let i = 0; i < w; i++) {\n read_deltas(n, next).forEach((x, j) => m[j].push(x));\n }\n return m;\n}\n\n\nfunction read_linear_table(w: number, next: NextFunc): Array>> {\n\tlet dx = 1 + next();\n\tlet dy = next();\n\tlet vN = read_zero_terminated_array(next);\n\tlet m = read_transposed(vN.length, 1+w, next);\n\treturn flat(m.map((v, i) => {\n\t const x = v[0], ys = v.slice(1);\n\t\t//let [x, ...ys] = v;\n\t\t//return Array(vN[i]).fill().map((_, j) => {\n\t\treturn Array(vN[i]).fill(undefined).map((_, j) => {\n\t\t\tlet j_dy = j * dy;\n\t\t\treturn [x + j * dx, ys.map(y => y + j_dy)];\n\t\t});\n\t}));\n}\n\nfunction read_replacement_table(w: number, next: NextFunc): Array<[ number, Array ]> {\n\tlet n = 1 + next();\n\tlet m = read_transposed(n, 1+w, next);\n\treturn m.map(v => [v[0], v.slice(1)]);\n}\n\nexport type Branch = {\n set: Set;\n node: Node;\n};\n\nexport type Node = {\n branches: Array;\n valid: number;\n fe0f: boolean;\n save: boolean;\n check: boolean;\n};\n\nexport function read_emoji_trie(next: NextFunc): Node {\n\tlet sorted = read_member_array(next).sort((a, b) => a - b);\n\treturn read();\n\tfunction read(): Node {\n\t\tlet branches = [];\n\t\twhile (true) {\n\t\t\tlet keys = read_member_array(next, sorted);\n\t\t\tif (keys.length == 0) break;\n\t\t\tbranches.push({set: new Set(keys), node: read()});\n\t\t}\n branches.sort((a, b) => b.set.size - a.set.size); // sort by likelihood\n \t\tlet temp = next();\n \t\tlet valid = temp % 3;\n \t\ttemp = (temp / 3)|0;\n \t\tlet fe0f = !!(temp & 1);\n \t\ttemp >>= 1;\n \t\tlet save = temp == 1;\n \t\tlet check = temp == 2;\n \t\treturn {branches, valid, fe0f, save, check};\n\t}\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2021 Andrew Raffensperger\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * This is a near carbon-copy of the original source (link below) with the\n * TypeScript typings added and a few tweaks to make it ES3-compatible.\n *\n * See: https://github.com/adraffy/ens-normalize.js\n */\n\nimport { toUtf8CodePoints } from \"@ethersproject/strings\";\n\nimport { getData } from './include.js';\nconst r = getData();\n\nimport {read_member_array, read_mapped_map, read_emoji_trie} from './decoder.js';\n\n// @TODO: This should be lazily loaded\n\nconst VALID = new Set(read_member_array(r));\nconst IGNORED = new Set(read_member_array(r));\nconst MAPPED = read_mapped_map(r);\nconst EMOJI_ROOT = read_emoji_trie(r);\n//const NFC_CHECK = new Set(read_member_array(r, Array.from(VALID.values()).sort((a, b) => a - b)));\n\n//const STOP = 0x2E;\nconst HYPHEN = 0x2D;\nconst UNDERSCORE = 0x5F;\n\nfunction explode_cp(name: string): Array {\n return toUtf8CodePoints(name);\n}\n\nfunction filter_fe0f(cps: Array): Array {\n return cps.filter(cp => cp != 0xFE0F);\n}\n\nexport function ens_normalize_post_check(name: string): string {\n\tfor (let label of name.split('.')) {\n\t\tlet cps = explode_cp(label);\n\t\ttry {\n\t\t\tfor (let i = cps.lastIndexOf(UNDERSCORE) - 1; i >= 0; i--) {\n\t\t\t\tif (cps[i] !== UNDERSCORE) {\n\t\t\t\t\tthrow new Error(`underscore only allowed at start`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (cps.length >= 4 && cps.every(cp => cp < 0x80) && cps[2] === HYPHEN && cps[3] === HYPHEN) {\n\t\t\t\tthrow new Error(`invalid label extension`);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tthrow new Error(`Invalid label \"${label}\": ${err.message}`);\n\t\t}\n\t}\n\treturn name;\n}\n\nexport function ens_normalize(name: string): string {\n\treturn ens_normalize_post_check(normalize(name, filter_fe0f));\n}\n\nfunction normalize(name: string, emoji_filter: (a: Array) => Array): string {\n\tlet input = explode_cp(name).reverse(); // flip for pop\n\tlet output = [];\n\twhile (input.length) {\t\t\n\t\tlet emoji = consume_emoji_reversed(input);\n\t\tif (emoji) {\n\t\t\toutput.push(...emoji_filter(emoji));\n\t\t\tcontinue;\n\t\t}\n\t\tlet cp = input.pop();\n\t\tif (VALID.has(cp)) {\n\t\t\toutput.push(cp);\n\t\t\tcontinue;\n\t\t} \n\t\tif (IGNORED.has(cp)) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet cps = MAPPED[cp];\n\t\tif (cps) {\n\t\t\toutput.push(...cps);\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new Error(`Disallowed codepoint: 0x${cp.toString(16).toUpperCase()}`);\n\t}\n\treturn ens_normalize_post_check(nfc(String.fromCodePoint(...output)));\n}\n\nfunction nfc(s: string): string {\n return s.normalize('NFC');\n}\n\nfunction consume_emoji_reversed(cps: Array, eaten?: Array) {\n\tlet node = EMOJI_ROOT;\n\tlet emoji;\n\tlet saved;\n\tlet stack = [];\n\tlet pos = cps.length;\n\tif (eaten) eaten.length = 0; // clear input buffer (if needed)\n\twhile (pos) {\n\t\tlet cp = cps[--pos];\n\t\tnode = node.branches.find(x => x.set.has(cp))?.node;\n\t\tif (!node) break;\n\t\tif (node.save) { // remember\n\t\t\tsaved = cp;\n\t\t} else if (node.check) { // check exclusion\n\t\t\tif (cp === saved) break;\n\t\t}\n\t\tstack.push(cp);\n\t\tif (node.fe0f) {\n\t\t\tstack.push(0xFE0F);\n\t\t\tif (pos > 0 && cps[pos - 1] == 0xFE0F) pos--; // consume optional FE0F\n\t\t}\n\t\tif (node.valid) { // this is a valid emoji (so far)\n\t\t\temoji = stack.slice(); // copy stack\n\t\t\tif (node.valid == 2) emoji.splice(1, 1); // delete FE0F at position 1 (RGI ZWJ don't follow spec!)\n\t\t\tif (eaten) eaten.push(...cps.slice(pos).reverse()); // copy input (if needed)\n\t\t\tcps.length = pos; // truncate\n\t\t}\n\t}\n\treturn emoji;\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2021 Andrew Raffensperger\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * This is a near carbon-copy of the original source (link below) with the\n * TypeScript typings added and a few tweaks to make it ES3-compatible.\n *\n * See: https://github.com/adraffy/ens-normalize.js\n */\n\nimport { decode } from \"@ethersproject/base64\";\n\nimport {read_compressed_payload} from './decoder.js';\n\nexport function getData(): () => number {\n return read_compressed_payload(decode('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'));\n}\n\n","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { ens_normalize } from \"./ens-normalize/lib\";\n\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\n\nfunction checkComponent(comp: Uint8Array): Uint8Array {\n if (comp.length === 0) { throw new Error(\"invalid ENS name; empty component\"); }\n return comp;\n}\n\nfunction ensNameSplit(name: string): Array {\n const bytes = toUtf8Bytes(ens_normalize(name));\n const comps: Array = [ ];\n\n if (name.length === 0) { return comps; }\n\n let last = 0;\n for (let i = 0; i < bytes.length; i++) {\n const d = bytes[i];\n\n // A separator (i.e. \".\"); copy this component\n if (d === 0x2e) {\n comps.push(checkComponent(bytes.slice(last, i)));\n last = i + 1;\n }\n }\n\n // There was a stray separator at the end of the name\n if (last >= bytes.length) { throw new Error(\"invalid ENS name; empty component\"); }\n\n comps.push(checkComponent(bytes.slice(last)));\n return comps;\n}\n\nexport function ensNormalize(name: string): string {\n return ensNameSplit(name).map((comp) => toUtf8String(comp)).join(\".\");\n}\n\nexport function isValidName(name: string): boolean {\n try {\n return (ensNameSplit(name).length !== 0);\n } catch (error) { }\n return false;\n}\n\nexport function namehash(name: string): string {\n /* istanbul ignore if */\n if (typeof(name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n\n let result: string | Uint8Array = Zeros;\n\n const comps = ensNameSplit(name);\n while (comps.length) {\n result = keccak256(concat([result, keccak256(comps.pop())]));\n }\n\n return hexlify(result);\n}\n\nexport function dnsEncode(name: string): string {\n return hexlify(concat(ensNameSplit(name).map((comp) => {\n // DNS does not allow components over 63 bytes in length\n if (comp.length > 63) {\n throw new Error(\"invalid DNS encoded entry; length exceeds 63 bytes\");\n }\n\n const bytes = new Uint8Array(comp.length + 1);\n bytes.set(comp, 1);\n bytes[0] = bytes.length - 1;\n return bytes;\n\n }))) + \"00\";\n}\n","export const version = \"web/5.7.1\";\n","\"use strict\";\n\nimport { arrayify } from \"@ethersproject/bytes\";\n\nimport type { GetUrlResponse, Options } from \"./types\";\n\nexport { GetUrlResponse, Options };\n\nexport async function getUrl(href: string, options?: Options): Promise {\n if (options == null) { options = { }; }\n\n const request: RequestInit = {\n method: (options.method || \"GET\"),\n headers: (options.headers || { }),\n body: (options.body || undefined),\n };\n\n if (options.skipFetchSetup !== true) {\n request.mode = \"cors\"; // no-cors, cors, *same-origin\n request.cache = \"no-cache\"; // *default, no-cache, reload, force-cache, only-if-cached\n request.credentials = \"same-origin\"; // include, *same-origin, omit\n request.redirect = \"follow\"; // manual, *follow, error\n request.referrer = \"client\"; // no-referrer, *client\n };\n\n if (options.fetchOptions != null) {\n const opts = options.fetchOptions;\n if (opts.mode) { request.mode = (opts.mode); }\n if (opts.cache) { request.cache = (opts.cache); }\n if (opts.credentials) { request.credentials = (opts.credentials); }\n if (opts.redirect) { request.redirect = (opts.redirect); }\n if (opts.referrer) { request.referrer = opts.referrer; }\n }\n\n const response = await fetch(href, request);\n const body = await response.arrayBuffer();\n\n const headers: { [ name: string ]: string } = { };\n if (response.headers.forEach) {\n response.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n } else {\n (<() => Array>(((response.headers)).keys))().forEach((key) => {\n headers[key.toLowerCase()] = response.headers.get(key);\n });\n }\n\n return {\n headers: headers,\n statusCode: response.status,\n statusMessage: response.statusText,\n body: arrayify(new Uint8Array(body)),\n }\n}\n","\"use strict\";\n\nimport { decode as base64Decode, encode as base64Encode } from \"@ethersproject/base64\";\nimport { hexlify, isBytesLike } from \"@ethersproject/bytes\";\nimport { shallowCopy } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { getUrl, GetUrlResponse, Options } from \"./geturl\";\n\nfunction staller(duration: number): Promise {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n}\n\nfunction bodyify(value: any, type: string): string {\n if (value == null) { return null; }\n\n if (typeof(value) === \"string\") { return value; }\n\n if (isBytesLike(value)) {\n if (type && (type.split(\"/\")[0] === \"text\" || type.split(\";\")[0].trim() === \"application/json\")) {\n try {\n return toUtf8String(value);\n } catch (error) { };\n }\n return hexlify(value);\n }\n\n return value;\n}\n\n// Exported Types\nexport type ConnectionInfo = {\n url: string,\n headers?: { [key: string]: string | number }\n\n user?: string,\n password?: string,\n\n allowInsecureAuthentication?: boolean,\n allowGzip?: boolean,\n\n throttleLimit?: number,\n throttleSlotInterval?: number;\n throttleCallback?: (attempt: number, url: string) => Promise,\n\n skipFetchSetup?: boolean;\n fetchOptions?: Record;\n errorPassThrough?: boolean;\n\n timeout?: number,\n};\n\nexport interface OnceBlockable {\n once(eventName: \"block\", handler: () => void): void;\n}\n\nexport interface OncePollable {\n once(eventName: \"poll\", handler: () => void): void;\n}\n\nexport type PollOptions = {\n timeout?: number,\n floor?: number,\n ceiling?: number,\n interval?: number,\n retryLimit?: number,\n onceBlock?: OnceBlockable\n oncePoll?: OncePollable\n};\n\nexport type FetchJsonResponse = {\n statusCode: number;\n headers: { [ header: string ]: string };\n};\n\n\ntype Header = { key: string, value: string };\n\nfunction unpercent(value: string): Uint8Array {\n return toUtf8Bytes(value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n }));\n}\n\n// This API is still a work in progress; the future changes will likely be:\n// - ConnectionInfo => FetchDataRequest\n// - FetchDataRequest.body? = string | Uint8Array | { contentType: string, data: string | Uint8Array }\n// - If string => text/plain, Uint8Array => application/octet-stream (if content-type unspecified)\n// - FetchDataRequest.processFunc = (body: Uint8Array, response: FetchDataResponse) => T\n// For this reason, it should be considered internal until the API is finalized\nexport function _fetchData(connection: string | ConnectionInfo, body?: Uint8Array, processFunc?: (value: Uint8Array, response: FetchJsonResponse) => T): Promise {\n\n // How many times to retry in the event of a throttle\n const attemptLimit = (typeof(connection) === \"object\" && connection.throttleLimit != null) ? connection.throttleLimit: 12;\n logger.assertArgument((attemptLimit > 0 && (attemptLimit % 1) === 0),\n \"invalid connection throttle limit\", \"connection.throttleLimit\", attemptLimit);\n\n const throttleCallback = ((typeof(connection) === \"object\") ? connection.throttleCallback: null);\n const throttleSlotInterval = ((typeof(connection) === \"object\" && typeof(connection.throttleSlotInterval) === \"number\") ? connection.throttleSlotInterval: 100);\n logger.assertArgument((throttleSlotInterval > 0 && (throttleSlotInterval % 1) === 0),\n \"invalid connection throttle slot interval\", \"connection.throttleSlotInterval\", throttleSlotInterval);\n\n const errorPassThrough = ((typeof(connection) === \"object\") ? !!(connection.errorPassThrough): false);\n\n const headers: { [key: string]: Header } = { };\n\n let url: string = null;\n\n // @TODO: Allow ConnectionInfo to override some of these values\n const options: Options = {\n method: \"GET\",\n };\n\n let allow304 = false;\n\n let timeout = 2 * 60 * 1000;\n\n if (typeof(connection) === \"string\") {\n url = connection;\n\n } else if (typeof(connection) === \"object\") {\n if (connection == null || connection.url == null) {\n logger.throwArgumentError(\"missing URL\", \"connection.url\", connection);\n }\n\n url = connection.url;\n\n if (typeof(connection.timeout) === \"number\" && connection.timeout > 0) {\n timeout = connection.timeout;\n }\n\n if (connection.headers) {\n for (const key in connection.headers) {\n headers[key.toLowerCase()] = { key: key, value: String(connection.headers[key]) };\n if ([\"if-none-match\", \"if-modified-since\"].indexOf(key.toLowerCase()) >= 0) {\n allow304 = true;\n }\n }\n }\n\n options.allowGzip = !!connection.allowGzip;\n\n if (connection.user != null && connection.password != null) {\n if (url.substring(0, 6) !== \"https:\" && connection.allowInsecureAuthentication !== true) {\n logger.throwError(\n \"basic authentication requires a secure https url\",\n Logger.errors.INVALID_ARGUMENT,\n { argument: \"url\", url: url, user: connection.user, password: \"[REDACTED]\" }\n );\n }\n\n const authorization = connection.user + \":\" + connection.password;\n headers[\"authorization\"] = {\n key: \"Authorization\",\n value: \"Basic \" + base64Encode(toUtf8Bytes(authorization))\n };\n }\n\n if (connection.skipFetchSetup != null) {\n options.skipFetchSetup = !!connection.skipFetchSetup;\n }\n\n if (connection.fetchOptions != null) {\n options.fetchOptions = shallowCopy(connection.fetchOptions);\n }\n }\n\n const reData = new RegExp(\"^data:([^;:]*)?(;base64)?,(.*)$\", \"i\");\n const dataMatch = ((url) ? url.match(reData): null);\n if (dataMatch) {\n try {\n const response = {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: { \"content-type\": (dataMatch[1] || \"text/plain\")},\n body: (dataMatch[2] ? base64Decode(dataMatch[3]): unpercent(dataMatch[3]))\n };\n\n let result: T = response.body;\n if (processFunc) {\n result = processFunc(response.body, response);\n }\n return Promise.resolve(result);\n\n } catch (error) {\n logger.throwError(\"processing response error\", Logger.errors.SERVER_ERROR, {\n body: bodyify(dataMatch[1], dataMatch[2]),\n error: error,\n requestBody: null,\n requestMethod: \"GET\",\n url: url\n });\n }\n }\n\n if (body) {\n options.method = \"POST\";\n options.body = body;\n if (headers[\"content-type\"] == null) {\n headers[\"content-type\"] = { key: \"Content-Type\", value: \"application/octet-stream\" };\n }\n if (headers[\"content-length\"] == null) {\n headers[\"content-length\"] = { key: \"Content-Length\", value: String(body.length) };\n }\n }\n\n const flatHeaders: { [ key: string ]: string } = { };\n Object.keys(headers).forEach((key) => {\n const header = headers[key];\n flatHeaders[header.key] = header.value;\n });\n options.headers = flatHeaders;\n\n const runningTimeout = (function() {\n let timer: NodeJS.Timer = null;\n const promise: Promise = new Promise(function(resolve, reject) {\n if (timeout) {\n timer = setTimeout(() => {\n if (timer == null) { return; }\n timer = null;\n\n reject(logger.makeError(\"timeout\", Logger.errors.TIMEOUT, {\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n timeout: timeout,\n url: url\n }));\n }, timeout);\n }\n });\n\n const cancel = function() {\n if (timer == null) { return; }\n clearTimeout(timer);\n timer = null;\n }\n\n return { promise, cancel };\n })();\n\n const runningFetch = (async function() {\n\n for (let attempt = 0; attempt < attemptLimit; attempt++) {\n let response: GetUrlResponse = null;\n\n try {\n response = await getUrl(url, options);\n\n if (attempt < attemptLimit) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Redirection; for now we only support absolute locataions\n const location = response.headers.location || \"\";\n if (options.method === \"GET\" && location.match(/^https:/)) {\n url = response.headers.location;\n continue;\n }\n\n } else if (response.statusCode === 429) {\n // Exponential back-off throttling\n let tryAgain = true;\n if (throttleCallback) {\n tryAgain = await throttleCallback(attempt, url);\n }\n\n if (tryAgain) {\n let stall = 0;\n\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof(retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n stall = parseInt(retryAfter) * 1000;\n } else {\n stall = throttleSlotInterval * parseInt(String(Math.random() * Math.pow(2, attempt)));\n }\n\n //console.log(\"Stalling 429\");\n await staller(stall);\n continue;\n }\n }\n }\n\n } catch (error) {\n response = (error).response;\n if (response == null) {\n runningTimeout.cancel();\n logger.throwError(\"missing response\", Logger.errors.SERVER_ERROR, {\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n serverError: error,\n url: url\n });\n }\n }\n\n\n let body = response.body;\n\n if (allow304 && response.statusCode === 304) {\n body = null;\n } else if (!errorPassThrough && (response.statusCode < 200 || response.statusCode >= 300)) {\n runningTimeout.cancel();\n logger.throwError(\"bad response\", Logger.errors.SERVER_ERROR, {\n status: response.statusCode,\n headers: response.headers,\n body: bodyify(body, ((response.headers) ? response.headers[\"content-type\"]: null)),\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n url: url\n });\n }\n\n if (processFunc) {\n try {\n const result = await processFunc(body, response);\n runningTimeout.cancel();\n return result;\n\n } catch (error) {\n // Allow the processFunc to trigger a throttle\n if (error.throttleRetry && attempt < attemptLimit) {\n let tryAgain = true;\n if (throttleCallback) {\n tryAgain = await throttleCallback(attempt, url);\n }\n\n if (tryAgain) {\n const timeout = throttleSlotInterval * parseInt(String(Math.random() * Math.pow(2, attempt)));\n //console.log(\"Stalling callback\");\n await staller(timeout);\n continue;\n }\n }\n\n runningTimeout.cancel();\n logger.throwError(\"processing response error\", Logger.errors.SERVER_ERROR, {\n body: bodyify(body, ((response.headers) ? response.headers[\"content-type\"]: null)),\n error: error,\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n url: url\n });\n }\n }\n\n runningTimeout.cancel();\n\n // If we had a processFunc, it either returned a T or threw above.\n // The \"body\" is now a Uint8Array.\n return (body);\n }\n\n return logger.throwError(\"failed response\", Logger.errors.SERVER_ERROR, {\n requestBody: bodyify(options.body, flatHeaders[\"content-type\"]),\n requestMethod: options.method,\n url: url\n });\n })();\n\n return Promise.race([ runningTimeout.promise, runningFetch ]);\n}\n\nexport function fetchJson(connection: string | ConnectionInfo, json?: string, processFunc?: (value: any, response: FetchJsonResponse) => any): Promise {\n let processJsonFunc = (value: Uint8Array, response: FetchJsonResponse) => {\n let result: any = null;\n if (value != null) {\n try {\n result = JSON.parse(toUtf8String(value));\n } catch (error) {\n logger.throwError(\"invalid JSON\", Logger.errors.SERVER_ERROR, {\n body: value,\n error: error\n });\n }\n }\n\n if (processFunc) {\n result = processFunc(result, response);\n }\n\n return result;\n }\n\n // If we have json to send, we must\n // - add content-type of application/json (unless already overridden)\n // - convert the json to bytes\n let body: Uint8Array = null;\n if (json != null) {\n body = toUtf8Bytes(json);\n\n // Create a connection with the content-type set for JSON\n const updated: ConnectionInfo = (typeof(connection) === \"string\") ? ({ url: connection }): shallowCopy(connection);\n if (updated.headers) {\n const hasContentType = (Object.keys(updated.headers).filter((k) => (k.toLowerCase() === \"content-type\")).length) !== 0;\n if (!hasContentType) {\n updated.headers = shallowCopy(updated.headers);\n updated.headers[\"content-type\"] = \"application/json\";\n }\n } else {\n updated.headers = { \"content-type\": \"application/json\" };\n }\n connection = updated;\n }\n\n return _fetchData(connection, body, processJsonFunc);\n}\n\nexport function poll(func: () => Promise, options?: PollOptions): Promise {\n if (!options) { options = {}; }\n options = shallowCopy(options);\n if (options.floor == null) { options.floor = 0; }\n if (options.ceiling == null) { options.ceiling = 10000; }\n if (options.interval == null) { options.interval = 250; }\n\n return new Promise(function(resolve, reject) {\n\n let timer: NodeJS.Timer = null;\n let done: boolean = false;\n\n // Returns true if cancel was successful. Unsuccessful cancel means we're already done.\n const cancel = (): boolean => {\n if (done) { return false; }\n done = true;\n if (timer) { clearTimeout(timer); }\n return true;\n };\n\n if (options.timeout) {\n timer = setTimeout(() => {\n if (cancel()) { reject(new Error(\"timeout\")); }\n }, options.timeout)\n }\n\n const retryLimit = options.retryLimit;\n\n let attempt = 0;\n function check() {\n return func().then(function(result) {\n\n // If we have a result, or are allowed null then we're done\n if (result !== undefined) {\n if (cancel()) { resolve(result); }\n\n } else if (options.oncePoll) {\n options.oncePoll.once(\"poll\", check);\n\n } else if (options.onceBlock) {\n options.onceBlock.once(\"block\", check);\n\n // Otherwise, exponential back-off (up to 10s) our next request\n } else if (!done) {\n attempt++;\n if (attempt > retryLimit) {\n if (cancel()) { reject(new Error(\"retry limit reached\")); }\n return;\n }\n\n let timeout = options.interval * parseInt(String(Math.random() * Math.pow(2, attempt)));\n if (timeout < options.floor) { timeout = options.floor; }\n if (timeout > options.ceiling) { timeout = options.ceiling; }\n\n setTimeout(check, timeout);\n }\n\n return null;\n }, function(error) {\n if (cancel()) { reject(error); }\n });\n }\n check();\n });\n}\n\n","export const version = \"providers/5.7.1\";\n","\"use strict\";\n\nimport { Block, TransactionReceipt, TransactionResponse } from \"@ethersproject/abstract-provider\";\nimport { getAddress, getContractAddress } from \"@ethersproject/address\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { hexDataLength, hexDataSlice, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { AddressZero } from \"@ethersproject/constants\";\nimport { shallowCopy } from \"@ethersproject/properties\";\nimport { AccessList, accessListify, parse as parseTransaction } from \"@ethersproject/transactions\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport type FormatFunc = (value: any) => any;\n\nexport type FormatFuncs = { [ key: string ]: FormatFunc };\n\nexport type Formats = {\n transaction: FormatFuncs,\n transactionRequest: FormatFuncs,\n receipt: FormatFuncs,\n receiptLog: FormatFuncs,\n block: FormatFuncs,\n blockWithTransactions: FormatFuncs,\n filter: FormatFuncs,\n filterLog: FormatFuncs,\n};\n\nexport class Formatter {\n readonly formats: Formats;\n\n constructor() {\n this.formats = this.getDefaultFormats();\n }\n\n getDefaultFormats(): Formats {\n const formats: Formats = ({ });\n\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const hex = this.hex.bind(this);\n const number = this.number.bind(this);\n const type = this.type.bind(this);\n\n const strictData = (v: any) => { return this.data(v, true); };\n\n formats.transaction = {\n hash: hash,\n\n type: type,\n accessList: Formatter.allowNull(this.accessList.bind(this), null),\n\n blockHash: Formatter.allowNull(hash, null),\n blockNumber: Formatter.allowNull(number, null),\n transactionIndex: Formatter.allowNull(number, null),\n\n confirmations: Formatter.allowNull(number, null),\n\n from: address,\n\n // either (gasPrice) or (maxPriorityFeePerGas + maxFeePerGas)\n // must be set\n gasPrice: Formatter.allowNull(bigNumber),\n maxPriorityFeePerGas: Formatter.allowNull(bigNumber),\n maxFeePerGas: Formatter.allowNull(bigNumber),\n\n gasLimit: bigNumber,\n to: Formatter.allowNull(address, null),\n value: bigNumber,\n nonce: number,\n data: data,\n\n r: Formatter.allowNull(this.uint256),\n s: Formatter.allowNull(this.uint256),\n v: Formatter.allowNull(number),\n\n creates: Formatter.allowNull(address, null),\n\n raw: Formatter.allowNull(data),\n };\n\n formats.transactionRequest = {\n from: Formatter.allowNull(address),\n nonce: Formatter.allowNull(number),\n gasLimit: Formatter.allowNull(bigNumber),\n gasPrice: Formatter.allowNull(bigNumber),\n maxPriorityFeePerGas: Formatter.allowNull(bigNumber),\n maxFeePerGas: Formatter.allowNull(bigNumber),\n to: Formatter.allowNull(address),\n value: Formatter.allowNull(bigNumber),\n data: Formatter.allowNull(strictData),\n type: Formatter.allowNull(number),\n accessList: Formatter.allowNull(this.accessList.bind(this), null),\n };\n\n formats.receiptLog = {\n transactionIndex: number,\n blockNumber: number,\n transactionHash: hash,\n address: address,\n topics: Formatter.arrayOf(hash),\n data: data,\n logIndex: number,\n blockHash: hash,\n };\n\n formats.receipt = {\n to: Formatter.allowNull(this.address, null),\n from: Formatter.allowNull(this.address, null),\n contractAddress: Formatter.allowNull(address, null),\n transactionIndex: number,\n // should be allowNull(hash), but broken-EIP-658 support is handled in receipt\n root: Formatter.allowNull(hex),\n gasUsed: bigNumber,\n logsBloom: Formatter.allowNull(data),// @TODO: should this be data?\n blockHash: hash,\n transactionHash: hash,\n logs: Formatter.arrayOf(this.receiptLog.bind(this)),\n blockNumber: number,\n confirmations: Formatter.allowNull(number, null),\n cumulativeGasUsed: bigNumber,\n effectiveGasPrice: Formatter.allowNull(bigNumber),\n status: Formatter.allowNull(number),\n type: type\n };\n\n formats.block = {\n hash: Formatter.allowNull(hash),\n parentHash: hash,\n number: number,\n\n timestamp: number,\n nonce: Formatter.allowNull(hex),\n difficulty: this.difficulty.bind(this),\n\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n\n miner: Formatter.allowNull(address),\n extraData: data,\n\n transactions: Formatter.allowNull(Formatter.arrayOf(hash)),\n\n baseFeePerGas: Formatter.allowNull(bigNumber)\n };\n\n formats.blockWithTransactions = shallowCopy(formats.block);\n formats.blockWithTransactions.transactions = Formatter.allowNull(Formatter.arrayOf(this.transactionResponse.bind(this)));\n\n formats.filter = {\n fromBlock: Formatter.allowNull(blockTag, undefined),\n toBlock: Formatter.allowNull(blockTag, undefined),\n blockHash: Formatter.allowNull(hash, undefined),\n address: Formatter.allowNull(address, undefined),\n topics: Formatter.allowNull(this.topics.bind(this), undefined),\n };\n\n formats.filterLog = {\n blockNumber: Formatter.allowNull(number),\n blockHash: Formatter.allowNull(hash),\n transactionIndex: number,\n\n removed: Formatter.allowNull(this.boolean.bind(this)),\n\n address: address,\n data: Formatter.allowFalsish(data, \"0x\"),\n\n topics: Formatter.arrayOf(hash),\n\n transactionHash: hash,\n logIndex: number,\n };\n\n return formats;\n }\n\n accessList(accessList: Array): AccessList {\n return accessListify(accessList || []);\n }\n\n // Requires a BigNumberish that is within the IEEE754 safe integer range; returns a number\n // Strict! Used on input.\n number(number: any): number {\n if (number === \"0x\") { return 0; }\n return BigNumber.from(number).toNumber();\n }\n\n type(number: any): number {\n if (number === \"0x\" || number == null) { return 0; }\n return BigNumber.from(number).toNumber();\n }\n\n // Strict! Used on input.\n bigNumber(value: any): BigNumber {\n return BigNumber.from(value);\n }\n\n // Requires a boolean, \"true\" or \"false\"; returns a boolean\n boolean(value: any): boolean {\n if (typeof(value) === \"boolean\") { return value; }\n if (typeof(value) === \"string\") {\n value = value.toLowerCase();\n if (value === \"true\") { return true; }\n if (value === \"false\") { return false; }\n }\n throw new Error(\"invalid boolean - \" + value);\n }\n\n hex(value: any, strict?: boolean): string {\n if (typeof(value) === \"string\") {\n if (!strict && value.substring(0, 2) !== \"0x\") { value = \"0x\" + value; }\n if (isHexString(value)) {\n return value.toLowerCase();\n }\n }\n return logger.throwArgumentError(\"invalid hash\", \"value\", value);\n }\n\n data(value: any, strict?: boolean): string {\n const result = this.hex(value, strict);\n if ((result.length % 2) !== 0) {\n throw new Error(\"invalid data; odd-length - \" + value);\n }\n return result;\n }\n\n // Requires an address\n // Strict! Used on input.\n address(value: any): string {\n return getAddress(value);\n }\n\n callAddress(value: any): string {\n if (!isHexString(value, 32)) { return null; }\n const address = getAddress(hexDataSlice(value, 12));\n return (address === AddressZero) ? null: address;\n }\n\n contractAddress(value: any): string {\n return getContractAddress(value);\n }\n\n // Strict! Used on input.\n blockTag(blockTag: any): string {\n if (blockTag == null) { return \"latest\"; }\n\n if (blockTag === \"earliest\") { return \"0x0\"; }\n\n switch (blockTag) {\n case \"earliest\": return \"0x0\";\n case \"latest\": case \"pending\": case \"safe\": case \"finalized\":\n return blockTag;\n }\n\n if (typeof(blockTag) === \"number\" || isHexString(blockTag)) {\n return hexValue(blockTag);\n }\n\n throw new Error(\"invalid blockTag\");\n }\n\n // Requires a hash, optionally requires 0x prefix; returns prefixed lowercase hash.\n hash(value: any, strict?: boolean): string {\n const result = this.hex(value, strict);\n if (hexDataLength(result) !== 32) {\n return logger.throwArgumentError(\"invalid hash\", \"value\", value);\n }\n return result;\n }\n\n // Returns the difficulty as a number, or if too large (i.e. PoA network) null\n difficulty(value: any): number {\n if (value == null) { return null; }\n\n const v = BigNumber.from(value);\n\n try {\n return v.toNumber();\n } catch (error) { }\n\n return null;\n }\n\n uint256(value: any): string {\n if (!isHexString(value)) {\n throw new Error(\"invalid uint256\");\n }\n return hexZeroPad(value, 32);\n }\n\n _block(value: any, format: any): Block {\n if (value.author != null && value.miner == null) {\n value.miner = value.author;\n }\n // The difficulty may need to come from _difficulty in recursed blocks\n const difficulty = (value._difficulty != null) ? value._difficulty: value.difficulty;\n const result = Formatter.check(format, value);\n result._difficulty = ((difficulty == null) ? null: BigNumber.from(difficulty));\n return result;\n }\n\n block(value: any): Block {\n return this._block(value, this.formats.block);\n }\n\n blockWithTransactions(value: any): Block {\n return this._block(value, this.formats.blockWithTransactions);\n }\n\n // Strict! Used on input.\n transactionRequest(value: any): any {\n return Formatter.check(this.formats.transactionRequest, value);\n }\n\n transactionResponse(transaction: any): TransactionResponse {\n\n // Rename gas to gasLimit\n if (transaction.gas != null && transaction.gasLimit == null) {\n transaction.gasLimit = transaction.gas;\n }\n\n // Some clients (TestRPC) do strange things like return 0x0 for the\n // 0 address; correct this to be a real address\n if (transaction.to && BigNumber.from(transaction.to).isZero()) {\n transaction.to = \"0x0000000000000000000000000000000000000000\";\n }\n\n // Rename input to data\n if (transaction.input != null && transaction.data == null) {\n transaction.data = transaction.input;\n }\n\n // If to and creates are empty, populate the creates from the transaction\n if (transaction.to == null && transaction.creates == null) {\n transaction.creates = this.contractAddress(transaction);\n }\n\n if ((transaction.type === 1 || transaction.type === 2)&& transaction.accessList == null) {\n transaction.accessList = [ ];\n }\n\n const result: TransactionResponse = Formatter.check(this.formats.transaction, transaction);\n\n if (transaction.chainId != null) {\n let chainId = transaction.chainId;\n\n if (isHexString(chainId)) {\n chainId = BigNumber.from(chainId).toNumber();\n }\n\n result.chainId = chainId;\n\n } else {\n let chainId = transaction.networkId;\n\n // geth-etc returns chainId\n if (chainId == null && result.v == null) {\n chainId = transaction.chainId;\n }\n\n if (isHexString(chainId)) {\n chainId = BigNumber.from(chainId).toNumber();\n }\n\n if (typeof(chainId) !== \"number\" && result.v != null) {\n chainId = (result.v - 35) / 2;\n if (chainId < 0) { chainId = 0; }\n chainId = parseInt(chainId);\n }\n\n if (typeof(chainId) !== \"number\") { chainId = 0; }\n\n result.chainId = chainId;\n }\n\n // 0x0000... should actually be null\n if (result.blockHash && result.blockHash.replace(/0/g, \"\") === \"x\") {\n result.blockHash = null;\n }\n\n return result;\n }\n\n transaction(value: any): any {\n return parseTransaction(value);\n }\n\n receiptLog(value: any): any {\n return Formatter.check(this.formats.receiptLog, value);\n }\n\n receipt(value: any): TransactionReceipt {\n const result: TransactionReceipt = Formatter.check(this.formats.receipt, value);\n\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (result.root != null) {\n if (result.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = BigNumber.from(result.root).toNumber();\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (result.status != null && (result.status !== value)) {\n logger.throwArgumentError(\"alt-root-status/status mismatch\", \"value\", { root: result.root, status: result.status });\n }\n result.status = value;\n delete result.root;\n } else {\n logger.throwArgumentError(\"invalid alt-root-status\", \"value.root\", result.root);\n }\n } else if (result.root.length !== 66) {\n // Must be a valid bytes32\n logger.throwArgumentError(\"invalid root hash\", \"value.root\", result.root);\n }\n }\n\n if (result.status != null) {\n result.byzantium = true;\n }\n\n return result;\n }\n\n topics(value: any): any {\n if (Array.isArray(value)) {\n return value.map((v) => this.topics(v));\n\n } else if (value != null) {\n return this.hash(value, true);\n }\n\n return null;\n }\n\n filter(value: any): any {\n return Formatter.check(this.formats.filter, value);\n }\n\n filterLog(value: any): any {\n return Formatter.check(this.formats.filterLog, value);\n }\n\n static check(format: { [ name: string ]: FormatFunc }, object: any): any {\n const result: any = {};\n for (const key in format) {\n try {\n const value = format[key](object[key]);\n if (value !== undefined) { result[key] = value; }\n } catch (error) {\n error.checkKey = key;\n error.checkValue = object[key];\n throw error;\n }\n }\n return result;\n }\n\n // if value is null-ish, nullValue is returned\n static allowNull(format: FormatFunc, nullValue?: any): FormatFunc {\n return (function(value: any) {\n if (value == null) { return nullValue; }\n return format(value);\n });\n }\n\n // If value is false-ish, replaceValue is returned\n static allowFalsish(format: FormatFunc, replaceValue: any): FormatFunc {\n return (function(value: any) {\n if (!value) { return replaceValue; }\n return format(value);\n });\n }\n\n // Requires an Array satisfying check\n static arrayOf(format: FormatFunc): FormatFunc {\n return (function(array: any): Array {\n if (!Array.isArray(array)) { throw new Error(\"not an array\"); }\n\n const result: any = [];\n\n array.forEach(function(value) {\n result.push(format(value));\n });\n\n return result;\n });\n }\n}\n\nexport interface CommunityResourcable {\n isCommunityResource(): boolean;\n}\n\nexport function isCommunityResourcable(value: any): value is CommunityResourcable {\n return (value && typeof(value.isCommunityResource) === \"function\");\n}\n\nexport function isCommunityResource(value: any): boolean {\n return (isCommunityResourcable(value) && value.isCommunityResource());\n}\n\n// Show the throttle message only once\nlet throttleMessage = false;\nexport function showThrottleMessage() {\n if (throttleMessage) { return; }\n throttleMessage = true;\n\n console.log(\"========= NOTICE =========\")\n console.log(\"Request-Rate Exceeded (this message will not be repeated)\");\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n\n","\"use strict\";\n\nimport {\n Block, BlockTag, BlockWithTransactions, EventType, Filter, FilterByBlockHash, ForkEvent,\n Listener, Log, Provider, TransactionReceipt, TransactionRequest, TransactionResponse\n} from \"@ethersproject/abstract-provider\";\nimport { encode as base64Encode } from \"@ethersproject/base64\";\nimport { Base58 } from \"@ethersproject/basex\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { arrayify, BytesLike, concat, hexConcat, hexDataLength, hexDataSlice, hexlify, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { HashZero } from \"@ethersproject/constants\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { getNetwork, Network, Networkish } from \"@ethersproject/networks\";\nimport { Deferrable, defineReadOnly, getStatic, resolveProperties } from \"@ethersproject/properties\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { sha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchJson, poll } from \"@ethersproject/web\";\n\nimport bech32 from \"bech32\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { Formatter } from \"./formatter\";\n\nconst MAX_CCIP_REDIRECTS = 10;\n\n//////////////////////////////\n// Event Serializeing\n\nfunction checkTopic(topic: string): string {\n if (topic == null) { return \"null\"; }\n if (hexDataLength(topic) !== 32) {\n logger.throwArgumentError(\"invalid topic\", \"topic\", topic);\n }\n return topic.toLowerCase();\n}\n\nfunction serializeTopics(topics: Array>): string {\n // Remove trailing null AND-topics; they are redundant\n topics = topics.slice();\n while (topics.length > 0 && topics[topics.length - 1] == null) { topics.pop(); }\n\n return topics.map((topic) => {\n if (Array.isArray(topic)) {\n\n // Only track unique OR-topics\n const unique: { [ topic: string ]: boolean } = { }\n topic.forEach((topic) => {\n unique[checkTopic(topic)] = true;\n });\n\n // The order of OR-topics does not matter\n const sorted = Object.keys(unique);\n sorted.sort();\n\n return sorted.join(\"|\");\n\n } else {\n return checkTopic(topic);\n }\n }).join(\"&\");\n}\n\nfunction deserializeTopics(data: string): Array> {\n if (data === \"\") { return [ ]; }\n\n return data.split(/&/g).map((topic) => {\n if (topic === \"\") { return [ ]; }\n\n const comps = topic.split(\"|\").map((topic) => {\n return ((topic === \"null\") ? null: topic);\n });\n\n return ((comps.length === 1) ? comps[0]: comps);\n });\n}\n\nfunction getEventTag(eventName: EventType): string {\n if (typeof(eventName) === \"string\") {\n eventName = eventName.toLowerCase();\n\n if (hexDataLength(eventName) === 32) {\n return \"tx:\" + eventName;\n }\n\n if (eventName.indexOf(\":\") === -1) {\n return eventName;\n }\n\n } else if (Array.isArray(eventName)) {\n return \"filter:*:\" + serializeTopics(eventName);\n\n } else if (ForkEvent.isForkEvent(eventName)) {\n logger.warn(\"not implemented\");\n throw new Error(\"not implemented\");\n\n } else if (eventName && typeof(eventName) === \"object\") {\n return \"filter:\" + (eventName.address || \"*\") + \":\" + serializeTopics(eventName.topics || []);\n }\n\n throw new Error(\"invalid event - \" + eventName);\n}\n\n//////////////////////////////\n// Helper Object\n\nfunction getTime() {\n return (new Date()).getTime();\n}\n\nfunction stall(duration: number): Promise {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n}\n\n//////////////////////////////\n// Provider Object\n\n\n/**\n * EventType\n * - \"block\"\n * - \"poll\"\n * - \"didPoll\"\n * - \"pending\"\n * - \"error\"\n * - \"network\"\n * - filter\n * - topics array\n * - transaction hash\n */\n\nconst PollableEvents = [ \"block\", \"network\", \"pending\", \"poll\" ];\n\nexport class Event {\n readonly listener: Listener;\n readonly once: boolean;\n readonly tag: string;\n\n _lastBlockNumber: number\n _inflight: boolean;\n\n constructor(tag: string, listener: Listener, once: boolean) {\n defineReadOnly(this, \"tag\", tag);\n defineReadOnly(this, \"listener\", listener);\n defineReadOnly(this, \"once\", once);\n\n this._lastBlockNumber = -2;\n this._inflight = false;\n }\n\n get event(): EventType {\n switch (this.type) {\n case \"tx\":\n return this.hash;\n case \"filter\":\n return this.filter;\n }\n return this.tag;\n }\n\n get type(): string {\n return this.tag.split(\":\")[0]\n }\n\n get hash(): string {\n const comps = this.tag.split(\":\");\n if (comps[0] !== \"tx\") { return null; }\n return comps[1];\n }\n\n get filter(): Filter {\n const comps = this.tag.split(\":\");\n if (comps[0] !== \"filter\") { return null; }\n const address = comps[1];\n\n const topics = deserializeTopics(comps[2]);\n const filter: Filter = { };\n\n if (topics.length > 0) { filter.topics = topics; }\n if (address && address !== \"*\") { filter.address = address; }\n\n return filter;\n }\n\n pollable(): boolean {\n return (this.tag.indexOf(\":\") >= 0 || PollableEvents.indexOf(this.tag) >= 0);\n }\n}\n\nexport interface EnsResolver {\n\n // Name this Resolver is associated with\n readonly name: string;\n\n // The address of the resolver\n readonly address: string;\n\n // Multichain address resolution (also normal address resolution)\n // See: https://eips.ethereum.org/EIPS/eip-2304\n getAddress(coinType?: 60): Promise\n\n // Contenthash field\n // See: https://eips.ethereum.org/EIPS/eip-1577\n getContentHash(): Promise;\n\n // Storage of text records\n // See: https://eips.ethereum.org/EIPS/eip-634\n getText(key: string): Promise;\n};\n\nexport interface EnsProvider {\n resolveName(name: string): Promise;\n lookupAddress(address: string): Promise;\n getResolver(name: string): Promise;\n}\n\ntype CoinInfo = {\n symbol: string,\n ilk?: string, // General family\n prefix?: string, // Bech32 prefix\n p2pkh?: number, // Pay-to-Public-Key-Hash Version\n p2sh?: number, // Pay-to-Script-Hash Version\n};\n\n// https://github.com/satoshilabs/slips/blob/master/slip-0044.md\nconst coinInfos: { [ coinType: string ]: CoinInfo } = {\n \"0\": { symbol: \"btc\", p2pkh: 0x00, p2sh: 0x05, prefix: \"bc\" },\n \"2\": { symbol: \"ltc\", p2pkh: 0x30, p2sh: 0x32, prefix: \"ltc\" },\n \"3\": { symbol: \"doge\", p2pkh: 0x1e, p2sh: 0x16 },\n \"60\": { symbol: \"eth\", ilk: \"eth\" },\n \"61\": { symbol: \"etc\", ilk: \"eth\" },\n \"700\": { symbol: \"xdai\", ilk: \"eth\" },\n};\n\nfunction bytes32ify(value: number): string {\n return hexZeroPad(BigNumber.from(value).toHexString(), 32);\n}\n\n// Compute the Base58Check encoded data (checksum is first 4 bytes of sha256d)\nfunction base58Encode(data: Uint8Array): string {\n return Base58.encode(concat([ data, hexDataSlice(sha256(sha256(data)), 0, 4) ]));\n}\n\nexport interface Avatar {\n url: string;\n linkage: Array<{ type: string, content: string }>;\n}\n\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\n\nfunction _parseString(result: string, start: number): null | string {\n try {\n return toUtf8String(_parseBytes(result, start));\n } catch(error) { }\n return null;\n}\n\nfunction _parseBytes(result: string, start: number): null | string {\n if (result === \"0x\") { return null; }\n\n const offset = BigNumber.from(hexDataSlice(result, start, start + 32)).toNumber();\n const length = BigNumber.from(hexDataSlice(result, offset, offset + 32)).toNumber();\n\n return hexDataSlice(result, offset + 32, offset + 32 + length);\n}\n\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link: string): string {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n } else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n } else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n\n return `https:/\\/gateway.ipfs.io/ipfs/${ link }`;\n}\n\nfunction numPad(value: number): Uint8Array {\n const result = arrayify(value);\n if (result.length > 32) { throw new Error(\"internal; should not happen\"); }\n\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\n\nfunction bytesPad(value: Uint8Array): Uint8Array {\n if ((value.length % 32) === 0) { return value; }\n\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas: Array) {\n const result: Array = [ ];\n\n let byteCount = 0;\n\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(null);\n byteCount += 32;\n }\n\n for (let i = 0; i < datas.length; i++) {\n const data = arrayify(datas[i]);\n\n // Update the bytes offset\n result[i] = numPad(byteCount);\n\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n\n return hexConcat(result);\n}\n\nexport class Resolver implements EnsResolver {\n readonly provider: BaseProvider;\n\n readonly name: string;\n readonly address: string;\n\n readonly _resolvedAddress: null | string;\n\n // For EIP-2544 names, the ancestor that provided the resolver\n _supportsEip2544: null | Promise;\n\n // The resolvedAddress is only for creating a ReverseLookup resolver\n constructor(provider: BaseProvider, address: string, name: string, resolvedAddress?: string) {\n defineReadOnly(this, \"provider\", provider);\n defineReadOnly(this, \"name\", name);\n defineReadOnly(this, \"address\", provider.formatter.address(address));\n defineReadOnly(this, \"_resolvedAddress\", resolvedAddress);\n }\n\n supportsWildcard(): Promise {\n if (!this._supportsEip2544) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n this._supportsEip2544 = this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return BigNumber.from(result).eq(1);\n }).catch((error) => {\n if (error.code === Logger.errors.CALL_EXCEPTION) { return false; }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n this._supportsEip2544 = null;\n throw error;\n });\n }\n\n return this._supportsEip2544;\n }\n\n async _fetch(selector: string, parameters?: string): Promise {\n\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const tx = {\n to: this.address,\n ccipReadEnabled: true,\n data: hexConcat([ selector, namehash(this.name), (parameters || \"0x\") ])\n };\n\n // Wildcard support; use EIP-2544 to resolve the request\n let parseBytes = false;\n if (await this.supportsWildcard()) {\n parseBytes = true;\n\n // selector(\"resolve(bytes,bytes)\")\n tx.data = hexConcat([ \"0x9061b923\", encodeBytes([ dnsEncode(this.name), tx.data ]) ]);\n }\n\n try {\n let result = await this.provider.call(tx);\n if ((arrayify(result).length % 32) === 4) {\n logger.throwError(\"resolver threw error\", Logger.errors.CALL_EXCEPTION, {\n transaction: tx, data: result\n });\n }\n if (parseBytes) { result = _parseBytes(result, 0); }\n return result;\n } catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) { return null; }\n throw error;\n }\n }\n\n async _fetchBytes(selector: string, parameters?: string): Promise {\n const result = await this._fetch(selector, parameters);\n if (result != null) { return _parseBytes(result, 0); }\n return null;\n }\n\n _getAddress(coinType: number, hexBytes: string): string {\n const coinInfo = coinInfos[String(coinType)];\n\n if (coinInfo == null) {\n logger.throwError(`unsupported coin type: ${ coinType }`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `getAddress(${ coinType })`\n });\n }\n\n if (coinInfo.ilk === \"eth\") {\n return this.provider.formatter.address(hexBytes);\n }\n\n const bytes = arrayify(hexBytes);\n\n // P2PKH: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG\n if (coinInfo.p2pkh != null) {\n const p2pkh = hexBytes.match(/^0x76a9([0-9a-f][0-9a-f])([0-9a-f]*)88ac$/);\n if (p2pkh) {\n const length = parseInt(p2pkh[1], 16);\n if (p2pkh[2].length === length * 2 && length >= 1 && length <= 75) {\n return base58Encode(concat([ [ coinInfo.p2pkh ], (\"0x\" + p2pkh[2]) ]));\n }\n }\n }\n\n // P2SH: OP_HASH160 OP_EQUAL\n if (coinInfo.p2sh != null) {\n const p2sh = hexBytes.match(/^0xa9([0-9a-f][0-9a-f])([0-9a-f]*)87$/);\n if (p2sh) {\n const length = parseInt(p2sh[1], 16);\n if (p2sh[2].length === length * 2 && length >= 1 && length <= 75) {\n return base58Encode(concat([ [ coinInfo.p2sh ], (\"0x\" + p2sh[2]) ]));\n }\n }\n }\n\n // Bech32\n if (coinInfo.prefix != null) {\n const length = bytes[1];\n\n // https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#witness-program\n let version = bytes[0];\n if (version === 0x00) {\n if (length !== 20 && length !== 32) {\n version = -1;\n }\n } else {\n version = -1;\n }\n\n if (version >= 0 && bytes.length === 2 + length && length >= 1 && length <= 75) {\n const words = bech32.toWords(bytes.slice(2));\n words.unshift(version);\n return bech32.encode(coinInfo.prefix, words);\n }\n }\n\n return null;\n }\n\n\n async getAddress(coinType?: number): Promise {\n if (coinType == null) { coinType = 60; }\n\n // If Ethereum, use the standard `addr(bytes32)`\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = await this._fetch(\"0x3b3b57de\");\n\n // No address\n if (result === \"0x\" || result === HashZero) { return null; }\n\n return this.provider.formatter.callAddress(result);\n } catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) { return null; }\n throw error;\n }\n }\n\n // keccak256(\"addr(bytes32,uint256\")\n const hexBytes = await this._fetchBytes(\"0xf1cb7e06\", bytes32ify(coinType));\n\n // No address\n if (hexBytes == null || hexBytes === \"0x\") { return null; }\n\n // Compute the address\n const address = this._getAddress(coinType, hexBytes);\n\n if (address == null) {\n logger.throwError(`invalid or unsupported coin data`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `getAddress(${ coinType })`,\n coinType: coinType,\n data: hexBytes\n });\n }\n\n return address;\n }\n\n async getAvatar(): Promise {\n const linkage: Array<{ type: string, content: string }> = [ { type: \"name\", content: this.name } ];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = await this.getText(\"avatar\");\n if (avatar == null) { return null; }\n\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) { continue; }\n\n const scheme = match[1].toLowerCase();\n\n switch (scheme) {\n case \"https\":\n linkage.push({ type: \"url\", content: avatar });\n return { linkage, url: avatar };\n\n case \"data\":\n linkage.push({ type: \"data\", content: avatar });\n return { linkage, url: avatar };\n\n case \"ipfs\":\n linkage.push({ type: \"ipfs\", content: avatar });\n return { linkage, url: getIpfsLink(avatar) };\n\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\": \"0x0e89341c\";\n linkage.push({ type: scheme, content: avatar });\n\n // The owner of this name\n const owner = (this._resolvedAddress || await this.getAddress());\n\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) { return null; }\n\n const addr = await this.provider.formatter.address(comps[0]);\n const tokenId = hexZeroPad(BigNumber.from(comps[1]).toHexString(), 32);\n\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = this.provider.formatter.callAddress(await this.provider.call({\n to: addr, data: hexConcat([ \"0x6352211e\", tokenId ])\n }));\n if (owner !== tokenOwner) { return null; }\n linkage.push({ type: \"owner\", content: tokenOwner });\n\n } else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = BigNumber.from(await this.provider.call({\n to: addr, data: hexConcat([ \"0x00fdd58e\", hexZeroPad(owner, 32), tokenId ])\n }));\n if (balance.isZero()) { return null; }\n linkage.push({ type: \"balance\", content: balance.toString() });\n }\n\n // Call the token contract for the metadata URL\n const tx = {\n to: this.provider.formatter.address(comps[0]),\n data: hexConcat([ selector, tokenId ])\n };\n\n let metadataUrl = _parseString(await this.provider.call(tx), 0);\n if (metadataUrl == null) { return null; }\n linkage.push({ type: \"metadata-url-base\", content: metadataUrl });\n\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", tokenId.substring(2));\n linkage.push({ type: \"metadata-url-expanded\", content: metadataUrl });\n }\n\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n\n linkage.push({ type: \"metadata-url\", content: metadataUrl });\n\n // Get the token metadata\n const metadata = await fetchJson(metadataUrl);\n if (!metadata) { return null; }\n linkage.push({ type: \"metadata\", content: JSON.stringify(metadata) });\n\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof(imageUrl) !== \"string\") { return null; }\n\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n } else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) { return null; }\n\n linkage.push({ type: \"url-ipfs\", content: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n\n linkage.push({ type: \"url\", content: imageUrl });\n\n return { linkage, url: imageUrl };\n }\n }\n }\n } catch (error) { }\n\n return null;\n }\n\n async getContentHash(): Promise {\n\n // keccak256(\"contenthash()\")\n const hexBytes = await this._fetchBytes(\"0xbc1c58d1\");\n\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") { return null; }\n\n // IPFS (CID: 1, Type: DAG-PB)\n const ipfs = hexBytes.match(/^0xe3010170(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const length = parseInt(ipfs[3], 16);\n if (ipfs[4].length === length * 2) {\n return \"ipfs:/\\/\" + Base58.encode(\"0x\" + ipfs[1]);\n }\n }\n\n // IPNS (CID: 1, Type: libp2p-key)\n const ipns = hexBytes.match(/^0xe5010172(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipns) {\n const length = parseInt(ipns[3], 16);\n if (ipns[4].length === length * 2) {\n return \"ipns:/\\/\" + Base58.encode(\"0x\" + ipns[1]);\n }\n }\n\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/)\n if (swarm) {\n if (swarm[1].length === (32 * 2)) {\n return \"bzz:/\\/\" + swarm[1]\n }\n }\n\n const skynet = hexBytes.match(/^0x90b2c605([0-9a-f]*)$/);\n if (skynet) {\n if (skynet[1].length === (34 * 2)) {\n // URL Safe base64; https://datatracker.ietf.org/doc/html/rfc4648#section-5\n const urlSafe: Record = { \"=\": \"\", \"+\": \"-\", \"/\": \"_\" };\n const hash = base64Encode(\"0x\" + skynet[1]).replace(/[=+\\/]/g, (a) => (urlSafe[a]));\n return \"sia:/\\/\" + hash;\n }\n }\n\n return logger.throwError(`invalid or unsupported content hash data`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"getContentHash()\",\n data: hexBytes\n });\n }\n\n async getText(key: string): Promise {\n\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n keyBytes = concat([ bytes32ify(64), bytes32ify(keyBytes.length), keyBytes ]);\n\n // Pad to word-size (32 bytes)\n if ((keyBytes.length % 32) !== 0) {\n keyBytes = concat([ keyBytes, hexZeroPad(\"0x\", 32 - (key.length % 32)) ])\n }\n\n const hexBytes = await this._fetchBytes(\"0x59d1d43c\", hexlify(keyBytes));\n if (hexBytes == null || hexBytes === \"0x\") { return null; }\n\n return toUtf8String(hexBytes);\n }\n}\n\nlet defaultFormatter: Formatter = null;\n\nlet nextPollId = 1;\n\nexport class BaseProvider extends Provider implements EnsProvider {\n _networkPromise: Promise;\n _network: Network;\n\n _events: Array;\n\n formatter: Formatter;\n\n // To help mitigate the eventually consistent nature of the blockchain\n // we keep a mapping of events we emit. If we emit an event X, we expect\n // that a user should be able to query for that event in the callback,\n // if the node returns null, we stall the response until we get back a\n // meaningful value, since we may be hitting a re-org, or a node that\n // has not indexed the event yet.\n // Events:\n // - t:{hash} - Transaction hash\n // - b:{hash} - BlockHash\n // - block - The most recent emitted block\n _emitted: { [ eventName: string ]: number | \"pending\" };\n\n _pollingInterval: number;\n _poller: NodeJS.Timer;\n _bootstrapPoll: NodeJS.Timer;\n\n _lastBlockNumber: number;\n _maxFilterBlockRange: number;\n\n _fastBlockNumber: number;\n _fastBlockNumberPromise: Promise;\n _fastQueryDate: number;\n\n _maxInternalBlockNumber: number;\n _internalBlockNumber: Promise<{ blockNumber: number, reqTime: number, respTime: number }>;\n\n readonly anyNetwork: boolean;\n\n disableCcipRead: boolean;\n\n\n /**\n * ready\n *\n * A Promise that resolves only once the provider is ready.\n *\n * Sub-classes that call the super with a network without a chainId\n * MUST set this. Standard named networks have a known chainId.\n *\n */\n\n constructor(network: Networkish | Promise) {\n super();\n\n // Events being listened to\n this._events = [];\n\n this._emitted = { block: -2 };\n\n this.disableCcipRead = false;\n\n this.formatter = new.target.getFormatter();\n\n // If network is any, this Provider allows the underlying\n // network to change dynamically, and we auto-detect the\n // current network\n defineReadOnly(this, \"anyNetwork\", (network === \"any\"));\n if (this.anyNetwork) { network = this.detectNetwork(); }\n\n if (network instanceof Promise) {\n this._networkPromise = network;\n\n // Squash any \"unhandled promise\" errors; that do not need to be handled\n network.catch((error) => { });\n\n // Trigger initial network setting (async)\n this._ready().catch((error) => { });\n\n } else {\n const knownNetwork = getStatic<(network: Networkish) => Network>(new.target, \"getNetwork\")(network);\n if (knownNetwork) {\n defineReadOnly(this, \"_network\", knownNetwork);\n this.emit(\"network\", knownNetwork, null);\n\n } else {\n logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n }\n\n this._maxInternalBlockNumber = -1024;\n\n this._lastBlockNumber = -2;\n this._maxFilterBlockRange = 10;\n\n this._pollingInterval = 4000;\n\n this._fastQueryDate = 0;\n }\n\n async _ready(): Promise {\n if (this._network == null) {\n let network: Network = null;\n if (this._networkPromise) {\n try {\n network = await this._networkPromise;\n } catch (error) { }\n }\n\n // Try the Provider's network detection (this MUST throw if it cannot)\n if (network == null) {\n network = await this.detectNetwork();\n }\n\n // This should never happen; every Provider sub-class should have\n // suggested a network by here (or have thrown).\n if (!network) {\n logger.throwError(\"no network detected\", Logger.errors.UNKNOWN_ERROR, { });\n }\n\n // Possible this call stacked so do not call defineReadOnly again\n if (this._network == null) {\n if (this.anyNetwork) {\n this._network = network;\n } else {\n defineReadOnly(this, \"_network\", network);\n }\n this.emit(\"network\", network, null);\n }\n }\n\n return this._network;\n }\n\n // This will always return the most recently established network.\n // For \"any\", this can change (a \"network\" event is emitted before\n // any change is reflected); otherwise this cannot change\n get ready(): Promise {\n return poll(() => {\n return this._ready().then((network) => {\n return network;\n }, (error) => {\n // If the network isn't running yet, we will wait\n if (error.code === Logger.errors.NETWORK_ERROR && error.event === \"noNetwork\") {\n return undefined;\n }\n throw error;\n });\n });\n }\n\n // @TODO: Remove this and just create a singleton formatter\n static getFormatter(): Formatter {\n if (defaultFormatter == null) {\n defaultFormatter = new Formatter();\n }\n return defaultFormatter;\n }\n\n // @TODO: Remove this and just use getNetwork\n static getNetwork(network: Networkish): Network {\n return getNetwork((network == null) ? \"homestead\": network);\n }\n\n async ccipReadFetch(tx: Transaction, calldata: string, urls: Array): Promise {\n if (this.disableCcipRead || urls.length === 0) { return null; }\n\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n\n const errorMessages: Array = [ ];\n\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n\n // If no {data} is present, use POST; otherwise GET\n const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n\n const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n value.status = response.statusCode;\n return value;\n });\n\n if (result.data) { return result.data; }\n\n const errorMessage = (result.message || \"unknown error\");\n\n // 4xx indicates the result is not present; stop\n if (result.status >= 400 && result.status < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${ errorMessage }`, Logger.errors.SERVER_ERROR, { url, errorMessage });\n }\n\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n\n return logger.throwError(`error encountered during CCIP fetch: ${ errorMessages.map((m) => JSON.stringify(m)).join(\", \") }`, Logger.errors.SERVER_ERROR, {\n urls, errorMessages\n });\n }\n\n // Fetches the blockNumber, but will reuse any result that is less\n // than maxAge old or has been requested since the last request\n async _getInternalBlockNumber(maxAge: number): Promise {\n await this._ready();\n\n // Allowing stale data up to maxAge old\n if (maxAge > 0) {\n\n // While there are pending internal block requests...\n while (this._internalBlockNumber) {\n\n // ...\"remember\" which fetch we started with\n const internalBlockNumber = this._internalBlockNumber;\n\n try {\n // Check the result is not too stale\n const result = await internalBlockNumber;\n if ((getTime() - result.respTime) <= maxAge) {\n return result.blockNumber;\n }\n\n // Too old; fetch a new value\n break;\n\n } catch(error) {\n\n // The fetch rejected; if we are the first to get the\n // rejection, drop through so we replace it with a new\n // fetch; all others blocked will then get that fetch\n // which won't match the one they \"remembered\" and loop\n if (this._internalBlockNumber === internalBlockNumber) {\n break;\n }\n }\n }\n }\n\n const reqTime = getTime();\n\n const checkInternalBlockNumber = resolveProperties({\n blockNumber: this.perform(\"getBlockNumber\", { }),\n networkError: this.getNetwork().then((network) => (null), (error) => (error))\n }).then(({ blockNumber, networkError }) => {\n if (networkError) {\n // Unremember this bad internal block number\n if (this._internalBlockNumber === checkInternalBlockNumber) {\n this._internalBlockNumber = null;\n }\n throw networkError;\n }\n\n const respTime = getTime();\n\n blockNumber = BigNumber.from(blockNumber).toNumber();\n if (blockNumber < this._maxInternalBlockNumber) { blockNumber = this._maxInternalBlockNumber; }\n\n this._maxInternalBlockNumber = blockNumber;\n this._setFastBlockNumber(blockNumber); // @TODO: Still need this?\n return { blockNumber, reqTime, respTime };\n });\n\n this._internalBlockNumber = checkInternalBlockNumber;\n\n // Swallow unhandled exceptions; if needed they are handled else where\n checkInternalBlockNumber.catch((error) => {\n // Don't null the dead (rejected) fetch, if it has already been updated\n if (this._internalBlockNumber === checkInternalBlockNumber) {\n this._internalBlockNumber = null;\n }\n });\n\n return (await checkInternalBlockNumber).blockNumber;\n }\n\n async poll(): Promise {\n const pollId = nextPollId++;\n\n // Track all running promises, so we can trigger a post-poll once they are complete\n const runners: Array> = [];\n\n let blockNumber: number = null;\n try {\n blockNumber = await this._getInternalBlockNumber(100 + this.pollingInterval / 2);\n } catch (error) {\n this.emit(\"error\", error);\n return;\n }\n this._setFastBlockNumber(blockNumber);\n\n // Emit a poll event after we have the latest (fast) block number\n this.emit(\"poll\", pollId, blockNumber);\n\n // If the block has not changed, meh.\n if (blockNumber === this._lastBlockNumber) {\n this.emit(\"didPoll\", pollId);\n return;\n }\n\n // First polling cycle, trigger a \"block\" events\n if (this._emitted.block === -2) {\n this._emitted.block = blockNumber - 1;\n }\n\n if (Math.abs(((this._emitted.block)) - blockNumber) > 1000) {\n logger.warn(`network block skew detected; skipping block events (emitted=${ this._emitted.block } blockNumber${ blockNumber })`);\n this.emit(\"error\", logger.makeError(\"network block skew detected\", Logger.errors.NETWORK_ERROR, {\n blockNumber: blockNumber,\n event: \"blockSkew\",\n previousBlockNumber: this._emitted.block\n }));\n this.emit(\"block\", blockNumber);\n\n } else {\n // Notify all listener for each block that has passed\n for (let i = (this._emitted.block) + 1; i <= blockNumber; i++) {\n this.emit(\"block\", i);\n }\n }\n\n // The emitted block was updated, check for obsolete events\n if ((this._emitted.block) !== blockNumber) {\n this._emitted.block = blockNumber;\n\n Object.keys(this._emitted).forEach((key) => {\n // The block event does not expire\n if (key === \"block\") { return; }\n\n // The block we were at when we emitted this event\n const eventBlockNumber = this._emitted[key];\n\n // We cannot garbage collect pending transactions or blocks here\n // They should be garbage collected by the Provider when setting\n // \"pending\" events\n if (eventBlockNumber === \"pending\") { return; }\n\n // Evict any transaction hashes or block hashes over 12 blocks\n // old, since they should not return null anyways\n if (blockNumber - eventBlockNumber > 12) {\n delete this._emitted[key];\n }\n });\n }\n\n // First polling cycle\n if (this._lastBlockNumber === -2) {\n this._lastBlockNumber = blockNumber - 1;\n }\n // Find all transaction hashes we are waiting on\n this._events.forEach((event) => {\n switch (event.type) {\n case \"tx\": {\n const hash = event.hash;\n let runner = this.getTransactionReceipt(hash).then((receipt) => {\n if (!receipt || receipt.blockNumber == null) { return null; }\n this._emitted[\"t:\" + hash] = receipt.blockNumber;\n this.emit(hash, receipt);\n return null;\n }).catch((error: Error) => { this.emit(\"error\", error); });\n\n runners.push(runner);\n\n break;\n }\n\n case \"filter\": {\n // We only allow a single getLogs to be in-flight at a time\n if (!event._inflight) {\n event._inflight = true;\n\n // This is the first filter for this event, so we want to\n // restrict events to events that happened no earlier than now\n if (event._lastBlockNumber === -2) {\n event._lastBlockNumber = blockNumber - 1;\n }\n\n // Filter from the last *known* event; due to load-balancing\n // and some nodes returning updated block numbers before\n // indexing events, a logs result with 0 entries cannot be\n // trusted and we must retry a range which includes it again\n const filter = event.filter;\n filter.fromBlock = event._lastBlockNumber + 1;\n filter.toBlock = blockNumber;\n\n // Prevent fitler ranges from growing too wild, since it is quite\n // likely there just haven't been any events to move the lastBlockNumber.\n const minFromBlock = filter.toBlock - this._maxFilterBlockRange;\n if (minFromBlock > filter.fromBlock) { filter.fromBlock = minFromBlock; }\n\n if (filter.fromBlock < 0) { filter.fromBlock = 0; }\n\n const runner = this.getLogs(filter).then((logs) => {\n // Allow the next getLogs\n event._inflight = false;\n\n if (logs.length === 0) { return; }\n\n logs.forEach((log: Log) => {\n // Only when we get an event for a given block number\n // can we trust the events are indexed\n if (log.blockNumber > event._lastBlockNumber) {\n event._lastBlockNumber = log.blockNumber;\n }\n\n // Make sure we stall requests to fetch blocks and txs\n this._emitted[\"b:\" + log.blockHash] = log.blockNumber;\n this._emitted[\"t:\" + log.transactionHash] = log.blockNumber;\n\n this.emit(filter, log);\n });\n }).catch((error: Error) => {\n this.emit(\"error\", error);\n\n // Allow another getLogs (the range was not updated)\n event._inflight = false;\n });\n runners.push(runner);\n }\n\n break;\n }\n }\n });\n\n this._lastBlockNumber = blockNumber;\n\n // Once all events for this loop have been processed, emit \"didPoll\"\n Promise.all(runners).then(() => {\n this.emit(\"didPoll\", pollId);\n }).catch((error) => { this.emit(\"error\", error); });\n\n return;\n }\n\n // Deprecated; do not use this\n resetEventsBlock(blockNumber: number): void {\n this._lastBlockNumber = blockNumber - 1;\n if (this.polling) { this.poll(); }\n }\n\n get network(): Network {\n return this._network;\n }\n\n // This method should query the network if the underlying network\n // can change, such as when connected to a JSON-RPC backend\n async detectNetwork(): Promise {\n return logger.throwError(\"provider does not support network detection\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"provider.detectNetwork\"\n });\n }\n\n async getNetwork(): Promise {\n const network = await this._ready();\n\n // Make sure we are still connected to the same network; this is\n // only an external call for backends which can have the underlying\n // network change spontaneously\n const currentNetwork = await this.detectNetwork();\n if (network.chainId !== currentNetwork.chainId) {\n\n // We are allowing network changes, things can get complex fast;\n // make sure you know what you are doing if you use \"any\"\n if (this.anyNetwork) {\n this._network = currentNetwork;\n\n // Reset all internal block number guards and caches\n this._lastBlockNumber = -2;\n this._fastBlockNumber = null;\n this._fastBlockNumberPromise = null;\n this._fastQueryDate = 0;\n this._emitted.block = -2;\n this._maxInternalBlockNumber = -1024;\n this._internalBlockNumber = null;\n\n // The \"network\" event MUST happen before this method resolves\n // so any events have a chance to unregister, so we stall an\n // additional event loop before returning from /this/ call\n this.emit(\"network\", currentNetwork, network);\n await stall(0);\n\n return this._network;\n }\n\n const error = logger.makeError(\"underlying network changed\", Logger.errors.NETWORK_ERROR, {\n event: \"changed\",\n network: network,\n detectedNetwork: currentNetwork\n });\n\n this.emit(\"error\", error);\n throw error;\n }\n\n return network;\n }\n\n get blockNumber(): number {\n this._getInternalBlockNumber(100 + this.pollingInterval / 2).then((blockNumber) => {\n this._setFastBlockNumber(blockNumber);\n }, (error) => { });\n\n return (this._fastBlockNumber != null) ? this._fastBlockNumber: -1;\n }\n\n get polling(): boolean {\n return (this._poller != null);\n }\n\n set polling(value: boolean) {\n if (value && !this._poller) {\n this._poller = setInterval(() => { this.poll(); }, this.pollingInterval);\n\n if (!this._bootstrapPoll) {\n this._bootstrapPoll = setTimeout(() => {\n this.poll();\n\n // We block additional polls until the polling interval\n // is done, to prevent overwhelming the poll function\n this._bootstrapPoll = setTimeout(() => {\n // If polling was disabled, something may require a poke\n // since starting the bootstrap poll and it was disabled\n if (!this._poller) { this.poll(); }\n\n // Clear out the bootstrap so we can do another\n this._bootstrapPoll = null;\n }, this.pollingInterval);\n }, 0);\n }\n\n } else if (!value && this._poller) {\n clearInterval(this._poller);\n this._poller = null;\n }\n }\n\n get pollingInterval(): number {\n return this._pollingInterval;\n }\n\n set pollingInterval(value: number) {\n if (typeof(value) !== \"number\" || value <= 0 || parseInt(String(value)) != value) {\n throw new Error(\"invalid polling interval\");\n }\n\n this._pollingInterval = value;\n\n if (this._poller) {\n clearInterval(this._poller);\n this._poller = setInterval(() => { this.poll(); }, this._pollingInterval);\n }\n }\n\n _getFastBlockNumber(): Promise {\n const now = getTime();\n\n // Stale block number, request a newer value\n if ((now - this._fastQueryDate) > 2 * this._pollingInterval) {\n this._fastQueryDate = now;\n this._fastBlockNumberPromise = this.getBlockNumber().then((blockNumber) => {\n if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) {\n this._fastBlockNumber = blockNumber;\n }\n return this._fastBlockNumber;\n });\n }\n\n return this._fastBlockNumberPromise;\n }\n\n _setFastBlockNumber(blockNumber: number): void {\n // Older block, maybe a stale request\n if (this._fastBlockNumber != null && blockNumber < this._fastBlockNumber) { return; }\n\n // Update the time we updated the blocknumber\n this._fastQueryDate = getTime();\n\n // Newer block number, use it\n if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) {\n this._fastBlockNumber = blockNumber;\n this._fastBlockNumberPromise = Promise.resolve(blockNumber);\n }\n }\n\n async waitForTransaction(transactionHash: string, confirmations?: number, timeout?: number): Promise {\n return this._waitForTransaction(transactionHash, (confirmations == null) ? 1: confirmations, timeout || 0, null);\n }\n\n async _waitForTransaction(transactionHash: string, confirmations: number, timeout: number, replaceable: { data: string, from: string, nonce: number, to: string, value: BigNumber, startBlock: number }): Promise {\n const receipt = await this.getTransactionReceipt(transactionHash);\n\n // Receipt is already good\n if ((receipt ? receipt.confirmations: 0) >= confirmations) { return receipt; }\n\n // Poll until the receipt is good...\n return new Promise((resolve, reject) => {\n const cancelFuncs: Array<() => void> = [];\n\n let done = false;\n const alreadyDone = function() {\n if (done) { return true; }\n done = true;\n cancelFuncs.forEach((func) => { func(); });\n return false;\n };\n\n const minedHandler = (receipt: TransactionReceipt) => {\n if (receipt.confirmations < confirmations) { return; }\n if (alreadyDone()) { return; }\n resolve(receipt);\n }\n this.on(transactionHash, minedHandler);\n cancelFuncs.push(() => { this.removeListener(transactionHash, minedHandler); });\n\n if (replaceable) {\n let lastBlockNumber = replaceable.startBlock;\n let scannedBlock: number = null;\n const replaceHandler = async (blockNumber: number) => {\n if (done) { return; }\n\n // Wait 1 second; this is only used in the case of a fault, so\n // we will trade off a little bit of latency for more consistent\n // results and fewer JSON-RPC calls\n await stall(1000);\n\n this.getTransactionCount(replaceable.from).then(async (nonce) => {\n if (done) { return; }\n\n if (nonce <= replaceable.nonce) {\n lastBlockNumber = blockNumber;\n\n } else {\n // First check if the transaction was mined\n {\n const mined = await this.getTransaction(transactionHash);\n if (mined && mined.blockNumber != null) { return; }\n }\n\n // First time scanning. We start a little earlier for some\n // wiggle room here to handle the eventually consistent nature\n // of blockchain (e.g. the getTransactionCount was for a\n // different block)\n if (scannedBlock == null) {\n scannedBlock = lastBlockNumber - 3;\n if (scannedBlock < replaceable.startBlock) {\n scannedBlock = replaceable.startBlock;\n }\n }\n\n while (scannedBlock <= blockNumber) {\n if (done) { return; }\n\n const block = await this.getBlockWithTransactions(scannedBlock);\n for (let ti = 0; ti < block.transactions.length; ti++) {\n const tx = block.transactions[ti];\n\n // Successfully mined!\n if (tx.hash === transactionHash) { return; }\n\n // Matches our transaction from and nonce; its a replacement\n if (tx.from === replaceable.from && tx.nonce === replaceable.nonce) {\n if (done) { return; }\n\n // Get the receipt of the replacement\n const receipt = await this.waitForTransaction(tx.hash, confirmations);\n\n // Already resolved or rejected (prolly a timeout)\n if (alreadyDone()) { return; }\n\n // The reason we were replaced\n let reason = \"replaced\";\n if (tx.data === replaceable.data && tx.to === replaceable.to && tx.value.eq(replaceable.value)) {\n reason = \"repriced\";\n } else if (tx.data === \"0x\" && tx.from === tx.to && tx.value.isZero()) {\n reason = \"cancelled\"\n }\n\n // Explain why we were replaced\n reject(logger.makeError(\"transaction was replaced\", Logger.errors.TRANSACTION_REPLACED, {\n cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n reason,\n replacement: this._wrapTransaction(tx),\n hash: transactionHash,\n receipt\n }));\n\n return;\n }\n }\n scannedBlock++;\n }\n }\n\n if (done) { return; }\n this.once(\"block\", replaceHandler);\n\n }, (error) => {\n if (done) { return; }\n this.once(\"block\", replaceHandler);\n });\n };\n\n if (done) { return; }\n this.once(\"block\", replaceHandler);\n\n cancelFuncs.push(() => {\n this.removeListener(\"block\", replaceHandler);\n });\n }\n\n if (typeof(timeout) === \"number\" && timeout > 0) {\n const timer = setTimeout(() => {\n if (alreadyDone()) { return; }\n reject(logger.makeError(\"timeout exceeded\", Logger.errors.TIMEOUT, { timeout: timeout }));\n }, timeout);\n if (timer.unref) { timer.unref(); }\n\n cancelFuncs.push(() => { clearTimeout(timer); });\n }\n });\n }\n\n async getBlockNumber(): Promise {\n return this._getInternalBlockNumber(0);\n }\n\n async getGasPrice(): Promise {\n await this.getNetwork();\n\n const result = await this.perform(\"getGasPrice\", { });\n try {\n return BigNumber.from(result);\n } catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getGasPrice\",\n result, error\n });\n }\n }\n\n async getBalance(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise {\n await this.getNetwork();\n const params = await resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n\n const result = await this.perform(\"getBalance\", params);\n try {\n return BigNumber.from(result);\n } catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getBalance\",\n params, result, error\n });\n }\n }\n\n async getTransactionCount(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise {\n await this.getNetwork();\n const params = await resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n\n const result = await this.perform(\"getTransactionCount\", params);\n try {\n return BigNumber.from(result).toNumber();\n } catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getTransactionCount\",\n params, result, error\n });\n }\n }\n\n async getCode(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise {\n await this.getNetwork();\n const params = await resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n\n const result = await this.perform(\"getCode\", params);\n try {\n return hexlify(result);\n } catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getCode\",\n params, result, error\n });\n }\n }\n\n async getStorageAt(addressOrName: string | Promise, position: BigNumberish | Promise, blockTag?: BlockTag | Promise): Promise {\n await this.getNetwork();\n const params = await resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag),\n position: Promise.resolve(position).then((p) => hexValue(p))\n });\n const result = await this.perform(\"getStorageAt\", params);\n try {\n return hexlify(result);\n } catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getStorageAt\",\n params, result, error\n });\n }\n }\n\n // This should be called by any subclass wrapping a TransactionResponse\n _wrapTransaction(tx: Transaction, hash?: string, startBlock?: number): TransactionResponse {\n if (hash != null && hexDataLength(hash) !== 32) { throw new Error(\"invalid response - sendTransaction\"); }\n\n const result = tx;\n\n // Check the hash we expect is the same as the hash the server reported\n if (hash != null && tx.hash !== hash) {\n logger.throwError(\"Transaction hash mismatch from Provider.sendTransaction.\", Logger.errors.UNKNOWN_ERROR, { expectedHash: tx.hash, returnedHash: hash });\n }\n\n result.wait = async (confirms?: number, timeout?: number) => {\n if (confirms == null) { confirms = 1; }\n if (timeout == null) { timeout = 0; }\n\n // Get the details to detect replacement\n let replacement = undefined;\n if (confirms !== 0 && startBlock != null) {\n replacement = {\n data: tx.data,\n from: tx.from,\n nonce: tx.nonce,\n to: tx.to,\n value: tx.value,\n startBlock\n };\n }\n\n const receipt = await this._waitForTransaction(tx.hash, confirms, timeout, replacement);\n if (receipt == null && confirms === 0) { return null; }\n\n // No longer pending, allow the polling loop to garbage collect this\n this._emitted[\"t:\" + tx.hash] = receipt.blockNumber;\n\n if (receipt.status === 0) {\n logger.throwError(\"transaction failed\", Logger.errors.CALL_EXCEPTION, {\n transactionHash: tx.hash,\n transaction: tx,\n receipt: receipt\n });\n }\n return receipt;\n };\n\n return result;\n }\n\n async sendTransaction(signedTransaction: string | Promise): Promise {\n await this.getNetwork();\n const hexTx = await Promise.resolve(signedTransaction).then(t => hexlify(t));\n const tx = this.formatter.transaction(signedTransaction);\n if (tx.confirmations == null) { tx.confirmations = 0; }\n const blockNumber = await this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n try {\n const hash = await this.perform(\"sendTransaction\", { signedTransaction: hexTx });\n return this._wrapTransaction(tx, hash, blockNumber);\n } catch (error) {\n (error).transaction = tx;\n (error).transactionHash = tx.hash;\n throw error;\n }\n }\n\n async _getTransactionRequest(transaction: Deferrable): Promise {\n const values: any = await transaction;\n\n const tx: any = { };\n\n [\"from\", \"to\"].forEach((key) => {\n if (values[key] == null) { return; }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? this._getAddress(v): null))\n });\n\n [\"gasLimit\", \"gasPrice\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"value\"].forEach((key) => {\n if (values[key] == null) { return; }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? BigNumber.from(v): null));\n });\n\n [\"type\"].forEach((key) => {\n if (values[key] == null) { return; }\n tx[key] = Promise.resolve(values[key]).then((v) => ((v != null) ? v: null));\n });\n\n if (values.accessList) {\n tx.accessList = this.formatter.accessList(values.accessList);\n }\n\n [\"data\"].forEach((key) => {\n if (values[key] == null) { return; }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? hexlify(v): null));\n });\n\n return this.formatter.transactionRequest(await resolveProperties(tx));\n }\n\n async _getFilter(filter: Filter | FilterByBlockHash | Promise): Promise {\n filter = await filter;\n\n const result: any = { };\n\n if (filter.address != null) {\n result.address = this._getAddress(filter.address);\n }\n\n [\"blockHash\", \"topics\"].forEach((key) => {\n if ((filter)[key] == null) { return; }\n result[key] = (filter)[key];\n });\n\n [\"fromBlock\", \"toBlock\"].forEach((key) => {\n if ((filter)[key] == null) { return; }\n result[key] = this._getBlockTag((filter)[key]);\n });\n\n return this.formatter.filter(await resolveProperties(result));\n }\n\n async _call(transaction: TransactionRequest, blockTag: BlockTag, attempt: number): Promise {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", Logger.errors.SERVER_ERROR, {\n redirects: attempt, transaction\n });\n }\n\n const txSender = transaction.to;\n\n const result = await this.perform(\"call\", { transaction, blockTag });\n\n // CCIP Read request via OffchainLookup(address,string[],bytes,bytes4,bytes)\n if (attempt >= 0 && blockTag === \"latest\" && txSender != null && result.substring(0, 10) === \"0x556f1830\" && (hexDataLength(result) % 32 === 4)) {\n try {\n const data = hexDataSlice(result, 4);\n\n // Check the sender of the OffchainLookup matches the transaction\n const sender = hexDataSlice(data, 0, 32);\n if (!BigNumber.from(sender).eq(txSender)) {\n logger.throwError(\"CCIP Read sender did not match\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n\n // Read the URLs from the response\n const urls: Array = [];\n const urlsOffset = BigNumber.from(hexDataSlice(data, 32, 64)).toNumber();\n const urlsLength = BigNumber.from(hexDataSlice(data, urlsOffset, urlsOffset + 32)).toNumber();\n const urlsData = hexDataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n logger.throwError(\"CCIP Read contained corrupt URL string\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n urls.push(url);\n }\n\n // Get the CCIP calldata to forward\n const calldata = _parseBytes(data, 64);\n\n // Get the callbackSelector (bytes4)\n if (!BigNumber.from(hexDataSlice(data, 100, 128)).isZero()) {\n logger.throwError(\"CCIP Read callback selector included junk\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n const callbackSelector = hexDataSlice(data, 96, 100);\n\n // Get the extra data to send back to the contract as context\n const extraData = _parseBytes(data, 128);\n\n const ccipResult = await this.ccipReadFetch(transaction, calldata, urls);\n if (ccipResult == null) {\n logger.throwError(\"CCIP Read disabled or provided no URLs\", Logger.errors.CALL_EXCEPTION, {\n name: \"OffchainLookup\",\n signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n transaction, data: result\n });\n }\n\n const tx = {\n to: txSender,\n data: hexConcat([ callbackSelector, encodeBytes([ ccipResult, extraData ]) ])\n };\n\n return this._call(tx, blockTag, attempt + 1);\n\n } catch (error) {\n if (error.code === Logger.errors.SERVER_ERROR) { throw error; }\n }\n }\n\n try {\n return hexlify(result);\n } catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"call\",\n params: { transaction, blockTag }, result, error\n });\n }\n\n }\n\n async call(transaction: Deferrable, blockTag?: BlockTag | Promise): Promise {\n await this.getNetwork();\n const resolved = await resolveProperties({\n transaction: this._getTransactionRequest(transaction),\n blockTag: this._getBlockTag(blockTag),\n ccipReadEnabled: Promise.resolve(transaction.ccipReadEnabled)\n });\n return this._call(resolved.transaction, resolved.blockTag, resolved.ccipReadEnabled ? 0: -1);\n }\n\n async estimateGas(transaction: Deferrable): Promise {\n await this.getNetwork();\n const params = await resolveProperties({\n transaction: this._getTransactionRequest(transaction)\n });\n\n const result = await this.perform(\"estimateGas\", params);\n try {\n return BigNumber.from(result);\n } catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"estimateGas\",\n params, result, error\n });\n }\n }\n\n async _getAddress(addressOrName: string | Promise): Promise {\n addressOrName = await addressOrName;\n if (typeof(addressOrName) !== \"string\") {\n logger.throwArgumentError(\"invalid address or ENS name\", \"name\", addressOrName);\n }\n\n const address = await this.resolveName(addressOrName);\n if (address == null) {\n logger.throwError(\"ENS name not configured\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `resolveName(${ JSON.stringify(addressOrName) })`\n });\n }\n return address;\n }\n\n async _getBlock(blockHashOrBlockTag: BlockTag | string | Promise, includeTransactions?: boolean): Promise {\n await this.getNetwork();\n\n blockHashOrBlockTag = await blockHashOrBlockTag;\n\n // If blockTag is a number (not \"latest\", etc), this is the block number\n let blockNumber = -128;\n\n const params: { [key: string]: any } = {\n includeTransactions: !!includeTransactions\n };\n\n if (isHexString(blockHashOrBlockTag, 32)) {\n params.blockHash = blockHashOrBlockTag;\n } else {\n try {\n params.blockTag = await this._getBlockTag(blockHashOrBlockTag);\n if (isHexString(params.blockTag)) {\n blockNumber = parseInt(params.blockTag.substring(2), 16);\n }\n } catch (error) {\n logger.throwArgumentError(\"invalid block hash or block tag\", \"blockHashOrBlockTag\", blockHashOrBlockTag);\n }\n }\n\n return poll(async () => {\n const block = await this.perform(\"getBlock\", params);\n\n // Block was not found\n if (block == null) {\n\n // For blockhashes, if we didn't say it existed, that blockhash may\n // not exist. If we did see it though, perhaps from a log, we know\n // it exists, and this node is just not caught up yet.\n if (params.blockHash != null) {\n if (this._emitted[\"b:\" + params.blockHash] == null) { return null; }\n }\n\n // For block tags, if we are asking for a future block, we return null\n if (params.blockTag != null) {\n if (blockNumber > this._emitted.block) { return null; }\n }\n\n // Retry on the next block\n return undefined;\n }\n\n // Add transactions\n if (includeTransactions) {\n let blockNumber: number = null;\n for (let i = 0; i < block.transactions.length; i++) {\n const tx = block.transactions[i];\n if (tx.blockNumber == null) {\n tx.confirmations = 0;\n\n } else if (tx.confirmations == null) {\n if (blockNumber == null) {\n blockNumber = await this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n }\n\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - tx.blockNumber) + 1;\n if (confirmations <= 0) { confirmations = 1; }\n tx.confirmations = confirmations;\n }\n }\n\n const blockWithTxs: any = this.formatter.blockWithTransactions(block);\n blockWithTxs.transactions = blockWithTxs.transactions.map((tx: TransactionResponse) => this._wrapTransaction(tx));\n return blockWithTxs;\n }\n\n return this.formatter.block(block);\n\n }, { oncePoll: this });\n }\n\n getBlock(blockHashOrBlockTag: BlockTag | string | Promise): Promise {\n return >(this._getBlock(blockHashOrBlockTag, false));\n }\n\n getBlockWithTransactions(blockHashOrBlockTag: BlockTag | string | Promise): Promise {\n return >(this._getBlock(blockHashOrBlockTag, true));\n }\n\n async getTransaction(transactionHash: string | Promise): Promise {\n await this.getNetwork();\n transactionHash = await transactionHash;\n\n const params = { transactionHash: this.formatter.hash(transactionHash, true) };\n\n return poll(async () => {\n const result = await this.perform(\"getTransaction\", params);\n\n if (result == null) {\n if (this._emitted[\"t:\" + transactionHash] == null) {\n return null;\n }\n return undefined;\n }\n\n const tx = this.formatter.transactionResponse(result);\n\n if (tx.blockNumber == null) {\n tx.confirmations = 0;\n\n } else if (tx.confirmations == null) {\n const blockNumber = await this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - tx.blockNumber) + 1;\n if (confirmations <= 0) { confirmations = 1; }\n tx.confirmations = confirmations;\n }\n\n return this._wrapTransaction(tx);\n }, { oncePoll: this });\n }\n\n async getTransactionReceipt(transactionHash: string | Promise): Promise {\n await this.getNetwork();\n\n transactionHash = await transactionHash;\n\n const params = { transactionHash: this.formatter.hash(transactionHash, true) };\n\n return poll(async () => {\n const result = await this.perform(\"getTransactionReceipt\", params);\n\n if (result == null) {\n if (this._emitted[\"t:\" + transactionHash] == null) {\n return null;\n }\n return undefined;\n }\n\n // \"geth-etc\" returns receipts before they are ready\n if (result.blockHash == null) { return undefined; }\n\n const receipt = this.formatter.receipt(result);\n\n if (receipt.blockNumber == null) {\n receipt.confirmations = 0;\n\n } else if (receipt.confirmations == null) {\n const blockNumber = await this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - receipt.blockNumber) + 1;\n if (confirmations <= 0) { confirmations = 1; }\n receipt.confirmations = confirmations;\n }\n\n return receipt;\n }, { oncePoll: this });\n }\n\n async getLogs(filter: Filter | FilterByBlockHash | Promise): Promise> {\n await this.getNetwork();\n const params = await resolveProperties({ filter: this._getFilter(filter) });\n const logs: Array = await this.perform(\"getLogs\", params);\n logs.forEach((log) => {\n if (log.removed == null) { log.removed = false; }\n });\n return Formatter.arrayOf(this.formatter.filterLog.bind(this.formatter))(logs);\n }\n\n async getEtherPrice(): Promise {\n await this.getNetwork();\n return this.perform(\"getEtherPrice\", { });\n }\n\n async _getBlockTag(blockTag: BlockTag | Promise): Promise {\n blockTag = await blockTag;\n\n if (typeof(blockTag) === \"number\" && blockTag < 0) {\n if (blockTag % 1) {\n logger.throwArgumentError(\"invalid BlockTag\", \"blockTag\", blockTag);\n }\n\n let blockNumber = await this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n blockNumber += blockTag;\n if (blockNumber < 0) { blockNumber = 0; }\n return this.formatter.blockTag(blockNumber)\n }\n\n return this.formatter.blockTag(blockTag);\n }\n\n\n async getResolver(name: string): Promise {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") { return null; }\n\n // Optimization since the eth node cannot change and does\n // not have a wildcard resolver\n if (name !== \"eth\" && currentName === \"eth\") { return null; }\n\n // Check the current node for a resolver\n const addr = await this._getResolver(currentName, \"getResolver\");\n\n // Found a resolver!\n if (addr != null) {\n const resolver = new Resolver(this, addr, name);\n\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(await resolver.supportsWildcard())) { return null; }\n\n return resolver;\n }\n\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n\n }\n\n async _getResolver(name: string, operation?: string): Promise {\n if (operation == null) { operation = \"ENS\"; }\n\n const network = await this.getNetwork();\n\n // No ENS...\n if (!network.ensAddress) {\n logger.throwError(\n \"network does not support ENS\",\n Logger.errors.UNSUPPORTED_OPERATION,\n { operation, network: network.name }\n );\n }\n\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = await this.call({\n to: network.ensAddress,\n data: (\"0x0178b8bf\" + namehash(name).substring(2))\n });\n return this.formatter.callAddress(addrData);\n } catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32)\n }\n\n return null;\n }\n\n async resolveName(name: string | Promise): Promise {\n name = await name;\n\n // If it is already an address, nothing to resolve\n try {\n return Promise.resolve(this.formatter.address(name));\n } catch (error) {\n // If is is a hexstring, the address is bad (See #694)\n if (isHexString(name)) { throw error; }\n }\n\n if (typeof(name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name\", \"name\", name);\n }\n\n // Get the addr from the resolver\n const resolver = await this.getResolver(name);\n if (!resolver) { return null; }\n\n return await resolver.getAddress();\n }\n\n async lookupAddress(address: string | Promise): Promise {\n address = await address;\n address = this.formatter.address(address);\n\n const node = address.substring(2).toLowerCase() + \".addr.reverse\";\n\n const resolverAddr = await this._getResolver(node, \"lookupAddress\");\n if (resolverAddr == null) { return null; }\n\n // keccak(\"name(bytes32)\")\n const name = _parseString(await this.call({\n to: resolverAddr,\n data: (\"0x691f3431\" + namehash(node).substring(2))\n }), 0);\n\n const addr = await this.resolveName(name);\n if (addr != address) { return null; }\n\n return name;\n }\n\n async getAvatar(nameOrAddress: string): Promise {\n let resolver: Resolver = null;\n if (isHexString(nameOrAddress)) {\n // Address; reverse lookup\n const address = this.formatter.address(nameOrAddress);\n\n const node = address.substring(2).toLowerCase() + \".addr.reverse\";\n\n const resolverAddress = await this._getResolver(node, \"getAvatar\");\n if (!resolverAddress) { return null; }\n\n // Try resolving the avatar against the addr.reverse resolver\n resolver = new Resolver(this, resolverAddress, node);\n try {\n const avatar = await resolver.getAvatar();\n if (avatar) { return avatar.url; }\n } catch (error) {\n if (error.code !== Logger.errors.CALL_EXCEPTION) { throw error; }\n }\n\n // Try getting the name and performing forward lookup; allowing wildcards\n try {\n // keccak(\"name(bytes32)\")\n const name = _parseString(await this.call({\n to: resolverAddress,\n data: (\"0x691f3431\" + namehash(node).substring(2))\n }), 0);\n resolver = await this.getResolver(name);\n } catch (error) {\n if (error.code !== Logger.errors.CALL_EXCEPTION) { throw error; }\n return null;\n }\n\n } else {\n // ENS name; forward lookup with wildcard\n resolver = await this.getResolver(nameOrAddress);\n if (!resolver) { return null; }\n }\n\n const avatar = await resolver.getAvatar();\n if (avatar == null) { return null; }\n\n return avatar.url;\n }\n\n perform(method: string, params: any): Promise {\n return logger.throwError(method + \" not implemented\", Logger.errors.NOT_IMPLEMENTED, { operation: method });\n }\n\n _startEvent(event: Event): void {\n this.polling = (this._events.filter((e) => e.pollable()).length > 0);\n }\n\n _stopEvent(event: Event): void {\n this.polling = (this._events.filter((e) => e.pollable()).length > 0);\n }\n\n _addEventListener(eventName: EventType, listener: Listener, once: boolean): this {\n const event = new Event(getEventTag(eventName), listener, once)\n this._events.push(event);\n this._startEvent(event);\n\n return this;\n }\n\n on(eventName: EventType, listener: Listener): this {\n return this._addEventListener(eventName, listener, false);\n }\n\n once(eventName: EventType, listener: Listener): this {\n return this._addEventListener(eventName, listener, true);\n }\n\n\n emit(eventName: EventType, ...args: Array): boolean {\n let result = false;\n\n let stopped: Array = [ ];\n\n let eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag) { return true; }\n\n setTimeout(() => {\n event.listener.apply(this, args);\n }, 0);\n\n result = true;\n\n if (event.once) {\n stopped.push(event);\n return false;\n }\n\n return true;\n });\n\n stopped.forEach((event) => { this._stopEvent(event); });\n\n return result;\n }\n\n listenerCount(eventName?: EventType): number {\n if (!eventName) { return this._events.length; }\n\n let eventTag = getEventTag(eventName);\n return this._events.filter((event) => {\n return (event.tag === eventTag);\n }).length;\n }\n\n listeners(eventName?: EventType): Array {\n if (eventName == null) {\n return this._events.map((event) => event.listener);\n }\n\n let eventTag = getEventTag(eventName);\n return this._events\n .filter((event) => (event.tag === eventTag))\n .map((event) => event.listener);\n }\n\n off(eventName: EventType, listener?: Listener): this {\n if (listener == null) {\n return this.removeAllListeners(eventName);\n }\n\n const stopped: Array = [ ];\n\n let found = false;\n\n let eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag || event.listener != listener) { return true; }\n if (found) { return true; }\n found = true;\n stopped.push(event);\n return false;\n });\n\n stopped.forEach((event) => { this._stopEvent(event); });\n\n return this;\n }\n\n removeAllListeners(eventName?: EventType): this {\n let stopped: Array = [ ];\n if (eventName == null) {\n stopped = this._events;\n\n this._events = [ ];\n } else {\n const eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag) { return true; }\n stopped.push(event);\n return false;\n });\n }\n\n stopped.forEach((event) => { this._stopEvent(event); });\n\n return this;\n }\n}\n","\"use strict\";\n\n// See: https://github.com/ethereum/wiki/wiki/JSON-RPC\n\nimport { Provider, TransactionRequest, TransactionResponse } from \"@ethersproject/abstract-provider\";\nimport { Signer, TypedDataDomain, TypedDataField, TypedDataSigner } from \"@ethersproject/abstract-signer\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { Bytes, hexlify, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport { Network, Networkish } from \"@ethersproject/networks\";\nimport { checkProperties, deepCopy, Deferrable, defineReadOnly, getStatic, resolveProperties, shallowCopy } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { AccessList, accessListify } from \"@ethersproject/transactions\";\nimport { ConnectionInfo, fetchJson, poll } from \"@ethersproject/web\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { BaseProvider, Event } from \"./base-provider\";\n\n\nconst errorGas = [ \"call\", \"estimateGas\" ];\n\nfunction spelunk(value: any, requireData: boolean): null | { message: string, data: null | string } {\n if (value == null) { return null; }\n\n // These *are* the droids we're looking for.\n if (typeof(value.message) === \"string\" && value.message.match(\"reverted\")) {\n const data = isHexString(value.data) ? value.data: null;\n if (!requireData || data) {\n return { message: value.message, data };\n }\n }\n\n // Spelunk further...\n if (typeof(value) === \"object\") {\n for (const key in value) {\n const result = spelunk(value[key], requireData);\n if (result) { return result; }\n }\n return null;\n }\n\n // Might be a JSON string we can further descend...\n if (typeof(value) === \"string\") {\n try {\n return spelunk(JSON.parse(value), requireData);\n } catch (error) { }\n }\n\n return null;\n}\n\nfunction checkError(method: string, error: any, params: any): any {\n\n const transaction = params.transaction || params.signedTransaction;\n\n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\") {\n const result = spelunk(error, true);\n if (result) { return result.data; }\n\n // Nothing descriptive..\n logger.throwError(\"missing revert data in call exception; Transaction reverted without a reason string\", Logger.errors.CALL_EXCEPTION, {\n data: \"0x\", transaction, error\n });\n }\n\n if (method === \"estimateGas\") {\n // Try to find something, with a preference on SERVER_ERROR body\n let result = spelunk(error.body, false);\n if (result == null) { result = spelunk(error, false); }\n\n // Found \"reverted\", this is a CALL_EXCEPTION\n if (result) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n reason: result.message, method, transaction, error\n });\n }\n }\n\n // @TODO: Should we spelunk for message too?\n\n let message = error.message;\n if (error.code === Logger.errors.SERVER_ERROR && error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n message = (message || \"\").toLowerCase();\n\n // \"insufficient funds for gas * price + value + cost(data)\"\n if (message.match(/insufficient funds|base fee exceeds gas limit/i)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.errors.INSUFFICIENT_FUNDS, {\n error, method, transaction\n });\n }\n\n // \"nonce too low\"\n if (message.match(/nonce (is )?too low/i)) {\n logger.throwError(\"nonce has already been used\", Logger.errors.NONCE_EXPIRED, {\n error, method, transaction\n });\n }\n\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction underpriced|transaction gas price.*too low/i)) {\n logger.throwError(\"replacement fee too low\", Logger.errors.REPLACEMENT_UNDERPRICED, {\n error, method, transaction\n });\n }\n\n // \"replacement transaction underpriced\"\n if (message.match(/only replay-protected/i)) {\n logger.throwError(\"legacy pre-eip-155 transactions not supported\", Logger.errors.UNSUPPORTED_OPERATION, {\n error, method, transaction\n });\n }\n\n if (errorGas.indexOf(method) >= 0 && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n error, method, transaction\n });\n }\n\n throw error;\n}\n\nfunction timer(timeout: number): Promise {\n return new Promise(function(resolve) {\n setTimeout(resolve, timeout);\n });\n}\n\nfunction getResult(payload: { error?: { code?: number, data?: any, message?: string }, result?: any }): any {\n if (payload.error) {\n // @TODO: not any\n const error: any = new Error(payload.error.message);\n error.code = payload.error.code;\n error.data = payload.error.data;\n throw error;\n }\n\n return payload.result;\n}\n\nfunction getLowerCase(value: string): string {\n if (value) { return value.toLowerCase(); }\n return value;\n}\n\nconst _constructorGuard = {};\n\nexport class JsonRpcSigner extends Signer implements TypedDataSigner {\n readonly provider: JsonRpcProvider;\n _index: number;\n _address: string;\n\n constructor(constructorGuard: any, provider: JsonRpcProvider, addressOrIndex?: string | number) {\n super();\n\n if (constructorGuard !== _constructorGuard) {\n throw new Error(\"do not call the JsonRpcSigner constructor directly; use provider.getSigner\");\n }\n\n defineReadOnly(this, \"provider\", provider);\n\n if (addressOrIndex == null) { addressOrIndex = 0; }\n\n if (typeof(addressOrIndex) === \"string\") {\n defineReadOnly(this, \"_address\", this.provider.formatter.address(addressOrIndex));\n defineReadOnly(this, \"_index\", null);\n\n } else if (typeof(addressOrIndex) === \"number\") {\n defineReadOnly(this, \"_index\", addressOrIndex);\n defineReadOnly(this, \"_address\", null);\n\n } else {\n logger.throwArgumentError(\"invalid address or index\", \"addressOrIndex\", addressOrIndex);\n }\n }\n\n connect(provider: Provider): JsonRpcSigner {\n return logger.throwError(\"cannot alter JSON-RPC Signer connection\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"connect\"\n });\n }\n\n connectUnchecked(): JsonRpcSigner {\n return new UncheckedJsonRpcSigner(_constructorGuard, this.provider, this._address || this._index);\n }\n\n getAddress(): Promise {\n if (this._address) {\n return Promise.resolve(this._address);\n }\n\n return this.provider.send(\"eth_accounts\", []).then((accounts) => {\n if (accounts.length <= this._index) {\n logger.throwError(\"unknown account #\" + this._index, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"getAddress\"\n });\n }\n return this.provider.formatter.address(accounts[this._index])\n });\n }\n\n sendUncheckedTransaction(transaction: Deferrable): Promise {\n transaction = shallowCopy(transaction);\n\n const fromAddress = this.getAddress().then((address) => {\n if (address) { address = address.toLowerCase(); }\n return address;\n });\n\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (transaction.gasLimit == null) {\n const estimate = shallowCopy(transaction);\n estimate.from = fromAddress;\n transaction.gasLimit = this.provider.estimateGas(estimate);\n }\n\n if (transaction.to != null) {\n transaction.to = Promise.resolve(transaction.to).then(async (to) => {\n if (to == null) { return null; }\n const address = await this.provider.resolveName(to);\n if (address == null) {\n logger.throwArgumentError(\"provided ENS name resolves to null\", \"tx.to\", to);\n }\n return address;\n });\n }\n\n return resolveProperties({\n tx: resolveProperties(transaction),\n sender: fromAddress\n }).then(({ tx, sender }) => {\n\n if (tx.from != null) {\n if (tx.from.toLowerCase() !== sender) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", transaction);\n }\n } else {\n tx.from = sender;\n }\n\n const hexTx = (this.provider.constructor).hexlifyTransaction(tx, { from: true });\n\n return this.provider.send(\"eth_sendTransaction\", [ hexTx ]).then((hash) => {\n return hash;\n }, (error) => {\n if (typeof(error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected transaction\", Logger.errors.ACTION_REJECTED, {\n action: \"sendTransaction\",\n transaction: tx\n });\n }\n\n return checkError(\"sendTransaction\", error, hexTx);\n });\n });\n }\n\n signTransaction(transaction: Deferrable): Promise {\n return logger.throwError(\"signing transactions is unsupported\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"signTransaction\"\n });\n }\n\n async sendTransaction(transaction: Deferrable): Promise {\n // This cannot be mined any earlier than any recent block\n const blockNumber = await this.provider._getInternalBlockNumber(100 + 2 * this.provider.pollingInterval);\n\n // Send the transaction\n const hash = await this.sendUncheckedTransaction(transaction);\n\n try {\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return await poll(async () => {\n const tx = await this.provider.getTransaction(hash);\n if (tx === null) { return undefined; }\n return this.provider._wrapTransaction(tx, hash, blockNumber);\n }, { oncePoll: this.provider });\n } catch (error) {\n (error).transactionHash = hash;\n throw error;\n }\n }\n\n async signMessage(message: Bytes | string): Promise {\n const data = ((typeof(message) === \"string\") ? toUtf8Bytes(message): message);\n const address = await this.getAddress();\n try {\n return await this.provider.send(\"personal_sign\", [ hexlify(data), address.toLowerCase() ]);\n } catch (error) {\n if (typeof(error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected signing\", Logger.errors.ACTION_REJECTED, {\n action: \"signMessage\",\n from: address,\n messageData: message\n });\n }\n throw error;\n }\n }\n\n async _legacySignMessage(message: Bytes | string): Promise {\n const data = ((typeof(message) === \"string\") ? toUtf8Bytes(message): message);\n const address = await this.getAddress();\n\n try {\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n return await this.provider.send(\"eth_sign\", [ address.toLowerCase(), hexlify(data) ]);\n } catch (error) {\n if (typeof(error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected signing\", Logger.errors.ACTION_REJECTED, {\n action: \"_legacySignMessage\",\n from: address,\n messageData: message\n });\n }\n throw error;\n }\n }\n\n async _signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise {\n // Populate any ENS names (in-place)\n const populated = await _TypedDataEncoder.resolveNames(domain, types, value, (name: string) => {\n return this.provider.resolveName(name);\n });\n\n const address = await this.getAddress();\n\n try {\n return await this.provider.send(\"eth_signTypedData_v4\", [\n address.toLowerCase(),\n JSON.stringify(_TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n } catch (error) {\n if (typeof(error.message) === \"string\" && error.message.match(/user denied/i)) {\n logger.throwError(\"user rejected signing\", Logger.errors.ACTION_REJECTED, {\n action: \"_signTypedData\",\n from: address,\n messageData: { domain: populated.domain, types, value: populated.value }\n });\n }\n throw error;\n }\n }\n\n async unlock(password: string): Promise {\n const provider = this.provider;\n\n const address = await this.getAddress();\n\n return provider.send(\"personal_unlockAccount\", [ address.toLowerCase(), password, null ]);\n }\n}\n\nclass UncheckedJsonRpcSigner extends JsonRpcSigner {\n sendTransaction(transaction: Deferrable): Promise {\n return this.sendUncheckedTransaction(transaction).then((hash) => {\n return {\n hash: hash,\n nonce: null,\n gasLimit: null,\n gasPrice: null,\n data: null,\n value: null,\n chainId: null,\n confirmations: 0,\n from: null,\n wait: (confirmations?: number) => { return this.provider.waitForTransaction(hash, confirmations); }\n };\n });\n }\n}\n\nconst allowedTransactionKeys: { [ key: string ]: boolean } = {\n chainId: true, data: true, gasLimit: true, gasPrice:true, nonce: true, to: true, value: true,\n type: true, accessList: true,\n maxFeePerGas: true, maxPriorityFeePerGas: true\n}\n\nexport class JsonRpcProvider extends BaseProvider {\n readonly connection: ConnectionInfo;\n\n _pendingFilter: Promise;\n _nextId: number;\n\n // During any given event loop, the results for a given call will\n // all be the same, so we can dedup the calls to save requests and\n // bandwidth. @TODO: Try out generalizing this against send?\n _eventLoopCache: Record>;\n get _cache(): Record> {\n if (this._eventLoopCache == null) {\n this._eventLoopCache = { };\n }\n return this._eventLoopCache;\n }\n\n constructor(url?: ConnectionInfo | string, network?: Networkish) {\n let networkOrReady: Networkish | Promise = network;\n\n // The network is unknown, query the JSON-RPC for it\n if (networkOrReady == null) {\n networkOrReady = new Promise((resolve, reject) => {\n setTimeout(() => {\n this.detectNetwork().then((network) => {\n resolve(network);\n }, (error) => {\n reject(error);\n });\n }, 0);\n });\n }\n\n super(networkOrReady);\n\n // Default URL\n if (!url) { url = getStatic<() => string>(this.constructor, \"defaultUrl\")(); }\n\n if (typeof(url) === \"string\") {\n defineReadOnly(this, \"connection\",Object.freeze({\n url: url\n }));\n } else {\n defineReadOnly(this, \"connection\", Object.freeze(shallowCopy(url)));\n }\n\n this._nextId = 42;\n }\n\n static defaultUrl(): string {\n return \"http:/\\/localhost:8545\";\n }\n\n detectNetwork(): Promise {\n if (!this._cache[\"detectNetwork\"]) {\n this._cache[\"detectNetwork\"] = this._uncachedDetectNetwork();\n\n // Clear this cache at the beginning of the next event loop\n setTimeout(() => {\n this._cache[\"detectNetwork\"] = null;\n }, 0);\n }\n return this._cache[\"detectNetwork\"];\n }\n\n async _uncachedDetectNetwork(): Promise {\n await timer(0);\n\n let chainId = null;\n try {\n chainId = await this.send(\"eth_chainId\", [ ]);\n } catch (error) {\n try {\n chainId = await this.send(\"net_version\", [ ]);\n } catch (error) { }\n }\n\n if (chainId != null) {\n const getNetwork = getStatic<(network: Networkish) => Network>(this.constructor, \"getNetwork\");\n try {\n return getNetwork(BigNumber.from(chainId).toNumber());\n } catch (error) {\n return logger.throwError(\"could not detect network\", Logger.errors.NETWORK_ERROR, {\n chainId: chainId,\n event: \"invalidNetwork\",\n serverError: error\n });\n }\n }\n\n return logger.throwError(\"could not detect network\", Logger.errors.NETWORK_ERROR, {\n event: \"noNetwork\"\n });\n }\n\n getSigner(addressOrIndex?: string | number): JsonRpcSigner {\n return new JsonRpcSigner(_constructorGuard, this, addressOrIndex);\n }\n\n getUncheckedSigner(addressOrIndex?: string | number): UncheckedJsonRpcSigner {\n return this.getSigner(addressOrIndex).connectUnchecked();\n }\n\n listAccounts(): Promise> {\n return this.send(\"eth_accounts\", []).then((accounts: Array) => {\n return accounts.map((a) => this.formatter.address(a));\n });\n }\n\n send(method: string, params: Array): Promise {\n const request = {\n method: method,\n params: params,\n id: (this._nextId++),\n jsonrpc: \"2.0\"\n };\n\n this.emit(\"debug\", {\n action: \"request\",\n request: deepCopy(request),\n provider: this\n });\n\n // We can expand this in the future to any call, but for now these\n // are the biggest wins and do not require any serializing parameters.\n const cache = ([ \"eth_chainId\", \"eth_blockNumber\" ].indexOf(method) >= 0);\n if (cache && this._cache[method]) {\n return this._cache[method];\n }\n\n const result = fetchJson(this.connection, JSON.stringify(request), getResult).then((result) => {\n this.emit(\"debug\", {\n action: \"response\",\n request: request,\n response: result,\n provider: this\n });\n\n return result;\n\n }, (error) => {\n this.emit(\"debug\", {\n action: \"response\",\n error: error,\n request: request,\n provider: this\n });\n\n throw error;\n });\n\n // Cache the fetch, but clear it on the next event loop\n if (cache) {\n this._cache[method] = result;\n setTimeout(() => {\n this._cache[method] = null;\n }, 0);\n }\n\n return result;\n }\n\n prepareRequest(method: string, params: any): [ string, Array ] {\n switch (method) {\n case \"getBlockNumber\":\n return [ \"eth_blockNumber\", [] ];\n\n case \"getGasPrice\":\n return [ \"eth_gasPrice\", [] ];\n\n case \"getBalance\":\n return [ \"eth_getBalance\", [ getLowerCase(params.address), params.blockTag ] ];\n\n case \"getTransactionCount\":\n return [ \"eth_getTransactionCount\", [ getLowerCase(params.address), params.blockTag ] ];\n\n case \"getCode\":\n return [ \"eth_getCode\", [ getLowerCase(params.address), params.blockTag ] ];\n\n case \"getStorageAt\":\n return [ \"eth_getStorageAt\", [ getLowerCase(params.address), hexZeroPad(params.position, 32), params.blockTag ] ];\n\n case \"sendTransaction\":\n return [ \"eth_sendRawTransaction\", [ params.signedTransaction ] ]\n\n case \"getBlock\":\n if (params.blockTag) {\n return [ \"eth_getBlockByNumber\", [ params.blockTag, !!params.includeTransactions ] ];\n } else if (params.blockHash) {\n return [ \"eth_getBlockByHash\", [ params.blockHash, !!params.includeTransactions ] ];\n }\n return null;\n\n case \"getTransaction\":\n return [ \"eth_getTransactionByHash\", [ params.transactionHash ] ];\n\n case \"getTransactionReceipt\":\n return [ \"eth_getTransactionReceipt\", [ params.transactionHash ] ];\n\n case \"call\": {\n const hexlifyTransaction = getStatic<(t: TransactionRequest, a?: { [key: string]: boolean }) => { [key: string]: string }>(this.constructor, \"hexlifyTransaction\");\n return [ \"eth_call\", [ hexlifyTransaction(params.transaction, { from: true }), params.blockTag ] ];\n }\n\n case \"estimateGas\": {\n const hexlifyTransaction = getStatic<(t: TransactionRequest, a?: { [key: string]: boolean }) => { [key: string]: string }>(this.constructor, \"hexlifyTransaction\");\n return [ \"eth_estimateGas\", [ hexlifyTransaction(params.transaction, { from: true }) ] ];\n }\n\n case \"getLogs\":\n if (params.filter && params.filter.address != null) {\n params.filter.address = getLowerCase(params.filter.address);\n }\n return [ \"eth_getLogs\", [ params.filter ] ];\n\n default:\n break;\n }\n\n return null;\n }\n\n async perform(method: string, params: any): Promise {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (method === \"call\" || method === \"estimateGas\") {\n const tx = params.transaction;\n if (tx && tx.type != null && BigNumber.from(tx.type).isZero()) {\n // If there are no EIP-1559 properties, it might be non-EIP-1559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = await this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n params = shallowCopy(params);\n params.transaction = shallowCopy(tx);\n delete params.transaction.type;\n }\n }\n }\n }\n\n const args = this.prepareRequest(method, params);\n\n if (args == null) {\n logger.throwError(method + \" not implemented\", Logger.errors.NOT_IMPLEMENTED, { operation: method });\n }\n try {\n return await this.send(args[0], args[1])\n } catch (error) {\n return checkError(method, error, params);\n }\n }\n\n _startEvent(event: Event): void {\n if (event.tag === \"pending\") { this._startPending(); }\n super._startEvent(event);\n }\n\n _startPending(): void {\n if (this._pendingFilter != null) { return; }\n const self = this;\n\n const pendingFilter: Promise = this.send(\"eth_newPendingTransactionFilter\", []);\n this._pendingFilter = pendingFilter;\n\n pendingFilter.then(function(filterId) {\n function poll() {\n self.send(\"eth_getFilterChanges\", [ filterId ]).then(function(hashes: Array) {\n if (self._pendingFilter != pendingFilter) { return null; }\n\n let seq = Promise.resolve();\n hashes.forEach(function(hash) {\n // @TODO: This should be garbage collected at some point... How? When?\n self._emitted[\"t:\" + hash.toLowerCase()] = \"pending\";\n seq = seq.then(function() {\n return self.getTransaction(hash).then(function(tx) {\n self.emit(\"pending\", tx);\n return null;\n });\n });\n });\n\n return seq.then(function() {\n return timer(1000);\n });\n }).then(function() {\n if (self._pendingFilter != pendingFilter) {\n self.send(\"eth_uninstallFilter\", [ filterId ]);\n return;\n }\n setTimeout(function() { poll(); }, 0);\n\n return null;\n }).catch((error: Error) => { });\n }\n poll();\n\n return filterId;\n }).catch((error: Error) => { });\n }\n\n _stopEvent(event: Event): void {\n if (event.tag === \"pending\" && this.listenerCount(\"pending\") === 0) {\n this._pendingFilter = null;\n }\n super._stopEvent(event);\n }\n\n // Convert an ethers.js transaction into a JSON-RPC transaction\n // - gasLimit => gas\n // - All values hexlified\n // - All numeric values zero-striped\n // - All addresses are lowercased\n // NOTE: This allows a TransactionRequest, but all values should be resolved\n // before this is called\n // @TODO: This will likely be removed in future versions and prepareRequest\n // will be the preferred method for this.\n static hexlifyTransaction(transaction: TransactionRequest, allowExtra?: { [key: string]: boolean }): { [key: string]: string | AccessList } {\n // Check only allowed properties are given\n const allowed = shallowCopy(allowedTransactionKeys);\n if (allowExtra) {\n for (const key in allowExtra) {\n if (allowExtra[key]) { allowed[key] = true; }\n }\n }\n\n checkProperties(transaction, allowed);\n\n const result: { [key: string]: string | AccessList } = {};\n\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach(function(key) {\n if ((transaction)[key] == null) { return; }\n const value = hexValue(BigNumber.from((transaction)[key]));\n if (key === \"gasLimit\") { key = \"gas\"; }\n result[key] = value;\n });\n\n [\"from\", \"to\", \"data\"].forEach(function(key) {\n if ((transaction)[key] == null) { return; }\n result[key] = hexlify((transaction)[key]);\n });\n\n if ((transaction).accessList) {\n result[\"accessList\"] = accessListify((transaction).accessList);\n }\n\n return result;\n }\n}\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\n\nlet WS: any = null;\n\ntry {\n WS = (WebSocket as any);\n if (WS == null) { throw new Error(\"inject please\"); }\n} catch (error) {\n const logger = new Logger(version);\n WS = function() {\n logger.throwError(\"WebSockets not supported in this environment\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new WebSocket()\"\n });\n }\n}\n//export default WS;\n//module.exports = WS;\nexport { WS as WebSocket };\n","\"use strict\";\n\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { Network, Networkish } from \"@ethersproject/networks\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Event } from \"./base-provider\";\nimport { JsonRpcProvider } from \"./json-rpc-provider\";\nimport { WebSocket } from \"./ws\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n/**\n * Notes:\n *\n * This provider differs a bit from the polling providers. One main\n * difference is how it handles consistency. The polling providers\n * will stall responses to ensure a consistent state, while this\n * WebSocket provider assumes the connected backend will manage this.\n *\n * For example, if a polling provider emits an event which indicates\n * the event occurred in blockhash XXX, a call to fetch that block by\n * its hash XXX, if not present will retry until it is present. This\n * can occur when querying a pool of nodes that are mildly out of sync\n * with each other.\n */\n\nlet NextId = 1;\n\nexport type InflightRequest = {\n callback: (error: Error, result: any) => void;\n payload: string;\n};\n\nexport type Subscription = {\n tag: string;\n processFunc: (payload: any) => void;\n};\n\nexport interface WebSocketLike {\n onopen: ((...args: Array) => any) | null;\n onmessage: ((...args: Array) => any) | null;\n onerror: ((...args: Array) => any) | null;\n\n readyState: number;\n\n send(payload: any): void;\n close(code?: number, reason?: string): void;\n}\n\n// For more info about the Real-time Event API see:\n// https://geth.ethereum.org/docs/rpc/pubsub\n\nexport class WebSocketProvider extends JsonRpcProvider {\n readonly _websocket: any;\n readonly _requests: { [ name: string ]: InflightRequest };\n readonly _detectNetwork: Promise;\n\n // Maps event tag to subscription ID (we dedupe identical events)\n readonly _subIds: { [ tag: string ]: Promise };\n\n // Maps Subscription ID to Subscription\n readonly _subs: { [ name: string ]: Subscription };\n\n _wsReady: boolean;\n\n constructor(url: string | WebSocketLike, network?: Networkish) {\n\n // This will be added in the future; please open an issue to expedite\n if (network === \"any\") {\n logger.throwError(\"WebSocketProvider does not support 'any' network yet\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"network:any\"\n });\n }\n\n if (typeof(url) === \"string\") {\n super(url, network);\n } else {\n super(\"_websocket\", network);\n }\n\n this._pollingInterval = -1;\n\n this._wsReady = false;\n\n if (typeof(url) === \"string\") {\n defineReadOnly(this, \"_websocket\", new WebSocket(this.connection.url));\n } else {\n defineReadOnly(this, \"_websocket\", url);\n }\n\n defineReadOnly(this, \"_requests\", { });\n defineReadOnly(this, \"_subs\", { });\n defineReadOnly(this, \"_subIds\", { });\n defineReadOnly(this, \"_detectNetwork\", super.detectNetwork());\n\n // Stall sending requests until the socket is open...\n this.websocket.onopen = () => {\n this._wsReady = true;\n Object.keys(this._requests).forEach((id) => {\n this.websocket.send(this._requests[id].payload);\n });\n };\n\n this.websocket.onmessage = (messageEvent: { data: string }) => {\n const data = messageEvent.data;\n const result = JSON.parse(data);\n if (result.id != null) {\n const id = String(result.id);\n const request = this._requests[id];\n delete this._requests[id];\n\n if (result.result !== undefined) {\n request.callback(null, result.result);\n\n this.emit(\"debug\", {\n action: \"response\",\n request: JSON.parse(request.payload),\n response: result.result,\n provider: this\n });\n\n } else {\n let error: Error = null;\n if (result.error) {\n error = new Error(result.error.message || \"unknown error\");\n defineReadOnly(error, \"code\", result.error.code || null);\n defineReadOnly(error, \"response\", data);\n } else {\n error = new Error(\"unknown error\");\n }\n\n request.callback(error, undefined);\n\n this.emit(\"debug\", {\n action: \"response\",\n error: error,\n request: JSON.parse(request.payload),\n provider: this\n });\n\n }\n\n } else if (result.method === \"eth_subscription\") {\n // Subscription...\n const sub = this._subs[result.params.subscription];\n if (sub) {\n //this.emit.apply(this, );\n sub.processFunc(result.params.result)\n }\n\n } else {\n console.warn(\"this should not happen\");\n }\n };\n\n // This Provider does not actually poll, but we want to trigger\n // poll events for things that depend on them (like stalling for\n // block and transaction lookups)\n const fauxPoll = setInterval(() => {\n this.emit(\"poll\");\n }, 1000);\n if (fauxPoll.unref) { fauxPoll.unref(); }\n }\n\n // Cannot narrow the type of _websocket, as that is not backwards compatible\n // so we add a getter and let the WebSocket be a public API.\n get websocket(): WebSocketLike { return this._websocket; }\n\n detectNetwork(): Promise {\n return this._detectNetwork;\n }\n\n get pollingInterval(): number {\n return 0;\n }\n\n resetEventsBlock(blockNumber: number): void {\n logger.throwError(\"cannot reset events block on WebSocketProvider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"resetEventBlock\"\n });\n }\n\n set pollingInterval(value: number) {\n logger.throwError(\"cannot set polling interval on WebSocketProvider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setPollingInterval\"\n });\n }\n\n async poll(): Promise {\n return null;\n }\n\n set polling(value: boolean) {\n if (!value) { return; }\n\n logger.throwError(\"cannot set polling on WebSocketProvider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setPolling\"\n });\n }\n\n send(method: string, params?: Array): Promise {\n const rid = NextId++;\n\n return new Promise((resolve, reject) => {\n function callback(error: Error, result: any) {\n if (error) { return reject(error); }\n return resolve(result);\n }\n\n const payload = JSON.stringify({\n method: method,\n params: params,\n id: rid,\n jsonrpc: \"2.0\"\n });\n\n this.emit(\"debug\", {\n action: \"request\",\n request: JSON.parse(payload),\n provider: this\n });\n\n this._requests[String(rid)] = { callback, payload };\n\n if (this._wsReady) { this.websocket.send(payload); }\n });\n }\n\n static defaultUrl(): string {\n return \"ws:/\\/localhost:8546\";\n }\n\n async _subscribe(tag: string, param: Array, processFunc: (result: any) => void): Promise {\n let subIdPromise = this._subIds[tag];\n if (subIdPromise == null) {\n subIdPromise = Promise.all(param).then((param) => {\n return this.send(\"eth_subscribe\", param);\n });\n this._subIds[tag] = subIdPromise;\n }\n const subId = await subIdPromise;\n this._subs[subId] = { tag, processFunc };\n }\n\n _startEvent(event: Event): void {\n switch (event.type) {\n case \"block\":\n this._subscribe(\"block\", [ \"newHeads\" ], (result: any) => {\n const blockNumber = BigNumber.from(result.number).toNumber();\n this._emitted.block = blockNumber;\n this.emit(\"block\", blockNumber);\n });\n break;\n\n case \"pending\":\n this._subscribe(\"pending\", [ \"newPendingTransactions\" ], (result: any) => {\n this.emit(\"pending\", result);\n });\n break;\n\n case \"filter\":\n this._subscribe(event.tag, [ \"logs\", this._getFilter(event.filter) ], (result: any) => {\n if (result.removed == null) { result.removed = false; }\n this.emit(event.filter, this.formatter.filterLog(result));\n });\n break;\n\n case \"tx\": {\n const emitReceipt = (event: Event) => {\n const hash = event.hash;\n this.getTransactionReceipt(hash).then((receipt) => {\n if (!receipt) { return; }\n this.emit(hash, receipt);\n });\n };\n\n // In case it is already mined\n emitReceipt(event);\n\n // To keep things simple, we start up a single newHeads subscription\n // to keep an eye out for transactions we are watching for.\n // Starting a subscription for an event (i.e. \"tx\") that is already\n // running is (basically) a nop.\n this._subscribe(\"tx\", [ \"newHeads\" ], (result: any) => {\n this._events.filter((e) => (e.type === \"tx\")).forEach(emitReceipt);\n });\n break;\n }\n\n // Nothing is needed\n case \"debug\":\n case \"poll\":\n case \"willPoll\":\n case \"didPoll\":\n case \"error\":\n break;\n\n default:\n console.log(\"unhandled:\", event);\n break;\n }\n }\n\n _stopEvent(event: Event): void {\n let tag = event.tag;\n\n if (event.type === \"tx\") {\n // There are remaining transaction event listeners\n if (this._events.filter((e) => (e.type === \"tx\")).length) {\n return;\n }\n tag = \"tx\";\n } else if (this.listenerCount(event.event)) {\n // There are remaining event listeners\n return;\n }\n\n const subId = this._subIds[tag];\n if (!subId) { return; }\n\n delete this._subIds[tag];\n subId.then((subId) => {\n if (!this._subs[subId]) { return; }\n delete this._subs[subId];\n this.send(\"eth_unsubscribe\", [ subId ]);\n });\n }\n\n async destroy(): Promise {\n // Wait until we have connected before trying to disconnect\n if (this.websocket.readyState === WebSocket.CONNECTING) {\n await (new Promise((resolve) => {\n this.websocket.onopen = function() {\n resolve(true);\n };\n\n this.websocket.onerror = function() {\n resolve(false);\n };\n }));\n }\n\n // Hangup\n // See: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes\n this.websocket.close(1000);\n }\n}\n","\n\"use strict\";\n\nimport { Network, Networkish } from \"@ethersproject/networks\";\nimport { defineReadOnly, getStatic } from \"@ethersproject/properties\";\nimport { ConnectionInfo } from \"@ethersproject/web\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { CommunityResourcable } from \"./formatter\";\nimport { JsonRpcProvider, JsonRpcSigner } from \"./json-rpc-provider\";\n\ntype getUrlFunc = (network: Network, apiKey: string) => string | ConnectionInfo;\n\n// A StaticJsonRpcProvider is useful when you *know* for certain that\n// the backend will never change, as it never calls eth_chainId to\n// verify its backend. However, if the backend does change, the effects\n// are undefined and may include:\n// - inconsistent results\n// - locking up the UI\n// - block skew warnings\n// - wrong results\n// If the network is not explicit (i.e. auto-detection is expected), the\n// node MUST be running and available to respond to requests BEFORE this\n// is instantiated.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n async detectNetwork(): Promise {\n let network = this.network;\n if (network == null) {\n network = await super.detectNetwork();\n\n if (!network) {\n logger.throwError(\"no network detected\", Logger.errors.UNKNOWN_ERROR, { });\n }\n\n // If still not set, set it\n if (this._network == null) {\n // A static network does not support \"any\"\n defineReadOnly(this, \"_network\", network);\n\n this.emit(\"network\", network, null);\n }\n }\n return network;\n }\n}\n\nexport abstract class UrlJsonRpcProvider extends StaticJsonRpcProvider implements CommunityResourcable {\n readonly apiKey: any;\n\n constructor(network?: Networkish, apiKey?: any) {\n logger.checkAbstract(new.target, UrlJsonRpcProvider);\n\n // Normalize the Network and API Key\n network = getStatic<(network: Networkish) => Network>(new.target, \"getNetwork\")(network);\n apiKey = getStatic<(apiKey: string) => string>(new.target, \"getApiKey\")(apiKey);\n\n const connection = getStatic(new.target, \"getUrl\")(network, apiKey);\n\n super(connection, network);\n\n if (typeof(apiKey) === \"string\") {\n defineReadOnly(this, \"apiKey\", apiKey);\n } else if (apiKey != null) {\n Object.keys(apiKey).forEach((key) => {\n defineReadOnly(this, key, apiKey[key]);\n });\n }\n }\n\n _startPending(): void {\n logger.warn(\"WARNING: API provider does not support pending filters\");\n }\n\n isCommunityResource(): boolean {\n return false;\n }\n\n getSigner(address?: string): JsonRpcSigner {\n return logger.throwError(\n \"API provider does not support signing\",\n Logger.errors.UNSUPPORTED_OPERATION,\n { operation: \"getSigner\" }\n );\n }\n\n listAccounts(): Promise> {\n return Promise.resolve([]);\n }\n\n // Return a defaultApiKey if null, otherwise validate the API key\n static getApiKey(apiKey: any): any {\n return apiKey;\n }\n\n // Returns the url or connection for the given network and API key. The\n // API key will have been sanitized by the getApiKey first, so any validation\n // or transformations can be done there.\n static getUrl(network: Network, apiKey: any): string | ConnectionInfo {\n return logger.throwError(\"not implemented; sub-classes must override getUrl\", Logger.errors.NOT_IMPLEMENTED, {\n operation: \"getUrl\"\n });\n }\n}\n","\"use strict\";\n\nimport { Network, Networkish } from \"@ethersproject/networks\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { ConnectionInfo } from \"@ethersproject/web\";\n\nimport { CommunityResourcable, showThrottleMessage } from \"./formatter\";\nimport { WebSocketProvider } from \"./websocket-provider\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n\n// This key was provided to ethers.js by Alchemy to be used by the\n// default provider, but it is recommended that for your own\n// production environments, that you acquire your own API key at:\n// https://dashboard.alchemyapi.io\n\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\"\n\nexport class AlchemyWebSocketProvider extends WebSocketProvider implements CommunityResourcable {\n readonly apiKey: string;\n\n constructor(network?: Networkish, apiKey?: any) {\n const provider = new AlchemyProvider(network, apiKey);\n\n const url = provider.connection.url.replace(/^http/i, \"ws\")\n .replace(\".alchemyapi.\", \".ws.alchemyapi.\");\n\n super(url, provider.network);\n defineReadOnly(this, \"apiKey\", provider.apiKey);\n }\n\n isCommunityResource(): boolean {\n return (this.apiKey === defaultApiKey);\n }\n}\n\nexport class AlchemyProvider extends UrlJsonRpcProvider {\n\n static getWebSocketProvider(network?: Networkish, apiKey?: any): AlchemyWebSocketProvider {\n return new AlchemyWebSocketProvider(network, apiKey);\n }\n\n static getApiKey(apiKey: any): any {\n if (apiKey == null) { return defaultApiKey; }\n if (apiKey && typeof(apiKey) !== \"string\") {\n logger.throwArgumentError(\"invalid apiKey\", \"apiKey\", apiKey);\n }\n return apiKey;\n }\n\n static getUrl(network: Network, apiKey: string): ConnectionInfo {\n let host = null;\n switch (network.name) {\n case \"homestead\":\n host = \"eth-mainnet.alchemyapi.io/v2/\";\n break;\n case \"ropsten\":\n host = \"eth-ropsten.alchemyapi.io/v2/\";\n break;\n case \"rinkeby\":\n host = \"eth-rinkeby.alchemyapi.io/v2/\";\n break;\n case \"goerli\":\n host = \"eth-goerli.alchemyapi.io/v2/\";\n break;\n case \"kovan\":\n host = \"eth-kovan.alchemyapi.io/v2/\";\n break;\n case \"matic\":\n host = \"polygon-mainnet.g.alchemy.com/v2/\";\n break;\n case \"maticmum\":\n host = \"polygon-mumbai.g.alchemy.com/v2/\";\n break;\n case \"arbitrum\":\n host = \"arb-mainnet.g.alchemy.com/v2/\";\n break;\n case \"arbitrum-rinkeby\":\n host = \"arb-rinkeby.g.alchemy.com/v2/\";\n break;\n case \"arbitrum-goerli\":\n host = \"arb-goerli.g.alchemy.com/v2/\";\n break;\n case \"optimism\":\n host = \"opt-mainnet.g.alchemy.com/v2/\";\n break;\n case \"optimism-kovan\":\n host = \"opt-kovan.g.alchemy.com/v2/\";\n break;\n case \"optimism-goerli\":\n host = \"opt-goerli.g.alchemy.com/v2/\"\n break;\n default:\n logger.throwArgumentError(\"unsupported network\", \"network\", arguments[0]);\n }\n\n return {\n allowGzip: true,\n url: (\"https:/\" + \"/\" + host + apiKey),\n throttleCallback: (attempt: number, url: string) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage();\n }\n return Promise.resolve(true);\n }\n };\n }\n\n isCommunityResource(): boolean {\n return (this.apiKey === defaultApiKey);\n }\n}\n","\nimport { Network } from \"@ethersproject/networks\";\n\nimport { showThrottleMessage } from \"./formatter\";\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n\nimport type { ConnectionInfo } from \"@ethersproject/web\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\n\nfunction getHost(name: string): string {\n switch (name) {\n case \"homestead\":\n return \"rpc.ankr.com/eth/\";\n case \"ropsten\":\n return \"rpc.ankr.com/eth_ropsten/\";\n case \"rinkeby\":\n return \"rpc.ankr.com/eth_rinkeby/\";\n case \"goerli\":\n return \"rpc.ankr.com/eth_goerli/\";\n\n case \"matic\":\n return \"rpc.ankr.com/polygon/\";\n\n case \"arbitrum\":\n return \"rpc.ankr.com/arbitrum/\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"name\", name);\n}\n\nexport class AnkrProvider extends UrlJsonRpcProvider {\n readonly apiKey: string;\n\n isCommunityResource(): boolean {\n return (this.apiKey === defaultApiKey);\n }\n\n static getApiKey(apiKey: any): any {\n if (apiKey == null) { return defaultApiKey; }\n return apiKey;\n }\n\n static getUrl(network: Network, apiKey: any): ConnectionInfo {\n if (apiKey == null) { apiKey = defaultApiKey; }\n const connection: ConnectionInfo = {\n allowGzip: true,\n url: (\"https:/\\/\" + getHost(network.name) + apiKey),\n throttleCallback: (attempt: number, url: string) => {\n if (apiKey.apiKey === defaultApiKey) {\n showThrottleMessage();\n }\n return Promise.resolve(true);\n }\n };\n\n if (apiKey.projectSecret != null) {\n connection.user = \"\";\n connection.password = apiKey.projectSecret\n }\n\n return connection;\n }\n}\n","\"use strict\";\n\nimport { Network } from \"@ethersproject/networks\";\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport class CloudflareProvider extends UrlJsonRpcProvider {\n\n static getApiKey(apiKey: any): any {\n if (apiKey != null) {\n logger.throwArgumentError(\"apiKey not supported for cloudflare\", \"apiKey\", apiKey);\n }\n return null;\n }\n\n static getUrl(network: Network, apiKey?: any): string {\n let host = null;\n switch (network.name) {\n case \"homestead\":\n host = \"https://cloudflare-eth.com/\";\n break;\n default:\n logger.throwArgumentError(\"unsupported network\", \"network\", arguments[0]);\n }\n\n return host;\n }\n\n async perform(method: string, params: any): Promise {\n // The Cloudflare provider does not support eth_blockNumber,\n // so we get the latest block and pull it from that\n if (method === \"getBlockNumber\") {\n const block = await super.perform(\"getBlock\", { blockTag: \"latest\" });\n return block.number;\n }\n\n return super.perform(method, params);\n }\n}\n","\"use strict\";\n\nimport { BlockTag, TransactionRequest, TransactionResponse } from \"@ethersproject/abstract-provider\";\nimport { hexlify, hexValue, isHexString } from \"@ethersproject/bytes\";\nimport { Network, Networkish } from \"@ethersproject/networks\";\nimport { deepCopy, defineReadOnly } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { ConnectionInfo, fetchJson } from \"@ethersproject/web\";\n\nimport { showThrottleMessage } from \"./formatter\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { BaseProvider } from \"./base-provider\";\n\n\n// The transaction has already been sanitized by the calls in Provider\nfunction getTransactionPostData(transaction: TransactionRequest): Record {\n const result: Record = { };\n for (let key in transaction) {\n if ((transaction)[key] == null) { continue; }\n let value = (transaction)[key];\n if (key === \"type\" && value === 0) { continue; }\n\n // Quantity-types require no leading zero, unless 0\n if (({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true })[key]) {\n value = hexValue(hexlify(value));\n } else if (key === \"accessList\") {\n value = \"[\" + accessListify(value).map((set) => {\n return `{address:\"${ set.address }\",storageKeys:[\"${ set.storageKeys.join('\",\"') }\"]}`;\n }).join(\",\") + \"]\";\n } else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n}\n\nfunction getResult(result: { status?: number, message?: string, result?: any }): any {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n\n if (result.status != 1 || typeof(result.message) !== \"string\" || !result.message.match(/^OK/)) {\n const error: any = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n error.throttleRetry = true;\n }\n throw error;\n }\n\n return result.result;\n}\n\nfunction getJsonResult(result: { jsonrpc: string, result?: any, error?: { code?: number, data?: any, message?: string} } ): any {\n // This response indicates we are being throttled\n if (result && (result).status == 0 && (result).message == \"NOTOK\" && (result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n const error: any = new Error(\"throttled response\");\n error.result = JSON.stringify(result);\n error.throttleRetry = true;\n throw error;\n }\n\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error: any = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n\n if (result.error) {\n // @TODO: not any\n const error: any = new Error(result.error.message || \"unknown error\");\n if (result.error.code) { error.code = result.error.code; }\n if (result.error.data) { error.data = result.error.data; }\n throw error;\n }\n\n return result.result;\n}\n\n// The blockTag was normalized as a string by the Provider pre-perform operations\nfunction checkLogTag(blockTag: string): number | \"latest\" {\n if (blockTag === \"pending\") { throw new Error(\"pending not supported\"); }\n if (blockTag === \"latest\") { return blockTag; }\n\n return parseInt(blockTag.substring(2), 16);\n}\n\n\nfunction checkError(method: string, error: any, transaction: any): any {\n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && error.code === Logger.errors.SERVER_ERROR) {\n const e = error.error;\n\n // Etherscan keeps changing their string\n if (e && (e.message.match(/reverted/i) || e.message.match(/VM execution error/i))) {\n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) { data = \"0x\" + data.replace(/^.*0x/i, \"\"); }\n\n if (isHexString(data)) { return data; }\n\n logger.throwError(\"missing revert data in call exception\", Logger.errors.CALL_EXCEPTION, {\n error, data: \"0x\"\n });\n }\n }\n\n // Get the message from any nested error structure\n let message = error.message;\n if (error.code === Logger.errors.SERVER_ERROR) {\n if (error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n\n // \"Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.errors.INSUFFICIENT_FUNDS, {\n error, method, transaction\n });\n }\n\n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.errors.NONCE_EXPIRED, {\n error, method, transaction\n });\n }\n\n // \"Transaction gas price is too low. There is another transaction with same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.errors.REPLACEMENT_UNDERPRICED, {\n error, method, transaction\n });\n }\n\n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n error, method, transaction\n });\n }\n\n throw error;\n}\n\nexport class EtherscanProvider extends BaseProvider{\n readonly baseUrl: string;\n readonly apiKey: string | null;\n\n constructor(network?: Networkish, apiKey?: string) {\n super(network);\n\n defineReadOnly(this, \"baseUrl\", this.getBaseUrl());\n defineReadOnly(this, \"apiKey\", apiKey || null);\n }\n\n getBaseUrl(): string {\n switch(this.network ? this.network.name: \"invalid\") {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n case \"sepolia\":\n return \"https:/\\/api-sepolia.etherscan.io\";\n case \"optimism\":\n return \"https:/\\/api-optimistic.etherscan.io\";\n case \"optimism-kovan\":\n return \"https:/\\/api-kovan-optimistic.etherscan.io\";\n default:\n }\n\n return logger.throwArgumentError(\"unsupported network\", \"network\", this.network.name);\n }\n\n getUrl(module: string, params: Record): string {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${ key }=${ value }`\n }\n return accum\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${ this.apiKey }`: \"\");\n return `${ this.baseUrl }/api?module=${ module }${ query }${ apiKey }`;\n }\n\n getPostUrl(): string {\n return `${ this.baseUrl }/api`;\n }\n\n getPostData(module: string, params: Record): Record {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n\n async fetch(module: string, params: Record, post?: boolean): Promise {\n const url = (post ? this.getPostUrl(): this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params): null);\n const procFunc = (module === \"proxy\") ? getJsonResult: getResult;\n\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n\n const connection: ConnectionInfo = {\n url: url,\n throttleSlotInterval: 1000,\n throttleCallback: (attempt: number, url: string) => {\n if (this.isCommunityResource()) {\n showThrottleMessage();\n }\n return Promise.resolve(true);\n }\n };\n\n let payloadStr: string = null;\n if (payload) {\n connection.headers = { \"content-type\": \"application/x-www-form-urlencoded; charset=UTF-8\" };\n payloadStr = Object.keys(payload).map((key) => {\n return `${ key }=${ payload[key] }`\n }).join(\"&\");\n }\n\n const result = await fetchJson(connection, payloadStr, procFunc || getJsonResult);\n\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n\n return result;\n }\n\n async detectNetwork(): Promise {\n return this.network;\n }\n\n async perform(method: string, params: any): Promise {\n\n switch (method) {\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: params.address,\n tag: params.blockTag\n });\n\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: params.address,\n tag: params.blockTag\n });\n\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: params.address,\n tag: params.blockTag\n });\n\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: params.address,\n position: params.position,\n tag: params.blockTag\n });\n\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: params.signedTransaction\n }, true).catch((error) => {\n return checkError(\"sendTransaction\", error, params.signedTransaction);\n });\n\n case \"getBlock\":\n if (params.blockTag) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: params.blockTag,\n boolean: (params.includeTransactions ? \"true\": \"false\")\n });\n }\n throw new Error(\"getBlock by blockHash not implemented\");\n\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: params.transactionHash\n });\n\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: params.transactionHash\n });\n\n case \"call\": {\n if (params.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n\n const postData = getTransactionPostData(params.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n\n try {\n return await this.fetch(\"proxy\", postData, true);\n } catch (error) {\n return checkError(\"call\", error, params.transaction);\n }\n }\n\n case \"estimateGas\": {\n const postData = getTransactionPostData(params.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n\n try {\n return await this.fetch(\"proxy\", postData, true);\n } catch (error) {\n return checkError(\"estimateGas\", error, params.transaction);\n }\n }\n\n case \"getLogs\": {\n const args: Record = { action: \"getLogs\" }\n\n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n\n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n\n if (params.filter.address) {\n args.address = params.filter.address;\n }\n\n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n\n const logs: Array = await this.fetch(\"logs\", args);\n\n // Cache txHash => blockHash\n let blocks: { [tag: string]: string } = {};\n\n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) { continue; }\n if (blocks[log.blockNumber] == null) {\n const block = await this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n log.blockHash = blocks[log.blockNumber];\n }\n\n return logs;\n }\n\n case \"getEtherPrice\":\n if (this.network.name !== \"homestead\") { return 0.0; }\n return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n\n default:\n break;\n }\n\n return super.perform(method, params);\n }\n\n // Note: The `page` page parameter only allows pagination within the\n // 10,000 window available without a page and offset parameter\n // Error: Result window is too large, PageNo x Offset size must\n // be less than or equal to 10000\n async getHistory(addressOrName: string | Promise, startBlock?: BlockTag, endBlock?: BlockTag): Promise> {\n const params = {\n action: \"txlist\",\n address: (await this.resolveName(addressOrName)),\n startblock: ((startBlock == null) ? 0: startBlock),\n endblock: ((endBlock == null) ? 99999999: endBlock),\n sort: \"asc\"\n };\n\n const result = await this.fetch(\"account\", params);\n\n return result.map((tx: any) => {\n [\"contractAddress\", \"to\"].forEach(function(key) {\n if (tx[key] == \"\") { delete tx[key]; }\n });\n if (tx.creates == null && tx.contractAddress != null) {\n tx.creates = tx.contractAddress;\n }\n const item = this.formatter.transactionResponse(tx);\n if (tx.timeStamp) { item.timestamp = parseInt(tx.timeStamp); }\n return item;\n });\n }\n\n isCommunityResource(): boolean {\n return (this.apiKey == null);\n }\n}\n","\"use strict\";\n\nexport function shuffled(array: Array): Array {\n array = array.slice();\n\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n\n return array;\n}\n","\"use strict\";\n\nimport { Block, BlockWithTransactions, Provider } from \"@ethersproject/abstract-provider\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { Network } from \"@ethersproject/networks\";\nimport { deepCopy, defineReadOnly, shallowCopy } from \"@ethersproject/properties\";\nimport { shuffled } from \"@ethersproject/random\";\nimport { poll } from \"@ethersproject/web\";\n\nimport { BaseProvider } from \"./base-provider\";\nimport { isCommunityResource } from \"./formatter\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nfunction now() { return (new Date()).getTime(); }\n\n// Returns to network as long as all agree, or null if any is null.\n// Throws an error if any two networks do not match.\nfunction checkNetworks(networks: Array): Network {\n let result = null;\n\n for (let i = 0; i < networks.length; i++) {\n const network = networks[i];\n\n // Null! We do not know our network; bail.\n if (network == null) { return null; }\n\n if (result) {\n // Make sure the network matches the previous networks\n if (!(result.name === network.name && result.chainId === network.chainId &&\n ((result.ensAddress === network.ensAddress) || (result.ensAddress == null && network.ensAddress == null)))) {\n\n logger.throwArgumentError(\"provider mismatch\", \"networks\", networks);\n }\n } else {\n result = network;\n }\n }\n\n return result;\n}\n\nfunction median(values: Array, maxDelta?: number): number {\n values = values.slice().sort();\n const middle = Math.floor(values.length / 2);\n\n // Odd length; take the middle\n if (values.length % 2) {\n return values[middle];\n }\n\n // Even length; take the average of the two middle\n const a = values[middle - 1], b = values[middle];\n\n if (maxDelta != null && Math.abs(a - b) > maxDelta) {\n return null;\n }\n\n return (a + b) / 2;\n}\n\nfunction serialize(value: any): string {\n if (value === null) {\n return \"null\";\n } else if (typeof(value) === \"number\" || typeof(value) === \"boolean\") {\n return JSON.stringify(value);\n } else if (typeof(value) === \"string\") {\n return value;\n } else if (BigNumber.isBigNumber(value)) {\n return value.toString();\n } else if (Array.isArray(value)) {\n return JSON.stringify(value.map((i) => serialize(i)));\n } else if (typeof(value) === \"object\") {\n const keys = Object.keys(value);\n keys.sort();\n return \"{\" + keys.map((key) => {\n let v = value[key];\n if (typeof(v) === \"function\") {\n v = \"[function]\";\n } else {\n v = serialize(v);\n }\n return JSON.stringify(key) + \":\" + v;\n }).join(\",\") + \"}\";\n }\n\n throw new Error(\"unknown value type: \" + typeof(value));\n}\n\n// Next request ID to use for emitting debug info\nlet nextRid = 1;\n\n\nexport interface FallbackProviderConfig {\n // The Provider\n provider: Provider;\n\n // The priority to favour this Provider; lower values are used first (higher priority)\n priority?: number;\n\n // Timeout before also triggering the next provider; this does not stop\n // this provider and if its result comes back before a quorum is reached\n // it will be incorporated into the vote\n // - lower values will cause more network traffic but may result in a\n // faster result.\n stallTimeout?: number;\n\n // How much this provider contributes to the quorum; sometimes a specific\n // provider may be more reliable or trustworthy than others, but usually\n // this should be left as the default\n weight?: number;\n};\n\n// A Staller is used to provide a delay to give a Provider a chance to response\n// before asking the next Provider to try.\ntype Staller = {\n wait: (func: () => void) => Promise\n getPromise: () => Promise,\n cancel: () => void\n};\n\nfunction stall(duration: number): Staller {\n let cancel: () => void = null;\n\n let timer: NodeJS.Timer = null;\n let promise = >(new Promise((resolve) => {\n cancel = function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n resolve();\n }\n timer = setTimeout(cancel, duration);\n }));\n\n const wait = (func: () => void) => {\n promise = promise.then(func);\n return promise;\n }\n\n function getPromise(): Promise {\n return promise;\n }\n\n return { cancel, getPromise, wait };\n}\n\nconst ForwardErrors = [\n Logger.errors.CALL_EXCEPTION,\n Logger.errors.INSUFFICIENT_FUNDS,\n Logger.errors.NONCE_EXPIRED,\n Logger.errors.REPLACEMENT_UNDERPRICED,\n Logger.errors.UNPREDICTABLE_GAS_LIMIT\n];\n\nconst ForwardProperties = [\n \"address\",\n \"args\",\n \"errorArgs\",\n \"errorSignature\",\n \"method\",\n \"transaction\",\n];\n\n\n// @TODO: Make this an object with staller and cancel built-in\ninterface RunningConfig extends FallbackProviderConfig {\n start?: number;\n done?: boolean;\n cancelled?: boolean;\n runner?: Promise;\n staller?: Staller;\n result?: any;\n error?: Error;\n};\n\nfunction exposeDebugConfig(config: RunningConfig, now?: number): any {\n const result: any = {\n weight: config.weight\n };\n Object.defineProperty(result, \"provider\", { get: () => config.provider });\n if (config.start) { result.start = config.start; }\n if (now) { result.duration = (now - config.start); }\n if (config.done) {\n if (config.error) {\n result.error = config.error;\n } else {\n result.result = config.result || null;\n }\n }\n return result;\n}\n\nfunction normalizedTally(normalize: (value: any) => string, quorum: number): (configs: Array) => any {\n return function(configs: Array): any {\n\n // Count the votes for each result\n const tally: { [ key: string]: { count: number, result: any } } = { };\n configs.forEach((c) => {\n const value = normalize(c.result);\n if (!tally[value]) { tally[value] = { count: 0, result: c.result }; }\n tally[value].count++;\n });\n\n // Check for a quorum on any given result\n const keys = Object.keys(tally);\n for (let i = 0; i < keys.length; i++) {\n const check = tally[keys[i]];\n if (check.count >= quorum) {\n return check.result;\n }\n }\n\n // No quroum\n return undefined;\n }\n}\nfunction getProcessFunc(provider: FallbackProvider, method: string, params: { [ key: string ]: any }): (configs: Array) => any {\n\n let normalize = serialize;\n\n switch (method) {\n case \"getBlockNumber\":\n // Return the median value, unless there is (median + 1) is also\n // present, in which case that is probably true and the median\n // is going to be stale soon. In the event of a malicious node,\n // the lie will be true soon enough.\n return function(configs: Array): number {\n const values = configs.map((c) => c.result);\n\n // Get the median block number\n let blockNumber = median(configs.map((c) => c.result), 2);\n if (blockNumber == null) { return undefined; }\n\n blockNumber = Math.ceil(blockNumber);\n\n // If the next block height is present, its prolly safe to use\n if (values.indexOf(blockNumber + 1) >= 0) { blockNumber++; }\n\n // Don't ever roll back the blockNumber\n if (blockNumber >= provider._highestBlockNumber) {\n provider._highestBlockNumber = blockNumber;\n }\n\n return provider._highestBlockNumber;\n };\n\n case \"getGasPrice\":\n // Return the middle (round index up) value, similar to median\n // but do not average even entries and choose the higher.\n // Malicious actors must compromise 50% of the nodes to lie.\n return function(configs: Array): BigNumber {\n const values = configs.map((c) => c.result);\n values.sort();\n return values[Math.floor(values.length / 2)];\n }\n\n case \"getEtherPrice\":\n // Returns the median price. Malicious actors must compromise at\n // least 50% of the nodes to lie (in a meaningful way).\n return function(configs: Array): number {\n return median(configs.map((c) => c.result));\n }\n\n // No additional normalizing required; serialize is enough\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"call\":\n case \"estimateGas\":\n case \"getLogs\":\n break;\n\n // We drop the confirmations from transactions as it is approximate\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n normalize = function(tx: any): string {\n if (tx == null) { return null; }\n\n tx = shallowCopy(tx);\n tx.confirmations = -1;\n return serialize(tx);\n }\n break;\n\n // We drop the confirmations from transactions as it is approximate\n case \"getBlock\":\n // We drop the confirmations from transactions as it is approximate\n if (params.includeTransactions) {\n normalize = function(block: BlockWithTransactions): string {\n if (block == null) { return null; }\n\n block = shallowCopy(block);\n block.transactions = block.transactions.map((tx) => {\n tx = shallowCopy(tx);\n tx.confirmations = -1;\n return tx;\n });\n return serialize(block);\n };\n } else {\n normalize = function(block: Block): string {\n if (block == null) { return null; }\n return serialize(block);\n }\n }\n break;\n\n default:\n throw new Error(\"unknown method: \" + method);\n }\n\n // Return the result if and only if the expected quorum is\n // satisfied and agreed upon for the final result.\n return normalizedTally(normalize, provider.quorum);\n\n}\n\n// If we are doing a blockTag query, we need to make sure the backend is\n// caught up to the FallbackProvider, before sending a request to it.\nasync function waitForSync(config: RunningConfig, blockNumber: number): Promise {\n const provider = (config.provider);\n\n if ((provider.blockNumber != null && provider.blockNumber >= blockNumber) || blockNumber === -1) {\n return provider;\n }\n\n return poll(() => {\n return new Promise((resolve, reject) => {\n setTimeout(function() {\n\n // We are synced\n if (provider.blockNumber >= blockNumber) { return resolve(provider); }\n\n // We're done; just quit\n if (config.cancelled) { return resolve(null); }\n\n // Try again, next block\n return resolve(undefined);\n }, 0);\n });\n }, { oncePoll: provider });\n}\n\nasync function getRunner(config: RunningConfig, currentBlockNumber: number, method: string, params: { [ key: string]: any }): Promise {\n let provider = config.provider;\n\n switch (method) {\n case \"getBlockNumber\":\n case \"getGasPrice\":\n return provider[method]();\n case \"getEtherPrice\":\n if ((provider).getEtherPrice) {\n return (provider).getEtherPrice();\n }\n break;\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = await waitForSync(config, currentBlockNumber)\n }\n return provider[method](params.address, params.blockTag || \"latest\");\n case \"getStorageAt\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = await waitForSync(config, currentBlockNumber)\n }\n return provider.getStorageAt(params.address, params.position, params.blockTag || \"latest\");\n case \"getBlock\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = await waitForSync(config, currentBlockNumber)\n }\n return provider[(params.includeTransactions ? \"getBlockWithTransactions\": \"getBlock\")](params.blockTag || params.blockHash);\n case \"call\":\n case \"estimateGas\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = await waitForSync(config, currentBlockNumber)\n }\n if (method === \"call\" && params.blockTag) {\n return provider[method](params.transaction, params.blockTag);\n }\n return provider[method](params.transaction);\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n return provider[method](params.transactionHash);\n case \"getLogs\": {\n let filter = params.filter;\n if ((filter.fromBlock && isHexString(filter.fromBlock)) || (filter.toBlock && isHexString(filter.toBlock))) {\n provider = await waitForSync(config, currentBlockNumber)\n }\n return provider.getLogs(filter);\n }\n }\n\n return logger.throwError(\"unknown method error\", Logger.errors.UNKNOWN_ERROR, {\n method: method,\n params: params\n });\n}\n\nexport class FallbackProvider extends BaseProvider {\n readonly providerConfigs: ReadonlyArray;\n readonly quorum: number;\n\n // Due to the highly asyncronous nature of the blockchain, we need\n // to make sure we never unroll the blockNumber due to our random\n // sample of backends\n _highestBlockNumber: number;\n\n constructor(providers: Array, quorum?: number) {\n if (providers.length === 0) {\n logger.throwArgumentError(\"missing providers\", \"providers\", providers);\n }\n\n const providerConfigs: Array = providers.map((configOrProvider, index) => {\n if (Provider.isProvider(configOrProvider)) {\n const stallTimeout = isCommunityResource(configOrProvider) ? 2000: 750;\n const priority = 1;\n return Object.freeze({ provider: configOrProvider, weight: 1, stallTimeout, priority });\n }\n\n const config: FallbackProviderConfig = shallowCopy(configOrProvider);\n\n if (config.priority == null) { config.priority = 1; }\n if (config.stallTimeout == null) {\n config.stallTimeout = isCommunityResource(configOrProvider) ? 2000: 750;\n }\n if (config.weight == null) { config.weight = 1; }\n\n const weight = config.weight;\n if (weight % 1 || weight > 512 || weight < 1) {\n logger.throwArgumentError(\"invalid weight; must be integer in [1, 512]\", `providers[${ index }].weight`, weight);\n }\n\n return Object.freeze(config);\n });\n\n const total = providerConfigs.reduce((accum, c) => (accum + c.weight), 0);\n\n if (quorum == null) {\n quorum = total / 2;\n } else if (quorum > total) {\n logger.throwArgumentError(\"quorum will always fail; larger than total weight\", \"quorum\", quorum);\n }\n\n // Are all providers' networks are known\n let networkOrReady: Network | Promise = checkNetworks(providerConfigs.map((c) => ((c.provider)).network));\n\n // Not all networks are known; we must stall\n if (networkOrReady == null) {\n networkOrReady = new Promise((resolve, reject) => {\n setTimeout(() => {\n this.detectNetwork().then(resolve, reject);\n }, 0);\n });\n }\n\n super(networkOrReady);\n\n // Preserve a copy, so we do not get mutated\n defineReadOnly(this, \"providerConfigs\", Object.freeze(providerConfigs));\n defineReadOnly(this, \"quorum\", quorum);\n\n this._highestBlockNumber = -1;\n }\n\n async detectNetwork(): Promise {\n const networks = await Promise.all(this.providerConfigs.map((c) => c.provider.getNetwork()));\n return checkNetworks(networks);\n }\n\n async perform(method: string, params: { [name: string]: any }): Promise {\n // Sending transactions is special; always broadcast it to all backends\n if (method === \"sendTransaction\") {\n const results: Array = await Promise.all(this.providerConfigs.map((c) => {\n return c.provider.sendTransaction(params.signedTransaction).then((result) => {\n return result.hash;\n }, (error) => {\n return error;\n });\n }));\n\n // Any success is good enough (other errors are likely \"already seen\" errors\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n if (typeof(result) === \"string\") { return result; }\n }\n\n // They were all an error; pick the first error\n throw results[0];\n }\n\n // We need to make sure we are in sync with our backends, so we need\n // to know this before we can make a lot of calls\n if (this._highestBlockNumber === -1 && method !== \"getBlockNumber\") {\n await this.getBlockNumber();\n }\n\n const processFunc = getProcessFunc(this, method, params);\n\n // Shuffle the providers and then sort them by their priority; we\n // shallowCopy them since we will store the result in them too\n const configs: Array = shuffled(this.providerConfigs.map(shallowCopy));\n configs.sort((a, b) => (a.priority - b.priority));\n\n const currentBlockNumber = this._highestBlockNumber;\n\n let i = 0;\n let first = true;\n while (true) {\n const t0 = now();\n\n // Compute the inflight weight (exclude anything past)\n let inflightWeight = configs.filter((c) => (c.runner && ((t0 - c.start) < c.stallTimeout)))\n .reduce((accum, c) => (accum + c.weight), 0);\n\n // Start running enough to meet quorum\n while (inflightWeight < this.quorum && i < configs.length) {\n const config = configs[i++];\n\n const rid = nextRid++;\n\n config.start = now();\n config.staller = stall(config.stallTimeout);\n config.staller.wait(() => { config.staller = null; });\n\n config.runner = getRunner(config, currentBlockNumber, method, params).then((result) => {\n config.done = true;\n config.result = result;\n\n if (this.listenerCount(\"debug\")) {\n this.emit(\"debug\", {\n action: \"request\",\n rid: rid,\n backend: exposeDebugConfig(config, now()),\n request: { method: method, params: deepCopy(params) },\n provider: this\n });\n }\n\n }, (error) => {\n config.done = true;\n config.error = error;\n\n if (this.listenerCount(\"debug\")) {\n this.emit(\"debug\", {\n action: \"request\",\n rid: rid,\n backend: exposeDebugConfig(config, now()),\n request: { method: method, params: deepCopy(params) },\n provider: this\n });\n }\n });\n\n if (this.listenerCount(\"debug\")) {\n this.emit(\"debug\", {\n action: \"request\",\n rid: rid,\n backend: exposeDebugConfig(config, null),\n request: { method: method, params: deepCopy(params) },\n provider: this\n });\n }\n\n inflightWeight += config.weight;\n }\n\n // Wait for anything meaningful to finish or stall out\n const waiting: Array> = [ ];\n configs.forEach((c) => {\n if (c.done || !c.runner) { return; }\n waiting.push(c.runner);\n if (c.staller) { waiting.push(c.staller.getPromise()); }\n });\n\n if (waiting.length) { await Promise.race(waiting); }\n\n // Check the quorum and process the results; the process function\n // may additionally decide the quorum is not met\n const results = configs.filter((c) => (c.done && c.error == null));\n if (results.length >= this.quorum) {\n const result = processFunc(results);\n if (result !== undefined) {\n // Shut down any stallers\n configs.forEach(c => {\n if (c.staller) { c.staller.cancel(); }\n c.cancelled = true;\n });\n return result;\n }\n if (!first) { await stall(100).getPromise(); }\n first = false;\n }\n\n // No result, check for errors that should be forwarded\n const errors = configs.reduce((accum, c) => {\n if (!c.done || c.error == null) { return accum; }\n\n const code = ((c.error)).code;\n if (ForwardErrors.indexOf(code) >= 0) {\n if (!accum[code]) { accum[code] = { error: c.error, weight: 0 }; }\n accum[code].weight += c.weight;\n }\n\n return accum;\n }, <{ [ code: string ]: { error: Error, weight: number } }>({ }));\n\n Object.keys(errors).forEach((errorCode: string) => {\n const tally = errors[errorCode];\n if (tally.weight < this.quorum) { return; }\n\n // Shut down any stallers\n configs.forEach(c => {\n if (c.staller) { c.staller.cancel(); }\n c.cancelled = true;\n });\n\n const e = (tally.error);\n\n const props: { [ name: string ]: any } = { };\n ForwardProperties.forEach((name) => {\n if (e[name] == null) { return; }\n props[name] = e[name];\n });\n\n logger.throwError(e.reason || e.message, errorCode, props);\n });\n\n // All configs have run to completion; we will never get more data\n if (configs.filter((c) => !c.done).length === 0) { break; }\n }\n\n // Shut down any stallers; shouldn't be any\n configs.forEach(c => {\n if (c.staller) { c.staller.cancel(); }\n c.cancelled = true;\n });\n\n return logger.throwError(\"failed to meet quorum\", Logger.errors.SERVER_ERROR, {\n method: method,\n params: params,\n //results: configs.map((c) => c.result),\n //errors: configs.map((c) => c.error),\n results: configs.map((c) => exposeDebugConfig(c)),\n provider: this\n });\n }\n}\n","\"use strict\";\n\nconst IpcProvider: any = null;\n\nexport {\n IpcProvider\n};\n","\"use strict\";\n\nimport { Network, Networkish } from \"@ethersproject/networks\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { ConnectionInfo } from \"@ethersproject/web\";\n\nimport { WebSocketProvider } from \"./websocket-provider\";\nimport { CommunityResourcable, showThrottleMessage } from \"./formatter\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n\n\nconst defaultProjectId = \"84842078b09946638c03157f83405213\"\n\nexport class InfuraWebSocketProvider extends WebSocketProvider implements CommunityResourcable {\n readonly apiKey: string;\n readonly projectId: string;\n readonly projectSecret: string;\n\n constructor(network?: Networkish, apiKey?: any) {\n const provider = new InfuraProvider(network, apiKey);\n const connection = provider.connection;\n if (connection.password) {\n logger.throwError(\"INFURA WebSocket project secrets unsupported\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"InfuraProvider.getWebSocketProvider()\"\n });\n }\n\n const url = connection.url.replace(/^http/i, \"ws\").replace(\"/v3/\", \"/ws/v3/\");\n super(url, network);\n\n defineReadOnly(this, \"apiKey\", provider.projectId);\n defineReadOnly(this, \"projectId\", provider.projectId);\n defineReadOnly(this, \"projectSecret\", provider.projectSecret);\n }\n\n isCommunityResource(): boolean {\n return (this.projectId === defaultProjectId);\n }\n}\n\nexport class InfuraProvider extends UrlJsonRpcProvider {\n readonly projectId: string;\n readonly projectSecret: string;\n\n static getWebSocketProvider(network?: Networkish, apiKey?: any): InfuraWebSocketProvider {\n return new InfuraWebSocketProvider(network, apiKey);\n }\n\n static getApiKey(apiKey: any): any {\n const apiKeyObj: { apiKey: string, projectId: string, projectSecret: string } = {\n apiKey: defaultProjectId,\n projectId: defaultProjectId,\n projectSecret: null\n };\n\n if (apiKey == null) { return apiKeyObj; }\n\n if (typeof(apiKey) === \"string\") {\n apiKeyObj.projectId = apiKey;\n\n } else if (apiKey.projectSecret != null) {\n logger.assertArgument((typeof(apiKey.projectId) === \"string\"),\n \"projectSecret requires a projectId\", \"projectId\", apiKey.projectId);\n logger.assertArgument((typeof(apiKey.projectSecret) === \"string\"),\n \"invalid projectSecret\", \"projectSecret\", \"[REDACTED]\");\n\n apiKeyObj.projectId = apiKey.projectId;\n apiKeyObj.projectSecret = apiKey.projectSecret;\n\n } else if (apiKey.projectId) {\n apiKeyObj.projectId = apiKey.projectId;\n }\n\n apiKeyObj.apiKey = apiKeyObj.projectId;\n\n return apiKeyObj;\n }\n\n static getUrl(network: Network, apiKey: any): ConnectionInfo {\n let host: string = null;\n switch(network ? network.name: \"unknown\") {\n case \"homestead\":\n host = \"mainnet.infura.io\";\n break;\n case \"ropsten\":\n host = \"ropsten.infura.io\";\n break;\n case \"rinkeby\":\n host = \"rinkeby.infura.io\";\n break;\n case \"kovan\":\n host = \"kovan.infura.io\";\n break;\n case \"goerli\":\n host = \"goerli.infura.io\";\n break;\n case \"sepolia\":\n host = \"sepolia.infura.io\";\n break;\n case \"matic\":\n host = \"polygon-mainnet.infura.io\";\n break;\n case \"maticmum\":\n host = \"polygon-mumbai.infura.io\";\n break;\n case \"optimism\":\n host = \"optimism-mainnet.infura.io\";\n break;\n case \"optimism-kovan\":\n host = \"optimism-kovan.infura.io\";\n break;\n case \"arbitrum\":\n host = \"arbitrum-mainnet.infura.io\";\n break;\n case \"arbitrum-rinkeby\":\n host = \"arbitrum-rinkeby.infura.io\";\n break;\n default:\n logger.throwError(\"unsupported network\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"network\",\n value: network\n });\n }\n\n const connection: ConnectionInfo = {\n allowGzip: true,\n url: (\"https:/\" + \"/\" + host + \"/v3/\" + apiKey.projectId),\n throttleCallback: (attempt: number, url: string) => {\n if (apiKey.projectId === defaultProjectId) {\n showThrottleMessage();\n }\n return Promise.resolve(true);\n }\n };\n\n if (apiKey.projectSecret != null) {\n connection.user = \"\";\n connection.password = apiKey.projectSecret\n }\n\n return connection;\n }\n\n isCommunityResource(): boolean {\n return (this.projectId === defaultProjectId);\n }\n}\n","\nimport { deepCopy } from \"@ethersproject/properties\";\nimport { fetchJson } from \"@ethersproject/web\";\n\nimport { JsonRpcProvider } from \"./json-rpc-provider\";\n\n// Experimental\n\nexport class JsonRpcBatchProvider extends JsonRpcProvider {\n _pendingBatchAggregator: NodeJS.Timer;\n _pendingBatch: Array<{\n request: { method: string, params: Array, id: number, jsonrpc: \"2.0\" },\n resolve: (result: any) => void,\n reject: (error: Error) => void\n }>;\n\n send(method: string, params: Array): Promise {\n const request = {\n method: method,\n params: params,\n id: (this._nextId++),\n jsonrpc: \"2.0\"\n };\n\n if (this._pendingBatch == null) {\n this._pendingBatch = [ ];\n }\n\n const inflightRequest: any = { request, resolve: null, reject: null };\n\n const promise = new Promise((resolve, reject) => {\n inflightRequest.resolve = resolve;\n inflightRequest.reject = reject;\n });\n\n this._pendingBatch.push(inflightRequest);\n\n if (!this._pendingBatchAggregator) {\n // Schedule batch for next event loop + short duration\n this._pendingBatchAggregator = setTimeout(() => {\n\n // Get teh current batch and clear it, so new requests\n // go into the next batch\n const batch = this._pendingBatch;\n this._pendingBatch = null;\n this._pendingBatchAggregator = null;\n\n // Get the request as an array of requests\n const request = batch.map((inflight) => inflight.request);\n\n this.emit(\"debug\", {\n action: \"requestBatch\",\n request: deepCopy(request),\n provider: this\n });\n\n return fetchJson(this.connection, JSON.stringify(request)).then((result) => {\n this.emit(\"debug\", {\n action: \"response\",\n request: request,\n response: result,\n provider: this\n });\n\n // For each result, feed it to the correct Promise, depending\n // on whether it was a success or error\n batch.forEach((inflightRequest, index) => {\n const payload = result[index];\n if (payload.error) {\n const error = new Error(payload.error.message);\n (error).code = payload.error.code;\n (error).data = payload.error.data;\n inflightRequest.reject(error);\n } else {\n inflightRequest.resolve(payload.result);\n }\n });\n\n }, (error) => {\n this.emit(\"debug\", {\n action: \"response\",\n error: error,\n request: request,\n provider: this\n });\n\n batch.forEach((inflightRequest) => {\n inflightRequest.reject(error);\n });\n });\n\n }, 10);\n }\n\n return promise;\n }\n}\n","/* istanbul ignore file */\n\n\"use strict\";\n\nimport { Network } from \"@ethersproject/networks\";\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n// Special API key provided by Nodesmith for ethers.js\nconst defaultApiKey = \"ETHERS_JS_SHARED\";\n\nexport class NodesmithProvider extends UrlJsonRpcProvider {\n\n static getApiKey(apiKey: any): any {\n if (apiKey && typeof(apiKey) !== \"string\") {\n logger.throwArgumentError(\"invalid apiKey\", \"apiKey\", apiKey);\n }\n return apiKey || defaultApiKey;\n }\n\n static getUrl(network: Network, apiKey?: any): string {\n logger.warn(\"NodeSmith will be discontinued on 2019-12-20; please migrate to another platform.\");\n\n let host = null;\n switch (network.name) {\n case \"homestead\":\n host = \"https://ethereum.api.nodesmith.io/v1/mainnet/jsonrpc\";\n break;\n case \"ropsten\":\n host = \"https://ethereum.api.nodesmith.io/v1/ropsten/jsonrpc\";\n break;\n case \"rinkeby\":\n host = \"https://ethereum.api.nodesmith.io/v1/rinkeby/jsonrpc\";\n break;\n case \"goerli\":\n host = \"https://ethereum.api.nodesmith.io/v1/goerli/jsonrpc\";\n break;\n case \"kovan\":\n host = \"https://ethereum.api.nodesmith.io/v1/kovan/jsonrpc\";\n break;\n default:\n logger.throwArgumentError(\"unsupported network\", \"network\", arguments[0]);\n }\n\n return (host + \"?apiKey=\" + apiKey);\n }\n}\n","\"use strict\";\n\nimport { Network } from \"@ethersproject/networks\";\nimport { ConnectionInfo } from \"@ethersproject/web\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n\nconst defaultApplicationId = \"62e1ad51b37b8e00394bda3b\";\n\n\nexport class PocketProvider extends UrlJsonRpcProvider {\n readonly applicationId: string;\n readonly applicationSecretKey: string;\n readonly loadBalancer: boolean;\n\n static getApiKey(apiKey: any): any {\n const apiKeyObj: { applicationId: string, applicationSecretKey: string, loadBalancer: boolean } = {\n applicationId: null,\n loadBalancer: true,\n applicationSecretKey: null\n };\n\n // Parse applicationId and applicationSecretKey\n if (apiKey == null) {\n apiKeyObj.applicationId = defaultApplicationId;\n\n } else if (typeof (apiKey) === \"string\") {\n apiKeyObj.applicationId = apiKey;\n\n } else if (apiKey.applicationSecretKey != null) {\n apiKeyObj.applicationId = apiKey.applicationId;\n apiKeyObj.applicationSecretKey = apiKey.applicationSecretKey;\n\n } else if (apiKey.applicationId) {\n apiKeyObj.applicationId = apiKey.applicationId;\n\n } else {\n logger.throwArgumentError(\"unsupported PocketProvider apiKey\", \"apiKey\", apiKey);\n }\n\n return apiKeyObj;\n }\n\n static getUrl(network: Network, apiKey: any): ConnectionInfo {\n let host: string = null;\n switch (network ? network.name : \"unknown\") {\n case \"goerli\":\n host = \"eth-goerli.gateway.pokt.network\";\n break;\n case \"homestead\":\n host = \"eth-mainnet.gateway.pokt.network\";\n break;\n case \"kovan\":\n host = \"poa-kovan.gateway.pokt.network\";\n break;\n case \"matic\":\n host = \"poly-mainnet.gateway.pokt.network\";\n break;\n case \"maticmum\":\n host = \"polygon-mumbai-rpc.gateway.pokt.network\";\n break;\n case \"rinkeby\":\n host = \"eth-rinkeby.gateway.pokt.network\";\n break;\n case \"ropsten\":\n host = \"eth-ropsten.gateway.pokt.network\";\n break;\n default:\n logger.throwError(\"unsupported network\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"network\",\n value: network\n });\n }\n\n const url = `https:/\\/${ host }/v1/lb/${ apiKey.applicationId }`\n\n const connection: ConnectionInfo = { headers: { }, url };\n if (apiKey.applicationSecretKey != null) {\n connection.user = \"\";\n connection.password = apiKey.applicationSecretKey\n }\n\n return connection;\n }\n\n isCommunityResource(): boolean {\n return (this.applicationId === defaultApplicationId);\n }\n}\n","\"use strict\";\n\nimport { Networkish } from \"@ethersproject/networks\";\nimport { deepCopy, defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { JsonRpcProvider } from \"./json-rpc-provider\";\n\n// Exported Types\nexport type ExternalProvider = {\n isMetaMask?: boolean;\n isStatus?: boolean;\n host?: string;\n path?: string;\n sendAsync?: (request: { method: string, params?: Array }, callback: (error: any, response: any) => void) => void\n send?: (request: { method: string, params?: Array }, callback: (error: any, response: any) => void) => void\n request?: (request: { method: string, params?: Array }) => Promise\n}\n\nlet _nextId = 1;\n\nexport type JsonRpcFetchFunc = (method: string, params?: Array) => Promise;\n\ntype Web3LegacySend = (request: any, callback: (error: Error, response: any) => void) => void;\n\nfunction buildWeb3LegacyFetcher(provider: ExternalProvider, sendFunc: Web3LegacySend) : JsonRpcFetchFunc {\n const fetcher = \"Web3LegacyFetcher\";\n\n return function(method: string, params: Array): Promise {\n const request = {\n method: method,\n params: params,\n id: (_nextId++),\n jsonrpc: \"2.0\"\n };\n\n return new Promise((resolve, reject) => {\n this.emit(\"debug\", {\n action: \"request\",\n fetcher,\n request: deepCopy(request),\n provider: this\n });\n\n sendFunc(request, (error, response) => {\n\n if (error) {\n this.emit(\"debug\", {\n action: \"response\",\n fetcher,\n error,\n request,\n provider: this\n });\n\n return reject(error);\n }\n\n this.emit(\"debug\", {\n action: \"response\",\n fetcher,\n request,\n response,\n provider: this\n });\n\n if (response.error) {\n const error = new Error(response.error.message);\n (error).code = response.error.code;\n (error).data = response.error.data;\n return reject(error);\n }\n\n resolve(response.result);\n });\n });\n }\n}\n\nfunction buildEip1193Fetcher(provider: ExternalProvider): JsonRpcFetchFunc {\n return function(method: string, params: Array): Promise {\n if (params == null) { params = [ ]; }\n\n const request = { method, params };\n\n this.emit(\"debug\", {\n action: \"request\",\n fetcher: \"Eip1193Fetcher\",\n request: deepCopy(request),\n provider: this\n });\n\n return provider.request(request).then((response) => {\n this.emit(\"debug\", {\n action: \"response\",\n fetcher: \"Eip1193Fetcher\",\n request,\n response,\n provider: this\n });\n\n return response;\n\n }, (error) => {\n this.emit(\"debug\", {\n action: \"response\",\n fetcher: \"Eip1193Fetcher\",\n request,\n error,\n provider: this\n });\n\n throw error;\n });\n }\n}\n\nexport class Web3Provider extends JsonRpcProvider {\n readonly provider: ExternalProvider;\n readonly jsonRpcFetchFunc: JsonRpcFetchFunc;\n\n constructor(provider: ExternalProvider | JsonRpcFetchFunc, network?: Networkish) {\n if (provider == null) {\n logger.throwArgumentError(\"missing provider\", \"provider\", provider);\n }\n\n let path: string = null;\n let jsonRpcFetchFunc: JsonRpcFetchFunc = null;\n let subprovider: ExternalProvider = null;\n\n if (typeof(provider) === \"function\") {\n path = \"unknown:\";\n jsonRpcFetchFunc = provider;\n\n } else {\n path = provider.host || provider.path || \"\";\n if (!path && provider.isMetaMask) {\n path = \"metamask\";\n }\n\n subprovider = provider;\n\n if (provider.request) {\n if (path === \"\") { path = \"eip-1193:\"; }\n jsonRpcFetchFunc = buildEip1193Fetcher(provider);\n } else if (provider.sendAsync) {\n jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider));\n } else if (provider.send) {\n jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider));\n } else {\n logger.throwArgumentError(\"unsupported provider\", \"provider\", provider);\n }\n\n if (!path) { path = \"unknown:\"; }\n }\n\n super(path, network);\n\n defineReadOnly(this, \"jsonRpcFetchFunc\", jsonRpcFetchFunc);\n defineReadOnly(this, \"provider\", subprovider);\n }\n\n send(method: string, params: Array): Promise {\n return this.jsonRpcFetchFunc(method, params);\n }\n}\n","\"use strict\";\n\nimport {\n Block,\n BlockTag,\n EventType,\n FeeData,\n Filter,\n Log,\n Listener,\n Provider,\n TransactionReceipt,\n TransactionRequest,\n TransactionResponse\n} from \"@ethersproject/abstract-provider\";\n\nimport { getNetwork } from \"@ethersproject/networks\";\nimport { Network, Networkish } from \"@ethersproject/networks\";\n\nimport { BaseProvider, EnsProvider, EnsResolver, Resolver } from \"./base-provider\";\n\nimport { AlchemyProvider, AlchemyWebSocketProvider } from \"./alchemy-provider\";\nimport { AnkrProvider } from \"./ankr-provider\";\nimport { CloudflareProvider } from \"./cloudflare-provider\";\nimport { EtherscanProvider } from \"./etherscan-provider\";\nimport { FallbackProvider, FallbackProviderConfig } from \"./fallback-provider\";\nimport { IpcProvider } from \"./ipc-provider\";\nimport { InfuraProvider, InfuraWebSocketProvider } from \"./infura-provider\";\nimport { JsonRpcProvider, JsonRpcSigner } from \"./json-rpc-provider\";\nimport { JsonRpcBatchProvider } from \"./json-rpc-batch-provider\";\nimport { NodesmithProvider } from \"./nodesmith-provider\";\nimport { PocketProvider } from \"./pocket-provider\";\nimport { StaticJsonRpcProvider, UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\nimport { Web3Provider } from \"./web3-provider\";\nimport { WebSocketProvider } from \"./websocket-provider\";\nimport { ExternalProvider, JsonRpcFetchFunc } from \"./web3-provider\";\n\nimport { CommunityResourcable, Formatter, isCommunityResourcable, isCommunityResource, showThrottleMessage } from \"./formatter\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n////////////////////////\n// Helper Functions\n\nfunction getDefaultProvider(network?: Networkish, options?: any): BaseProvider {\n if (network == null) { network = \"homestead\"; }\n\n // If passed a URL, figure out the right type of provider based on the scheme\n if (typeof(network) === \"string\") {\n // @TODO: Add support for IpcProvider; maybe if it ends in \".ipc\"?\n\n // Handle http and ws (and their secure variants)\n const match = network.match(/^(ws|http)s?:/i);\n if (match) {\n switch (match[1].toLowerCase()) {\n case \"http\": case \"https\":\n return new JsonRpcProvider(network);\n case \"ws\": case \"wss\":\n return new WebSocketProvider(network);\n default:\n logger.throwArgumentError(\"unsupported URL scheme\", \"network\", network);\n }\n }\n }\n\n const n = getNetwork(network);\n if (!n || !n._defaultProvider) {\n logger.throwError(\"unsupported getDefaultProvider network\", Logger.errors.NETWORK_ERROR, {\n operation: \"getDefaultProvider\",\n network: network\n });\n }\n\n return n._defaultProvider({\n FallbackProvider,\n\n AlchemyProvider,\n AnkrProvider,\n CloudflareProvider,\n EtherscanProvider,\n InfuraProvider,\n JsonRpcProvider,\n NodesmithProvider,\n PocketProvider,\n Web3Provider,\n\n IpcProvider,\n }, options);\n}\n\n////////////////////////\n// Exports\n\nexport {\n\n // Abstract Providers (or Abstract-ish)\n Provider,\n BaseProvider,\n\n Resolver,\n\n UrlJsonRpcProvider,\n\n ///////////////////////\n // Concrete Providers\n\n FallbackProvider,\n\n AlchemyProvider,\n AlchemyWebSocketProvider,\n AnkrProvider,\n CloudflareProvider,\n EtherscanProvider,\n InfuraProvider,\n InfuraWebSocketProvider,\n JsonRpcProvider,\n JsonRpcBatchProvider,\n NodesmithProvider,\n PocketProvider,\n StaticJsonRpcProvider,\n Web3Provider,\n WebSocketProvider,\n\n IpcProvider,\n\n\n ///////////////////////\n // Signer\n\n JsonRpcSigner,\n\n\n ///////////////////////\n // Functions\n\n getDefaultProvider,\n getNetwork,\n isCommunityResource,\n isCommunityResourcable,\n showThrottleMessage,\n\n\n ///////////////////////\n // Objects\n\n Formatter,\n\n\n ///////////////////////\n // Types\n\n Block,\n BlockTag,\n EventType,\n FeeData,\n Filter,\n Log,\n Listener,\n TransactionReceipt,\n TransactionRequest,\n TransactionResponse,\n\n ExternalProvider,\n JsonRpcFetchFunc,\n\n FallbackProviderConfig,\n\n Network,\n Networkish,\n\n EnsProvider,\n EnsResolver,\n\n CommunityResourcable\n};\n\n","\"use strict\";\n\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, concat, hexlify, zeroPad } from \"@ethersproject/bytes\";\nimport { keccak256 as hashKeccak256 } from \"@ethersproject/keccak256\";\nimport { sha256 as hashSha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\n\nconst regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nconst regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nconst regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\n\nconst Zeros = \"0000000000000000000000000000000000000000000000000000000000000000\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n\nfunction _pack(type: string, value: any, isArray?: boolean): Uint8Array {\n switch(type) {\n case \"address\":\n if (isArray) { return zeroPad(value, 32); }\n return arrayify(value);\n case \"string\":\n return toUtf8Bytes(value);\n case \"bytes\":\n return arrayify(value);\n case \"bool\":\n value = (value ? \"0x01\": \"0x00\");\n if (isArray) { return zeroPad(value, 32); }\n return arrayify(value);\n }\n\n let match = type.match(regexNumber);\n if (match) {\n //let signed = (match[1] === \"int\")\n let size = parseInt(match[2] || \"256\")\n\n if ((match[2] && String(size) !== match[2]) || (size % 8 !== 0) || size === 0 || size > 256) {\n logger.throwArgumentError(\"invalid number type\", \"type\", type)\n }\n\n if (isArray) { size = 256; }\n\n value = BigNumber.from(value).toTwos(size);\n\n return zeroPad(value, size / 8);\n }\n\n match = type.match(regexBytes);\n if (match) {\n const size = parseInt(match[1]);\n\n if (String(size) !== match[1] || size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes type\", \"type\", type)\n }\n if (arrayify(value).byteLength !== size) {\n logger.throwArgumentError(`invalid value for ${ type }`, \"value\", value)\n }\n if (isArray) { return arrayify((value + Zeros).substring(0, 66)); }\n return value;\n }\n\n match = type.match(regexArray);\n if (match && Array.isArray(value)) {\n const baseType = match[1];\n const count = parseInt(match[2] || String(value.length));\n if (count != value.length) {\n logger.throwArgumentError(`invalid array length for ${ type }`, \"value\", value)\n }\n const result: Array = [];\n value.forEach(function(value) {\n result.push(_pack(baseType, value, true));\n });\n return concat(result);\n }\n\n return logger.throwArgumentError(\"invalid type\", \"type\", type)\n}\n\n// @TODO: Array Enum\n\nexport function pack(types: ReadonlyArray, values: ReadonlyArray) {\n if (types.length != values.length) {\n logger.throwArgumentError(\"wrong number of values; expected ${ types.length }\", \"values\", values)\n }\n const tight: Array = [];\n types.forEach(function(type, index) {\n tight.push(_pack(type, values[index]));\n });\n return hexlify(concat(tight));\n}\n\nexport function keccak256(types: ReadonlyArray, values: ReadonlyArray) {\n return hashKeccak256(pack(types, values));\n}\n\nexport function sha256(types: ReadonlyArray, values: ReadonlyArray) {\n return hashSha256(pack(types, values));\n}\n","export const version = \"solidity/5.7.0\";\n","\"use strict\";\n\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8\";\n\ntype Ranged = {\n l: number, // Lo value\n h: number, // High value (less the lo)\n d?: number, // Delta/stride (default: 1)\n s?: number, // Shift (default: 1)\n e?: Array // Exceptions to skip\n};\n\ntype Table = { [ src: number ]: Array };\n\nfunction bytes2(data: string): Array {\n if ((data.length % 4) !== 0) { throw new Error(\"bad data\"); }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\n\nfunction createTable(data: string, func?: (value: string) => Array): Table {\n if (!func) {\n func = function(value: string) { return [ parseInt(value, 16) ]; }\n }\n\n let lo = 0;\n\n let result: Table = { };\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n\n return result;\n}\n\nfunction createRangeTable(data: string): Array {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n } else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\n\nfunction matchMap(value: number, ranges: Array): Ranged {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) { continue; }\n return range;\n }\n }\n return null;\n}\n\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\n\nconst Table_B_2_ranges: Array = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [ 23 ], l: 127 },\n { h: 54, s: 1, e: [ 48 ], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [ 2, 6, 8 ], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [ 18, 24, 66 ], l: 19, d: 2 },\n { h: 26, s: 32, e: [ 17 ], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [ 38 ], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [ 1, 4, 5, 7, 8, 11, 12, 17 ], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [ 2, 7, 8, 17 ], l: 52 },\n { h: 24, s: -120023, e: [ 2, 7, 13, 15, 16, 17 ], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [ 17 ], l: 56 },\n { h: 24, s: -119601, e: [ 17 ], l: 58 },\n { h: 24, s: -119659, e: [ 17 ], l: 58 },\n { h: 24, s: -119717, e: [ 17 ], l: 58 },\n { h: 24, s: -119775, e: [ 17 ], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\n\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\n\n\nfunction flatten(values: Array>): Array {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, [ ]);\n}\n\nexport function _nameprepTableA1(codepoint: number): boolean {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\n\nexport function _nameprepTableB2(codepoint: number): Array {\n let range = matchMap(codepoint, Table_B_2_ranges);\n if (range) { return [ codepoint + range.s ]; }\n\n let codes = Table_B_2_lut_abs[codepoint];\n if (codes) { return codes; }\n\n let shift = Table_B_2_lut_rel[codepoint];\n if (shift) { return [ codepoint + shift[0] ]; }\n\n let complex = Table_B_2_complex[codepoint];\n if (complex) { return complex; }\n\n return null;\n}\n\nexport function _nameprepTableC(codepoint: number): boolean {\n return !!matchMap(codepoint, Table_C_ranges);\n}\n\nexport function nameprep(value: string): string {\n\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) { return value.toLowerCase(); }\n\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) { return [ ]; }\n if (code >= 0xfe00 && code <= 0xfe0f) { return [ ]; }\n\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) { return codesTableB2; }\n\n // No Substitution\n return [ code ];\n }));\n\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_PROHIBITED\");\n }\n });\n\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_UNASSIGNED\");\n }\n });\n\n // IDNA extras\n let name = _toUtf8String(codes);\n\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n throw new Error(\"invalid hyphen\");\n }\n\n return name;\n}\n\n","\"use strict\";\n\nimport { HashZero } from \"@ethersproject/constants\";\nimport { arrayify, BytesLike, concat, hexlify } from \"@ethersproject/bytes\";\n\nimport { toUtf8Bytes, toUtf8String } from \"./utf8\";\n\n\nexport function formatBytes32String(text: string): string {\n\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n\n // Check we have room for null-termination\n if (bytes.length > 31) { throw new Error(\"bytes32 string must be less than 32 bytes\"); }\n\n // Zero-pad (implicitly null-terminates)\n return hexlify(concat([ bytes, HashZero ]).slice(0, 32));\n}\n\nexport function parseBytes32String(bytes: BytesLike): string {\n const data = arrayify(bytes);\n\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) { throw new Error(\"invalid bytes32 - not 32 bytes long\"); }\n if (data[31] !== 0) { throw new Error(\"invalid bytes32 string - no null terminator\"); }\n\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) { length--; }\n\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n\n","export const version = \"units/5.7.0\";\n","\"use strict\";\n\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { formatFixed, parseFixed } from \"@ethersproject/bignumber\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nconst names = [\n \"wei\",\n \"kwei\",\n \"mwei\",\n \"gwei\",\n \"szabo\",\n \"finney\",\n \"ether\",\n];\n\n\n// Some environments have issues with RegEx that contain back-tracking, so we cannot\n// use them.\nexport function commify(value: string | number): string {\n const comps = String(value).split(\".\");\n\n if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === \".\" || value === \"-.\") {\n logger.throwArgumentError(\"invalid value\", \"value\", value);\n }\n\n // Make sure we have at least one whole digit (0 if none)\n let whole = comps[0];\n\n let negative = \"\";\n if (whole.substring(0, 1) === \"-\") {\n negative = \"-\";\n whole = whole.substring(1);\n }\n\n // Make sure we have at least 1 whole digit with no leading zeros\n while (whole.substring(0, 1) === \"0\") { whole = whole.substring(1); }\n if (whole === \"\") { whole = \"0\"; }\n\n let suffix = \"\";\n if (comps.length === 2) { suffix = \".\" + (comps[1] || \"0\"); }\n while (suffix.length > 2 && suffix[suffix.length - 1] === \"0\") {\n suffix = suffix.substring(0, suffix.length - 1);\n }\n\n const formatted = [];\n while (whole.length) {\n if (whole.length <= 3) {\n formatted.unshift(whole);\n break;\n } else {\n const index = whole.length - 3;\n formatted.unshift(whole.substring(index));\n whole = whole.substring(0, index);\n }\n }\n\n return negative + formatted.join(\",\") + suffix;\n}\n\nexport function formatUnits(value: BigNumberish, unitName?: string | BigNumberish): string {\n if (typeof(unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) { unitName = 3 * index; }\n }\n return formatFixed(value, (unitName != null) ? unitName: 18);\n}\n\nexport function parseUnits(value: string, unitName?: BigNumberish): BigNumber {\n if (typeof(value) !== \"string\") {\n logger.throwArgumentError(\"value must be a string\", \"value\", value);\n }\n if (typeof(unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) { unitName = 3 * index; }\n }\n return parseFixed(value, (unitName != null) ? unitName: 18);\n}\n\nexport function formatEther(wei: BigNumberish): string {\n return formatUnits(wei, 18);\n}\n\nexport function parseEther(ether: string): BigNumber {\n return parseUnits(ether, 18);\n}\n\n","export const version = \"ethers/5.7.1\";\n","\"use strict\";\n\nimport { BaseContract, Contract, ContractFactory } from \"@ethersproject/contracts\";\n\nimport { BigNumber, FixedNumber } from \"@ethersproject/bignumber\";\n\nimport { Signer, VoidSigner } from \"@ethersproject/abstract-signer\";\nimport { Wallet } from \"@ethersproject/wallet\";\n\nimport * as constants from \"@ethersproject/constants\";\n\nimport * as providers from \"@ethersproject/providers\";\nimport { getDefaultProvider } from \"@ethersproject/providers\";\n\nimport { Wordlist, wordlists} from \"@ethersproject/wordlists\";\n\nimport * as utils from \"./utils\";\n\nimport { ErrorCode as errors, Logger } from \"@ethersproject/logger\";\n\n////////////////////////\n// Types\n\nimport type { TypedDataDomain, TypedDataField } from \"@ethersproject/abstract-signer\";\nimport { BigNumberish } from \"@ethersproject/bignumber\";\nimport { Bytes, BytesLike, Signature } from \"@ethersproject/bytes\";\nimport { Transaction, UnsignedTransaction } from \"@ethersproject/transactions\";\n\n\n////////////////////////\n// Compile-Time Constants\n\n// This is generated by \"npm run dist\"\nimport { version } from \"./_version\";\n\nconst logger = new Logger(version);\n\n////////////////////////\n// Types\n\nimport {\n ContractFunction,\n ContractReceipt,\n ContractTransaction,\n\n Event,\n EventFilter,\n\n Overrides,\n PayableOverrides,\n CallOverrides,\n\n PopulatedTransaction,\n\n ContractInterface\n} from \"@ethersproject/contracts\";\n\n\n////////////////////////\n// Exports\n\nexport {\n Signer,\n\n Wallet,\n VoidSigner,\n\n getDefaultProvider,\n providers,\n\n BaseContract,\n Contract,\n ContractFactory,\n\n BigNumber,\n FixedNumber,\n\n constants,\n errors,\n\n logger,\n\n utils,\n\n wordlists,\n\n\n ////////////////////////\n // Compile-Time Constants\n\n version,\n\n\n ////////////////////////\n // Types\n\n ContractFunction,\n ContractReceipt,\n ContractTransaction,\n Event,\n EventFilter,\n\n Overrides,\n PayableOverrides,\n CallOverrides,\n\n PopulatedTransaction,\n\n ContractInterface,\n\n TypedDataDomain,\n TypedDataField,\n\n BigNumberish,\n\n Bytes,\n BytesLike,\n\n Signature,\n\n Transaction,\n UnsignedTransaction,\n\n Wordlist\n};\n\n","\"use strict\";\n\n// To modify this file, you must update ./misc/admin/lib/cmds/update-exports.js\n\nimport * as ethers from \"./ethers\";\n\ntry {\n const anyGlobal = (window as any);\n\n if (anyGlobal._ethers == null) {\n anyGlobal._ethers = ethers;\n }\n} catch (error) { }\n\nexport { ethers };\n\nexport {\n Signer,\n\n Wallet,\n VoidSigner,\n\n getDefaultProvider,\n providers,\n\n BaseContract,\n Contract,\n ContractFactory,\n\n BigNumber,\n FixedNumber,\n\n constants,\n errors,\n\n logger,\n\n utils,\n\n wordlists,\n\n\n ////////////////////////\n // Compile-Time Constants\n\n version,\n\n\n ////////////////////////\n // Types\n\n ContractFunction,\n ContractReceipt,\n ContractTransaction,\n Event,\n EventFilter,\n\n Overrides,\n PayableOverrides,\n CallOverrides,\n\n PopulatedTransaction,\n\n ContractInterface,\n\n TypedDataDomain,\n TypedDataField,\n\n BigNumberish,\n\n Bytes,\n BytesLike,\n\n Signature,\n\n Transaction,\n UnsignedTransaction,\n\n Wordlist\n} from \"./ethers\";\n","'use strict';\n\nvar isHexPrefixed = require('is-hex-prefixed');\nvar stripHexPrefix = require('strip-hex-prefix');\n\n/**\n * Pads a `String` to have an even length\n * @param {String} value\n * @return {String} output\n */\nfunction padToEven(value) {\n var a = value; // eslint-disable-line\n\n if (typeof a !== 'string') {\n throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');\n }\n\n if (a.length % 2) {\n a = '0' + a;\n }\n\n return a;\n}\n\n/**\n * Converts a `Number` into a hex `String`\n * @param {Number} i\n * @return {String}\n */\nfunction intToHex(i) {\n var hex = i.toString(16); // eslint-disable-line\n\n return '0x' + hex;\n}\n\n/**\n * Converts an `Number` to a `Buffer`\n * @param {Number} i\n * @return {Buffer}\n */\nfunction intToBuffer(i) {\n var hex = intToHex(i);\n\n return new Buffer(padToEven(hex.slice(2)), 'hex');\n}\n\n/**\n * Get the binary size of a string\n * @param {String} str\n * @return {Number}\n */\nfunction getBinarySize(str) {\n if (typeof str !== 'string') {\n throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \\'str\\' to be type String, got \\'' + typeof str + '\\'.');\n }\n\n return Buffer.byteLength(str, 'utf8');\n}\n\n/**\n * Returns TRUE if the first specified array contains all elements\n * from the second one. FALSE otherwise.\n *\n * @param {array} superset\n * @param {array} subset\n *\n * @returns {boolean}\n */\nfunction arrayContainsArray(superset, subset, some) {\n if (Array.isArray(superset) !== true) {\n throw new Error('[ethjs-util] method arrayContainsArray requires input \\'superset\\' to be an array got type \\'' + typeof superset + '\\'');\n }\n if (Array.isArray(subset) !== true) {\n throw new Error('[ethjs-util] method arrayContainsArray requires input \\'subset\\' to be an array got type \\'' + typeof subset + '\\'');\n }\n\n return subset[Boolean(some) && 'some' || 'every'](function (value) {\n return superset.indexOf(value) >= 0;\n });\n}\n\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method toUtf8\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nfunction toUtf8(hex) {\n var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');\n\n return bufferValue.toString('utf8');\n}\n\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method toAscii\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nfunction toAscii(hex) {\n var str = ''; // eslint-disable-line\n var i = 0,\n l = hex.length; // eslint-disable-line\n\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n\n for (; i < l; i += 2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n\n return str;\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method fromUtf8\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nfunction fromUtf8(stringValue) {\n var str = new Buffer(stringValue, 'utf8');\n\n return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method fromAscii\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nfunction fromAscii(stringValue) {\n var hex = ''; // eslint-disable-line\n for (var i = 0; i < stringValue.length; i++) {\n // eslint-disable-line\n var code = stringValue.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return '0x' + hex;\n}\n\n/**\n * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]\n *\n * @method getKeys get specific key from inner object array of objects\n * @param {String} params\n * @param {String} key\n * @param {Boolean} allowEmpty\n * @returns {Array} output just a simple array of output keys\n */\nfunction getKeys(params, key, allowEmpty) {\n if (!Array.isArray(params)) {\n throw new Error('[ethjs-util] method getKeys expecting type Array as \\'params\\' input, got \\'' + typeof params + '\\'');\n }\n if (typeof key !== 'string') {\n throw new Error('[ethjs-util] method getKeys expecting type String for input \\'key\\' got \\'' + typeof key + '\\'.');\n }\n\n var result = []; // eslint-disable-line\n\n for (var i = 0; i < params.length; i++) {\n // eslint-disable-line\n var value = params[i][key]; // eslint-disable-line\n if (allowEmpty && !value) {\n value = '';\n } else if (typeof value !== 'string') {\n throw new Error('invalid abi');\n }\n result.push(value);\n }\n\n return result;\n}\n\n/**\n * Is the string a hex string.\n *\n * @method check if string is hex string of specific length\n * @param {String} value\n * @param {Number} length\n * @returns {Boolean} output the string is a hex string\n */\nfunction isHexString(value, length) {\n if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n\n if (length && value.length !== 2 + 2 * length) {\n return false;\n }\n\n return true;\n}\n\nmodule.exports = {\n arrayContainsArray: arrayContainsArray,\n intToBuffer: intToBuffer,\n getBinarySize: getBinarySize,\n isHexPrefixed: isHexPrefixed,\n stripHexPrefix: stripHexPrefix,\n padToEven: padToEven,\n intToHex: intToHex,\n fromAscii: fromAscii,\n fromUtf8: fromUtf8,\n toAscii: toAscii,\n toUtf8: toUtf8,\n getKeys: getKeys,\n isHexString: isHexString\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","/*\n * extsprintf.js: extended POSIX-style sprintf\n */\n\nvar mod_assert = require('assert');\nvar mod_util = require('util');\n\n/*\n * Public interface\n */\nexports.sprintf = jsSprintf;\nexports.printf = jsPrintf;\nexports.fprintf = jsFprintf;\n\n/*\n * Stripped down version of s[n]printf(3c). We make a best effort to throw an\n * exception when given a format string we don't understand, rather than\n * ignoring it, so that we won't break existing programs if/when we go implement\n * the rest of this.\n *\n * This implementation currently supports specifying\n *\t- field alignment ('-' flag),\n * \t- zero-pad ('0' flag)\n *\t- always show numeric sign ('+' flag),\n *\t- field width\n *\t- conversions for strings, decimal integers, and floats (numbers).\n *\t- argument size specifiers. These are all accepted but ignored, since\n *\t Javascript has no notion of the physical size of an argument.\n *\n * Everything else is currently unsupported, most notably precision, unsigned\n * numbers, non-decimal numbers, and characters.\n */\nfunction jsSprintf(fmt)\n{\n\tvar regex = [\n\t '([^%]*)',\t\t\t\t/* normal text */\n\t '%',\t\t\t\t/* start of format */\n\t '([\\'\\\\-+ #0]*?)',\t\t\t/* flags (optional) */\n\t '([1-9]\\\\d*)?',\t\t\t/* width (optional) */\n\t '(\\\\.([1-9]\\\\d*))?',\t\t/* precision (optional) */\n\t '[lhjztL]*?',\t\t\t/* length mods (ignored) */\n\t '([diouxXfFeEgGaAcCsSp%jr])'\t/* conversion */\n\t].join('');\n\n\tvar re = new RegExp(regex);\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\tvar flags, width, precision, conversion;\n\tvar left, pad, sign, arg, match;\n\tvar ret = '';\n\tvar argn = 1;\n\n\tmod_assert.equal('string', typeof (fmt));\n\n\twhile ((match = re.exec(fmt)) !== null) {\n\t\tret += match[1];\n\t\tfmt = fmt.substring(match[0].length);\n\n\t\tflags = match[2] || '';\n\t\twidth = match[3] || 0;\n\t\tprecision = match[4] || '';\n\t\tconversion = match[6];\n\t\tleft = false;\n\t\tsign = false;\n\t\tpad = ' ';\n\n\t\tif (conversion == '%') {\n\t\t\tret += '%';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (args.length === 0)\n\t\t\tthrow (new Error('too few args to sprintf'));\n\n\t\targ = args.shift();\n\t\targn++;\n\n\t\tif (flags.match(/[\\' #]/))\n\t\t\tthrow (new Error(\n\t\t\t 'unsupported flags: ' + flags));\n\n\t\tif (precision.length > 0)\n\t\t\tthrow (new Error(\n\t\t\t 'non-zero precision not supported'));\n\n\t\tif (flags.match(/-/))\n\t\t\tleft = true;\n\n\t\tif (flags.match(/0/))\n\t\t\tpad = '0';\n\n\t\tif (flags.match(/\\+/))\n\t\t\tsign = true;\n\n\t\tswitch (conversion) {\n\t\tcase 's':\n\t\t\tif (arg === undefined || arg === null)\n\t\t\t\tthrow (new Error('argument ' + argn +\n\t\t\t\t ': attempted to print undefined or null ' +\n\t\t\t\t 'as a string'));\n\t\t\tret += doPad(pad, width, left, arg.toString());\n\t\t\tbreak;\n\n\t\tcase 'd':\n\t\t\targ = Math.floor(arg);\n\t\t\t/*jsl:fallthru*/\n\t\tcase 'f':\n\t\t\tsign = sign && arg > 0 ? '+' : '';\n\t\t\tret += sign + doPad(pad, width, left,\n\t\t\t arg.toString());\n\t\t\tbreak;\n\n\t\tcase 'x':\n\t\t\tret += doPad(pad, width, left, arg.toString(16));\n\t\t\tbreak;\n\n\t\tcase 'j': /* non-standard */\n\t\t\tif (width === 0)\n\t\t\t\twidth = 10;\n\t\t\tret += mod_util.inspect(arg, false, width);\n\t\t\tbreak;\n\n\t\tcase 'r': /* non-standard */\n\t\t\tret += dumpException(arg);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow (new Error('unsupported conversion: ' +\n\t\t\t conversion));\n\t\t}\n\t}\n\n\tret += fmt;\n\treturn (ret);\n}\n\nfunction jsPrintf() {\n\tvar args = Array.prototype.slice.call(arguments);\n\targs.unshift(process.stdout);\n\tjsFprintf.apply(null, args);\n}\n\nfunction jsFprintf(stream) {\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\treturn (stream.write(jsSprintf.apply(this, args)));\n}\n\nfunction doPad(chr, width, left, str)\n{\n\tvar ret = str;\n\n\twhile (ret.length < width) {\n\t\tif (left)\n\t\t\tret += chr;\n\t\telse\n\t\t\tret = chr + ret;\n\t}\n\n\treturn (ret);\n}\n\n/*\n * This function dumps long stack traces for exceptions having a cause() method.\n * See node-verror for an example.\n */\nfunction dumpException(ex)\n{\n\tvar ret;\n\n\tif (!(ex instanceof Error))\n\t\tthrow (new Error(jsSprintf('invalid type for %%r: %j', ex)));\n\n\t/* Note that V8 prepends \"ex.stack\" with ex.toString(). */\n\tret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack;\n\n\tif (ex.cause && typeof (ex.cause) === 'function') {\n\t\tvar cex = ex.cause();\n\t\tif (cex) {\n\t\t\tret += '\\nCaused by: ' + dumpException(cex);\n\t\t}\n\t}\n\n\treturn (ret);\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = '';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return '{' + out + '}';\n })(data);\n};\n","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n","module.exports = ForeverAgent\nForeverAgent.SSL = ForeverAgentSSL\n\nvar util = require('util')\n , Agent = require('http').Agent\n , net = require('net')\n , tls = require('tls')\n , AgentSSL = require('https').Agent\n \nfunction getConnectionName(host, port) { \n var name = ''\n if (typeof host === 'string') {\n name = host + ':' + port\n } else {\n // For node.js v012.0 and iojs-v1.5.1, host is an object. And any existing localAddress is part of the connection name.\n name = host.host + ':' + host.port + ':' + (host.localAddress ? (host.localAddress + ':') : ':')\n }\n return name\n} \n\nfunction ForeverAgent(options) {\n var self = this\n self.options = options || {}\n self.requests = {}\n self.sockets = {}\n self.freeSockets = {}\n self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets\n self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets\n self.on('free', function(socket, host, port) {\n var name = getConnectionName(host, port)\n\n if (self.requests[name] && self.requests[name].length) {\n self.requests[name].shift().onSocket(socket)\n } else if (self.sockets[name].length < self.minSockets) {\n if (!self.freeSockets[name]) self.freeSockets[name] = []\n self.freeSockets[name].push(socket)\n \n // if an error happens while we don't use the socket anyway, meh, throw the socket away\n var onIdleError = function() {\n socket.destroy()\n }\n socket._onIdleError = onIdleError\n socket.on('error', onIdleError)\n } else {\n // If there are no pending requests just destroy the\n // socket and it will get removed from the pool. This\n // gets us out of timeout issues and allows us to\n // default to Connection:keep-alive.\n socket.destroy()\n }\n })\n\n}\nutil.inherits(ForeverAgent, Agent)\n\nForeverAgent.defaultMinSockets = 5\n\n\nForeverAgent.prototype.createConnection = net.createConnection\nForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest\nForeverAgent.prototype.addRequest = function(req, host, port) {\n var name = getConnectionName(host, port)\n \n if (typeof host !== 'string') {\n var options = host\n port = options.port\n host = options.host\n }\n\n if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) {\n var idleSocket = this.freeSockets[name].pop()\n idleSocket.removeListener('error', idleSocket._onIdleError)\n delete idleSocket._onIdleError\n req._reusedSocket = true\n req.onSocket(idleSocket)\n } else {\n this.addRequestNoreuse(req, host, port)\n }\n}\n\nForeverAgent.prototype.removeSocket = function(s, name, host, port) {\n if (this.sockets[name]) {\n var index = this.sockets[name].indexOf(s)\n if (index !== -1) {\n this.sockets[name].splice(index, 1)\n }\n } else if (this.sockets[name] && this.sockets[name].length === 0) {\n // don't leak\n delete this.sockets[name]\n delete this.requests[name]\n }\n \n if (this.freeSockets[name]) {\n var index = this.freeSockets[name].indexOf(s)\n if (index !== -1) {\n this.freeSockets[name].splice(index, 1)\n if (this.freeSockets[name].length === 0) {\n delete this.freeSockets[name]\n }\n }\n }\n\n if (this.requests[name] && this.requests[name].length) {\n // If we have pending requests and a socket gets closed a new one\n // needs to be created to take over in the pool for the one that closed.\n this.createSocket(name, host, port).emit('free')\n }\n}\n\nfunction ForeverAgentSSL (options) {\n ForeverAgent.call(this, options)\n}\nutil.inherits(ForeverAgentSSL, ForeverAgent)\n\nForeverAgentSSL.prototype.createConnection = createConnectionSSL\nForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest\n\nfunction createConnectionSSL (port, host, options) {\n if (typeof port === 'object') {\n options = port;\n } else if (typeof host === 'object') {\n options = host;\n } else if (typeof options === 'object') {\n options = options;\n } else {\n options = {};\n }\n\n if (typeof port === 'number') {\n options.port = port;\n }\n\n if (typeof host === 'string') {\n options.host = host;\n }\n\n return tls.connect(options);\n}\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict'\n\nmodule.exports = {\n afterRequest: require('./afterRequest.json'),\n beforeRequest: require('./beforeRequest.json'),\n browser: require('./browser.json'),\n cache: require('./cache.json'),\n content: require('./content.json'),\n cookie: require('./cookie.json'),\n creator: require('./creator.json'),\n entry: require('./entry.json'),\n har: require('./har.json'),\n header: require('./header.json'),\n log: require('./log.json'),\n page: require('./page.json'),\n pageTimings: require('./pageTimings.json'),\n postData: require('./postData.json'),\n query: require('./query.json'),\n request: require('./request.json'),\n response: require('./response.json'),\n timings: require('./timings.json')\n}\n","function HARError (errors) {\n var message = 'validation failed'\n\n this.name = 'HARError'\n this.message = message\n this.errors = errors\n\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n } else {\n this.stack = (new Error(message)).stack\n }\n}\n\nHARError.prototype = Error.prototype\n\nmodule.exports = HARError\n","var Ajv = require('ajv')\nvar HARError = require('./error')\nvar schemas = require('har-schema')\n\nvar ajv\n\nfunction createAjvInstance () {\n var ajv = new Ajv({\n allErrors: true\n })\n ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json'))\n ajv.addSchema(schemas)\n\n return ajv\n}\n\nfunction validate (name, data) {\n data = data || {}\n\n // validator config\n ajv = ajv || createAjvInstance()\n\n var validate = ajv.getSchema(name + '.json')\n\n return new Promise(function (resolve, reject) {\n var valid = validate(data)\n\n !valid ? reject(new HARError(validate.errors)) : resolve(data)\n })\n}\n\nexports.afterRequest = function (data) {\n return validate('afterRequest', data)\n}\n\nexports.beforeRequest = function (data) {\n return validate('beforeRequest', data)\n}\n\nexports.browser = function (data) {\n return validate('browser', data)\n}\n\nexports.cache = function (data) {\n return validate('cache', data)\n}\n\nexports.content = function (data) {\n return validate('content', data)\n}\n\nexports.cookie = function (data) {\n return validate('cookie', data)\n}\n\nexports.creator = function (data) {\n return validate('creator', data)\n}\n\nexports.entry = function (data) {\n return validate('entry', data)\n}\n\nexports.har = function (data) {\n return validate('har', data)\n}\n\nexports.header = function (data) {\n return validate('header', data)\n}\n\nexports.log = function (data) {\n return validate('log', data)\n}\n\nexports.page = function (data) {\n return validate('page', data)\n}\n\nexports.pageTimings = function (data) {\n return validate('pageTimings', data)\n}\n\nexports.postData = function (data) {\n return validate('postData', data)\n}\n\nexports.query = function (data) {\n return validate('query', data)\n}\n\nexports.request = function (data) {\n return validate('request', data)\n}\n\nexports.response = function (data) {\n return validate('response', data)\n}\n\nexports.timings = function (data) {\n return validate('timings', data)\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar parser = require('./parser');\nvar signer = require('./signer');\nvar verify = require('./verify');\nvar utils = require('./utils');\n\n\n\n///--- API\n\nmodule.exports = {\n\n parse: parser.parseRequest,\n parseRequest: parser.parseRequest,\n\n sign: signer.signRequest,\n signRequest: signer.signRequest,\n createSigner: signer.createSigner,\n isSigner: signer.isSigner,\n\n sshKeyToPEM: utils.sshKeyToPEM,\n sshKeyFingerprint: utils.fingerprint,\n pemToRsaSSHKey: utils.pemToRsaSSHKey,\n\n verify: verify.verifySignature,\n verifySignature: verify.verifySignature,\n verifyHMAC: verify.verifyHMAC\n};\n","// Copyright 2012 Joyent, Inc. All rights reserved.\n\nvar assert = require('assert-plus');\nvar util = require('util');\nvar utils = require('./utils');\n\n\n\n///--- Globals\n\nvar HASH_ALGOS = utils.HASH_ALGOS;\nvar PK_ALGOS = utils.PK_ALGOS;\nvar HttpSignatureError = utils.HttpSignatureError;\nvar InvalidAlgorithmError = utils.InvalidAlgorithmError;\nvar validateAlgorithm = utils.validateAlgorithm;\n\nvar State = {\n New: 0,\n Params: 1\n};\n\nvar ParamsState = {\n Name: 0,\n Quote: 1,\n Value: 2,\n Comma: 3\n};\n\n\n///--- Specific Errors\n\n\nfunction ExpiredRequestError(message) {\n HttpSignatureError.call(this, message, ExpiredRequestError);\n}\nutil.inherits(ExpiredRequestError, HttpSignatureError);\n\n\nfunction InvalidHeaderError(message) {\n HttpSignatureError.call(this, message, InvalidHeaderError);\n}\nutil.inherits(InvalidHeaderError, HttpSignatureError);\n\n\nfunction InvalidParamsError(message) {\n HttpSignatureError.call(this, message, InvalidParamsError);\n}\nutil.inherits(InvalidParamsError, HttpSignatureError);\n\n\nfunction MissingHeaderError(message) {\n HttpSignatureError.call(this, message, MissingHeaderError);\n}\nutil.inherits(MissingHeaderError, HttpSignatureError);\n\nfunction StrictParsingError(message) {\n HttpSignatureError.call(this, message, StrictParsingError);\n}\nutil.inherits(StrictParsingError, HttpSignatureError);\n\n///--- Exported API\n\nmodule.exports = {\n\n /**\n * Parses the 'Authorization' header out of an http.ServerRequest object.\n *\n * Note that this API will fully validate the Authorization header, and throw\n * on any error. It will not however check the signature, or the keyId format\n * as those are specific to your environment. You can use the options object\n * to pass in extra constraints.\n *\n * As a response object you can expect this:\n *\n * {\n * \"scheme\": \"Signature\",\n * \"params\": {\n * \"keyId\": \"foo\",\n * \"algorithm\": \"rsa-sha256\",\n * \"headers\": [\n * \"date\" or \"x-date\",\n * \"digest\"\n * ],\n * \"signature\": \"base64\"\n * },\n * \"signingString\": \"ready to be passed to crypto.verify()\"\n * }\n *\n * @param {Object} request an http.ServerRequest.\n * @param {Object} options an optional options object with:\n * - clockSkew: allowed clock skew in seconds (default 300).\n * - headers: required header names (def: date or x-date)\n * - algorithms: algorithms to support (default: all).\n * - strict: should enforce latest spec parsing\n * (default: false).\n * @return {Object} parsed out object (see above).\n * @throws {TypeError} on invalid input.\n * @throws {InvalidHeaderError} on an invalid Authorization header error.\n * @throws {InvalidParamsError} if the params in the scheme are invalid.\n * @throws {MissingHeaderError} if the params indicate a header not present,\n * either in the request headers from the params,\n * or not in the params from a required header\n * in options.\n * @throws {StrictParsingError} if old attributes are used in strict parsing\n * mode.\n * @throws {ExpiredRequestError} if the value of date or x-date exceeds skew.\n */\n parseRequest: function parseRequest(request, options) {\n assert.object(request, 'request');\n assert.object(request.headers, 'request.headers');\n if (options === undefined) {\n options = {};\n }\n if (options.headers === undefined) {\n options.headers = [request.headers['x-date'] ? 'x-date' : 'date'];\n }\n assert.object(options, 'options');\n assert.arrayOfString(options.headers, 'options.headers');\n assert.optionalFinite(options.clockSkew, 'options.clockSkew');\n\n var authzHeaderName = options.authorizationHeaderName || 'authorization';\n\n if (!request.headers[authzHeaderName]) {\n throw new MissingHeaderError('no ' + authzHeaderName + ' header ' +\n 'present in the request');\n }\n\n options.clockSkew = options.clockSkew || 300;\n\n\n var i = 0;\n var state = State.New;\n var substate = ParamsState.Name;\n var tmpName = '';\n var tmpValue = '';\n\n var parsed = {\n scheme: '',\n params: {},\n signingString: ''\n };\n\n var authz = request.headers[authzHeaderName];\n for (i = 0; i < authz.length; i++) {\n var c = authz.charAt(i);\n\n switch (Number(state)) {\n\n case State.New:\n if (c !== ' ') parsed.scheme += c;\n else state = State.Params;\n break;\n\n case State.Params:\n switch (Number(substate)) {\n\n case ParamsState.Name:\n var code = c.charCodeAt(0);\n // restricted name of A-Z / a-z\n if ((code >= 0x41 && code <= 0x5a) || // A-Z\n (code >= 0x61 && code <= 0x7a)) { // a-z\n tmpName += c;\n } else if (c === '=') {\n if (tmpName.length === 0)\n throw new InvalidHeaderError('bad param format');\n substate = ParamsState.Quote;\n } else {\n throw new InvalidHeaderError('bad param format');\n }\n break;\n\n case ParamsState.Quote:\n if (c === '\"') {\n tmpValue = '';\n substate = ParamsState.Value;\n } else {\n throw new InvalidHeaderError('bad param format');\n }\n break;\n\n case ParamsState.Value:\n if (c === '\"') {\n parsed.params[tmpName] = tmpValue;\n substate = ParamsState.Comma;\n } else {\n tmpValue += c;\n }\n break;\n\n case ParamsState.Comma:\n if (c === ',') {\n tmpName = '';\n substate = ParamsState.Name;\n } else {\n throw new InvalidHeaderError('bad param format');\n }\n break;\n\n default:\n throw new Error('Invalid substate');\n }\n break;\n\n default:\n throw new Error('Invalid substate');\n }\n\n }\n\n if (!parsed.params.headers || parsed.params.headers === '') {\n if (request.headers['x-date']) {\n parsed.params.headers = ['x-date'];\n } else {\n parsed.params.headers = ['date'];\n }\n } else {\n parsed.params.headers = parsed.params.headers.split(' ');\n }\n\n // Minimally validate the parsed object\n if (!parsed.scheme || parsed.scheme !== 'Signature')\n throw new InvalidHeaderError('scheme was not \"Signature\"');\n\n if (!parsed.params.keyId)\n throw new InvalidHeaderError('keyId was not specified');\n\n if (!parsed.params.algorithm)\n throw new InvalidHeaderError('algorithm was not specified');\n\n if (!parsed.params.signature)\n throw new InvalidHeaderError('signature was not specified');\n\n // Check the algorithm against the official list\n parsed.params.algorithm = parsed.params.algorithm.toLowerCase();\n try {\n validateAlgorithm(parsed.params.algorithm);\n } catch (e) {\n if (e instanceof InvalidAlgorithmError)\n throw (new InvalidParamsError(parsed.params.algorithm + ' is not ' +\n 'supported'));\n else\n throw (e);\n }\n\n // Build the signingString\n for (i = 0; i < parsed.params.headers.length; i++) {\n var h = parsed.params.headers[i].toLowerCase();\n parsed.params.headers[i] = h;\n\n if (h === 'request-line') {\n if (!options.strict) {\n /*\n * We allow headers from the older spec drafts if strict parsing isn't\n * specified in options.\n */\n parsed.signingString +=\n request.method + ' ' + request.url + ' HTTP/' + request.httpVersion;\n } else {\n /* Strict parsing doesn't allow older draft headers. */\n throw (new StrictParsingError('request-line is not a valid header ' +\n 'with strict parsing enabled.'));\n }\n } else if (h === '(request-target)') {\n parsed.signingString +=\n '(request-target): ' + request.method.toLowerCase() + ' ' +\n request.url;\n } else {\n var value = request.headers[h];\n if (value === undefined)\n throw new MissingHeaderError(h + ' was not in the request');\n parsed.signingString += h + ': ' + value;\n }\n\n if ((i + 1) < parsed.params.headers.length)\n parsed.signingString += '\\n';\n }\n\n // Check against the constraints\n var date;\n if (request.headers.date || request.headers['x-date']) {\n if (request.headers['x-date']) {\n date = new Date(request.headers['x-date']);\n } else {\n date = new Date(request.headers.date);\n }\n var now = new Date();\n var skew = Math.abs(now.getTime() - date.getTime());\n\n if (skew > options.clockSkew * 1000) {\n throw new ExpiredRequestError('clock skew of ' +\n (skew / 1000) +\n 's was greater than ' +\n options.clockSkew + 's');\n }\n }\n\n options.headers.forEach(function (hdr) {\n // Remember that we already checked any headers in the params\n // were in the request, so if this passes we're good.\n if (parsed.params.headers.indexOf(hdr.toLowerCase()) < 0)\n throw new MissingHeaderError(hdr + ' was not a signed header');\n });\n\n if (options.algorithms) {\n if (options.algorithms.indexOf(parsed.params.algorithm) === -1)\n throw new InvalidParamsError(parsed.params.algorithm +\n ' is not a supported algorithm');\n }\n\n parsed.algorithm = parsed.params.algorithm.toUpperCase();\n parsed.keyId = parsed.params.keyId;\n return parsed;\n }\n\n};\n","// Copyright 2012 Joyent, Inc. All rights reserved.\n\nvar assert = require('assert-plus');\nvar crypto = require('crypto');\nvar http = require('http');\nvar util = require('util');\nvar sshpk = require('sshpk');\nvar jsprim = require('jsprim');\nvar utils = require('./utils');\n\nvar sprintf = require('util').format;\n\nvar HASH_ALGOS = utils.HASH_ALGOS;\nvar PK_ALGOS = utils.PK_ALGOS;\nvar InvalidAlgorithmError = utils.InvalidAlgorithmError;\nvar HttpSignatureError = utils.HttpSignatureError;\nvar validateAlgorithm = utils.validateAlgorithm;\n\n///--- Globals\n\nvar AUTHZ_FMT =\n 'Signature keyId=\"%s\",algorithm=\"%s\",headers=\"%s\",signature=\"%s\"';\n\n///--- Specific Errors\n\nfunction MissingHeaderError(message) {\n HttpSignatureError.call(this, message, MissingHeaderError);\n}\nutil.inherits(MissingHeaderError, HttpSignatureError);\n\nfunction StrictParsingError(message) {\n HttpSignatureError.call(this, message, StrictParsingError);\n}\nutil.inherits(StrictParsingError, HttpSignatureError);\n\n/* See createSigner() */\nfunction RequestSigner(options) {\n assert.object(options, 'options');\n\n var alg = [];\n if (options.algorithm !== undefined) {\n assert.string(options.algorithm, 'options.algorithm');\n alg = validateAlgorithm(options.algorithm);\n }\n this.rs_alg = alg;\n\n /*\n * RequestSigners come in two varieties: ones with an rs_signFunc, and ones\n * with an rs_signer.\n *\n * rs_signFunc-based RequestSigners have to build up their entire signing\n * string within the rs_lines array and give it to rs_signFunc as a single\n * concat'd blob. rs_signer-based RequestSigners can add a line at a time to\n * their signing state by using rs_signer.update(), thus only needing to\n * buffer the hash function state and one line at a time.\n */\n if (options.sign !== undefined) {\n assert.func(options.sign, 'options.sign');\n this.rs_signFunc = options.sign;\n\n } else if (alg[0] === 'hmac' && options.key !== undefined) {\n assert.string(options.keyId, 'options.keyId');\n this.rs_keyId = options.keyId;\n\n if (typeof (options.key) !== 'string' && !Buffer.isBuffer(options.key))\n throw (new TypeError('options.key for HMAC must be a string or Buffer'));\n\n /*\n * Make an rs_signer for HMACs, not a rs_signFunc -- HMACs digest their\n * data in chunks rather than requiring it all to be given in one go\n * at the end, so they are more similar to signers than signFuncs.\n */\n this.rs_signer = crypto.createHmac(alg[1].toUpperCase(), options.key);\n this.rs_signer.sign = function () {\n var digest = this.digest('base64');\n return ({\n hashAlgorithm: alg[1],\n toString: function () { return (digest); }\n });\n };\n\n } else if (options.key !== undefined) {\n var key = options.key;\n if (typeof (key) === 'string' || Buffer.isBuffer(key))\n key = sshpk.parsePrivateKey(key);\n\n assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]),\n 'options.key must be a sshpk.PrivateKey');\n this.rs_key = key;\n\n assert.string(options.keyId, 'options.keyId');\n this.rs_keyId = options.keyId;\n\n if (!PK_ALGOS[key.type]) {\n throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' +\n 'keys are not supported'));\n }\n\n if (alg[0] !== undefined && key.type !== alg[0]) {\n throw (new InvalidAlgorithmError('options.key must be a ' +\n alg[0].toUpperCase() + ' key, was given a ' +\n key.type.toUpperCase() + ' key instead'));\n }\n\n this.rs_signer = key.createSign(alg[1]);\n\n } else {\n throw (new TypeError('options.sign (func) or options.key is required'));\n }\n\n this.rs_headers = [];\n this.rs_lines = [];\n}\n\n/**\n * Adds a header to be signed, with its value, into this signer.\n *\n * @param {String} header\n * @param {String} value\n * @return {String} value written\n */\nRequestSigner.prototype.writeHeader = function (header, value) {\n assert.string(header, 'header');\n header = header.toLowerCase();\n assert.string(value, 'value');\n\n this.rs_headers.push(header);\n\n if (this.rs_signFunc) {\n this.rs_lines.push(header + ': ' + value);\n\n } else {\n var line = header + ': ' + value;\n if (this.rs_headers.length > 0)\n line = '\\n' + line;\n this.rs_signer.update(line);\n }\n\n return (value);\n};\n\n/**\n * Adds a default Date header, returning its value.\n *\n * @return {String}\n */\nRequestSigner.prototype.writeDateHeader = function () {\n return (this.writeHeader('date', jsprim.rfc1123(new Date())));\n};\n\n/**\n * Adds the request target line to be signed.\n *\n * @param {String} method, HTTP method (e.g. 'get', 'post', 'put')\n * @param {String} path\n */\nRequestSigner.prototype.writeTarget = function (method, path) {\n assert.string(method, 'method');\n assert.string(path, 'path');\n method = method.toLowerCase();\n this.writeHeader('(request-target)', method + ' ' + path);\n};\n\n/**\n * Calculate the value for the Authorization header on this request\n * asynchronously.\n *\n * @param {Func} callback (err, authz)\n */\nRequestSigner.prototype.sign = function (cb) {\n assert.func(cb, 'callback');\n\n if (this.rs_headers.length < 1)\n throw (new Error('At least one header must be signed'));\n\n var alg, authz;\n if (this.rs_signFunc) {\n var data = this.rs_lines.join('\\n');\n var self = this;\n this.rs_signFunc(data, function (err, sig) {\n if (err) {\n cb(err);\n return;\n }\n try {\n assert.object(sig, 'signature');\n assert.string(sig.keyId, 'signature.keyId');\n assert.string(sig.algorithm, 'signature.algorithm');\n assert.string(sig.signature, 'signature.signature');\n alg = validateAlgorithm(sig.algorithm);\n\n authz = sprintf(AUTHZ_FMT,\n sig.keyId,\n sig.algorithm,\n self.rs_headers.join(' '),\n sig.signature);\n } catch (e) {\n cb(e);\n return;\n }\n cb(null, authz);\n });\n\n } else {\n try {\n var sigObj = this.rs_signer.sign();\n } catch (e) {\n cb(e);\n return;\n }\n alg = (this.rs_alg[0] || this.rs_key.type) + '-' + sigObj.hashAlgorithm;\n var signature = sigObj.toString();\n authz = sprintf(AUTHZ_FMT,\n this.rs_keyId,\n alg,\n this.rs_headers.join(' '),\n signature);\n cb(null, authz);\n }\n};\n\n///--- Exported API\n\nmodule.exports = {\n /**\n * Identifies whether a given object is a request signer or not.\n *\n * @param {Object} object, the object to identify\n * @returns {Boolean}\n */\n isSigner: function (obj) {\n if (typeof (obj) === 'object' && obj instanceof RequestSigner)\n return (true);\n return (false);\n },\n\n /**\n * Creates a request signer, used to asynchronously build a signature\n * for a request (does not have to be an http.ClientRequest).\n *\n * @param {Object} options, either:\n * - {String} keyId\n * - {String|Buffer} key\n * - {String} algorithm (optional, required for HMAC)\n * or:\n * - {Func} sign (data, cb)\n * @return {RequestSigner}\n */\n createSigner: function createSigner(options) {\n return (new RequestSigner(options));\n },\n\n /**\n * Adds an 'Authorization' header to an http.ClientRequest object.\n *\n * Note that this API will add a Date header if it's not already set. Any\n * other headers in the options.headers array MUST be present, or this\n * will throw.\n *\n * You shouldn't need to check the return type; it's just there if you want\n * to be pedantic.\n *\n * The optional flag indicates whether parsing should use strict enforcement\n * of the version draft-cavage-http-signatures-04 of the spec or beyond.\n * The default is to be loose and support\n * older versions for compatibility.\n *\n * @param {Object} request an instance of http.ClientRequest.\n * @param {Object} options signing parameters object:\n * - {String} keyId required.\n * - {String} key required (either a PEM or HMAC key).\n * - {Array} headers optional; defaults to ['date'].\n * - {String} algorithm optional (unless key is HMAC);\n * default is the same as the sshpk default\n * signing algorithm for the type of key given\n * - {String} httpVersion optional; defaults to '1.1'.\n * - {Boolean} strict optional; defaults to 'false'.\n * @return {Boolean} true if Authorization (and optionally Date) were added.\n * @throws {TypeError} on bad parameter types (input).\n * @throws {InvalidAlgorithmError} if algorithm was bad or incompatible with\n * the given key.\n * @throws {sshpk.KeyParseError} if key was bad.\n * @throws {MissingHeaderError} if a header to be signed was specified but\n * was not present.\n */\n signRequest: function signRequest(request, options) {\n assert.object(request, 'request');\n assert.object(options, 'options');\n assert.optionalString(options.algorithm, 'options.algorithm');\n assert.string(options.keyId, 'options.keyId');\n assert.optionalArrayOfString(options.headers, 'options.headers');\n assert.optionalString(options.httpVersion, 'options.httpVersion');\n\n if (!request.getHeader('Date'))\n request.setHeader('Date', jsprim.rfc1123(new Date()));\n if (!options.headers)\n options.headers = ['date'];\n if (!options.httpVersion)\n options.httpVersion = '1.1';\n\n var alg = [];\n if (options.algorithm) {\n options.algorithm = options.algorithm.toLowerCase();\n alg = validateAlgorithm(options.algorithm);\n }\n\n var i;\n var stringToSign = '';\n for (i = 0; i < options.headers.length; i++) {\n if (typeof (options.headers[i]) !== 'string')\n throw new TypeError('options.headers must be an array of Strings');\n\n var h = options.headers[i].toLowerCase();\n\n if (h === 'request-line') {\n if (!options.strict) {\n /**\n * We allow headers from the older spec drafts if strict parsing isn't\n * specified in options.\n */\n stringToSign +=\n request.method + ' ' + request.path + ' HTTP/' +\n options.httpVersion;\n } else {\n /* Strict parsing doesn't allow older draft headers. */\n throw (new StrictParsingError('request-line is not a valid header ' +\n 'with strict parsing enabled.'));\n }\n } else if (h === '(request-target)') {\n stringToSign +=\n '(request-target): ' + request.method.toLowerCase() + ' ' +\n request.path;\n } else {\n var value = request.getHeader(h);\n if (value === undefined || value === '') {\n throw new MissingHeaderError(h + ' was not in the request');\n }\n stringToSign += h + ': ' + value;\n }\n\n if ((i + 1) < options.headers.length)\n stringToSign += '\\n';\n }\n\n /* This is just for unit tests. */\n if (request.hasOwnProperty('_stringToSign')) {\n request._stringToSign = stringToSign;\n }\n\n var signature;\n if (alg[0] === 'hmac') {\n if (typeof (options.key) !== 'string' && !Buffer.isBuffer(options.key))\n throw (new TypeError('options.key must be a string or Buffer'));\n\n var hmac = crypto.createHmac(alg[1].toUpperCase(), options.key);\n hmac.update(stringToSign);\n signature = hmac.digest('base64');\n\n } else {\n var key = options.key;\n if (typeof (key) === 'string' || Buffer.isBuffer(key))\n key = sshpk.parsePrivateKey(options.key);\n\n assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]),\n 'options.key must be a sshpk.PrivateKey');\n\n if (!PK_ALGOS[key.type]) {\n throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' +\n 'keys are not supported'));\n }\n\n if (alg[0] !== undefined && key.type !== alg[0]) {\n throw (new InvalidAlgorithmError('options.key must be a ' +\n alg[0].toUpperCase() + ' key, was given a ' +\n key.type.toUpperCase() + ' key instead'));\n }\n\n var signer = key.createSign(alg[1]);\n signer.update(stringToSign);\n var sigObj = signer.sign();\n if (!HASH_ALGOS[sigObj.hashAlgorithm]) {\n throw (new InvalidAlgorithmError(sigObj.hashAlgorithm.toUpperCase() +\n ' is not a supported hash algorithm'));\n }\n options.algorithm = key.type + '-' + sigObj.hashAlgorithm;\n signature = sigObj.toString();\n assert.notStrictEqual(signature, '', 'empty signature produced');\n }\n\n var authzHeaderName = options.authorizationHeaderName || 'Authorization';\n\n request.setHeader(authzHeaderName, sprintf(AUTHZ_FMT,\n options.keyId,\n options.algorithm,\n options.headers.join(' '),\n signature));\n\n return true;\n }\n\n};\n","// Copyright 2012 Joyent, Inc. All rights reserved.\n\nvar assert = require('assert-plus');\nvar sshpk = require('sshpk');\nvar util = require('util');\n\nvar HASH_ALGOS = {\n 'sha1': true,\n 'sha256': true,\n 'sha512': true\n};\n\nvar PK_ALGOS = {\n 'rsa': true,\n 'dsa': true,\n 'ecdsa': true\n};\n\nfunction HttpSignatureError(message, caller) {\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, caller || HttpSignatureError);\n\n this.message = message;\n this.name = caller.name;\n}\nutil.inherits(HttpSignatureError, Error);\n\nfunction InvalidAlgorithmError(message) {\n HttpSignatureError.call(this, message, InvalidAlgorithmError);\n}\nutil.inherits(InvalidAlgorithmError, HttpSignatureError);\n\nfunction validateAlgorithm(algorithm) {\n var alg = algorithm.toLowerCase().split('-');\n\n if (alg.length !== 2) {\n throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' is not a ' +\n 'valid algorithm'));\n }\n\n if (alg[0] !== 'hmac' && !PK_ALGOS[alg[0]]) {\n throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' type keys ' +\n 'are not supported'));\n }\n\n if (!HASH_ALGOS[alg[1]]) {\n throw (new InvalidAlgorithmError(alg[1].toUpperCase() + ' is not a ' +\n 'supported hash algorithm'));\n }\n\n return (alg);\n}\n\n///--- API\n\nmodule.exports = {\n\n HASH_ALGOS: HASH_ALGOS,\n PK_ALGOS: PK_ALGOS,\n\n HttpSignatureError: HttpSignatureError,\n InvalidAlgorithmError: InvalidAlgorithmError,\n\n validateAlgorithm: validateAlgorithm,\n\n /**\n * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file.\n *\n * The intent of this module is to interoperate with OpenSSL only,\n * specifically the node crypto module's `verify` method.\n *\n * @param {String} key an OpenSSH public key.\n * @return {String} PEM encoded form of the RSA public key.\n * @throws {TypeError} on bad input.\n * @throws {Error} on invalid ssh key formatted data.\n */\n sshKeyToPEM: function sshKeyToPEM(key) {\n assert.string(key, 'ssh_key');\n\n var k = sshpk.parseKey(key, 'ssh');\n return (k.toString('pem'));\n },\n\n\n /**\n * Generates an OpenSSH fingerprint from an ssh public key.\n *\n * @param {String} key an OpenSSH public key.\n * @return {String} key fingerprint.\n * @throws {TypeError} on bad input.\n * @throws {Error} if what you passed doesn't look like an ssh public key.\n */\n fingerprint: function fingerprint(key) {\n assert.string(key, 'ssh_key');\n\n var k = sshpk.parseKey(key, 'ssh');\n return (k.fingerprint('md5').toString('hex'));\n },\n\n /**\n * Converts a PKGCS#8 PEM file to an OpenSSH public key (rsa)\n *\n * The reverse of the above function.\n */\n pemToRsaSSHKey: function pemToRsaSSHKey(pem, comment) {\n assert.equal('string', typeof (pem), 'typeof pem');\n\n var k = sshpk.parseKey(pem, 'pem');\n k.comment = comment;\n return (k.toString('ssh'));\n }\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar assert = require('assert-plus');\nvar crypto = require('crypto');\nvar sshpk = require('sshpk');\nvar utils = require('./utils');\n\nvar HASH_ALGOS = utils.HASH_ALGOS;\nvar PK_ALGOS = utils.PK_ALGOS;\nvar InvalidAlgorithmError = utils.InvalidAlgorithmError;\nvar HttpSignatureError = utils.HttpSignatureError;\nvar validateAlgorithm = utils.validateAlgorithm;\n\n///--- Exported API\n\nmodule.exports = {\n /**\n * Verify RSA/DSA signature against public key. You are expected to pass in\n * an object that was returned from `parse()`.\n *\n * @param {Object} parsedSignature the object you got from `parse`.\n * @param {String} pubkey RSA/DSA private key PEM.\n * @return {Boolean} true if valid, false otherwise.\n * @throws {TypeError} if you pass in bad arguments.\n * @throws {InvalidAlgorithmError}\n */\n verifySignature: function verifySignature(parsedSignature, pubkey) {\n assert.object(parsedSignature, 'parsedSignature');\n if (typeof (pubkey) === 'string' || Buffer.isBuffer(pubkey))\n pubkey = sshpk.parseKey(pubkey);\n assert.ok(sshpk.Key.isKey(pubkey, [1, 1]), 'pubkey must be a sshpk.Key');\n\n var alg = validateAlgorithm(parsedSignature.algorithm);\n if (alg[0] === 'hmac' || alg[0] !== pubkey.type)\n return (false);\n\n var v = pubkey.createVerify(alg[1]);\n v.update(parsedSignature.signingString);\n return (v.verify(parsedSignature.params.signature, 'base64'));\n },\n\n /**\n * Verify HMAC against shared secret. You are expected to pass in an object\n * that was returned from `parse()`.\n *\n * @param {Object} parsedSignature the object you got from `parse`.\n * @param {String} secret HMAC shared secret.\n * @return {Boolean} true if valid, false otherwise.\n * @throws {TypeError} if you pass in bad arguments.\n * @throws {InvalidAlgorithmError}\n */\n verifyHMAC: function verifyHMAC(parsedSignature, secret) {\n assert.object(parsedSignature, 'parsedHMAC');\n assert.string(secret, 'secret');\n\n var alg = validateAlgorithm(parsedSignature.algorithm);\n if (alg[0] !== 'hmac')\n return (false);\n\n var hashAlg = alg[1].toUpperCase();\n\n var hmac = crypto.createHmac(hashAlg, secret);\n hmac.update(parsedSignature.signingString);\n\n /*\n * Now double-hash to avoid leaking timing information - there's\n * no easy constant-time compare in JS, so we use this approach\n * instead. See for more info:\n * https://www.isecpartners.com/blog/2011/february/double-hmac-\n * verification.aspx\n */\n var h1 = crypto.createHmac(hashAlg, secret);\n h1.update(hmac.digest());\n h1 = h1.digest();\n var h2 = crypto.createHmac(hashAlg, secret);\n h2.update(new Buffer(parsedSignature.params.signature, 'base64'));\n h2 = h2.digest();\n\n /* Node 0.8 returns strings from .digest(). */\n if (typeof (h1) === 'string')\n return (h1 === h2);\n /* And node 0.10 lacks the .equals() method on Buffers. */\n if (Buffer.isBuffer(h1) && !h1.equals)\n return (h1.toString('binary') === h2.toString('binary'));\n\n return (h1.equals(h2));\n }\n};\n","var http = require('http')\nvar url = require('url')\n\nvar https = module.exports\n\nfor (var key in http) {\n if (http.hasOwnProperty(key)) https[key] = http[key]\n}\n\nhttps.request = function (params, cb) {\n params = validateParams(params)\n return http.request.call(this, params, cb)\n}\n\nhttps.get = function (params, cb) {\n params = validateParams(params)\n return http.get.call(this, params, cb)\n}\n\nfunction validateParams (params) {\n if (typeof params === 'string') {\n params = url.parse(params)\n }\n if (!params.protocol) {\n params.protocol = 'https:'\n }\n if (params.protocol !== 'https:') {\n throw new Error('Protocol \"' + params.protocol + '\" not supported. Expected \"https:\"')\n }\n return params\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param {String} str the string input value\n * @return {Boolean} a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nmodule.exports = function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\"[is-hex-prefixed] value must be type 'string', is currently type \" + (typeof str) + \", while checking isHexPrefixed.\");\n }\n\n return str.slice(0, 2) === '0x';\n}\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","module.exports = isTypedArray\nisTypedArray.strict = isStrictTypedArray\nisTypedArray.loose = isLooseTypedArray\n\nvar toString = Object.prototype.toString\nvar names = {\n '[object Int8Array]': true\n , '[object Int16Array]': true\n , '[object Int32Array]': true\n , '[object Uint8Array]': true\n , '[object Uint8ClampedArray]': true\n , '[object Uint16Array]': true\n , '[object Uint32Array]': true\n , '[object Float32Array]': true\n , '[object Float64Array]': true\n}\n\nfunction isTypedArray(arr) {\n return (\n isStrictTypedArray(arr)\n || isLooseTypedArray(arr)\n )\n}\n\nfunction isStrictTypedArray(arr) {\n return (\n arr instanceof Int8Array\n || arr instanceof Int16Array\n || arr instanceof Int32Array\n || arr instanceof Uint8Array\n || arr instanceof Uint8ClampedArray\n || arr instanceof Uint16Array\n || arr instanceof Uint32Array\n || arr instanceof Float32Array\n || arr instanceof Float64Array\n )\n}\n\nfunction isLooseTypedArray(arr) {\n return names[toString.call(arr)]\n}\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js\n\nvar ws = null\n\nif (typeof WebSocket !== 'undefined') {\n ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined') {\n ws = MozWebSocket\n} else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket\n} else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket\n} else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket\n}\n\nexport default ws\n","var stream = require('stream')\n\n\nfunction isStream (obj) {\n return obj instanceof stream.Stream\n}\n\n\nfunction isReadable (obj) {\n return isStream(obj) && typeof obj._read == 'function' && typeof obj._readableState == 'object'\n}\n\n\nfunction isWritable (obj) {\n return isStream(obj) && typeof obj._write == 'function' && typeof obj._writableState == 'object'\n}\n\n\nfunction isDuplex (obj) {\n return isReadable(obj) && isWritable(obj)\n}\n\n\nmodule.exports = isStream\nmodule.exports.isReadable = isReadable\nmodule.exports.isWritable = isWritable\nmodule.exports.isDuplex = isDuplex\n","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","(function(){\n\n // Copyright (c) 2005 Tom Wu\n // All Rights Reserved.\n // See \"LICENSE\" for details.\n\n // Basic JavaScript BN library - subset useful for RSA encryption.\n\n // Bits per digit\n var dbits;\n\n // JavaScript engine analysis\n var canary = 0xdeadbeefcafe;\n var j_lm = ((canary&0xffffff)==0xefcafe);\n\n // (public) Constructor\n function BigInteger(a,b,c) {\n if(a != null)\n if(\"number\" == typeof a) this.fromNumber(a,b,c);\n else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n else this.fromString(a,b);\n }\n\n // return new, unset BigInteger\n function nbi() { return new BigInteger(null); }\n\n // am: Compute w_j += (x*this_i), propagate carries,\n // c is initial carry, returns final carry.\n // c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n // We need to select the fastest one that works in this environment.\n\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n function am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this[i++]+w[j]+c;\n c = Math.floor(v/0x4000000);\n w[j++] = v&0x3ffffff;\n }\n return c;\n }\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n function am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this[i]&0x7fff;\n var h = this[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w[j++] = l&0x3fffffff;\n }\n return c;\n }\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n function am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this[i]&0x3fff;\n var h = this[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w[j++] = l&0xfffffff;\n }\n return c;\n }\n var inBrowser = typeof navigator !== \"undefined\";\n if(inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n }\n else if(inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n }\n else { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n }\n\n BigInteger.prototype.DB = dbits;\n BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i];\n r.t = this.t;\n r.s = this.s;\n }\n\n // (protected) set from integer value x, -DV <= x < DV\n function bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this[0] = x;\n else if(x < -1) this[0] = x+this.DV;\n else this.t = 0;\n }\n\n // return bigint initialized to value\n function nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n // (protected) set from string and radix\n function bnpFromString(s,b) {\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 256) k = 8; // byte array\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else { this.fromRadix(s,b); return; }\n this.t = 0;\n this.s = 0;\n var i = s.length, mi = false, sh = 0;\n while(--i >= 0) {\n var x = (k==8)?s[i]&0xff:intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if(sh == 0)\n this[this.t++] = x;\n else if(sh+k > this.DB) {\n this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh));\n }\n else\n this[this.t-1] |= x<= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t;\n }\n\n // (public) return string representation in given radix\n function bnToString(b) {\n if(this.s < 0) return \"-\"+this.negate().toString(b);\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1< 0) {\n if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this[i]&((1<>(p+=this.DB-k);\n }\n else {\n d = (this[i]>>(p-=k))&km;\n if(p <= 0) { p += this.DB; --i; }\n }\n if(d > 0) m = true;\n if(m) r += int2char(d);\n }\n }\n return m?r:\"0\";\n }\n\n // (public) -this\n function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n // (public) |this|\n function bnAbs() { return (this.s<0)?this.negate():this; }\n\n // (public) return + if this > a, - if this < a, 0 if equal\n function bnCompareTo(a) {\n var r = this.s-a.s;\n if(r != 0) return r;\n var i = this.t;\n r = i-a.t;\n if(r != 0) return (this.s<0)?-r:r;\n while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;\n return 0;\n }\n\n // returns bit length of the integer x\n function nbits(x) {\n var r = 1, t;\n if((t=x>>>16) != 0) { x = t; r += 16; }\n if((t=x>>8) != 0) { x = t; r += 8; }\n if((t=x>>4) != 0) { x = t; r += 4; }\n if((t=x>>2) != 0) { x = t; r += 2; }\n if((t=x>>1) != 0) { x = t; r += 1; }\n return r;\n }\n\n // (public) return the number of bits in \"this\"\n function bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));\n }\n\n // (protected) r = this << n*DB\n function bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];\n for(i = n-1; i >= 0; --i) r[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n }\n\n // (protected) r = this >> n*DB\n function bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r[i-n] = this[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n }\n\n // (protected) r = this << n\n function bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<= 0; --i) {\n r[i+ds+1] = (this[i]>>cbs)|c;\n c = (this[i]&bm)<= 0; --i) r[i] = 0;\n r[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n }\n\n // (protected) r = this >> n\n function bnpRShiftTo(n,r) {\n r.s = this.s;\n var ds = Math.floor(n/this.DB);\n if(ds >= this.t) { r.t = 0; return; }\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r[i-ds-1] |= (this[i]&bm)<>bs;\n }\n if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c -= a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c<0)?-1:0;\n if(c < -1) r[i++] = this.DV+c;\n else if(c > 0) r[i++] = c;\n r.t = i;\n r.clamp();\n }\n\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n function bnpMultiplyTo(a,r) {\n var x = this.abs(), y = a.abs();\n var i = x.t;\n r.t = i+y.t;\n while(--i >= 0) r[i] = 0;\n for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);\n r.s = 0;\n r.clamp();\n if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n }\n\n // (protected) r = this^2, r != this (HAC 14.16)\n function bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x[i],r,2*i,0,1);\n if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r[i+x.t] -= x.DV;\n r[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);\n r.s = 0;\n r.clamp();\n }\n\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n function bnpDivRemTo(m,q,r) {\n var pm = m.abs();\n if(pm.t <= 0) return;\n var pt = this.abs();\n if(pt.t < pm.t) {\n if(q != null) q.fromInt(0);\n if(r != null) this.copyTo(r);\n return;\n }\n if(r == null) r = nbi();\n var y = nbi(), ts = this.s, ms = m.s;\n var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }\n else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<1)?y[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<= 0) {\n r[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y); // \"negative\" y so we can replace sub with am later\n while(y.t < ys) y[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);\n if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r[i] < --qd) r.subTo(t,r);\n }\n }\n if(q != null) {\n r.drShiftTo(ys,q);\n if(ts != ms) BigInteger.ZERO.subTo(q,q);\n }\n r.t = ys;\n r.clamp();\n if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n }\n\n // (public) this mod a\n function bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a,null,r);\n if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n return r;\n }\n\n // Modular reduction using \"classic\" algorithm\n function Classic(m) { this.m = m; }\n function cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n }\n function cRevert(x) { return x; }\n function cReduce(x) { x.divRemTo(this.m,null,x); }\n function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n Classic.prototype.convert = cConvert;\n Classic.prototype.revert = cRevert;\n Classic.prototype.reduce = cReduce;\n Classic.prototype.mulTo = cMulTo;\n Classic.prototype.sqrTo = cSqrTo;\n\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n function bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this[0];\n if((x&1) == 0) return 0;\n var y = x&3; // y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y>0)?this.DV-y:-y;\n }\n\n // Montgomery reduction\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp&0x7fff;\n this.mph = this.mp>>15;\n this.um = (1<<(m.DB-15))-1;\n this.mt2 = 2*m.t;\n }\n\n // xR mod m\n function montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t,r);\n r.divRemTo(this.m,null,r);\n if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n return r;\n }\n\n // x/R mod m\n function montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n\n // x = x/R mod m (HAC 14.32)\n function montReduce(x) {\n while(x.t <= this.mt2) // pad x so am has enough room later\n x[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i+this.m.t;\n x[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }\n }\n x.clamp();\n x.drShiftTo(this.m.t,x);\n if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n }\n\n // r = \"x^2/R mod m\"; x != r\n function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n // r = \"xy/R mod m\"; x,y != r\n function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n Montgomery.prototype.convert = montConvert;\n Montgomery.prototype.revert = montRevert;\n Montgomery.prototype.reduce = montReduce;\n Montgomery.prototype.mulTo = montMulTo;\n Montgomery.prototype.sqrTo = montSqrTo;\n\n // (protected) true iff this is even\n function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }\n\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n function bnpExp(e,z) {\n if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n g.copyTo(r);\n while(--i >= 0) {\n z.sqrTo(r,r2);\n if((e&(1< 0) z.mulTo(r2,g,r);\n else { var t = r; r = r2; r2 = t; }\n }\n return z.revert(r);\n }\n\n // (public) this^e % m, 0 <= e < 2^32\n function bnModPowInt(e,m) {\n var z;\n if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n return this.exp(e,z);\n }\n\n // protected\n BigInteger.prototype.copyTo = bnpCopyTo;\n BigInteger.prototype.fromInt = bnpFromInt;\n BigInteger.prototype.fromString = bnpFromString;\n BigInteger.prototype.clamp = bnpClamp;\n BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n BigInteger.prototype.lShiftTo = bnpLShiftTo;\n BigInteger.prototype.rShiftTo = bnpRShiftTo;\n BigInteger.prototype.subTo = bnpSubTo;\n BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n BigInteger.prototype.squareTo = bnpSquareTo;\n BigInteger.prototype.divRemTo = bnpDivRemTo;\n BigInteger.prototype.invDigit = bnpInvDigit;\n BigInteger.prototype.isEven = bnpIsEven;\n BigInteger.prototype.exp = bnpExp;\n\n // public\n BigInteger.prototype.toString = bnToString;\n BigInteger.prototype.negate = bnNegate;\n BigInteger.prototype.abs = bnAbs;\n BigInteger.prototype.compareTo = bnCompareTo;\n BigInteger.prototype.bitLength = bnBitLength;\n BigInteger.prototype.mod = bnMod;\n BigInteger.prototype.modPowInt = bnModPowInt;\n\n // \"constants\"\n BigInteger.ZERO = nbv(0);\n BigInteger.ONE = nbv(1);\n\n // Copyright (c) 2005-2009 Tom Wu\n // All Rights Reserved.\n // See \"LICENSE\" for details.\n\n // Extended JavaScript BN functions, required for RSA private ops.\n\n // Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n // Version 1.2: square() API, isProbablePrime fix\n\n // (public)\n function bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n // (public) return value as integer\n function bnIntValue() {\n if(this.s < 0) {\n if(this.t == 1) return this[0]-this.DV;\n else if(this.t == 0) return -1;\n }\n else if(this.t == 1) return this[0];\n else if(this.t == 0) return 0;\n // assumes 16 < DB < 32\n return ((this[1]&((1<<(32-this.DB))-1))<>24; }\n\n // (public) return value as short (assumes DB>=16)\n function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }\n\n // (protected) return x s.t. r^x < DV\n function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n // (public) 0 if this == 0, 1 if this > 0\n function bnSigNum() {\n if(this.s < 0) return -1;\n else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\n else return 1;\n }\n\n // (protected) convert to radix string\n function bnpToRadix(b) {\n if(b == null) b = 10;\n if(this.signum() == 0 || b < 2 || b > 36) return \"0\";\n var cs = this.chunkSize(b);\n var a = Math.pow(b,cs);\n var d = nbv(a), y = nbi(), z = nbi(), r = \"\";\n this.divRemTo(d,y,z);\n while(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n }\n return z.intValue().toString(b) + r;\n }\n\n // (protected) convert from radix string\n function bnpFromRadix(s,b) {\n this.fromInt(0);\n if(b == null) b = 10;\n var cs = this.chunkSize(b);\n var d = Math.pow(b,cs), mi = false, j = 0, w = 0;\n for(var i = 0; i < s.length; ++i) {\n var x = intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n continue;\n }\n w = b*w+x;\n if(++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w,0);\n j = 0;\n w = 0;\n }\n }\n if(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n }\n if(mi) BigInteger.ZERO.subTo(this,this);\n }\n\n // (protected) alternate constructor\n function bnpFromNumber(a,b,c) {\n if(\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if(a < 2) this.fromInt(1);\n else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1))\t// force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n if(this.isEven()) this.dAddOffset(1,0); // force odd\n while(!this.isProbablePrime(b)) {\n this.dAddOffset(2,0);\n if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1< 0) {\n if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)\n r[k++] = d|(this.s<<(this.DB-p));\n while(i >= 0) {\n if(p < 8) {\n d = (this[i]&((1<>(p+=this.DB-8);\n }\n else {\n d = (this[i]>>(p-=8))&0xff;\n if(p <= 0) { p += this.DB; --i; }\n }\n if((d&0x80) != 0) d |= -256;\n if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n if(k > 0 || d != this.s) r[k++] = d;\n }\n }\n return r;\n }\n\n function bnEquals(a) { return(this.compareTo(a)==0); }\n function bnMin(a) { return(this.compareTo(a)<0)?this:a; }\n function bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n // (protected) r = this op a (bitwise)\n function bnpBitwiseTo(a,op,r) {\n var i, f, m = Math.min(a.t,this.t);\n for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);\n if(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r[i] = op(this[i],f);\n r.t = this.t;\n }\n else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);\n r.t = a.t;\n }\n r.s = op(this.s,a.s);\n r.clamp();\n }\n\n // (public) this & a\n function op_and(x,y) { return x&y; }\n function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n // (public) this | a\n function op_or(x,y) { return x|y; }\n function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n // (public) this ^ a\n function op_xor(x,y) { return x^y; }\n function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n // (public) this & ~a\n function op_andnot(x,y) { return x&~y; }\n function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n // (public) ~this\n function bnNot() {\n var r = nbi();\n for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];\n r.t = this.t;\n r.s = ~this.s;\n return r;\n }\n\n // (public) this << n\n function bnShiftLeft(n) {\n var r = nbi();\n if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\n return r;\n }\n\n // (public) this >> n\n function bnShiftRight(n) {\n var r = nbi();\n if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\n return r;\n }\n\n // return index of lowest 1-bit in x, x < 2^31\n function lbit(x) {\n if(x == 0) return -1;\n var r = 0;\n if((x&0xffff) == 0) { x >>= 16; r += 16; }\n if((x&0xff) == 0) { x >>= 8; r += 8; }\n if((x&0xf) == 0) { x >>= 4; r += 4; }\n if((x&3) == 0) { x >>= 2; r += 2; }\n if((x&1) == 0) ++r;\n return r;\n }\n\n // (public) returns index of lowest 1-bit (or -1 if none)\n function bnGetLowestSetBit() {\n for(var i = 0; i < this.t; ++i)\n if(this[i] != 0) return i*this.DB+lbit(this[i]);\n if(this.s < 0) return this.t*this.DB;\n return -1;\n }\n\n // return number of 1 bits in x\n function cbit(x) {\n var r = 0;\n while(x != 0) { x &= x-1; ++r; }\n return r;\n }\n\n // (public) return number of set bits\n function bnBitCount() {\n var r = 0, x = this.s&this.DM;\n for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);\n return r;\n }\n\n // (public) true iff nth bit is set\n function bnTestBit(n) {\n var j = Math.floor(n/this.DB);\n if(j >= this.t) return(this.s!=0);\n return((this[j]&(1<<(n%this.DB)))!=0);\n }\n\n // (protected) this op (1<>= this.DB;\n }\n if(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c += a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c<0)?-1:0;\n if(c > 0) r[i++] = c;\n else if(c < -1) r[i++] = this.DV+c;\n r.t = i;\n r.clamp();\n }\n\n // (public) this + a\n function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n // (public) this - a\n function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n // (public) this * a\n function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n // (public) this^2\n function bnSquare() { var r = nbi(); this.squareTo(r); return r; }\n\n // (public) this / a\n function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n // (public) this % a\n function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n // (public) [this/a,this%a]\n function bnDivideAndRemainder(a) {\n var q = nbi(), r = nbi();\n this.divRemTo(a,q,r);\n return new Array(q,r);\n }\n\n // (protected) this *= n, this >= 0, 1 < n < DV\n function bnpDMultiply(n) {\n this[this.t] = this.am(0,n-1,this,0,0,this.t);\n ++this.t;\n this.clamp();\n }\n\n // (protected) this += n << w words, this >= 0\n function bnpDAddOffset(n,w) {\n if(n == 0) return;\n while(this.t <= w) this[this.t++] = 0;\n this[w] += n;\n while(this[w] >= this.DV) {\n this[w] -= this.DV;\n if(++w >= this.t) this[this.t++] = 0;\n ++this[w];\n }\n }\n\n // A \"null\" reducer\n function NullExp() {}\n function nNop(x) { return x; }\n function nMulTo(x,y,r) { x.multiplyTo(y,r); }\n function nSqrTo(x,r) { x.squareTo(r); }\n\n NullExp.prototype.convert = nNop;\n NullExp.prototype.revert = nNop;\n NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.sqrTo = nSqrTo;\n\n // (public) this^e\n function bnPow(e) { return this.exp(e,new NullExp()); }\n\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n function bnpMultiplyLowerTo(a,n,r) {\n var i = Math.min(this.t+a.t,n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while(i > 0) r[--i] = 0;\n var j;\n for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);\n for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);\n r.clamp();\n }\n\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n function bnpMultiplyUpperTo(a,n,r) {\n --n;\n var i = r.t = this.t+a.t-n;\n r.s = 0; // assumes a,this >= 0\n while(--i >= 0) r[i] = 0;\n for(i = Math.max(n-this.t,0); i < a.t; ++i)\n r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);\n r.clamp();\n r.drShiftTo(1,r);\n }\n\n // Barrett modular reduction\n function Barrett(m) {\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2*m.t,this.r2);\n this.mu = this.r2.divide(m);\n this.m = m;\n }\n\n function barrettConvert(x) {\n if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\n else if(x.compareTo(this.m) < 0) return x;\n else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n }\n\n function barrettRevert(x) { return x; }\n\n // x = x mod m (HAC 14.42)\n function barrettReduce(x) {\n x.drShiftTo(this.m.t-1,this.r2);\n if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\n this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\n this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\n while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\n x.subTo(this.r2,x);\n while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n }\n\n // r = x^2 mod m; x != r\n function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n // r = x*y mod m; x,y != r\n function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.reduce = barrettReduce;\n Barrett.prototype.mulTo = barrettMulTo;\n Barrett.prototype.sqrTo = barrettSqrTo;\n\n // (public) this^e % m (HAC 14.85)\n function bnModPow(e,m) {\n var i = e.bitLength(), k, r = nbv(1), z;\n if(i <= 0) return r;\n else if(i < 18) k = 1;\n else if(i < 48) k = 3;\n else if(i < 144) k = 4;\n else if(i < 768) k = 5;\n else k = 6;\n if(i < 8)\n z = new Classic(m);\n else if(m.isEven())\n z = new Barrett(m);\n else\n z = new Montgomery(m);\n\n // precomputation\n var g = new Array(), n = 3, k1 = k-1, km = (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1],g2);\n while(n <= km) {\n g[n] = nbi();\n z.mulTo(g2,g[n-2],g[n]);\n n += 2;\n }\n }\n\n var j = e.t-1, w, is1 = true, r2 = nbi(), t;\n i = nbits(e[j])-1;\n while(j >= 0) {\n if(i >= k1) w = (e[j]>>(i-k1))&km;\n else {\n w = (e[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e[j-1]>>(this.DB+i-k1);\n }\n\n n = k;\n while((w&1) == 0) { w >>= 1; --n; }\n if((i -= n) < 0) { i += this.DB; --j; }\n if(is1) {\t// ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n z.mulTo(r2,g[w],r);\n }\n\n while(j >= 0 && (e[j]&(1< 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n }\n while(x.signum() > 0) {\n if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n if(x.compareTo(y) >= 0) {\n x.subTo(y,x);\n x.rShiftTo(1,x);\n }\n else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n }\n if(g > 0) y.lShiftTo(g,y);\n return y;\n }\n\n // (protected) this % n, n < 2^26\n function bnpModInt(n) {\n if(n <= 0) return 0;\n var d = this.DV%n, r = (this.s<0)?n-1:0;\n if(this.t > 0)\n if(d == 0) r = this[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;\n return r;\n }\n\n // (public) 1/this % m (HAC 14.61)\n function bnModInverse(m) {\n var ac = m.isEven();\n if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\n var u = m.clone(), v = this.clone();\n var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\n while(u.signum() != 0) {\n while(u.isEven()) {\n u.rShiftTo(1,u);\n if(ac) {\n if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n a.rShiftTo(1,a);\n }\n else if(!b.isEven()) b.subTo(m,b);\n b.rShiftTo(1,b);\n }\n while(v.isEven()) {\n v.rShiftTo(1,v);\n if(ac) {\n if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n c.rShiftTo(1,c);\n }\n else if(!d.isEven()) d.subTo(m,d);\n d.rShiftTo(1,d);\n }\n if(u.compareTo(v) >= 0) {\n u.subTo(v,u);\n if(ac) a.subTo(c,a);\n b.subTo(d,b);\n }\n else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n }\n if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\n if(d.compareTo(m) >= 0) return d.subtract(m);\n if(d.signum() < 0) d.addTo(m,d); else return d;\n if(d.signum() < 0) return d.add(m); else return d;\n }\n\n var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];\n var lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n // (public) test primality with certainty >= 1-.5^t\n function bnIsProbablePrime(t) {\n var i, x = this.abs();\n if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x[0] == lowprimes[i]) return true;\n return false;\n }\n if(x.isEven()) return false;\n i = 1;\n while(i < lowprimes.length) {\n var m = lowprimes[i], j = i+1;\n while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while(i < j) if(m%lowprimes[i++] == 0) return false;\n }\n return x.millerRabin(t);\n }\n\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n function bnpMillerRabin(t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if(k <= 0) return false;\n var r = n1.shiftRight(k);\n t = (t+1)>>1;\n if(t > lowprimes.length) t = lowprimes.length;\n var a = nbi();\n for(var i = 0; i < t; ++i) {\n //Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);\n var y = a.modPow(r,this);\n if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while(j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2,this);\n if(y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if(y.compareTo(n1) != 0) return false;\n }\n }\n return true;\n }\n\n // protected\n BigInteger.prototype.chunkSize = bnpChunkSize;\n BigInteger.prototype.toRadix = bnpToRadix;\n BigInteger.prototype.fromRadix = bnpFromRadix;\n BigInteger.prototype.fromNumber = bnpFromNumber;\n BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n BigInteger.prototype.changeBit = bnpChangeBit;\n BigInteger.prototype.addTo = bnpAddTo;\n BigInteger.prototype.dMultiply = bnpDMultiply;\n BigInteger.prototype.dAddOffset = bnpDAddOffset;\n BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n BigInteger.prototype.modInt = bnpModInt;\n BigInteger.prototype.millerRabin = bnpMillerRabin;\n\n // public\n BigInteger.prototype.clone = bnClone;\n BigInteger.prototype.intValue = bnIntValue;\n BigInteger.prototype.byteValue = bnByteValue;\n BigInteger.prototype.shortValue = bnShortValue;\n BigInteger.prototype.signum = bnSigNum;\n BigInteger.prototype.toByteArray = bnToByteArray;\n BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.min = bnMin;\n BigInteger.prototype.max = bnMax;\n BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.or = bnOr;\n BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.not = bnNot;\n BigInteger.prototype.shiftLeft = bnShiftLeft;\n BigInteger.prototype.shiftRight = bnShiftRight;\n BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n BigInteger.prototype.bitCount = bnBitCount;\n BigInteger.prototype.testBit = bnTestBit;\n BigInteger.prototype.setBit = bnSetBit;\n BigInteger.prototype.clearBit = bnClearBit;\n BigInteger.prototype.flipBit = bnFlipBit;\n BigInteger.prototype.add = bnAdd;\n BigInteger.prototype.subtract = bnSubtract;\n BigInteger.prototype.multiply = bnMultiply;\n BigInteger.prototype.divide = bnDivide;\n BigInteger.prototype.remainder = bnRemainder;\n BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\n BigInteger.prototype.modPow = bnModPow;\n BigInteger.prototype.modInverse = bnModInverse;\n BigInteger.prototype.pow = bnPow;\n BigInteger.prototype.gcd = bnGCD;\n BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n // JSBN-specific extension\n BigInteger.prototype.square = bnSquare;\n\n // Expose the Barrett function\n BigInteger.prototype.Barrett = Barrett\n\n // BigInteger interfaces not implemented in jsbn:\n\n // BigInteger(int signum, byte[] magnitude)\n // double doubleValue()\n // float floatValue()\n // int hashCode()\n // long longValue()\n // static BigInteger valueOf(long val)\n\n\t// Random number generator - requires a PRNG backend, e.g. prng4.js\n\n\t// For best results, put code like\n\t// \n\t// in your main HTML document.\n\n\tvar rng_state;\n\tvar rng_pool;\n\tvar rng_pptr;\n\n\t// Mix in a 32-bit integer into the pool\n\tfunction rng_seed_int(x) {\n\t rng_pool[rng_pptr++] ^= x & 255;\n\t rng_pool[rng_pptr++] ^= (x >> 8) & 255;\n\t rng_pool[rng_pptr++] ^= (x >> 16) & 255;\n\t rng_pool[rng_pptr++] ^= (x >> 24) & 255;\n\t if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;\n\t}\n\n\t// Mix in the current time (w/milliseconds) into the pool\n\tfunction rng_seed_time() {\n\t rng_seed_int(new Date().getTime());\n\t}\n\n\t// Initialize the pool with junk if needed.\n\tif(rng_pool == null) {\n\t rng_pool = new Array();\n\t rng_pptr = 0;\n\t var t;\n\t if(typeof window !== \"undefined\" && window.crypto) {\n\t\tif (window.crypto.getRandomValues) {\n\t\t // Use webcrypto if available\n\t\t var ua = new Uint8Array(32);\n\t\t window.crypto.getRandomValues(ua);\n\t\t for(t = 0; t < 32; ++t)\n\t\t\trng_pool[rng_pptr++] = ua[t];\n\t\t}\n\t\telse if(navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\n\t\t // Extract entropy (256 bits) from NS4 RNG if available\n\t\t var z = window.crypto.random(32);\n\t\t for(t = 0; t < z.length; ++t)\n\t\t\trng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n\t\t}\n\t }\n\t while(rng_pptr < rng_psize) { // extract some randomness from Math.random()\n\t\tt = Math.floor(65536 * Math.random());\n\t\trng_pool[rng_pptr++] = t >>> 8;\n\t\trng_pool[rng_pptr++] = t & 255;\n\t }\n\t rng_pptr = 0;\n\t rng_seed_time();\n\t //rng_seed_int(window.screenX);\n\t //rng_seed_int(window.screenY);\n\t}\n\n\tfunction rng_get_byte() {\n\t if(rng_state == null) {\n\t\trng_seed_time();\n\t\trng_state = prng_newstate();\n\t\trng_state.init(rng_pool);\n\t\tfor(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)\n\t\t rng_pool[rng_pptr] = 0;\n\t\trng_pptr = 0;\n\t\t//rng_pool = null;\n\t }\n\t // TODO: allow reseeding after first request\n\t return rng_state.next();\n\t}\n\n\tfunction rng_get_bytes(ba) {\n\t var i;\n\t for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\n\t}\n\n\tfunction SecureRandom() {}\n\n\tSecureRandom.prototype.nextBytes = rng_get_bytes;\n\n\t// prng4.js - uses Arcfour as a PRNG\n\n\tfunction Arcfour() {\n\t this.i = 0;\n\t this.j = 0;\n\t this.S = new Array();\n\t}\n\n\t// Initialize arcfour context from key, an array of ints, each from [0..255]\n\tfunction ARC4init(key) {\n\t var i, j, t;\n\t for(i = 0; i < 256; ++i)\n\t\tthis.S[i] = i;\n\t j = 0;\n\t for(i = 0; i < 256; ++i) {\n\t\tj = (j + this.S[i] + key[i % key.length]) & 255;\n\t\tt = this.S[i];\n\t\tthis.S[i] = this.S[j];\n\t\tthis.S[j] = t;\n\t }\n\t this.i = 0;\n\t this.j = 0;\n\t}\n\n\tfunction ARC4next() {\n\t var t;\n\t this.i = (this.i + 1) & 255;\n\t this.j = (this.j + this.S[this.i]) & 255;\n\t t = this.S[this.i];\n\t this.S[this.i] = this.S[this.j];\n\t this.S[this.j] = t;\n\t return this.S[(t + this.S[this.i]) & 255];\n\t}\n\n\tArcfour.prototype.init = ARC4init;\n\tArcfour.prototype.next = ARC4next;\n\n\t// Plug in your RNG constructor here\n\tfunction prng_newstate() {\n\t return new Arcfour();\n\t}\n\n\t// Pool size must be a multiple of 4 and greater than 32.\n\t// An array of bytes the size of the pool will be passed to init()\n\tvar rng_psize = 256;\n\n BigInteger.SecureRandom = SecureRandom;\n BigInteger.BigInteger = BigInteger;\n if (typeof exports !== 'undefined') {\n exports = module.exports = BigInteger;\n } else {\n this.BigInteger = BigInteger;\n this.SecureRandom = SecureRandom;\n }\n\n}).call(this);\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i schema.maxItems){\r\n\t\t\t\t\t\taddError(\"There must be a maximum of \" + schema.maxItems + \" in the array\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(schema.properties || schema.additionalProperties){\r\n\t\t\t\t\terrors.concat(checkObj(value, schema.properties, path, schema.additionalProperties));\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){\r\n\t\t\t\t\taddError(\"does not match the regex pattern \" + schema.pattern);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){\r\n\t\t\t\t\taddError(\"may only be \" + schema.maxLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.minLength && typeof value == 'string' && value.length < schema.minLength){\r\n\t\t\t\t\taddError(\"must be at least \" + schema.minLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.minimum !== 'undefined' && typeof value == typeof schema.minimum &&\r\n\t\t\t\t\t\tschema.minimum > value){\r\n\t\t\t\t\taddError(\"must have a minimum value of \" + schema.minimum);\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maximum !== 'undefined' && typeof value == typeof schema.maximum &&\r\n\t\t\t\t\t\tschema.maximum < value){\r\n\t\t\t\t\taddError(\"must have a maximum value of \" + schema.maximum);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema['enum']){\r\n\t\t\t\t\tvar enumer = schema['enum'];\r\n\t\t\t\t\tl = enumer.length;\r\n\t\t\t\t\tvar found;\r\n\t\t\t\t\tfor(var j = 0; j < l; j++){\r\n\t\t\t\t\t\tif(enumer[j]===value){\r\n\t\t\t\t\t\t\tfound=1;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!found){\r\n\t\t\t\t\t\taddError(\"does not have a value in the enumeration \" + enumer.join(\", \"));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maxDecimal == 'number' &&\r\n\t\t\t\t\t(value.toString().match(new RegExp(\"\\\\.[0-9]{\" + (schema.maxDecimal + 1) + \",}\")))){\r\n\t\t\t\t\taddError(\"may only have \" + schema.maxDecimal + \" digits of decimal places\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t// validate an object against a schema\r\n\tfunction checkObj(instance,objTypeDef,path,additionalProp){\r\n\r\n\t\tif(typeof objTypeDef =='object'){\r\n\t\t\tif(typeof instance != 'object' || instance instanceof Array){\r\n\t\t\t\terrors.push({property:path,message:\"an object is required\"});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfor(var i in objTypeDef){ \r\n\t\t\t\tif(objTypeDef.hasOwnProperty(i) && i != '__proto__' && i != 'constructor'){\r\n\t\t\t\t\tvar value = instance.hasOwnProperty(i) ? instance[i] : undefined;\r\n\t\t\t\t\t// skip _not_ specified properties\r\n\t\t\t\t\tif (value === undefined && options.existingOnly) continue;\r\n\t\t\t\t\tvar propDef = objTypeDef[i];\r\n\t\t\t\t\t// set default\r\n\t\t\t\t\tif(value === undefined && propDef[\"default\"]){\r\n\t\t\t\t\t\tvalue = instance[i] = propDef[\"default\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(options.coerce && i in instance){\r\n\t\t\t\t\t\tvalue = instance[i] = options.coerce(value, propDef);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcheckProp(value,propDef,path,i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor(i in instance){\r\n\t\t\tif(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){\r\n\t\t\t\tif (options.filter) {\r\n\t\t\t\t\tdelete instance[i];\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t} else {\r\n\t\t\t\t\terrors.push({property:path,message:\"The property \" + i +\r\n\t\t\t\t\t\t\" is not defined in the schema and the schema does not allow additional properties\"});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires;\r\n\t\t\tif(requires && !(requires in instance)){\r\n\t\t\t\terrors.push({property:path,message:\"the presence of the property \" + i + \" requires that \" + requires + \" also be present\"});\r\n\t\t\t}\r\n\t\t\tvalue = instance[i];\r\n\t\t\tif(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){\r\n\t\t\t\tif(options.coerce){\r\n\t\t\t\t\tvalue = instance[i] = options.coerce(value, additionalProp);\r\n\t\t\t\t}\r\n\t\t\t\tcheckProp(value,additionalProp,path,i);\r\n\t\t\t}\r\n\t\t\tif(!_changing && value && value.$schema){\r\n\t\t\t\terrors = errors.concat(checkProp(value,value.$schema,path,i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn errors;\r\n\t}\r\n\tif(schema){\r\n\t\tcheckProp(instance,schema,'',_changing || '');\r\n\t}\r\n\tif(!_changing && instance && instance.$schema){\r\n\t\tcheckProp(instance,instance.$schema,'','');\r\n\t}\r\n\treturn {valid:!errors.length,errors:errors};\r\n};\r\nexports.mustBeValid = function(result){\r\n\t//\tsummary:\r\n\t//\t\tThis checks to ensure that the result is valid and will throw an appropriate error message if it is not\r\n\t// result: the result returned from checkPropertyChange or validate\r\n\tif(!result.valid){\r\n\t\tthrow new TypeError(result.errors.map(function(error){return \"for property \" + error.property + ': ' + error.message;}).join(\", \\n\"));\r\n\t}\r\n}\r\n\r\nreturn exports;\r\n}));\r\n","exports = module.exports = stringify\nexports.getSerialize = serializer\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [], keys = []\n\n if (cycleReplacer == null) cycleReplacer = function(key, value) {\n if (stack[0] === value) return \"[Circular ~]\"\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\"\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this)\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)\n }\n else stack.push(value)\n\n return replacer == null ? value : replacer.call(this, key, value)\n }\n}\n","var jws = require('jws');\n\nmodule.exports = function (jwt, options) {\n options = options || {};\n var decoded = jws.decode(jwt, options);\n if (!decoded) { return null; }\n var payload = decoded.payload;\n\n //try parse the payload\n if(typeof payload === 'string') {\n try {\n var obj = JSON.parse(payload);\n if(obj !== null && typeof obj === 'object') {\n payload = obj;\n }\n } catch (e) { }\n }\n\n //return header if `complete` option is enabled. header includes claims\n //such as `kid` and `alg` used to select the key within a JWKS needed to\n //verify the signature\n if (options.complete === true) {\n return {\n header: decoded.header,\n payload: payload,\n signature: decoded.signature\n };\n }\n return payload;\n};\n","module.exports = {\n decode: require('./decode'),\n verify: require('./verify'),\n sign: require('./sign'),\n JsonWebTokenError: require('./lib/JsonWebTokenError'),\n NotBeforeError: require('./lib/NotBeforeError'),\n TokenExpiredError: require('./lib/TokenExpiredError'),\n};\n","var JsonWebTokenError = function (message, error) {\n Error.call(this, message);\n if(Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = 'JsonWebTokenError';\n this.message = message;\n if (error) this.inner = error;\n};\n\nJsonWebTokenError.prototype = Object.create(Error.prototype);\nJsonWebTokenError.prototype.constructor = JsonWebTokenError;\n\nmodule.exports = JsonWebTokenError;\n","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar NotBeforeError = function (message, date) {\n JsonWebTokenError.call(this, message);\n this.name = 'NotBeforeError';\n this.date = date;\n};\n\nNotBeforeError.prototype = Object.create(JsonWebTokenError.prototype);\n\nNotBeforeError.prototype.constructor = NotBeforeError;\n\nmodule.exports = NotBeforeError;","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar TokenExpiredError = function (message, expiredAt) {\n JsonWebTokenError.call(this, message);\n this.name = 'TokenExpiredError';\n this.expiredAt = expiredAt;\n};\n\nTokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype);\n\nTokenExpiredError.prototype.constructor = TokenExpiredError;\n\nmodule.exports = TokenExpiredError;","var semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '^6.12.0 || >=8.0.0');\n","var ms = require('ms');\n\nmodule.exports = function (time, iat) {\n var timestamp = iat || Math.floor(Date.now() / 1000);\n\n if (typeof time === 'string') {\n var milliseconds = ms(time);\n if (typeof milliseconds === 'undefined') {\n return;\n }\n return Math.floor(timestamp + milliseconds / 1000);\n } else if (typeof time === 'number') {\n return timestamp + time;\n } else {\n return;\n }\n\n};","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","var timespan = require('./lib/timespan');\nvar PS_SUPPORTED = require('./lib/psSupported');\nvar jws = require('jws');\nvar includes = require('lodash.includes');\nvar isBoolean = require('lodash.isboolean');\nvar isInteger = require('lodash.isinteger');\nvar isNumber = require('lodash.isnumber');\nvar isPlainObject = require('lodash.isplainobject');\nvar isString = require('lodash.isstring');\nvar once = require('lodash.once');\n\nvar SUPPORTED_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'none']\nif (PS_SUPPORTED) {\n SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nvar sign_options_schema = {\n expiresIn: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"expiresIn\" should be a number of seconds or string representing a timespan' },\n notBefore: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"notBefore\" should be a number of seconds or string representing a timespan' },\n audience: { isValid: function(value) { return isString(value) || Array.isArray(value); }, message: '\"audience\" must be a string or array' },\n algorithm: { isValid: includes.bind(null, SUPPORTED_ALGS), message: '\"algorithm\" must be a valid string enum value' },\n header: { isValid: isPlainObject, message: '\"header\" must be an object' },\n encoding: { isValid: isString, message: '\"encoding\" must be a string' },\n issuer: { isValid: isString, message: '\"issuer\" must be a string' },\n subject: { isValid: isString, message: '\"subject\" must be a string' },\n jwtid: { isValid: isString, message: '\"jwtid\" must be a string' },\n noTimestamp: { isValid: isBoolean, message: '\"noTimestamp\" must be a boolean' },\n keyid: { isValid: isString, message: '\"keyid\" must be a string' },\n mutatePayload: { isValid: isBoolean, message: '\"mutatePayload\" must be a boolean' }\n};\n\nvar registered_claims_schema = {\n iat: { isValid: isNumber, message: '\"iat\" should be a number of seconds' },\n exp: { isValid: isNumber, message: '\"exp\" should be a number of seconds' },\n nbf: { isValid: isNumber, message: '\"nbf\" should be a number of seconds' }\n};\n\nfunction validate(schema, allowUnknown, object, parameterName) {\n if (!isPlainObject(object)) {\n throw new Error('Expected \"' + parameterName + '\" to be a plain object.');\n }\n Object.keys(object)\n .forEach(function(key) {\n var validator = schema[key];\n if (!validator) {\n if (!allowUnknown) {\n throw new Error('\"' + key + '\" is not allowed in \"' + parameterName + '\"');\n }\n return;\n }\n if (!validator.isValid(object[key])) {\n throw new Error(validator.message);\n }\n });\n}\n\nfunction validateOptions(options) {\n return validate(sign_options_schema, false, options, 'options');\n}\n\nfunction validatePayload(payload) {\n return validate(registered_claims_schema, true, payload, 'payload');\n}\n\nvar options_to_payload = {\n 'audience': 'aud',\n 'issuer': 'iss',\n 'subject': 'sub',\n 'jwtid': 'jti'\n};\n\nvar options_for_objects = [\n 'expiresIn',\n 'notBefore',\n 'noTimestamp',\n 'audience',\n 'issuer',\n 'subject',\n 'jwtid',\n];\n\nmodule.exports = function (payload, secretOrPrivateKey, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n } else {\n options = options || {};\n }\n\n var isObjectPayload = typeof payload === 'object' &&\n !Buffer.isBuffer(payload);\n\n var header = Object.assign({\n alg: options.algorithm || 'HS256',\n typ: isObjectPayload ? 'JWT' : undefined,\n kid: options.keyid\n }, options.header);\n\n function failure(err) {\n if (callback) {\n return callback(err);\n }\n throw err;\n }\n\n if (!secretOrPrivateKey && options.algorithm !== 'none') {\n return failure(new Error('secretOrPrivateKey must have a value'));\n }\n\n if (typeof payload === 'undefined') {\n return failure(new Error('payload is required'));\n } else if (isObjectPayload) {\n try {\n validatePayload(payload);\n }\n catch (error) {\n return failure(error);\n }\n if (!options.mutatePayload) {\n payload = Object.assign({},payload);\n }\n } else {\n var invalid_options = options_for_objects.filter(function (opt) {\n return typeof options[opt] !== 'undefined';\n });\n\n if (invalid_options.length > 0) {\n return failure(new Error('invalid ' + invalid_options.join(',') + ' option for ' + (typeof payload ) + ' payload'));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && typeof options.expiresIn !== 'undefined') {\n return failure(new Error('Bad \"options.expiresIn\" option the payload already has an \"exp\" property.'));\n }\n\n if (typeof payload.nbf !== 'undefined' && typeof options.notBefore !== 'undefined') {\n return failure(new Error('Bad \"options.notBefore\" option the payload already has an \"nbf\" property.'));\n }\n\n try {\n validateOptions(options);\n }\n catch (error) {\n return failure(error);\n }\n\n var timestamp = payload.iat || Math.floor(Date.now() / 1000);\n\n if (options.noTimestamp) {\n delete payload.iat;\n } else if (isObjectPayload) {\n payload.iat = timestamp;\n }\n\n if (typeof options.notBefore !== 'undefined') {\n try {\n payload.nbf = timespan(options.notBefore, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.nbf === 'undefined') {\n return failure(new Error('\"notBefore\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n if (typeof options.expiresIn !== 'undefined' && typeof payload === 'object') {\n try {\n payload.exp = timespan(options.expiresIn, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.exp === 'undefined') {\n return failure(new Error('\"expiresIn\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n Object.keys(options_to_payload).forEach(function (key) {\n var claim = options_to_payload[key];\n if (typeof options[key] !== 'undefined') {\n if (typeof payload[claim] !== 'undefined') {\n return failure(new Error('Bad \"options.' + key + '\" option. The payload already has an \"' + claim + '\" property.'));\n }\n payload[claim] = options[key];\n }\n });\n\n var encoding = options.encoding || 'utf8';\n\n if (typeof callback === 'function') {\n callback = callback && once(callback);\n\n jws.createSign({\n header: header,\n privateKey: secretOrPrivateKey,\n payload: payload,\n encoding: encoding\n }).once('error', callback)\n .once('done', function (signature) {\n callback(null, signature);\n });\n } else {\n return jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding});\n }\n};\n","var JsonWebTokenError = require('./lib/JsonWebTokenError');\nvar NotBeforeError = require('./lib/NotBeforeError');\nvar TokenExpiredError = require('./lib/TokenExpiredError');\nvar decode = require('./decode');\nvar timespan = require('./lib/timespan');\nvar PS_SUPPORTED = require('./lib/psSupported');\nvar jws = require('jws');\n\nvar PUB_KEY_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512'];\nvar RSA_KEY_ALGS = ['RS256', 'RS384', 'RS512'];\nvar HS_ALGS = ['HS256', 'HS384', 'HS512'];\n\nif (PS_SUPPORTED) {\n PUB_KEY_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n RSA_KEY_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nmodule.exports = function (jwtString, secretOrPublicKey, options, callback) {\n if ((typeof options === 'function') && !callback) {\n callback = options;\n options = {};\n }\n\n if (!options) {\n options = {};\n }\n\n //clone this object since we are going to mutate it.\n options = Object.assign({}, options);\n\n var done;\n\n if (callback) {\n done = callback;\n } else {\n done = function(err, data) {\n if (err) throw err;\n return data;\n };\n }\n\n if (options.clockTimestamp && typeof options.clockTimestamp !== 'number') {\n return done(new JsonWebTokenError('clockTimestamp must be a number'));\n }\n\n if (options.nonce !== undefined && (typeof options.nonce !== 'string' || options.nonce.trim() === '')) {\n return done(new JsonWebTokenError('nonce must be a non-empty string'));\n }\n\n var clockTimestamp = options.clockTimestamp || Math.floor(Date.now() / 1000);\n\n if (!jwtString){\n return done(new JsonWebTokenError('jwt must be provided'));\n }\n\n if (typeof jwtString !== 'string') {\n return done(new JsonWebTokenError('jwt must be a string'));\n }\n\n var parts = jwtString.split('.');\n\n if (parts.length !== 3){\n return done(new JsonWebTokenError('jwt malformed'));\n }\n\n var decodedToken;\n\n try {\n decodedToken = decode(jwtString, { complete: true });\n } catch(err) {\n return done(err);\n }\n\n if (!decodedToken) {\n return done(new JsonWebTokenError('invalid token'));\n }\n\n var header = decodedToken.header;\n var getSecret;\n\n if(typeof secretOrPublicKey === 'function') {\n if(!callback) {\n return done(new JsonWebTokenError('verify must be called asynchronous if secret or public key is provided as a callback'));\n }\n\n getSecret = secretOrPublicKey;\n }\n else {\n getSecret = function(header, secretCallback) {\n return secretCallback(null, secretOrPublicKey);\n };\n }\n\n return getSecret(header, function(err, secretOrPublicKey) {\n if(err) {\n return done(new JsonWebTokenError('error in secret or public key callback: ' + err.message));\n }\n\n var hasSignature = parts[2].trim() !== '';\n\n if (!hasSignature && secretOrPublicKey){\n return done(new JsonWebTokenError('jwt signature is required'));\n }\n\n if (hasSignature && !secretOrPublicKey) {\n return done(new JsonWebTokenError('secret or public key must be provided'));\n }\n\n if (!hasSignature && !options.algorithms) {\n options.algorithms = ['none'];\n }\n\n if (!options.algorithms) {\n options.algorithms = ~secretOrPublicKey.toString().indexOf('BEGIN CERTIFICATE') ||\n ~secretOrPublicKey.toString().indexOf('BEGIN PUBLIC KEY') ? PUB_KEY_ALGS :\n ~secretOrPublicKey.toString().indexOf('BEGIN RSA PUBLIC KEY') ? RSA_KEY_ALGS : HS_ALGS;\n\n }\n\n if (!~options.algorithms.indexOf(decodedToken.header.alg)) {\n return done(new JsonWebTokenError('invalid algorithm'));\n }\n\n var valid;\n\n try {\n valid = jws.verify(jwtString, decodedToken.header.alg, secretOrPublicKey);\n } catch (e) {\n return done(e);\n }\n\n if (!valid) {\n return done(new JsonWebTokenError('invalid signature'));\n }\n\n var payload = decodedToken.payload;\n\n if (typeof payload.nbf !== 'undefined' && !options.ignoreNotBefore) {\n if (typeof payload.nbf !== 'number') {\n return done(new JsonWebTokenError('invalid nbf value'));\n }\n if (payload.nbf > clockTimestamp + (options.clockTolerance || 0)) {\n return done(new NotBeforeError('jwt not active', new Date(payload.nbf * 1000)));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && !options.ignoreExpiration) {\n if (typeof payload.exp !== 'number') {\n return done(new JsonWebTokenError('invalid exp value'));\n }\n if (clockTimestamp >= payload.exp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000)));\n }\n }\n\n if (options.audience) {\n var audiences = Array.isArray(options.audience) ? options.audience : [options.audience];\n var target = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n var match = target.some(function (targetAudience) {\n return audiences.some(function (audience) {\n return audience instanceof RegExp ? audience.test(targetAudience) : audience === targetAudience;\n });\n });\n\n if (!match) {\n return done(new JsonWebTokenError('jwt audience invalid. expected: ' + audiences.join(' or ')));\n }\n }\n\n if (options.issuer) {\n var invalid_issuer =\n (typeof options.issuer === 'string' && payload.iss !== options.issuer) ||\n (Array.isArray(options.issuer) && options.issuer.indexOf(payload.iss) === -1);\n\n if (invalid_issuer) {\n return done(new JsonWebTokenError('jwt issuer invalid. expected: ' + options.issuer));\n }\n }\n\n if (options.subject) {\n if (payload.sub !== options.subject) {\n return done(new JsonWebTokenError('jwt subject invalid. expected: ' + options.subject));\n }\n }\n\n if (options.jwtid) {\n if (payload.jti !== options.jwtid) {\n return done(new JsonWebTokenError('jwt jwtid invalid. expected: ' + options.jwtid));\n }\n }\n\n if (options.nonce) {\n if (payload.nonce !== options.nonce) {\n return done(new JsonWebTokenError('jwt nonce invalid. expected: ' + options.nonce));\n }\n }\n\n if (options.maxAge) {\n if (typeof payload.iat !== 'number') {\n return done(new JsonWebTokenError('iat required when maxAge is specified'));\n }\n\n var maxAgeTimestamp = timespan(options.maxAge, payload.iat);\n if (typeof maxAgeTimestamp === 'undefined') {\n return done(new JsonWebTokenError('\"maxAge\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n if (clockTimestamp >= maxAgeTimestamp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('maxAge exceeded', new Date(maxAgeTimestamp * 1000)));\n }\n }\n\n if (options.complete === true) {\n var signature = decodedToken.signature;\n\n return done(null, {\n header: header,\n payload: payload,\n signature: signature\n });\n }\n\n return done(null, payload);\n });\n};\n","/*\n * lib/jsprim.js: utilities for primitive JavaScript types\n */\n\nvar mod_assert = require('assert-plus');\nvar mod_util = require('util');\n\nvar mod_extsprintf = require('extsprintf');\nvar mod_verror = require('verror');\nvar mod_jsonschema = require('json-schema');\n\n/*\n * Public interface\n */\nexports.deepCopy = deepCopy;\nexports.deepEqual = deepEqual;\nexports.isEmpty = isEmpty;\nexports.hasKey = hasKey;\nexports.forEachKey = forEachKey;\nexports.pluck = pluck;\nexports.flattenObject = flattenObject;\nexports.flattenIter = flattenIter;\nexports.validateJsonObject = validateJsonObjectJS;\nexports.validateJsonObjectJS = validateJsonObjectJS;\nexports.randElt = randElt;\nexports.extraProperties = extraProperties;\nexports.mergeObjects = mergeObjects;\n\nexports.startsWith = startsWith;\nexports.endsWith = endsWith;\n\nexports.parseInteger = parseInteger;\n\nexports.iso8601 = iso8601;\nexports.rfc1123 = rfc1123;\nexports.parseDateTime = parseDateTime;\n\nexports.hrtimediff = hrtimeDiff;\nexports.hrtimeDiff = hrtimeDiff;\nexports.hrtimeAccum = hrtimeAccum;\nexports.hrtimeAdd = hrtimeAdd;\nexports.hrtimeNanosec = hrtimeNanosec;\nexports.hrtimeMicrosec = hrtimeMicrosec;\nexports.hrtimeMillisec = hrtimeMillisec;\n\n\n/*\n * Deep copy an acyclic *basic* Javascript object. This only handles basic\n * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects\n * containing these. This does *not* handle instances of other classes.\n */\nfunction deepCopy(obj)\n{\n\tvar ret, key;\n\tvar marker = '__deepCopy';\n\n\tif (obj && obj[marker])\n\t\tthrow (new Error('attempted deep copy of cyclic object'));\n\n\tif (obj && obj.constructor == Object) {\n\t\tret = {};\n\t\tobj[marker] = true;\n\n\t\tfor (key in obj) {\n\t\t\tif (key == marker)\n\t\t\t\tcontinue;\n\n\t\t\tret[key] = deepCopy(obj[key]);\n\t\t}\n\n\t\tdelete (obj[marker]);\n\t\treturn (ret);\n\t}\n\n\tif (obj && obj.constructor == Array) {\n\t\tret = [];\n\t\tobj[marker] = true;\n\n\t\tfor (key = 0; key < obj.length; key++)\n\t\t\tret.push(deepCopy(obj[key]));\n\n\t\tdelete (obj[marker]);\n\t\treturn (ret);\n\t}\n\n\t/*\n\t * It must be a primitive type -- just return it.\n\t */\n\treturn (obj);\n}\n\nfunction deepEqual(obj1, obj2)\n{\n\tif (typeof (obj1) != typeof (obj2))\n\t\treturn (false);\n\n\tif (obj1 === null || obj2 === null || typeof (obj1) != 'object')\n\t\treturn (obj1 === obj2);\n\n\tif (obj1.constructor != obj2.constructor)\n\t\treturn (false);\n\n\tvar k;\n\tfor (k in obj1) {\n\t\tif (!obj2.hasOwnProperty(k))\n\t\t\treturn (false);\n\n\t\tif (!deepEqual(obj1[k], obj2[k]))\n\t\t\treturn (false);\n\t}\n\n\tfor (k in obj2) {\n\t\tif (!obj1.hasOwnProperty(k))\n\t\t\treturn (false);\n\t}\n\n\treturn (true);\n}\n\nfunction isEmpty(obj)\n{\n\tvar key;\n\tfor (key in obj)\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction hasKey(obj, key)\n{\n\tmod_assert.equal(typeof (key), 'string');\n\treturn (Object.prototype.hasOwnProperty.call(obj, key));\n}\n\nfunction forEachKey(obj, callback)\n{\n\tfor (var key in obj) {\n\t\tif (hasKey(obj, key)) {\n\t\t\tcallback(key, obj[key]);\n\t\t}\n\t}\n}\n\nfunction pluck(obj, key)\n{\n\tmod_assert.equal(typeof (key), 'string');\n\treturn (pluckv(obj, key));\n}\n\nfunction pluckv(obj, key)\n{\n\tif (obj === null || typeof (obj) !== 'object')\n\t\treturn (undefined);\n\n\tif (obj.hasOwnProperty(key))\n\t\treturn (obj[key]);\n\n\tvar i = key.indexOf('.');\n\tif (i == -1)\n\t\treturn (undefined);\n\n\tvar key1 = key.substr(0, i);\n\tif (!obj.hasOwnProperty(key1))\n\t\treturn (undefined);\n\n\treturn (pluckv(obj[key1], key.substr(i + 1)));\n}\n\n/*\n * Invoke callback(row) for each entry in the array that would be returned by\n * flattenObject(data, depth). This is just like flattenObject(data,\n * depth).forEach(callback), except that the intermediate array is never\n * created.\n */\nfunction flattenIter(data, depth, callback)\n{\n\tdoFlattenIter(data, depth, [], callback);\n}\n\nfunction doFlattenIter(data, depth, accum, callback)\n{\n\tvar each;\n\tvar key;\n\n\tif (depth === 0) {\n\t\teach = accum.slice(0);\n\t\teach.push(data);\n\t\tcallback(each);\n\t\treturn;\n\t}\n\n\tmod_assert.ok(data !== null);\n\tmod_assert.equal(typeof (data), 'object');\n\tmod_assert.equal(typeof (depth), 'number');\n\tmod_assert.ok(depth >= 0);\n\n\tfor (key in data) {\n\t\teach = accum.slice(0);\n\t\teach.push(key);\n\t\tdoFlattenIter(data[key], depth - 1, each, callback);\n\t}\n}\n\nfunction flattenObject(data, depth)\n{\n\tif (depth === 0)\n\t\treturn ([ data ]);\n\n\tmod_assert.ok(data !== null);\n\tmod_assert.equal(typeof (data), 'object');\n\tmod_assert.equal(typeof (depth), 'number');\n\tmod_assert.ok(depth >= 0);\n\n\tvar rv = [];\n\tvar key;\n\n\tfor (key in data) {\n\t\tflattenObject(data[key], depth - 1).forEach(function (p) {\n\t\t\trv.push([ key ].concat(p));\n\t\t});\n\t}\n\n\treturn (rv);\n}\n\nfunction startsWith(str, prefix)\n{\n\treturn (str.substr(0, prefix.length) == prefix);\n}\n\nfunction endsWith(str, suffix)\n{\n\treturn (str.substr(\n\t str.length - suffix.length, suffix.length) == suffix);\n}\n\nfunction iso8601(d)\n{\n\tif (typeof (d) == 'number')\n\t\td = new Date(d);\n\tmod_assert.ok(d.constructor === Date);\n\treturn (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ',\n\t d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(),\n\t d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(),\n\t d.getUTCMilliseconds()));\n}\n\nvar RFC1123_MONTHS = [\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar RFC1123_DAYS = [\n 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nfunction rfc1123(date) {\n\treturn (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT',\n\t RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(),\n\t RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(),\n\t date.getUTCHours(), date.getUTCMinutes(),\n\t date.getUTCSeconds()));\n}\n\n/*\n * Parses a date expressed as a string, as either a number of milliseconds since\n * the epoch or any string format that Date accepts, giving preference to the\n * former where these two sets overlap (e.g., small numbers).\n */\nfunction parseDateTime(str)\n{\n\t/*\n\t * This is irritatingly implicit, but significantly more concise than\n\t * alternatives. The \"+str\" will convert a string containing only a\n\t * number directly to a Number, or NaN for other strings. Thus, if the\n\t * conversion succeeds, we use it (this is the milliseconds-since-epoch\n\t * case). Otherwise, we pass the string directly to the Date\n\t * constructor to parse.\n\t */\n\tvar numeric = +str;\n\tif (!isNaN(numeric)) {\n\t\treturn (new Date(numeric));\n\t} else {\n\t\treturn (new Date(str));\n\t}\n}\n\n\n/*\n * Number.*_SAFE_INTEGER isn't present before node v0.12, so we hardcode\n * the ES6 definitions here, while allowing for them to someday be higher.\n */\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\nvar MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n\n\n/*\n * Default options for parseInteger().\n */\nvar PI_DEFAULTS = {\n\tbase: 10,\n\tallowSign: true,\n\tallowPrefix: false,\n\tallowTrailing: false,\n\tallowImprecise: false,\n\ttrimWhitespace: false,\n\tleadingZeroIsOctal: false\n};\n\nvar CP_0 = 0x30;\nvar CP_9 = 0x39;\n\nvar CP_A = 0x41;\nvar CP_B = 0x42;\nvar CP_O = 0x4f;\nvar CP_T = 0x54;\nvar CP_X = 0x58;\nvar CP_Z = 0x5a;\n\nvar CP_a = 0x61;\nvar CP_b = 0x62;\nvar CP_o = 0x6f;\nvar CP_t = 0x74;\nvar CP_x = 0x78;\nvar CP_z = 0x7a;\n\nvar PI_CONV_DEC = 0x30;\nvar PI_CONV_UC = 0x37;\nvar PI_CONV_LC = 0x57;\n\n\n/*\n * A stricter version of parseInt() that provides options for changing what\n * is an acceptable string (for example, disallowing trailing characters).\n */\nfunction parseInteger(str, uopts)\n{\n\tmod_assert.string(str, 'str');\n\tmod_assert.optionalObject(uopts, 'options');\n\n\tvar baseOverride = false;\n\tvar options = PI_DEFAULTS;\n\n\tif (uopts) {\n\t\tbaseOverride = hasKey(uopts, 'base');\n\t\toptions = mergeObjects(options, uopts);\n\t\tmod_assert.number(options.base, 'options.base');\n\t\tmod_assert.ok(options.base >= 2, 'options.base >= 2');\n\t\tmod_assert.ok(options.base <= 36, 'options.base <= 36');\n\t\tmod_assert.bool(options.allowSign, 'options.allowSign');\n\t\tmod_assert.bool(options.allowPrefix, 'options.allowPrefix');\n\t\tmod_assert.bool(options.allowTrailing,\n\t\t 'options.allowTrailing');\n\t\tmod_assert.bool(options.allowImprecise,\n\t\t 'options.allowImprecise');\n\t\tmod_assert.bool(options.trimWhitespace,\n\t\t 'options.trimWhitespace');\n\t\tmod_assert.bool(options.leadingZeroIsOctal,\n\t\t 'options.leadingZeroIsOctal');\n\n\t\tif (options.leadingZeroIsOctal) {\n\t\t\tmod_assert.ok(!baseOverride,\n\t\t\t '\"base\" and \"leadingZeroIsOctal\" are ' +\n\t\t\t 'mutually exclusive');\n\t\t}\n\t}\n\n\tvar c;\n\tvar pbase = -1;\n\tvar base = options.base;\n\tvar start;\n\tvar mult = 1;\n\tvar value = 0;\n\tvar idx = 0;\n\tvar len = str.length;\n\n\t/* Trim any whitespace on the left side. */\n\tif (options.trimWhitespace) {\n\t\twhile (idx < len && isSpace(str.charCodeAt(idx))) {\n\t\t\t++idx;\n\t\t}\n\t}\n\n\t/* Check the number for a leading sign. */\n\tif (options.allowSign) {\n\t\tif (str[idx] === '-') {\n\t\t\tidx += 1;\n\t\t\tmult = -1;\n\t\t} else if (str[idx] === '+') {\n\t\t\tidx += 1;\n\t\t}\n\t}\n\n\t/* Parse the base-indicating prefix if there is one. */\n\tif (str[idx] === '0') {\n\t\tif (options.allowPrefix) {\n\t\t\tpbase = prefixToBase(str.charCodeAt(idx + 1));\n\t\t\tif (pbase !== -1 && (!baseOverride || pbase === base)) {\n\t\t\t\tbase = pbase;\n\t\t\t\tidx += 2;\n\t\t\t}\n\t\t}\n\n\t\tif (pbase === -1 && options.leadingZeroIsOctal) {\n\t\t\tbase = 8;\n\t\t}\n\t}\n\n\t/* Parse the actual digits. */\n\tfor (start = idx; idx < len; ++idx) {\n\t\tc = translateDigit(str.charCodeAt(idx));\n\t\tif (c !== -1 && c < base) {\n\t\t\tvalue *= base;\n\t\t\tvalue += c;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* If we didn't parse any digits, we have an invalid number. */\n\tif (start === idx) {\n\t\treturn (new Error('invalid number: ' + JSON.stringify(str)));\n\t}\n\n\t/* Trim any whitespace on the right side. */\n\tif (options.trimWhitespace) {\n\t\twhile (idx < len && isSpace(str.charCodeAt(idx))) {\n\t\t\t++idx;\n\t\t}\n\t}\n\n\t/* Check for trailing characters. */\n\tif (idx < len && !options.allowTrailing) {\n\t\treturn (new Error('trailing characters after number: ' +\n\t\t JSON.stringify(str.slice(idx))));\n\t}\n\n\t/* If our value is 0, we return now, to avoid returning -0. */\n\tif (value === 0) {\n\t\treturn (0);\n\t}\n\n\t/* Calculate our final value. */\n\tvar result = value * mult;\n\n\t/*\n\t * If the string represents a value that cannot be precisely represented\n\t * by JavaScript, then we want to check that:\n\t *\n\t * - We never increased the value past MAX_SAFE_INTEGER\n\t * - We don't make the result negative and below MIN_SAFE_INTEGER\n\t *\n\t * Because we only ever increment the value during parsing, there's no\n\t * chance of moving past MAX_SAFE_INTEGER and then dropping below it\n\t * again, losing precision in the process. This means that we only need\n\t * to do our checks here, at the end.\n\t */\n\tif (!options.allowImprecise &&\n\t (value > MAX_SAFE_INTEGER || result < MIN_SAFE_INTEGER)) {\n\t\treturn (new Error('number is outside of the supported range: ' +\n\t\t JSON.stringify(str.slice(start, idx))));\n\t}\n\n\treturn (result);\n}\n\n\n/*\n * Interpret a character code as a base-36 digit.\n */\nfunction translateDigit(d)\n{\n\tif (d >= CP_0 && d <= CP_9) {\n\t\t/* '0' to '9' -> 0 to 9 */\n\t\treturn (d - PI_CONV_DEC);\n\t} else if (d >= CP_A && d <= CP_Z) {\n\t\t/* 'A' - 'Z' -> 10 to 35 */\n\t\treturn (d - PI_CONV_UC);\n\t} else if (d >= CP_a && d <= CP_z) {\n\t\t/* 'a' - 'z' -> 10 to 35 */\n\t\treturn (d - PI_CONV_LC);\n\t} else {\n\t\t/* Invalid character code */\n\t\treturn (-1);\n\t}\n}\n\n\n/*\n * Test if a value matches the ECMAScript definition of trimmable whitespace.\n */\nfunction isSpace(c)\n{\n\treturn (c === 0x20) ||\n\t (c >= 0x0009 && c <= 0x000d) ||\n\t (c === 0x00a0) ||\n\t (c === 0x1680) ||\n\t (c === 0x180e) ||\n\t (c >= 0x2000 && c <= 0x200a) ||\n\t (c === 0x2028) ||\n\t (c === 0x2029) ||\n\t (c === 0x202f) ||\n\t (c === 0x205f) ||\n\t (c === 0x3000) ||\n\t (c === 0xfeff);\n}\n\n\n/*\n * Determine which base a character indicates (e.g., 'x' indicates hex).\n */\nfunction prefixToBase(c)\n{\n\tif (c === CP_b || c === CP_B) {\n\t\t/* 0b/0B (binary) */\n\t\treturn (2);\n\t} else if (c === CP_o || c === CP_O) {\n\t\t/* 0o/0O (octal) */\n\t\treturn (8);\n\t} else if (c === CP_t || c === CP_T) {\n\t\t/* 0t/0T (decimal) */\n\t\treturn (10);\n\t} else if (c === CP_x || c === CP_X) {\n\t\t/* 0x/0X (hexadecimal) */\n\t\treturn (16);\n\t} else {\n\t\t/* Not a meaningful character */\n\t\treturn (-1);\n\t}\n}\n\n\nfunction validateJsonObjectJS(schema, input)\n{\n\tvar report = mod_jsonschema.validate(input, schema);\n\n\tif (report.errors.length === 0)\n\t\treturn (null);\n\n\t/* Currently, we only do anything useful with the first error. */\n\tvar error = report.errors[0];\n\n\t/* The failed property is given by a URI with an irrelevant prefix. */\n\tvar propname = error['property'];\n\tvar reason = error['message'].toLowerCase();\n\tvar i, j;\n\n\t/*\n\t * There's at least one case where the property error message is\n\t * confusing at best. We work around this here.\n\t */\n\tif ((i = reason.indexOf('the property ')) != -1 &&\n\t (j = reason.indexOf(' is not defined in the schema and the ' +\n\t 'schema does not allow additional properties')) != -1) {\n\t\ti += 'the property '.length;\n\t\tif (propname === '')\n\t\t\tpropname = reason.substr(i, j - i);\n\t\telse\n\t\t\tpropname = propname + '.' + reason.substr(i, j - i);\n\n\t\treason = 'unsupported property';\n\t}\n\n\tvar rv = new mod_verror.VError('property \"%s\": %s', propname, reason);\n\trv.jsv_details = error;\n\treturn (rv);\n}\n\nfunction randElt(arr)\n{\n\tmod_assert.ok(Array.isArray(arr) && arr.length > 0,\n\t 'randElt argument must be a non-empty array');\n\n\treturn (arr[Math.floor(Math.random() * arr.length)]);\n}\n\nfunction assertHrtime(a)\n{\n\tmod_assert.ok(a[0] >= 0 && a[1] >= 0,\n\t 'negative numbers not allowed in hrtimes');\n\tmod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow');\n}\n\n/*\n * Compute the time elapsed between hrtime readings A and B, where A is later\n * than B. hrtime readings come from Node's process.hrtime(). There is no\n * defined way to represent negative deltas, so it's illegal to diff B from A\n * where the time denoted by B is later than the time denoted by A. If this\n * becomes valuable, we can define a representation and extend the\n * implementation to support it.\n */\nfunction hrtimeDiff(a, b)\n{\n\tassertHrtime(a);\n\tassertHrtime(b);\n\tmod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]),\n\t 'negative differences not allowed');\n\n\tvar rv = [ a[0] - b[0], 0 ];\n\n\tif (a[1] >= b[1]) {\n\t\trv[1] = a[1] - b[1];\n\t} else {\n\t\trv[0]--;\n\t\trv[1] = 1e9 - (b[1] - a[1]);\n\t}\n\n\treturn (rv);\n}\n\n/*\n * Convert a hrtime reading from the array format returned by Node's\n * process.hrtime() into a scalar number of nanoseconds.\n */\nfunction hrtimeNanosec(a)\n{\n\tassertHrtime(a);\n\n\treturn (Math.floor(a[0] * 1e9 + a[1]));\n}\n\n/*\n * Convert a hrtime reading from the array format returned by Node's\n * process.hrtime() into a scalar number of microseconds.\n */\nfunction hrtimeMicrosec(a)\n{\n\tassertHrtime(a);\n\n\treturn (Math.floor(a[0] * 1e6 + a[1] / 1e3));\n}\n\n/*\n * Convert a hrtime reading from the array format returned by Node's\n * process.hrtime() into a scalar number of milliseconds.\n */\nfunction hrtimeMillisec(a)\n{\n\tassertHrtime(a);\n\n\treturn (Math.floor(a[0] * 1e3 + a[1] / 1e6));\n}\n\n/*\n * Add two hrtime readings A and B, overwriting A with the result of the\n * addition. This function is useful for accumulating several hrtime intervals\n * into a counter. Returns A.\n */\nfunction hrtimeAccum(a, b)\n{\n\tassertHrtime(a);\n\tassertHrtime(b);\n\n\t/*\n\t * Accumulate the nanosecond component.\n\t */\n\ta[1] += b[1];\n\tif (a[1] >= 1e9) {\n\t\t/*\n\t\t * The nanosecond component overflowed, so carry to the seconds\n\t\t * field.\n\t\t */\n\t\ta[0]++;\n\t\ta[1] -= 1e9;\n\t}\n\n\t/*\n\t * Accumulate the seconds component.\n\t */\n\ta[0] += b[0];\n\n\treturn (a);\n}\n\n/*\n * Add two hrtime readings A and B, returning the result as a new hrtime array.\n * Does not modify either input argument.\n */\nfunction hrtimeAdd(a, b)\n{\n\tassertHrtime(a);\n\n\tvar rv = [ a[0], a[1] ];\n\n\treturn (hrtimeAccum(rv, b));\n}\n\n\n/*\n * Check an object for unexpected properties. Accepts the object to check, and\n * an array of allowed property names (strings). Returns an array of key names\n * that were found on the object, but did not appear in the list of allowed\n * properties. If no properties were found, the returned array will be of\n * zero length.\n */\nfunction extraProperties(obj, allowed)\n{\n\tmod_assert.ok(typeof (obj) === 'object' && obj !== null,\n\t 'obj argument must be a non-null object');\n\tmod_assert.ok(Array.isArray(allowed),\n\t 'allowed argument must be an array of strings');\n\tfor (var i = 0; i < allowed.length; i++) {\n\t\tmod_assert.ok(typeof (allowed[i]) === 'string',\n\t\t 'allowed argument must be an array of strings');\n\t}\n\n\treturn (Object.keys(obj).filter(function (key) {\n\t\treturn (allowed.indexOf(key) === -1);\n\t}));\n}\n\n/*\n * Given three sets of properties \"provided\" (may be undefined), \"overrides\"\n * (required), and \"defaults\" (may be undefined), construct an object containing\n * the union of these sets with \"overrides\" overriding \"provided\", and\n * \"provided\" overriding \"defaults\". None of the input objects are modified.\n */\nfunction mergeObjects(provided, overrides, defaults)\n{\n\tvar rv, k;\n\n\trv = {};\n\tif (defaults) {\n\t\tfor (k in defaults)\n\t\t\trv[k] = defaults[k];\n\t}\n\n\tif (provided) {\n\t\tfor (k in provided)\n\t\t\trv[k] = provided[k];\n\t}\n\n\tif (overrides) {\n\t\tfor (k in overrides)\n\t\t\trv[k] = overrides[k];\n\t}\n\n\treturn (rv);\n}\n","var bufferEqual = require('buffer-equal-constant-time');\nvar Buffer = require('safe-buffer').Buffer;\nvar crypto = require('crypto');\nvar formatEcdsa = require('ecdsa-sig-formatter');\nvar util = require('util');\n\nvar MSG_INVALID_ALGORITHM = '\"%s\" is not a valid algorithm.\\n Supported algorithms are:\\n \"HS256\", \"HS384\", \"HS512\", \"RS256\", \"RS384\", \"RS512\", \"PS256\", \"PS384\", \"PS512\", \"ES256\", \"ES384\", \"ES512\" and \"none\".'\nvar MSG_INVALID_SECRET = 'secret must be a string or buffer';\nvar MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer';\nvar MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object';\n\nvar supportsKeyObjects = typeof crypto.createPublicKey === 'function';\nif (supportsKeyObjects) {\n MSG_INVALID_VERIFIER_KEY += ' or a KeyObject';\n MSG_INVALID_SECRET += 'or a KeyObject';\n}\n\nfunction checkIsPublicKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.type !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.asymmetricKeyType !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n};\n\nfunction checkIsPrivateKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (typeof key === 'object') {\n return;\n }\n\n throw typeError(MSG_INVALID_SIGNER_KEY);\n};\n\nfunction checkIsSecretKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return key;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (key.type !== 'secret') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_SECRET);\n }\n}\n\nfunction fromBase64(base64) {\n return base64\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction toBase64(base64url) {\n base64url = base64url.toString();\n\n var padding = 4 - base64url.length % 4;\n if (padding !== 4) {\n for (var i = 0; i < padding; ++i) {\n base64url += '=';\n }\n }\n\n return base64url\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n}\n\nfunction typeError(template) {\n var args = [].slice.call(arguments, 1);\n var errMsg = util.format.bind(util, template).apply(null, args);\n return new TypeError(errMsg);\n}\n\nfunction bufferOrString(obj) {\n return Buffer.isBuffer(obj) || typeof obj === 'string';\n}\n\nfunction normalizeInput(thing) {\n if (!bufferOrString(thing))\n thing = JSON.stringify(thing);\n return thing;\n}\n\nfunction createHmacSigner(bits) {\n return function sign(thing, secret) {\n checkIsSecretKey(secret);\n thing = normalizeInput(thing);\n var hmac = crypto.createHmac('sha' + bits, secret);\n var sig = (hmac.update(thing), hmac.digest('base64'))\n return fromBase64(sig);\n }\n}\n\nfunction createHmacVerifier(bits) {\n return function verify(thing, signature, secret) {\n var computedSig = createHmacSigner(bits)(thing, secret);\n return bufferEqual(Buffer.from(signature), Buffer.from(computedSig));\n }\n}\n\nfunction createKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n // Even though we are specifying \"RSA\" here, this works with ECDSA\n // keys as well.\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign(privateKey, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify(publicKey, signature, 'base64');\n }\n}\n\nfunction createPSSKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign({\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createPSSKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify({\n key: publicKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, signature, 'base64');\n }\n}\n\nfunction createECDSASigner(bits) {\n var inner = createKeySigner(bits);\n return function sign() {\n var signature = inner.apply(null, arguments);\n signature = formatEcdsa.derToJose(signature, 'ES' + bits);\n return signature;\n };\n}\n\nfunction createECDSAVerifer(bits) {\n var inner = createKeyVerifier(bits);\n return function verify(thing, signature, publicKey) {\n signature = formatEcdsa.joseToDer(signature, 'ES' + bits).toString('base64');\n var result = inner(thing, signature, publicKey);\n return result;\n };\n}\n\nfunction createNoneSigner() {\n return function sign() {\n return '';\n }\n}\n\nfunction createNoneVerifier() {\n return function verify(thing, signature) {\n return signature === '';\n }\n}\n\nmodule.exports = function jwa(algorithm) {\n var signerFactories = {\n hs: createHmacSigner,\n rs: createKeySigner,\n ps: createPSSKeySigner,\n es: createECDSASigner,\n none: createNoneSigner,\n }\n var verifierFactories = {\n hs: createHmacVerifier,\n rs: createKeyVerifier,\n ps: createPSSKeyVerifier,\n es: createECDSAVerifer,\n none: createNoneVerifier,\n }\n var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i);\n if (!match)\n throw typeError(MSG_INVALID_ALGORITHM, algorithm);\n var algo = (match[1] || match[3]).toLowerCase();\n var bits = match[2];\n\n return {\n sign: signerFactories[algo](bits),\n verify: verifierFactories[algo](bits),\n }\n};\n","/*global exports*/\nvar SignStream = require('./lib/sign-stream');\nvar VerifyStream = require('./lib/verify-stream');\n\nvar ALGORITHMS = [\n 'HS256', 'HS384', 'HS512',\n 'RS256', 'RS384', 'RS512',\n 'PS256', 'PS384', 'PS512',\n 'ES256', 'ES384', 'ES512'\n];\n\nexports.ALGORITHMS = ALGORITHMS;\nexports.sign = SignStream.sign;\nexports.verify = VerifyStream.verify;\nexports.decode = VerifyStream.decode;\nexports.isValid = VerifyStream.isValid;\nexports.createSign = function createSign(opts) {\n return new SignStream(opts);\n};\nexports.createVerify = function createVerify(opts) {\n return new VerifyStream(opts);\n};\n","/*global module, process*/\nvar Buffer = require('safe-buffer').Buffer;\nvar Stream = require('stream');\nvar util = require('util');\n\nfunction DataStream(data) {\n this.buffer = null;\n this.writable = true;\n this.readable = true;\n\n // No input\n if (!data) {\n this.buffer = Buffer.alloc(0);\n return this;\n }\n\n // Stream\n if (typeof data.pipe === 'function') {\n this.buffer = Buffer.alloc(0);\n data.pipe(this);\n return this;\n }\n\n // Buffer or String\n // or Object (assumedly a passworded key)\n if (data.length || typeof data === 'object') {\n this.buffer = data;\n this.writable = false;\n process.nextTick(function () {\n this.emit('end', data);\n this.readable = false;\n this.emit('close');\n }.bind(this));\n return this;\n }\n\n throw new TypeError('Unexpected data type ('+ typeof data + ')');\n}\nutil.inherits(DataStream, Stream);\n\nDataStream.prototype.write = function write(data) {\n this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]);\n this.emit('data', data);\n};\n\nDataStream.prototype.end = function end(data) {\n if (data)\n this.write(data);\n this.emit('end', data);\n this.emit('close');\n this.writable = false;\n this.readable = false;\n};\n\nmodule.exports = DataStream;\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\n\nfunction base64url(string, encoding) {\n return Buffer\n .from(string, encoding)\n .toString('base64')\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction jwsSecuredInput(header, payload, encoding) {\n encoding = encoding || 'utf8';\n var encodedHeader = base64url(toString(header), 'binary');\n var encodedPayload = base64url(toString(payload), encoding);\n return util.format('%s.%s', encodedHeader, encodedPayload);\n}\n\nfunction jwsSign(opts) {\n var header = opts.header;\n var payload = opts.payload;\n var secretOrKey = opts.secret || opts.privateKey;\n var encoding = opts.encoding;\n var algo = jwa(header.alg);\n var securedInput = jwsSecuredInput(header, payload, encoding);\n var signature = algo.sign(securedInput, secretOrKey);\n return util.format('%s.%s', securedInput, signature);\n}\n\nfunction SignStream(opts) {\n var secret = opts.secret||opts.privateKey||opts.key;\n var secretStream = new DataStream(secret);\n this.readable = true;\n this.header = opts.header;\n this.encoding = opts.encoding;\n this.secret = this.privateKey = this.key = secretStream;\n this.payload = new DataStream(opts.payload);\n this.secret.once('close', function () {\n if (!this.payload.writable && this.readable)\n this.sign();\n }.bind(this));\n\n this.payload.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.sign();\n }.bind(this));\n}\nutil.inherits(SignStream, Stream);\n\nSignStream.prototype.sign = function sign() {\n try {\n var signature = jwsSign({\n header: this.header,\n payload: this.payload.buffer,\n secret: this.secret.buffer,\n encoding: this.encoding\n });\n this.emit('done', signature);\n this.emit('data', signature);\n this.emit('end');\n this.readable = false;\n return signature;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nSignStream.sign = jwsSign;\n\nmodule.exports = SignStream;\n","/*global module*/\nvar Buffer = require('buffer').Buffer;\n\nmodule.exports = function toString(obj) {\n if (typeof obj === 'string')\n return obj;\n if (typeof obj === 'number' || Buffer.isBuffer(obj))\n return obj.toString();\n return JSON.stringify(obj);\n};\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\nvar JWS_REGEX = /^[a-zA-Z0-9\\-_]+?\\.[a-zA-Z0-9\\-_]+?\\.([a-zA-Z0-9\\-_]+)?$/;\n\nfunction isObject(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction safeJsonParse(thing) {\n if (isObject(thing))\n return thing;\n try { return JSON.parse(thing); }\n catch (e) { return undefined; }\n}\n\nfunction headerFromJWS(jwsSig) {\n var encodedHeader = jwsSig.split('.', 1)[0];\n return safeJsonParse(Buffer.from(encodedHeader, 'base64').toString('binary'));\n}\n\nfunction securedInputFromJWS(jwsSig) {\n return jwsSig.split('.', 2).join('.');\n}\n\nfunction signatureFromJWS(jwsSig) {\n return jwsSig.split('.')[2];\n}\n\nfunction payloadFromJWS(jwsSig, encoding) {\n encoding = encoding || 'utf8';\n var payload = jwsSig.split('.')[1];\n return Buffer.from(payload, 'base64').toString(encoding);\n}\n\nfunction isValidJws(string) {\n return JWS_REGEX.test(string) && !!headerFromJWS(string);\n}\n\nfunction jwsVerify(jwsSig, algorithm, secretOrKey) {\n if (!algorithm) {\n var err = new Error(\"Missing algorithm parameter for jws.verify\");\n err.code = \"MISSING_ALGORITHM\";\n throw err;\n }\n jwsSig = toString(jwsSig);\n var signature = signatureFromJWS(jwsSig);\n var securedInput = securedInputFromJWS(jwsSig);\n var algo = jwa(algorithm);\n return algo.verify(securedInput, signature, secretOrKey);\n}\n\nfunction jwsDecode(jwsSig, opts) {\n opts = opts || {};\n jwsSig = toString(jwsSig);\n\n if (!isValidJws(jwsSig))\n return null;\n\n var header = headerFromJWS(jwsSig);\n\n if (!header)\n return null;\n\n var payload = payloadFromJWS(jwsSig);\n if (header.typ === 'JWT' || opts.json)\n payload = JSON.parse(payload, opts.encoding);\n\n return {\n header: header,\n payload: payload,\n signature: signatureFromJWS(jwsSig)\n };\n}\n\nfunction VerifyStream(opts) {\n opts = opts || {};\n var secretOrKey = opts.secret||opts.publicKey||opts.key;\n var secretStream = new DataStream(secretOrKey);\n this.readable = true;\n this.algorithm = opts.algorithm;\n this.encoding = opts.encoding;\n this.secret = this.publicKey = this.key = secretStream;\n this.signature = new DataStream(opts.signature);\n this.secret.once('close', function () {\n if (!this.signature.writable && this.readable)\n this.verify();\n }.bind(this));\n\n this.signature.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.verify();\n }.bind(this));\n}\nutil.inherits(VerifyStream, Stream);\nVerifyStream.prototype.verify = function verify() {\n try {\n var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer);\n var obj = jwsDecode(this.signature.buffer, this.encoding);\n this.emit('done', valid, obj);\n this.emit('data', valid);\n this.emit('end');\n this.readable = false;\n return valid;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nVerifyStream.decode = jwsDecode;\nVerifyStream.isValid = isValidJws;\nVerifyStream.verify = jwsVerify;\n\nmodule.exports = VerifyStream;\n","module.exports = require('./lib/api')(require('./lib/keccak'))\n","const createKeccak = require('./keccak')\nconst createShake = require('./shake')\n\nmodule.exports = function (KeccakState) {\n const Keccak = createKeccak(KeccakState)\n const Shake = createShake(KeccakState)\n\n return function (algorithm, options) {\n const hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm\n switch (hash) {\n case 'keccak224': return new Keccak(1152, 448, null, 224, options)\n case 'keccak256': return new Keccak(1088, 512, null, 256, options)\n case 'keccak384': return new Keccak(832, 768, null, 384, options)\n case 'keccak512': return new Keccak(576, 1024, null, 512, options)\n\n case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)\n case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)\n case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)\n case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)\n\n case 'shake128': return new Shake(1344, 256, 0x1f, options)\n case 'shake256': return new Shake(1088, 512, 0x1f, options)\n\n default: throw new Error('Invald algorithm: ' + algorithm)\n }\n }\n}\n","const { Transform } = require('readable-stream')\n\nmodule.exports = (KeccakState) => class Keccak extends Transform {\n constructor (rate, capacity, delimitedSuffix, hashBitLength, options) {\n super(options)\n\n this._rate = rate\n this._capacity = capacity\n this._delimitedSuffix = delimitedSuffix\n this._hashBitLength = hashBitLength\n this._options = options\n\n this._state = new KeccakState()\n this._state.initialize(rate, capacity)\n this._finalized = false\n }\n\n _transform (chunk, encoding, callback) {\n let error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n }\n\n _flush (callback) {\n let error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n }\n\n update (data, encoding) {\n if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n this._state.absorb(data)\n\n return this\n }\n\n digest (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)\n let digest = this._state.squeeze(this._hashBitLength / 8)\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n this._resetState()\n\n return digest\n }\n\n // remove result from memory\n _resetState () {\n this._state.initialize(this._rate, this._capacity)\n return this\n }\n\n // because sometimes we need hash right now and little later\n _clone () {\n const clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)\n this._state.copy(clone._state)\n clone._finalized = this._finalized\n\n return clone\n }\n}\n","const { Transform } = require('readable-stream')\n\nmodule.exports = (KeccakState) => class Shake extends Transform {\n constructor (rate, capacity, delimitedSuffix, options) {\n super(options)\n\n this._rate = rate\n this._capacity = capacity\n this._delimitedSuffix = delimitedSuffix\n this._options = options\n\n this._state = new KeccakState()\n this._state.initialize(rate, capacity)\n this._finalized = false\n }\n\n _transform (chunk, encoding, callback) {\n let error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n }\n\n _flush () {}\n\n _read (size) {\n this.push(this.squeeze(size))\n }\n\n update (data, encoding) {\n if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')\n if (this._finalized) throw new Error('Squeeze already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n this._state.absorb(data)\n\n return this\n }\n\n squeeze (dataByteLength, encoding) {\n if (!this._finalized) {\n this._finalized = true\n this._state.absorbLastFewBits(this._delimitedSuffix)\n }\n\n let data = this._state.squeeze(dataByteLength)\n if (encoding !== undefined) data = data.toString(encoding)\n\n return data\n }\n\n _resetState () {\n this._state.initialize(this._rate, this._capacity)\n return this\n }\n\n _clone () {\n const clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)\n this._state.copy(clone._state)\n clone._finalized = this._finalized\n\n return clone\n }\n}\n","const P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]\n\nexports.p1600 = function (s) {\n for (let round = 0; round < 24; ++round) {\n // theta\n const lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]\n const hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]\n const lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]\n const hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]\n const lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]\n const hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]\n const lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]\n const hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]\n const lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]\n const hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]\n\n let lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)\n let hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)\n const t1slo0 = s[0] ^ lo\n const t1shi0 = s[1] ^ hi\n const t1slo5 = s[10] ^ lo\n const t1shi5 = s[11] ^ hi\n const t1slo10 = s[20] ^ lo\n const t1shi10 = s[21] ^ hi\n const t1slo15 = s[30] ^ lo\n const t1shi15 = s[31] ^ hi\n const t1slo20 = s[40] ^ lo\n const t1shi20 = s[41] ^ hi\n lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)\n hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)\n const t1slo1 = s[2] ^ lo\n const t1shi1 = s[3] ^ hi\n const t1slo6 = s[12] ^ lo\n const t1shi6 = s[13] ^ hi\n const t1slo11 = s[22] ^ lo\n const t1shi11 = s[23] ^ hi\n const t1slo16 = s[32] ^ lo\n const t1shi16 = s[33] ^ hi\n const t1slo21 = s[42] ^ lo\n const t1shi21 = s[43] ^ hi\n lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)\n hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)\n const t1slo2 = s[4] ^ lo\n const t1shi2 = s[5] ^ hi\n const t1slo7 = s[14] ^ lo\n const t1shi7 = s[15] ^ hi\n const t1slo12 = s[24] ^ lo\n const t1shi12 = s[25] ^ hi\n const t1slo17 = s[34] ^ lo\n const t1shi17 = s[35] ^ hi\n const t1slo22 = s[44] ^ lo\n const t1shi22 = s[45] ^ hi\n lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)\n hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)\n const t1slo3 = s[6] ^ lo\n const t1shi3 = s[7] ^ hi\n const t1slo8 = s[16] ^ lo\n const t1shi8 = s[17] ^ hi\n const t1slo13 = s[26] ^ lo\n const t1shi13 = s[27] ^ hi\n const t1slo18 = s[36] ^ lo\n const t1shi18 = s[37] ^ hi\n const t1slo23 = s[46] ^ lo\n const t1shi23 = s[47] ^ hi\n lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)\n hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)\n const t1slo4 = s[8] ^ lo\n const t1shi4 = s[9] ^ hi\n const t1slo9 = s[18] ^ lo\n const t1shi9 = s[19] ^ hi\n const t1slo14 = s[28] ^ lo\n const t1shi14 = s[29] ^ hi\n const t1slo19 = s[38] ^ lo\n const t1shi19 = s[39] ^ hi\n const t1slo24 = s[48] ^ lo\n const t1shi24 = s[49] ^ hi\n\n // rho & pi\n const t2slo0 = t1slo0\n const t2shi0 = t1shi0\n const t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)\n const t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)\n const t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)\n const t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)\n const t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)\n const t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)\n const t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)\n const t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)\n const t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)\n const t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)\n const t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)\n const t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)\n const t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)\n const t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)\n const t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)\n const t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)\n const t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)\n const t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)\n const t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)\n const t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)\n const t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)\n const t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)\n const t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)\n const t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)\n const t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)\n const t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)\n const t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)\n const t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)\n const t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)\n const t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)\n const t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)\n const t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)\n const t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)\n const t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)\n const t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)\n const t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)\n const t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)\n const t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)\n const t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)\n const t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)\n const t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)\n const t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)\n const t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)\n const t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)\n const t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)\n const t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)\n const t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)\n const t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)\n\n // chi\n s[0] = t2slo0 ^ (~t2slo1 & t2slo2)\n s[1] = t2shi0 ^ (~t2shi1 & t2shi2)\n s[10] = t2slo5 ^ (~t2slo6 & t2slo7)\n s[11] = t2shi5 ^ (~t2shi6 & t2shi7)\n s[20] = t2slo10 ^ (~t2slo11 & t2slo12)\n s[21] = t2shi10 ^ (~t2shi11 & t2shi12)\n s[30] = t2slo15 ^ (~t2slo16 & t2slo17)\n s[31] = t2shi15 ^ (~t2shi16 & t2shi17)\n s[40] = t2slo20 ^ (~t2slo21 & t2slo22)\n s[41] = t2shi20 ^ (~t2shi21 & t2shi22)\n s[2] = t2slo1 ^ (~t2slo2 & t2slo3)\n s[3] = t2shi1 ^ (~t2shi2 & t2shi3)\n s[12] = t2slo6 ^ (~t2slo7 & t2slo8)\n s[13] = t2shi6 ^ (~t2shi7 & t2shi8)\n s[22] = t2slo11 ^ (~t2slo12 & t2slo13)\n s[23] = t2shi11 ^ (~t2shi12 & t2shi13)\n s[32] = t2slo16 ^ (~t2slo17 & t2slo18)\n s[33] = t2shi16 ^ (~t2shi17 & t2shi18)\n s[42] = t2slo21 ^ (~t2slo22 & t2slo23)\n s[43] = t2shi21 ^ (~t2shi22 & t2shi23)\n s[4] = t2slo2 ^ (~t2slo3 & t2slo4)\n s[5] = t2shi2 ^ (~t2shi3 & t2shi4)\n s[14] = t2slo7 ^ (~t2slo8 & t2slo9)\n s[15] = t2shi7 ^ (~t2shi8 & t2shi9)\n s[24] = t2slo12 ^ (~t2slo13 & t2slo14)\n s[25] = t2shi12 ^ (~t2shi13 & t2shi14)\n s[34] = t2slo17 ^ (~t2slo18 & t2slo19)\n s[35] = t2shi17 ^ (~t2shi18 & t2shi19)\n s[44] = t2slo22 ^ (~t2slo23 & t2slo24)\n s[45] = t2shi22 ^ (~t2shi23 & t2shi24)\n s[6] = t2slo3 ^ (~t2slo4 & t2slo0)\n s[7] = t2shi3 ^ (~t2shi4 & t2shi0)\n s[16] = t2slo8 ^ (~t2slo9 & t2slo5)\n s[17] = t2shi8 ^ (~t2shi9 & t2shi5)\n s[26] = t2slo13 ^ (~t2slo14 & t2slo10)\n s[27] = t2shi13 ^ (~t2shi14 & t2shi10)\n s[36] = t2slo18 ^ (~t2slo19 & t2slo15)\n s[37] = t2shi18 ^ (~t2shi19 & t2shi15)\n s[46] = t2slo23 ^ (~t2slo24 & t2slo20)\n s[47] = t2shi23 ^ (~t2shi24 & t2shi20)\n s[8] = t2slo4 ^ (~t2slo0 & t2slo1)\n s[9] = t2shi4 ^ (~t2shi0 & t2shi1)\n s[18] = t2slo9 ^ (~t2slo5 & t2slo6)\n s[19] = t2shi9 ^ (~t2shi5 & t2shi6)\n s[28] = t2slo14 ^ (~t2slo10 & t2slo11)\n s[29] = t2shi14 ^ (~t2shi10 & t2shi11)\n s[38] = t2slo19 ^ (~t2slo15 & t2slo16)\n s[39] = t2shi19 ^ (~t2shi15 & t2shi16)\n s[48] = t2slo24 ^ (~t2slo20 & t2slo21)\n s[49] = t2shi24 ^ (~t2shi20 & t2shi21)\n\n // iota\n s[0] ^= P1600_ROUND_CONSTANTS[round * 2]\n s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]\n }\n}\n","const keccakState = require('./keccak-state-unroll')\n\nfunction Keccak () {\n // much faster than `new Array(50)`\n this.state = [\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0\n ]\n\n this.blockSize = null\n this.count = 0\n this.squeezing = false\n}\n\nKeccak.prototype.initialize = function (rate, capacity) {\n for (let i = 0; i < 50; ++i) this.state[i] = 0\n this.blockSize = rate / 8\n this.count = 0\n this.squeezing = false\n}\n\nKeccak.prototype.absorb = function (data) {\n for (let i = 0; i < data.length; ++i) {\n this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))\n this.count += 1\n if (this.count === this.blockSize) {\n keccakState.p1600(this.state)\n this.count = 0\n }\n }\n}\n\nKeccak.prototype.absorbLastFewBits = function (bits) {\n this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))\n if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)\n this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))\n keccakState.p1600(this.state)\n this.count = 0\n this.squeezing = true\n}\n\nKeccak.prototype.squeeze = function (length) {\n if (!this.squeezing) this.absorbLastFewBits(0x01)\n\n const output = Buffer.alloc(length)\n for (let i = 0; i < length; ++i) {\n output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff\n this.count += 1\n if (this.count === this.blockSize) {\n keccakState.p1600(this.state)\n this.count = 0\n }\n }\n\n return output\n}\n\nKeccak.prototype.copy = function (dest) {\n for (let i = 0; i < 50; ++i) dest.state[i] = this.state[i]\n dest.blockSize = this.blockSize\n dest.count = this.count\n dest.squeezing = this.squeezing\n}\n\nmodule.exports = Keccak\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object ? baseValues(object, keys(object)) : [];\n}\n\nmodule.exports = includes;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = isInteger;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n * as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && objectToString.call(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) ||\n objectToString.call(value) != objectTag || isHostObject(value)) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nmodule.exports = isPlainObject;\n","/**\n * lodash 4.0.1 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = once;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/*\nCopyright 2013 Sleepless Software Inc. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE. \n*/\n\n// yes, I know this seems stupid, but I have my reasons.\n\nvar net = require(\"net\")\nfor(k in net)\n\tglobal[k] = net[k]\n\n","var crypto = require('crypto')\n\nfunction sha (key, body, algorithm) {\n return crypto.createHmac(algorithm, key).update(body).digest('base64')\n}\n\nfunction rsa (key, body) {\n return crypto.createSign('RSA-SHA1').update(body).sign(key, 'base64')\n}\n\nfunction rfc3986 (str) {\n return encodeURIComponent(str)\n .replace(/!/g,'%21')\n .replace(/\\*/g,'%2A')\n .replace(/\\(/g,'%28')\n .replace(/\\)/g,'%29')\n .replace(/'/g,'%27')\n}\n\n// Maps object to bi-dimensional array\n// Converts { foo: 'A', bar: [ 'b', 'B' ]} to\n// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ]\nfunction map (obj) {\n var key, val, arr = []\n for (key in obj) {\n val = obj[key]\n if (Array.isArray(val))\n for (var i = 0; i < val.length; i++)\n arr.push([key, val[i]])\n else if (typeof val === 'object')\n for (var prop in val)\n arr.push([key + '[' + prop + ']', val[prop]])\n else\n arr.push([key, val])\n }\n return arr\n}\n\n// Compare function for sort\nfunction compare (a, b) {\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nfunction generateBase (httpMethod, base_uri, params) {\n // adapted from https://dev.twitter.com/docs/auth/oauth and \n // https://dev.twitter.com/docs/auth/creating-signature\n\n // Parameter normalization\n // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2\n var normalized = map(params)\n // 1. First, the name and value of each parameter are encoded\n .map(function (p) {\n return [ rfc3986(p[0]), rfc3986(p[1] || '') ]\n })\n // 2. The parameters are sorted by name, using ascending byte value\n // ordering. If two or more parameters share the same name, they\n // are sorted by their value.\n .sort(function (a, b) {\n return compare(a[0], b[0]) || compare(a[1], b[1])\n })\n // 3. The name of each parameter is concatenated to its corresponding\n // value using an \"=\" character (ASCII code 61) as a separator, even\n // if the value is empty.\n .map(function (p) { return p.join('=') })\n // 4. The sorted name/value pairs are concatenated together into a\n // single string by using an \"&\" character (ASCII code 38) as\n // separator.\n .join('&')\n\n var base = [\n rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'),\n rfc3986(base_uri),\n rfc3986(normalized)\n ].join('&')\n\n return base\n}\n\nfunction hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) {\n var base = generateBase(httpMethod, base_uri, params)\n var key = [\n consumer_secret || '',\n token_secret || ''\n ].map(rfc3986).join('&')\n\n return sha(key, base, 'sha1')\n}\n\nfunction hmacsign256 (httpMethod, base_uri, params, consumer_secret, token_secret) {\n var base = generateBase(httpMethod, base_uri, params)\n var key = [\n consumer_secret || '',\n token_secret || ''\n ].map(rfc3986).join('&')\n\n return sha(key, base, 'sha256')\n}\n\nfunction rsasign (httpMethod, base_uri, params, private_key, token_secret) {\n var base = generateBase(httpMethod, base_uri, params)\n var key = private_key || ''\n\n return rsa(key, base)\n}\n\nfunction plaintext (consumer_secret, token_secret) {\n var key = [\n consumer_secret || '',\n token_secret || ''\n ].map(rfc3986).join('&')\n\n return key\n}\n\nfunction sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) {\n var method\n var skipArgs = 1\n\n switch (signMethod) {\n case 'RSA-SHA1':\n method = rsasign\n break\n case 'HMAC-SHA1':\n method = hmacsign\n break\n case 'HMAC-SHA256':\n method = hmacsign256\n break\n case 'PLAINTEXT':\n method = plaintext\n skipArgs = 4\n break\n default:\n throw new Error('Signature method not supported: ' + signMethod)\n }\n\n return method.apply(null, [].slice.call(arguments, skipArgs))\n}\n\nexports.hmacsign = hmacsign\nexports.hmacsign256 = hmacsign256\nexports.rsasign = rsasign\nexports.plaintext = plaintext\nexports.sign = sign\nexports.rfc3986 = rfc3986\nexports.generateBase = generateBase","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","module.exports = require('os')\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\n\r\nvar isWindows = process.platform === 'win32';\r\nvar util = require('util');\r\n\r\n\r\n// resolves . and .. elements in a path array with directory names there\r\n// must be no slashes or device names (c:\\) in the array\r\n// (so also no leading and trailing slashes - it does not distinguish\r\n// relative and absolute paths)\r\nfunction normalizeArray(parts, allowAboveRoot) {\r\n var res = [];\r\n for (var i = 0; i < parts.length; i++) {\r\n var p = parts[i];\r\n\r\n // ignore empty parts\r\n if (!p || p === '.')\r\n continue;\r\n\r\n if (p === '..') {\r\n if (res.length && res[res.length - 1] !== '..') {\r\n res.pop();\r\n } else if (allowAboveRoot) {\r\n res.push('..');\r\n }\r\n } else {\r\n res.push(p);\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\n// returns an array with empty elements removed from either end of the input\r\n// array or the original array if no elements need to be removed\r\nfunction trimArray(arr) {\r\n var lastIndex = arr.length - 1;\r\n var start = 0;\r\n for (; start <= lastIndex; start++) {\r\n if (arr[start])\r\n break;\r\n }\r\n\r\n var end = lastIndex;\r\n for (; end >= 0; end--) {\r\n if (arr[end])\r\n break;\r\n }\r\n\r\n if (start === 0 && end === lastIndex)\r\n return arr;\r\n if (start > end)\r\n return [];\r\n return arr.slice(start, end + 1);\r\n}\r\n\r\n// Regex to split a windows path into three parts: [*, device, slash,\r\n// tail] windows-only\r\nvar splitDeviceRe =\r\n /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\r\n\r\n// Regex to split the tail part of the above into [*, dir, basename, ext]\r\nvar splitTailRe =\r\n /^([\\s\\S]*?)((?:\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))(?:[\\\\\\/]*)$/;\r\n\r\nvar win32 = {};\r\n\r\n// Function to split a filename into [root, dir, basename, ext]\r\nfunction win32SplitPath(filename) {\r\n // Separate device+slash from tail\r\n var result = splitDeviceRe.exec(filename),\r\n device = (result[1] || '') + (result[2] || ''),\r\n tail = result[3] || '';\r\n // Split the tail into dir, basename and extension\r\n var result2 = splitTailRe.exec(tail),\r\n dir = result2[1],\r\n basename = result2[2],\r\n ext = result2[3];\r\n return [device, dir, basename, ext];\r\n}\r\n\r\nfunction win32StatPath(path) {\r\n var result = splitDeviceRe.exec(path),\r\n device = result[1] || '',\r\n isUnc = !!device && device[1] !== ':';\r\n return {\r\n device: device,\r\n isUnc: isUnc,\r\n isAbsolute: isUnc || !!result[2], // UNC paths are always absolute\r\n tail: result[3]\r\n };\r\n}\r\n\r\nfunction normalizeUNCRoot(device) {\r\n return '\\\\\\\\' + device.replace(/^[\\\\\\/]+/, '').replace(/[\\\\\\/]+/g, '\\\\');\r\n}\r\n\r\n// path.resolve([from ...], to)\r\nwin32.resolve = function() {\r\n var resolvedDevice = '',\r\n resolvedTail = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1; i--) {\r\n var path;\r\n if (i >= 0) {\r\n path = arguments[i];\r\n } else if (!resolvedDevice) {\r\n path = process.cwd();\r\n } else {\r\n // Windows has the concept of drive-specific current working\r\n // directories. If we've resolved a drive letter but not yet an\r\n // absolute path, get cwd for that drive. We're sure the device is not\r\n // an unc path at this points, because unc paths are always absolute.\r\n path = process.env['=' + resolvedDevice];\r\n // Verify that a drive-local cwd was found and that it actually points\r\n // to our drive. If not, default to the drive's root.\r\n if (!path || path.substr(0, 3).toLowerCase() !==\r\n resolvedDevice.toLowerCase() + '\\\\') {\r\n path = resolvedDevice + '\\\\';\r\n }\r\n }\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail;\r\n\r\n if (device &&\r\n resolvedDevice &&\r\n device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n // This path points to another device so it is not applicable\r\n continue;\r\n }\r\n\r\n if (!resolvedDevice) {\r\n resolvedDevice = device;\r\n }\r\n if (!resolvedAbsolute) {\r\n resolvedTail = tail + '\\\\' + resolvedTail;\r\n resolvedAbsolute = isAbsolute;\r\n }\r\n\r\n if (resolvedDevice && resolvedAbsolute) {\r\n break;\r\n }\r\n }\r\n\r\n // Convert slashes to backslashes when `resolvedDevice` points to an UNC\r\n // root. Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n resolvedDevice = normalizeUNCRoot(resolvedDevice);\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path,\r\n // but handle relative paths to be safe (might happen when process.cwd()\r\n // fails)\r\n\r\n // Normalize the tail path\r\n resolvedTail = normalizeArray(resolvedTail.split(/[\\\\\\/]+/),\r\n !resolvedAbsolute).join('\\\\');\r\n\r\n return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n '.';\r\n};\r\n\r\n\r\nwin32.normalize = function(path) {\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail,\r\n trailingSlash = /[\\\\\\/]$/.test(tail);\r\n\r\n // Normalize the tail path\r\n tail = normalizeArray(tail.split(/[\\\\\\/]+/), !isAbsolute).join('\\\\');\r\n\r\n if (!tail && !isAbsolute) {\r\n tail = '.';\r\n }\r\n if (tail && trailingSlash) {\r\n tail += '\\\\';\r\n }\r\n\r\n // Convert slashes to backslashes when `device` points to an UNC root.\r\n // Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n device = normalizeUNCRoot(device);\r\n }\r\n\r\n return device + (isAbsolute ? '\\\\' : '') + tail;\r\n};\r\n\r\n\r\nwin32.isAbsolute = function(path) {\r\n return win32StatPath(path).isAbsolute;\r\n};\r\n\r\nwin32.join = function() {\r\n var paths = [];\r\n for (var i = 0; i < arguments.length; i++) {\r\n var arg = arguments[i];\r\n if (!util.isString(arg)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (arg) {\r\n paths.push(arg);\r\n }\r\n }\r\n\r\n var joined = paths.join('\\\\');\r\n\r\n // Make sure that the joined path doesn't start with two slashes, because\r\n // normalize() will mistake it for an UNC path then.\r\n //\r\n // This step is skipped when it is very clear that the user actually\r\n // intended to point at an UNC path. This is assumed when the first\r\n // non-empty string arguments starts with exactly two slashes followed by\r\n // at least one more non-slash character.\r\n //\r\n // Note that for normalize() to treat a path as an UNC path it needs to\r\n // have at least 2 components, so we don't filter for that here.\r\n // This means that the user can use join to construct UNC paths from\r\n // a server name and a share name; for example:\r\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\')\r\n if (!/^[\\\\\\/]{2}[^\\\\\\/]/.test(paths[0])) {\r\n joined = joined.replace(/^[\\\\\\/]{2,}/, '\\\\');\r\n }\r\n\r\n return win32.normalize(joined);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// it will solve the relative path from 'from' to 'to', for instance:\r\n// from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n// to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n// The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\nwin32.relative = function(from, to) {\r\n from = win32.resolve(from);\r\n to = win32.resolve(to);\r\n\r\n // windows is not case sensitive\r\n var lowerFrom = from.toLowerCase();\r\n var lowerTo = to.toLowerCase();\r\n\r\n var toParts = trimArray(to.split('\\\\'));\r\n\r\n var lowerFromParts = trimArray(lowerFrom.split('\\\\'));\r\n var lowerToParts = trimArray(lowerTo.split('\\\\'));\r\n\r\n var length = Math.min(lowerFromParts.length, lowerToParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (lowerFromParts[i] !== lowerToParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n if (samePartsLength == 0) {\r\n return to;\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < lowerFromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('\\\\');\r\n};\r\n\r\n\r\nwin32._makeLong = function(path) {\r\n // Note: this will *probably* throw somewhere.\r\n if (!util.isString(path))\r\n return path;\r\n\r\n if (!path) {\r\n return '';\r\n }\r\n\r\n var resolvedPath = win32.resolve(path);\r\n\r\n if (/^[a-zA-Z]\\:\\\\/.test(resolvedPath)) {\r\n // path is local filesystem path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\' + resolvedPath;\r\n } else if (/^\\\\\\\\[^?.]/.test(resolvedPath)) {\r\n // path is network UNC path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.substring(2);\r\n }\r\n\r\n return path;\r\n};\r\n\r\n\r\nwin32.dirname = function(path) {\r\n var result = win32SplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nwin32.basename = function(path, ext) {\r\n var f = win32SplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nwin32.extname = function(path) {\r\n return win32SplitPath(path)[3];\r\n};\r\n\r\n\r\nwin32.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir;\r\n var base = pathObject.base || '';\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir[dir.length - 1] === win32.sep) {\r\n return dir + base;\r\n }\r\n return dir + win32.sep + base;\r\n};\r\n\r\n\r\nwin32.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = win32SplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nwin32.sep = '\\\\';\r\nwin32.delimiter = ';';\r\n\r\n\r\n// Split a filename into [root, dir, basename, ext], unix version\r\n// 'root' is just a slash, or nothing.\r\nvar splitPathRe =\r\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\nvar posix = {};\r\n\r\n\r\nfunction posixSplitPath(filename) {\r\n return splitPathRe.exec(filename).slice(1);\r\n}\r\n\r\n\r\n// path.resolve([from ...], to)\r\n// posix version\r\nposix.resolve = function() {\r\n var resolvedPath = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path = (i >= 0) ? arguments[i] : process.cwd();\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path[0] === '/';\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n // Normalize the path\r\n resolvedPath = normalizeArray(resolvedPath.split('/'),\r\n !resolvedAbsolute).join('/');\r\n\r\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\r\n};\r\n\r\n// path.normalize(path)\r\n// posix version\r\nposix.normalize = function(path) {\r\n var isAbsolute = posix.isAbsolute(path),\r\n trailingSlash = path && path[path.length - 1] === '/';\r\n\r\n // Normalize the path\r\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\r\n\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n\r\n return (isAbsolute ? '/' : '') + path;\r\n};\r\n\r\n// posix version\r\nposix.isAbsolute = function(path) {\r\n return path.charAt(0) === '/';\r\n};\r\n\r\n// posix version\r\nposix.join = function() {\r\n var path = '';\r\n for (var i = 0; i < arguments.length; i++) {\r\n var segment = arguments[i];\r\n if (!util.isString(segment)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (segment) {\r\n if (!path) {\r\n path += segment;\r\n } else {\r\n path += '/' + segment;\r\n }\r\n }\r\n }\r\n return posix.normalize(path);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// posix version\r\nposix.relative = function(from, to) {\r\n from = posix.resolve(from).substr(1);\r\n to = posix.resolve(to).substr(1);\r\n\r\n var fromParts = trimArray(from.split('/'));\r\n var toParts = trimArray(to.split('/'));\r\n\r\n var length = Math.min(fromParts.length, toParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (fromParts[i] !== toParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < fromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('/');\r\n};\r\n\r\n\r\nposix._makeLong = function(path) {\r\n return path;\r\n};\r\n\r\n\r\nposix.dirname = function(path) {\r\n var result = posixSplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nposix.basename = function(path, ext) {\r\n var f = posixSplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nposix.extname = function(path) {\r\n return posixSplitPath(path)[3];\r\n};\r\n\r\n\r\nposix.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\r\n var base = pathObject.base || '';\r\n return dir + base;\r\n};\r\n\r\n\r\nposix.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = posixSplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n allParts[1] = allParts[1] || '';\r\n allParts[2] = allParts[2] || '';\r\n allParts[3] = allParts[3] || '';\r\n\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nposix.sep = '/';\r\nposix.delimiter = ':';\r\n\r\n\r\nif (isWindows)\r\n module.exports = win32;\r\nelse /* posix */\r\n module.exports = posix;\r\n\r\nmodule.exports.posix = posix;\r\nmodule.exports.win32 = win32;\r\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","if performance? and performance.now\n module.exports = -> performance.now()\nelse if process? and process.hrtime\n module.exports = -> (getNanoSeconds() - nodeLoadTime) / 1e6\n hrtime = process.hrtime\n getNanoSeconds = ->\n hr = hrtime()\n hr[0] * 1e9 + hr[1]\n moduleLoadTime = getNanoSeconds()\n upTime = process.uptime() * 1e9\n nodeLoadTime = moduleLoadTime - upTime\nelse if Date.now\n module.exports = -> Date.now() - loadTime\n loadTime = Date.now()\nelse\n module.exports = -> new Date().getTime() - loadTime\n loadTime = new Date().getTime()\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */\n'use strict';\n\n\nvar Punycode = require('punycode');\n\n\nvar internals = {};\n\n\n//\n// Read rules from file.\n//\ninternals.rules = require('./data/rules.json').map(function (rule) {\n\n return {\n rule: rule,\n suffix: rule.replace(/^(\\*\\.|\\!)/, ''),\n punySuffix: -1,\n wildcard: rule.charAt(0) === '*',\n exception: rule.charAt(0) === '!'\n };\n});\n\n\n//\n// Check is given string ends with `suffix`.\n//\ninternals.endsWith = function (str, suffix) {\n\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n};\n\n\n//\n// Find rule for a given domain.\n//\ninternals.findRule = function (domain) {\n\n var punyDomain = Punycode.toASCII(domain);\n return internals.rules.reduce(function (memo, rule) {\n\n if (rule.punySuffix === -1){\n rule.punySuffix = Punycode.toASCII(rule.suffix);\n }\n if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {\n return memo;\n }\n // This has been commented out as it never seems to run. This is because\n // sub tlds always appear after their parents and we never find a shorter\n // match.\n //if (memo) {\n // var memoSuffix = Punycode.toASCII(memo.suffix);\n // if (memoSuffix.length >= punySuffix.length) {\n // return memo;\n // }\n //}\n return rule;\n }, null);\n};\n\n\n//\n// Error codes and messages.\n//\nexports.errorCodes = {\n DOMAIN_TOO_SHORT: 'Domain name too short.',\n DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',\n LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',\n LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',\n LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',\n LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',\n LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'\n};\n\n\n//\n// Validate domain name and throw if not valid.\n//\n// From wikipedia:\n//\n// Hostnames are composed of series of labels concatenated with dots, as are all\n// domain names. Each label must be between 1 and 63 characters long, and the\n// entire hostname (including the delimiting dots) has a maximum of 255 chars.\n//\n// Allowed chars:\n//\n// * `a-z`\n// * `0-9`\n// * `-` but not as a starting or ending character\n// * `.` as a separator for the textual portions of a domain name\n//\n// * http://en.wikipedia.org/wiki/Domain_name\n// * http://en.wikipedia.org/wiki/Hostname\n//\ninternals.validate = function (input) {\n\n // Before we can validate we need to take care of IDNs with unicode chars.\n var ascii = Punycode.toASCII(input);\n\n if (ascii.length < 1) {\n return 'DOMAIN_TOO_SHORT';\n }\n if (ascii.length > 255) {\n return 'DOMAIN_TOO_LONG';\n }\n\n // Check each part's length and allowed chars.\n var labels = ascii.split('.');\n var label;\n\n for (var i = 0; i < labels.length; ++i) {\n label = labels[i];\n if (!label.length) {\n return 'LABEL_TOO_SHORT';\n }\n if (label.length > 63) {\n return 'LABEL_TOO_LONG';\n }\n if (label.charAt(0) === '-') {\n return 'LABEL_STARTS_WITH_DASH';\n }\n if (label.charAt(label.length - 1) === '-') {\n return 'LABEL_ENDS_WITH_DASH';\n }\n if (!/^[a-z0-9\\-]+$/.test(label)) {\n return 'LABEL_INVALID_CHARS';\n }\n }\n};\n\n\n//\n// Public API\n//\n\n\n//\n// Parse domain.\n//\nexports.parse = function (input) {\n\n if (typeof input !== 'string') {\n throw new TypeError('Domain name must be a string.');\n }\n\n // Force domain to lowercase.\n var domain = input.slice(0).toLowerCase();\n\n // Handle FQDN.\n // TODO: Simply remove trailing dot?\n if (domain.charAt(domain.length - 1) === '.') {\n domain = domain.slice(0, domain.length - 1);\n }\n\n // Validate and sanitise input.\n var error = internals.validate(domain);\n if (error) {\n return {\n input: input,\n error: {\n message: exports.errorCodes[error],\n code: error\n }\n };\n }\n\n var parsed = {\n input: input,\n tld: null,\n sld: null,\n domain: null,\n subdomain: null,\n listed: false\n };\n\n var domainParts = domain.split('.');\n\n // Non-Internet TLD\n if (domainParts[domainParts.length - 1] === 'local') {\n return parsed;\n }\n\n var handlePunycode = function () {\n\n if (!/xn--/.test(domain)) {\n return parsed;\n }\n if (parsed.domain) {\n parsed.domain = Punycode.toASCII(parsed.domain);\n }\n if (parsed.subdomain) {\n parsed.subdomain = Punycode.toASCII(parsed.subdomain);\n }\n return parsed;\n };\n\n var rule = internals.findRule(domain);\n\n // Unlisted tld.\n if (!rule) {\n if (domainParts.length < 2) {\n return parsed;\n }\n parsed.tld = domainParts.pop();\n parsed.sld = domainParts.pop();\n parsed.domain = [parsed.sld, parsed.tld].join('.');\n if (domainParts.length) {\n parsed.subdomain = domainParts.pop();\n }\n return handlePunycode();\n }\n\n // At this point we know the public suffix is listed.\n parsed.listed = true;\n\n var tldParts = rule.suffix.split('.');\n var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);\n\n if (rule.exception) {\n privateParts.push(tldParts.shift());\n }\n\n parsed.tld = tldParts.join('.');\n\n if (!privateParts.length) {\n return handlePunycode();\n }\n\n if (rule.wildcard) {\n tldParts.unshift(privateParts.pop());\n parsed.tld = tldParts.join('.');\n }\n\n if (!privateParts.length) {\n return handlePunycode();\n }\n\n parsed.sld = privateParts.pop();\n parsed.domain = [parsed.sld, parsed.tld].join('.');\n\n if (privateParts.length) {\n parsed.subdomain = privateParts.join('.');\n }\n\n return handlePunycode();\n};\n\n\n//\n// Get domain.\n//\nexports.get = function (domain) {\n\n if (!domain) {\n return null;\n }\n return exports.parse(domain).domain || null;\n};\n\n\n//\n// Check whether domain belongs to a known public suffix.\n//\nexports.isValid = function (domain) {\n\n var parsed = exports.parse(domain);\n return Boolean(parsed.domain && parsed.listed);\n};\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nmodule.exports = {\n 'default': 'RFC3986',\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n arrayLimit: 20,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n parameterLimit: 1000,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = {};\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n\n for (var i = 0; i < parts.length; ++i) {\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder);\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder);\n val = options.decoder(part.slice(pos + 1), defaults.decoder);\n }\n if (has.call(obj, key)) {\n obj[key] = [].concat(obj[key]).concat(val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options) {\n var leaf = val;\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else if (cleanRoot !== '__proto__') {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys\n // that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while ((segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options);\n};\n\nmodule.exports = function (str, opts) {\n var options = opts ? utils.assign({}, opts) : {};\n\n if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;\n options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;\n options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;\n options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;\n options.parseArrays = options.parseArrays !== false;\n options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;\n options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;\n options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;\n options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;\n options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;\n options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options);\n obj = utils.merge(obj, newObj, options);\n }\n\n return utils.compact(obj);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaults = {\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly\n) {\n var obj = object;\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;\n }\n\n obj = '';\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (skipNulls && obj[key] === null) {\n continue;\n }\n\n if (isArray(obj)) {\n pushToArray(values, stringify(\n obj[key],\n generateArrayPrefix(prefix, key),\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly\n ));\n } else {\n pushToArray(values, stringify(\n obj[key],\n prefix + (allowDots ? '.' + key : '[' + key + ']'),\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly\n ));\n }\n }\n\n return values;\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = opts ? utils.assign({}, opts) : {};\n\n if (options.encoder !== null && typeof options.encoder !== 'undefined' && typeof options.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;\n var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;\n var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;\n var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;\n var sort = typeof options.sort === 'function' ? options.sort : null;\n var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;\n var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;\n var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;\n if (typeof options.format === 'undefined') {\n options.format = formats['default'];\n } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n var formatter = formats.formatters[options.format];\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (options.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = options.arrayFormat;\n } else if ('indices' in options) {\n arrayFormat = options.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (sort) {\n objKeys.sort(sort);\n }\n\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encode ? encoder : null,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly\n ));\n }\n\n var joined = keys.join(delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n var obj;\n\n while (queue.length) {\n var item = queue.pop();\n obj = item.obj[item.prop];\n\n if (Array.isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n\n return obj;\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (Array.isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (Array.isArray(target) && !Array.isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (Array.isArray(target) && Array.isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, ' '));\n } catch (e) {\n return str;\n }\n};\n\nvar encode = function encode(str) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = typeof str === 'string' ? str : String(str);\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n /* eslint operator-linebreak: [2, \"before\"] */\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n return compactQueue(queue);\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n merge: merge\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3= Math.floor(elemTopBound) && offsetY < Math.floor(elemBottomBound);\n var isOutside = offsetY < Math.floor(elemTopBound) || offsetY >= Math.floor(elemBottomBound);\n var activeLink = scroller.getActiveLink();\n\n if (isOutside) {\n if (to === activeLink) {\n scroller.setActiveLink(void 0);\n }\n\n if (_this2.props.hashSpy && scrollHash.getHash() === to) {\n scrollHash.changeHash();\n }\n\n if (_this2.props.spy && _this2.state.active) {\n _this2.setState({ active: false });\n _this2.props.onSetInactive && _this2.props.onSetInactive();\n }\n\n return scrollSpy.updateStates();\n }\n\n if (isInside && activeLink !== to) {\n scroller.setActiveLink(to);\n\n _this2.props.hashSpy && scrollHash.changeHash(to);\n\n if (_this2.props.spy) {\n _this2.setState({ active: true });\n _this2.props.onSetActive && _this2.props.onSetActive(to);\n }\n return scrollSpy.updateStates();\n }\n };\n };\n\n ;\n\n Scroll.propTypes = protoTypes;\n\n Scroll.defaultProps = { offset: 0 };\n\n return Scroll;\n },\n Element: function Element(Component) {\n\n console.warn(\"Helpers.Element is deprecated since v1.7.0\");\n\n var Element = function (_React$Component2) {\n _inherits(Element, _React$Component2);\n\n function Element(props) {\n _classCallCheck(this, Element);\n\n var _this3 = _possibleConstructorReturn(this, (Element.__proto__ || Object.getPrototypeOf(Element)).call(this, props));\n\n _this3.childBindings = {\n domNode: null\n };\n return _this3;\n }\n\n _createClass(Element, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (typeof window === 'undefined') {\n return false;\n }\n this.registerElems(this.props.name);\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n if (this.props.name !== prevProps.name) {\n this.registerElems(this.props.name);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (typeof window === 'undefined') {\n return false;\n }\n defaultScroller.unregister(this.props.name);\n }\n }, {\n key: 'registerElems',\n value: function registerElems(name) {\n defaultScroller.register(name, this.childBindings.domNode);\n }\n }, {\n key: 'render',\n value: function render() {\n return React.createElement(Component, _extends({}, this.props, { parentBindings: this.childBindings }));\n }\n }]);\n\n return Element;\n }(React.Component);\n\n ;\n\n Element.propTypes = {\n name: PropTypes.string,\n id: PropTypes.string\n };\n\n return Element;\n }\n};\n\nmodule.exports = Helpers;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _smooth = require('./smooth');\n\nvar _smooth2 = _interopRequireDefault(_smooth);\n\nvar _cancelEvents = require('./cancel-events');\n\nvar _cancelEvents2 = _interopRequireDefault(_cancelEvents);\n\nvar _scrollEvents = require('./scroll-events');\n\nvar _scrollEvents2 = _interopRequireDefault(_scrollEvents);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\r\n * Gets the easing type from the smooth prop within options.\r\n */\nvar getAnimationType = function getAnimationType(options) {\n return _smooth2.default[options.smooth] || _smooth2.default.defaultEasing;\n};\n/*\r\n * Function helper\r\n */\nvar functionWrapper = function functionWrapper(value) {\n return typeof value === 'function' ? value : function () {\n return value;\n };\n};\n/*\r\n * Wraps window properties to allow server side rendering\r\n */\nvar currentWindowProperties = function currentWindowProperties() {\n if (typeof window !== 'undefined') {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame;\n }\n};\n\n/*\r\n * Helper function to never extend 60fps on the webpage.\r\n */\nvar requestAnimationFrameHelper = function () {\n return currentWindowProperties() || function (callback, element, delay) {\n window.setTimeout(callback, delay || 1000 / 60, new Date().getTime());\n };\n}();\n\nvar makeData = function makeData() {\n return {\n currentPosition: 0,\n startPosition: 0,\n targetPosition: 0,\n progress: 0,\n duration: 0,\n cancel: false,\n\n target: null,\n containerElement: null,\n to: null,\n start: null,\n delta: null,\n percent: null,\n delayTimeout: null\n };\n};\n\nvar currentPositionX = function currentPositionX(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollLeft;\n } else {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;\n }\n};\n\nvar currentPositionY = function currentPositionY(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollTop;\n } else {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;\n }\n};\n\nvar scrollContainerWidth = function scrollContainerWidth(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollWidth - containerElement.offsetWidth;\n } else {\n var body = document.body;\n var html = document.documentElement;\n\n return Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth);\n }\n};\n\nvar scrollContainerHeight = function scrollContainerHeight(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollHeight - containerElement.offsetHeight;\n } else {\n var body = document.body;\n var html = document.documentElement;\n\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n};\n\nvar animateScroll = function animateScroll(easing, options, timestamp) {\n var data = options.data;\n\n // Cancel on specific events\n if (!options.ignoreCancelEvents && data.cancel) {\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](data.to, data.target, data.currentPositionY);\n }\n return;\n };\n\n data.delta = Math.round(data.targetPosition - data.startPosition);\n\n if (data.start === null) {\n data.start = timestamp;\n }\n\n data.progress = timestamp - data.start;\n\n data.percent = data.progress >= data.duration ? 1 : easing(data.progress / data.duration);\n\n data.currentPosition = data.startPosition + Math.ceil(data.delta * data.percent);\n\n if (data.containerElement && data.containerElement !== document && data.containerElement !== document.body) {\n if (options.horizontal) {\n data.containerElement.scrollLeft = data.currentPosition;\n } else {\n data.containerElement.scrollTop = data.currentPosition;\n }\n } else {\n if (options.horizontal) {\n window.scrollTo(data.currentPosition, 0);\n } else {\n window.scrollTo(0, data.currentPosition);\n }\n }\n\n if (data.percent < 1) {\n var easedAnimate = animateScroll.bind(null, easing, options);\n requestAnimationFrameHelper.call(window, easedAnimate);\n return;\n }\n\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](data.to, data.target, data.currentPosition);\n }\n};\n\nvar setContainer = function setContainer(options) {\n options.data.containerElement = !options ? null : options.containerId ? document.getElementById(options.containerId) : options.container && options.container.nodeType ? options.container : document;\n};\n\nvar animateTopScroll = function animateTopScroll(scrollOffset, options, to, target) {\n options.data = options.data || makeData();\n\n window.clearTimeout(options.data.delayTimeout);\n\n _cancelEvents2.default.subscribe(function () {\n options.data.cancel = true;\n });\n\n setContainer(options);\n\n options.data.start = null;\n options.data.cancel = false;\n options.data.startPosition = options.horizontal ? currentPositionX(options) : currentPositionY(options);\n options.data.targetPosition = options.absolute ? scrollOffset : scrollOffset + options.data.startPosition;\n\n if (options.data.startPosition === options.data.targetPosition) {\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](options.data.to, options.data.target, options.data.currentPosition);\n }\n return;\n }\n\n options.data.delta = Math.round(options.data.targetPosition - options.data.startPosition);\n\n options.data.duration = functionWrapper(options.duration)(options.data.delta);\n options.data.duration = isNaN(parseFloat(options.data.duration)) ? 1000 : parseFloat(options.data.duration);\n options.data.to = to;\n options.data.target = target;\n\n var easing = getAnimationType(options);\n var easedAnimate = animateScroll.bind(null, easing, options);\n\n if (options && options.delay > 0) {\n options.data.delayTimeout = window.setTimeout(function () {\n if (_scrollEvents2.default.registered['begin']) {\n _scrollEvents2.default.registered['begin'](options.data.to, options.data.target);\n }\n requestAnimationFrameHelper.call(window, easedAnimate);\n }, options.delay);\n return;\n }\n\n if (_scrollEvents2.default.registered['begin']) {\n _scrollEvents2.default.registered['begin'](options.data.to, options.data.target);\n }\n requestAnimationFrameHelper.call(window, easedAnimate);\n};\n\nvar proceedOptions = function proceedOptions(options) {\n options = _extends({}, options);\n options.data = options.data || makeData();\n options.absolute = true;\n return options;\n};\n\nvar scrollToTop = function scrollToTop(options) {\n animateTopScroll(0, proceedOptions(options));\n};\n\nvar scrollTo = function scrollTo(toPosition, options) {\n animateTopScroll(toPosition, proceedOptions(options));\n};\n\nvar scrollToBottom = function scrollToBottom(options) {\n options = proceedOptions(options);\n setContainer(options);\n animateTopScroll(options.horizontal ? scrollContainerWidth(options) : scrollContainerHeight(options), options);\n};\n\nvar scrollMore = function scrollMore(toPosition, options) {\n options = proceedOptions(options);\n setContainer(options);\n var currentPosition = options.horizontal ? currentPositionX(options) : currentPositionY(options);\n animateTopScroll(toPosition + currentPosition, options);\n};\n\nexports.default = {\n animateTopScroll: animateTopScroll,\n getAnimationType: getAnimationType,\n scrollToTop: scrollToTop,\n scrollToBottom: scrollToBottom,\n scrollTo: scrollTo,\n scrollMore: scrollMore\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _passiveEventListeners = require('./passive-event-listeners');\n\nvar events = ['mousedown', 'mousewheel', 'touchmove', 'keydown'];\n\nexports.default = {\n subscribe: function subscribe(cancelEvent) {\n return typeof document !== 'undefined' && events.forEach(function (event) {\n return (0, _passiveEventListeners.addPassiveEventListener)(document, event, cancelEvent);\n });\n }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/*\r\n * Tell the browser that the event listener won't prevent a scroll.\r\n * Allowing the browser to continue scrolling without having to\r\n * to wait for the listener to return.\r\n */\nvar addPassiveEventListener = exports.addPassiveEventListener = function addPassiveEventListener(target, eventName, listener) {\n var supportsPassiveOption = function () {\n var supportsPassiveOption = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassiveOption = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {}\n return supportsPassiveOption;\n }();\n target.addEventListener(eventName, listener, supportsPassiveOption ? { passive: true } : false);\n};\n\nvar removePassiveEventListener = exports.removePassiveEventListener = function removePassiveEventListener(target, eventName, listener) {\n target.removeEventListener(eventName, listener);\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _scroller = require('./scroller');\n\nvar _scroller2 = _interopRequireDefault(_scroller);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nexports.default = function (Component) {\n var Element = function (_React$Component) {\n _inherits(Element, _React$Component);\n\n function Element(props) {\n _classCallCheck(this, Element);\n\n var _this = _possibleConstructorReturn(this, (Element.__proto__ || Object.getPrototypeOf(Element)).call(this, props));\n\n _this.childBindings = {\n domNode: null\n };\n return _this;\n }\n\n _createClass(Element, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (typeof window === 'undefined') {\n return false;\n }\n this.registerElems(this.props.name);\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n if (this.props.name !== prevProps.name) {\n this.registerElems(this.props.name);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (typeof window === 'undefined') {\n return false;\n }\n _scroller2.default.unregister(this.props.name);\n }\n }, {\n key: 'registerElems',\n value: function registerElems(name) {\n _scroller2.default.register(name, this.childBindings.domNode);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(Component, _extends({}, this.props, { parentBindings: this.childBindings }));\n }\n }]);\n\n return Element;\n }(_react2.default.Component);\n\n ;\n\n Element.propTypes = {\n name: _propTypes2.default.string,\n id: _propTypes2.default.string\n };\n\n return Element;\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar Events = {\n\tregistered: {},\n\tscrollEvent: {\n\t\tregister: function register(evtName, callback) {\n\t\t\tEvents.registered[evtName] = callback;\n\t\t},\n\t\tremove: function remove(evtName) {\n\t\t\tEvents.registered[evtName] = null;\n\t\t}\n\t}\n};\n\nexports.default = Events;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _passiveEventListeners = require('./passive-event-listeners');\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar scrollHash = {\n mountFlag: false,\n initialized: false,\n scroller: null,\n containers: {},\n\n mount: function mount(scroller) {\n this.scroller = scroller;\n\n this.handleHashChange = this.handleHashChange.bind(this);\n window.addEventListener('hashchange', this.handleHashChange);\n\n this.initStateFromHash();\n this.mountFlag = true;\n },\n mapContainer: function mapContainer(to, container) {\n this.containers[to] = container;\n },\n isMounted: function isMounted() {\n return this.mountFlag;\n },\n isInitialized: function isInitialized() {\n return this.initialized;\n },\n initStateFromHash: function initStateFromHash() {\n var _this = this;\n\n var hash = this.getHash();\n if (hash) {\n window.setTimeout(function () {\n _this.scrollTo(hash, true);\n _this.initialized = true;\n }, 10);\n } else {\n this.initialized = true;\n }\n },\n scrollTo: function scrollTo(to, isInit) {\n var scroller = this.scroller;\n var element = scroller.get(to);\n if (element && (isInit || to !== scroller.getActiveLink())) {\n var container = this.containers[to] || document;\n scroller.scrollTo(to, { container: container });\n }\n },\n getHash: function getHash() {\n return _utils2.default.getHash();\n },\n changeHash: function changeHash(to, saveHashHistory) {\n if (this.isInitialized() && _utils2.default.getHash() !== to) {\n _utils2.default.updateHash(to, saveHashHistory);\n }\n },\n handleHashChange: function handleHashChange() {\n this.scrollTo(this.getHash());\n },\n unmount: function unmount() {\n this.scroller = null;\n this.containers = null;\n window.removeEventListener('hashchange', this.handleHashChange);\n }\n};\n\nexports.default = scrollHash;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _scrollSpy = require('./scroll-spy');\n\nvar _scrollSpy2 = _interopRequireDefault(_scrollSpy);\n\nvar _scroller = require('./scroller');\n\nvar _scroller2 = _interopRequireDefault(_scroller);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _scrollHash = require('./scroll-hash');\n\nvar _scrollHash2 = _interopRequireDefault(_scrollHash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar protoTypes = {\n to: _propTypes2.default.string.isRequired,\n containerId: _propTypes2.default.string,\n container: _propTypes2.default.object,\n activeClass: _propTypes2.default.string,\n spy: _propTypes2.default.bool,\n horizontal: _propTypes2.default.bool,\n smooth: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.string]),\n offset: _propTypes2.default.number,\n delay: _propTypes2.default.number,\n isDynamic: _propTypes2.default.bool,\n onClick: _propTypes2.default.func,\n duration: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.func]),\n absolute: _propTypes2.default.bool,\n onSetActive: _propTypes2.default.func,\n onSetInactive: _propTypes2.default.func,\n ignoreCancelEvents: _propTypes2.default.bool,\n hashSpy: _propTypes2.default.bool,\n saveHashHistory: _propTypes2.default.bool,\n spyThrottle: _propTypes2.default.number\n};\n\nexports.default = function (Component, customScroller) {\n\n var scroller = customScroller || _scroller2.default;\n\n var Link = function (_React$PureComponent) {\n _inherits(Link, _React$PureComponent);\n\n function Link(props) {\n _classCallCheck(this, Link);\n\n var _this = _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).call(this, props));\n\n _initialiseProps.call(_this);\n\n _this.state = {\n active: false\n };\n return _this;\n }\n\n _createClass(Link, [{\n key: 'getScrollSpyContainer',\n value: function getScrollSpyContainer() {\n var containerId = this.props.containerId;\n var container = this.props.container;\n\n if (containerId && !container) {\n return document.getElementById(containerId);\n }\n\n if (container && container.nodeType) {\n return container;\n }\n\n return document;\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.props.spy || this.props.hashSpy) {\n var scrollSpyContainer = this.getScrollSpyContainer();\n\n if (!_scrollSpy2.default.isMounted(scrollSpyContainer)) {\n _scrollSpy2.default.mount(scrollSpyContainer, this.props.spyThrottle);\n }\n\n if (this.props.hashSpy) {\n if (!_scrollHash2.default.isMounted()) {\n _scrollHash2.default.mount(scroller);\n }\n _scrollHash2.default.mapContainer(this.props.to, scrollSpyContainer);\n }\n\n _scrollSpy2.default.addSpyHandler(this.spyHandler, scrollSpyContainer);\n\n this.setState({\n container: scrollSpyContainer\n });\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _scrollSpy2.default.unmount(this.stateHandler, this.spyHandler);\n }\n }, {\n key: 'render',\n value: function render() {\n var className = \"\";\n\n if (this.state && this.state.active) {\n className = ((this.props.className || \"\") + \" \" + (this.props.activeClass || \"active\")).trim();\n } else {\n className = this.props.className;\n }\n\n var props = _extends({}, this.props);\n\n for (var prop in protoTypes) {\n if (props.hasOwnProperty(prop)) {\n delete props[prop];\n }\n }\n\n props.className = className;\n props.onClick = this.handleClick;\n\n return _react2.default.createElement(Component, props);\n }\n }]);\n\n return Link;\n }(_react2.default.PureComponent);\n\n var _initialiseProps = function _initialiseProps() {\n var _this2 = this;\n\n this.scrollTo = function (to, props) {\n scroller.scrollTo(to, _extends({}, _this2.state, props));\n };\n\n this.handleClick = function (event) {\n\n /*\r\n * give the posibility to override onClick\r\n */\n\n if (_this2.props.onClick) {\n _this2.props.onClick(event);\n }\n\n /*\r\n * dont bubble the navigation\r\n */\n\n if (event.stopPropagation) event.stopPropagation();\n if (event.preventDefault) event.preventDefault();\n\n /*\r\n * do the magic!\r\n */\n _this2.scrollTo(_this2.props.to, _this2.props);\n };\n\n this.spyHandler = function (x, y) {\n var scrollSpyContainer = _this2.getScrollSpyContainer();\n\n if (_scrollHash2.default.isMounted() && !_scrollHash2.default.isInitialized()) {\n return;\n }\n\n var horizontal = _this2.props.horizontal;\n\n var to = _this2.props.to;\n var element = null;\n var isInside = void 0;\n var isOutside = void 0;\n\n if (horizontal) {\n var elemLeftBound = 0;\n var elemRightBound = 0;\n var containerLeft = 0;\n\n if (scrollSpyContainer.getBoundingClientRect) {\n var containerCords = scrollSpyContainer.getBoundingClientRect();\n containerLeft = containerCords.left;\n }\n\n if (!element || _this2.props.isDynamic) {\n element = scroller.get(to);\n if (!element) {\n return;\n }\n\n var cords = element.getBoundingClientRect();\n elemLeftBound = cords.left - containerLeft + x;\n elemRightBound = elemLeftBound + cords.width;\n }\n\n var offsetX = x - _this2.props.offset;\n isInside = offsetX >= Math.floor(elemLeftBound) && offsetX < Math.floor(elemRightBound);\n isOutside = offsetX < Math.floor(elemLeftBound) || offsetX >= Math.floor(elemRightBound);\n } else {\n var elemTopBound = 0;\n var elemBottomBound = 0;\n var containerTop = 0;\n\n if (scrollSpyContainer.getBoundingClientRect) {\n var _containerCords = scrollSpyContainer.getBoundingClientRect();\n containerTop = _containerCords.top;\n }\n\n if (!element || _this2.props.isDynamic) {\n element = scroller.get(to);\n if (!element) {\n return;\n }\n\n var _cords = element.getBoundingClientRect();\n elemTopBound = _cords.top - containerTop + y;\n elemBottomBound = elemTopBound + _cords.height;\n }\n\n var offsetY = y - _this2.props.offset;\n isInside = offsetY >= Math.floor(elemTopBound) && offsetY < Math.floor(elemBottomBound);\n isOutside = offsetY < Math.floor(elemTopBound) || offsetY >= Math.floor(elemBottomBound);\n }\n\n var activeLink = scroller.getActiveLink();\n\n if (isOutside) {\n if (to === activeLink) {\n scroller.setActiveLink(void 0);\n }\n\n if (_this2.props.hashSpy && _scrollHash2.default.getHash() === to) {\n var _props$saveHashHistor = _this2.props.saveHashHistory,\n saveHashHistory = _props$saveHashHistor === undefined ? false : _props$saveHashHistor;\n\n _scrollHash2.default.changeHash(\"\", saveHashHistory);\n }\n\n if (_this2.props.spy && _this2.state.active) {\n _this2.setState({ active: false });\n _this2.props.onSetInactive && _this2.props.onSetInactive(to, element);\n }\n }\n\n if (isInside && (activeLink !== to || _this2.state.active === false)) {\n scroller.setActiveLink(to);\n\n var _props$saveHashHistor2 = _this2.props.saveHashHistory,\n _saveHashHistory = _props$saveHashHistor2 === undefined ? false : _props$saveHashHistor2;\n\n _this2.props.hashSpy && _scrollHash2.default.changeHash(to, _saveHashHistory);\n\n if (_this2.props.spy) {\n _this2.setState({ active: true });\n _this2.props.onSetActive && _this2.props.onSetActive(to, element);\n }\n }\n };\n };\n\n ;\n\n Link.propTypes = protoTypes;\n\n Link.defaultProps = { offset: 0 };\n\n return Link;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _lodash = require('lodash.throttle');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _passiveEventListeners = require('./passive-event-listeners');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// The eventHandler will execute at a rate of 15fps by default\nvar eventThrottler = function eventThrottler(eventHandler) {\n var throttleAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 66;\n return (0, _lodash2.default)(eventHandler, throttleAmount);\n};\n\nvar scrollSpy = {\n\n spyCallbacks: [],\n spySetState: [],\n scrollSpyContainers: [],\n\n mount: function mount(scrollSpyContainer, throttle) {\n if (scrollSpyContainer) {\n var eventHandler = eventThrottler(function (event) {\n scrollSpy.scrollHandler(scrollSpyContainer);\n }, throttle);\n scrollSpy.scrollSpyContainers.push(scrollSpyContainer);\n (0, _passiveEventListeners.addPassiveEventListener)(scrollSpyContainer, 'scroll', eventHandler);\n }\n },\n isMounted: function isMounted(scrollSpyContainer) {\n return scrollSpy.scrollSpyContainers.indexOf(scrollSpyContainer) !== -1;\n },\n currentPositionX: function currentPositionX(scrollSpyContainer) {\n if (scrollSpyContainer === document) {\n var supportPageOffset = window.pageYOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;\n } else {\n return scrollSpyContainer.scrollLeft;\n }\n },\n currentPositionY: function currentPositionY(scrollSpyContainer) {\n if (scrollSpyContainer === document) {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;\n } else {\n return scrollSpyContainer.scrollTop;\n }\n },\n scrollHandler: function scrollHandler(scrollSpyContainer) {\n var callbacks = scrollSpy.scrollSpyContainers[scrollSpy.scrollSpyContainers.indexOf(scrollSpyContainer)].spyCallbacks || [];\n callbacks.forEach(function (c) {\n return c(scrollSpy.currentPositionX(scrollSpyContainer), scrollSpy.currentPositionY(scrollSpyContainer));\n });\n },\n addStateHandler: function addStateHandler(handler) {\n scrollSpy.spySetState.push(handler);\n },\n addSpyHandler: function addSpyHandler(handler, scrollSpyContainer) {\n var container = scrollSpy.scrollSpyContainers[scrollSpy.scrollSpyContainers.indexOf(scrollSpyContainer)];\n\n if (!container.spyCallbacks) {\n container.spyCallbacks = [];\n }\n\n container.spyCallbacks.push(handler);\n\n handler(scrollSpy.currentPositionX(scrollSpyContainer), scrollSpy.currentPositionY(scrollSpyContainer));\n },\n updateStates: function updateStates() {\n scrollSpy.spySetState.forEach(function (s) {\n return s();\n });\n },\n unmount: function unmount(stateHandler, spyHandler) {\n scrollSpy.scrollSpyContainers.forEach(function (c) {\n return c.spyCallbacks && c.spyCallbacks.length && c.spyCallbacks.splice(c.spyCallbacks.indexOf(spyHandler), 1);\n });\n\n if (scrollSpy.spySetState && scrollSpy.spySetState.length) {\n scrollSpy.spySetState.splice(scrollSpy.spySetState.indexOf(stateHandler), 1);\n }\n\n document.removeEventListener('scroll', scrollSpy.scrollHandler);\n },\n\n\n update: function update() {\n return scrollSpy.scrollSpyContainers.forEach(function (c) {\n return scrollSpy.scrollHandler(c);\n });\n }\n};\n\nexports.default = scrollSpy;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _animateScroll = require('./animate-scroll');\n\nvar _animateScroll2 = _interopRequireDefault(_animateScroll);\n\nvar _scrollEvents = require('./scroll-events');\n\nvar _scrollEvents2 = _interopRequireDefault(_scrollEvents);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar __mapped = {};\nvar __activeLink = void 0;\n\nexports.default = {\n\n unmount: function unmount() {\n __mapped = {};\n },\n\n register: function register(name, element) {\n __mapped[name] = element;\n },\n\n unregister: function unregister(name) {\n delete __mapped[name];\n },\n\n get: function get(name) {\n return __mapped[name] || document.getElementById(name) || document.getElementsByName(name)[0] || document.getElementsByClassName(name)[0];\n },\n\n setActiveLink: function setActiveLink(link) {\n return __activeLink = link;\n },\n\n getActiveLink: function getActiveLink() {\n return __activeLink;\n },\n\n scrollTo: function scrollTo(to, props) {\n\n var target = this.get(to);\n\n if (!target) {\n console.warn(\"target Element not found\");\n return;\n }\n\n props = _extends({}, props, { absolute: false });\n\n var containerId = props.containerId;\n var container = props.container;\n\n var containerElement = void 0;\n if (containerId) {\n containerElement = document.getElementById(containerId);\n } else if (container && container.nodeType) {\n containerElement = container;\n } else {\n containerElement = document;\n }\n\n props.absolute = true;\n\n var horizontal = props.horizontal;\n var scrollOffset = _utils2.default.scrollOffset(containerElement, target, horizontal) + (props.offset || 0);\n\n /*\r\n * if animate is not provided just scroll into the view\r\n */\n if (!props.smooth) {\n if (_scrollEvents2.default.registered['begin']) {\n _scrollEvents2.default.registered['begin'](to, target);\n }\n\n if (containerElement === document) {\n if (props.horizontal) {\n window.scrollTo(scrollOffset, 0);\n } else {\n window.scrollTo(0, scrollOffset);\n }\n } else {\n containerElement.scrollTop = scrollOffset;\n }\n\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](to, target);\n }\n\n return;\n }\n\n /*\r\n * Animate scrolling\r\n */\n\n _animateScroll2.default.animateTopScroll(scrollOffset, props, to, target);\n }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n /*\r\n * https://github.com/oblador/angular-scroll (duScrollDefaultEasing)\r\n */\n defaultEasing: function defaultEasing(x) {\n if (x < 0.5) {\n return Math.pow(x * 2, 2) / 2;\n }\n return 1 - Math.pow((1 - x) * 2, 2) / 2;\n },\n /*\r\n * https://gist.github.com/gre/1650294\r\n */\n // no easing, no acceleration\n linear: function linear(x) {\n return x;\n },\n // accelerating from zero velocity\n easeInQuad: function easeInQuad(x) {\n return x * x;\n },\n // decelerating to zero velocity\n easeOutQuad: function easeOutQuad(x) {\n return x * (2 - x);\n },\n // acceleration until halfway, then deceleration\n easeInOutQuad: function easeInOutQuad(x) {\n return x < .5 ? 2 * x * x : -1 + (4 - 2 * x) * x;\n },\n // accelerating from zero velocity \n easeInCubic: function easeInCubic(x) {\n return x * x * x;\n },\n // decelerating to zero velocity π\n easeOutCubic: function easeOutCubic(x) {\n return --x * x * x + 1;\n },\n // acceleration until halfway, then deceleration \n easeInOutCubic: function easeInOutCubic(x) {\n return x < .5 ? 4 * x * x * x : (x - 1) * (2 * x - 2) * (2 * x - 2) + 1;\n },\n // accelerating from zero velocity \n easeInQuart: function easeInQuart(x) {\n return x * x * x * x;\n },\n // decelerating to zero velocity \n easeOutQuart: function easeOutQuart(x) {\n return 1 - --x * x * x * x;\n },\n // acceleration until halfway, then deceleration\n easeInOutQuart: function easeInOutQuart(x) {\n return x < .5 ? 8 * x * x * x * x : 1 - 8 * --x * x * x * x;\n },\n // accelerating from zero velocity\n easeInQuint: function easeInQuint(x) {\n return x * x * x * x * x;\n },\n // decelerating to zero velocity\n easeOutQuint: function easeOutQuint(x) {\n return 1 + --x * x * x * x * x;\n },\n // acceleration until halfway, then deceleration \n easeInOutQuint: function easeInOutQuint(x) {\n return x < .5 ? 16 * x * x * x * x * x : 1 + 16 * --x * x * x * x * x;\n }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar updateHash = function updateHash(hash, historyUpdate) {\n var hashVal = hash.indexOf(\"#\") === 0 ? hash.substring(1) : hash;\n var hashToUpdate = hashVal ? \"#\" + hashVal : \"\";\n var curLoc = window && window.location;\n var urlToPush = hashToUpdate ? curLoc.pathname + curLoc.search + hashToUpdate : curLoc.pathname + curLoc.search;\n historyUpdate ? history.pushState(history.state, \"\", urlToPush) : history.replaceState(history.state, \"\", urlToPush);\n};\n\nvar getHash = function getHash() {\n return window.location.hash.replace(/^#/, \"\");\n};\n\nvar filterElementInContainer = function filterElementInContainer(container) {\n return function (element) {\n return container.contains ? container != element && container.contains(element) : !!(container.compareDocumentPosition(element) & 16);\n };\n};\n\nvar isPositioned = function isPositioned(element) {\n return getComputedStyle(element).position !== \"static\";\n};\n\nvar getElementOffsetInfoUntil = function getElementOffsetInfoUntil(element, predicate) {\n var offsetTop = element.offsetTop;\n var currentOffsetParent = element.offsetParent;\n\n while (currentOffsetParent && !predicate(currentOffsetParent)) {\n offsetTop += currentOffsetParent.offsetTop;\n currentOffsetParent = currentOffsetParent.offsetParent;\n }\n\n return { offsetTop: offsetTop, offsetParent: currentOffsetParent };\n};\n\nvar scrollOffset = function scrollOffset(c, t, horizontal) {\n if (horizontal) {\n return c === document ? t.getBoundingClientRect().left + (window.scrollX || window.pageXOffset) : getComputedStyle(c).position !== \"static\" ? t.offsetLeft : t.offsetLeft - c.offsetLeft;\n } else {\n if (c === document) {\n return t.getBoundingClientRect().top + (window.scrollY || window.pageYOffset);\n }\n\n // The offsetParent of an element, according to MDN, is its nearest positioned\n // (an element whose position is anything other than static) ancestor. The offsetTop\n // of an element is taken with respect to its offsetParent which may not neccessarily\n // be its parentElement except the parent itself is positioned.\n\n // So if containerElement is positioned, then it must be an offsetParent somewhere\n // If it happens that targetElement is a descendant of the containerElement, and there\n // is not intermediate positioned element between the two of them, i.e.\n // targetElement\"s offsetParent is the same as the containerElement, then the\n // distance between the two will be the offsetTop of the targetElement.\n // If, on the other hand, there are intermediate positioned elements between the\n // two entities, the distance between the targetElement and the containerElement\n // will be the accumulation of the offsetTop of the element and that of its\n // subsequent offsetParent until the containerElement is reached, since it\n // will also be an offsetParent at some point due to the fact that it is positioned.\n\n // If the containerElement is not positioned, then it can\"t be an offsetParent,\n // which means that the offsetTop of the targetElement would not be with respect to it.\n // However, if the two of them happen to have the same offsetParent, then\n // the distance between them will be the difference between their offsetTop\n // since they are both taken with respect to the same entity.\n // The last resort would be to accumulate their offsetTop until a common\n // offsetParent is reached (usually the document) and taking the difference\n // between the accumulated offsetTops\n\n if (isPositioned(c)) {\n if (t.offsetParent !== c) {\n var isContainerElementOrDocument = function isContainerElementOrDocument(e) {\n return e === c || e === document;\n };\n\n var _getElementOffsetInfo = getElementOffsetInfoUntil(t, isContainerElementOrDocument),\n offsetTop = _getElementOffsetInfo.offsetTop,\n offsetParent = _getElementOffsetInfo.offsetParent;\n\n if (offsetParent !== c) {\n throw new Error(\"Seems containerElement is not an ancestor of the Element\");\n }\n\n return offsetTop;\n }\n\n return t.offsetTop;\n }\n\n if (t.offsetParent === c.offsetParent) {\n return t.offsetTop - c.offsetTop;\n }\n\n var isDocument = function isDocument(e) {\n return e === document;\n };\n return getElementOffsetInfoUntil(t, isDocument).offsetTop - getElementOffsetInfoUntil(c, isDocument).offsetTop;\n }\n};\n\nexports.default = {\n updateHash: updateHash,\n getHash: getHash,\n filterElementInContainer: filterElementInContainer,\n scrollOffset: scrollOffset\n};","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n/**/\n\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\nforEach(objectKeys(Writable.prototype), function(method) {\n if (!Duplex.prototype[method])\n Duplex.prototype[method] = Writable.prototype[method];\n});\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex))\n return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false)\n this.readable = false;\n\n if (options && options.writable === false)\n this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false)\n this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended)\n return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(this.end.bind(this));\n}\n\nfunction forEach (xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough))\n return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function(chunk, encoding, cb) {\n cb(null, chunk);\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n\n/**/\nvar Buffer = require('buffer').Buffer;\n/**/\n\nReadable.ReadableState = ReadableState;\n\nvar EE = require('events').EventEmitter;\n\n/**/\nif (!EE.listenerCount) EE.listenerCount = function(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\nvar Stream = require('stream');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nvar StringDecoder;\n\n\n/**/\nvar debug = require('util');\nif (debug && debug.debuglog) {\n debug = debug.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\n\nutil.inherits(Readable, Stream);\n\nfunction ReadableState(options, stream) {\n var Duplex = require('./_stream_duplex');\n\n options = options || {};\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var defaultHwm = options.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~~this.highWaterMark;\n\n this.buffer = [];\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex)\n this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // when piping, we only care about 'readable' events that happen\n // after read()ing all the bytes and not getting any pushback.\n this.ranOut = false;\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder)\n StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n var Duplex = require('./_stream_duplex');\n\n if (!(this instanceof Readable))\n return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n Stream.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function(chunk, encoding) {\n var state = this._readableState;\n\n if (util.isString(chunk) && !state.objectMode) {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = new Buffer(chunk, encoding);\n encoding = '';\n }\n }\n\n return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function(chunk) {\n var state = this._readableState;\n return readableAddChunk(this, state, chunk, '', true);\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n var er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (util.isNullOrUndefined(chunk)) {\n state.reading = false;\n if (!state.ended)\n onEofChunk(stream, state);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (state.ended && !addToFront) {\n var e = new Error('stream.push() after EOF');\n stream.emit('error', e);\n } else if (state.endEmitted && addToFront) {\n var e = new Error('stream.unshift() after end event');\n stream.emit('error', e);\n } else {\n if (state.decoder && !addToFront && !encoding)\n chunk = state.decoder.write(chunk);\n\n if (!addToFront)\n state.reading = false;\n\n // if we want the data now, just emit it.\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront)\n state.buffer.unshift(chunk);\n else\n state.buffer.push(chunk);\n\n if (state.needReadable)\n emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n\n return needMoreData(state);\n}\n\n\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended &&\n (state.needReadable ||\n state.length < state.highWaterMark ||\n state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function(enc) {\n if (!StringDecoder)\n StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 128MB\nvar MAX_HWM = 0x800000;\nfunction roundUpToNextPowerOf2(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2\n n--;\n for (var p = 1; p < 32; p <<= 1) n |= n >> p;\n n++;\n }\n return n;\n}\n\nfunction howMuchToRead(n, state) {\n if (state.length === 0 && state.ended)\n return 0;\n\n if (state.objectMode)\n return n === 0 ? 0 : 1;\n\n if (isNaN(n) || util.isNull(n)) {\n // only flow one buffer at a time\n if (state.flowing && state.buffer.length)\n return state.buffer[0].length;\n else\n return state.length;\n }\n\n if (n <= 0)\n return 0;\n\n // If we're asking for more than the target buffer level,\n // then raise the water mark. Bump up to the next highest\n // power of 2, to prevent increasing it excessively in tiny\n // amounts.\n if (n > state.highWaterMark)\n state.highWaterMark = roundUpToNextPowerOf2(n);\n\n // don't have that much. return null, unless we've ended.\n if (n > state.length) {\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n } else\n return state.length;\n }\n\n return n;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function(n) {\n debug('read', n);\n var state = this._readableState;\n var nOrig = n;\n\n if (!util.isNumber(n) || n > 0)\n state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 &&\n state.needReadable &&\n (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended)\n endReadable(this);\n else\n emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0)\n endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n }\n\n if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0)\n state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n }\n\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (doRead && !state.reading)\n n = howMuchToRead(nOrig, state);\n\n var ret;\n if (n > 0)\n ret = fromList(n, state);\n else\n ret = null;\n\n if (util.isNull(ret)) {\n state.needReadable = true;\n n = 0;\n }\n\n state.length -= n;\n\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (state.length === 0 && !state.ended)\n state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended && state.length === 0)\n endReadable(this);\n\n if (!util.isNull(ret))\n this.emit('data', ret);\n\n return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n var er = null;\n if (!util.isBuffer(chunk) &&\n !util.isString(chunk) &&\n !util.isNullOrUndefined(chunk) &&\n !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n\nfunction onEofChunk(stream, state) {\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync)\n process.nextTick(function() {\n emitReadable_(stream);\n });\n else\n emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(function() {\n maybeReadMore_(stream, state);\n });\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended &&\n state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n else\n len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function(n) {\n this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function(dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) &&\n dest !== process.stdout &&\n dest !== process.stderr;\n\n var endFn = doEnd ? onend : cleanup;\n if (state.endEmitted)\n process.nextTick(endFn);\n else\n src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable) {\n debug('onunpipe');\n if (readable === src) {\n cleanup();\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', cleanup);\n src.removeListener('data', ondata);\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain &&\n (!dest._writableState || dest._writableState.needDrain))\n ondrain();\n }\n\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n if (false === ret) {\n debug('false write response, pause',\n src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EE.listenerCount(dest, 'error') === 0)\n dest.emit('error', er);\n }\n // This is a brutally ugly hack to make sure that our error handler\n // is attached before any userland ones. NEVER DO THIS.\n if (!dest._events || !dest._events.error)\n dest.on('error', onerror);\n else if (isArray(dest._events.error))\n dest._events.error.unshift(onerror);\n else\n dest._events.error = [onerror, dest._events.error];\n\n\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain)\n state.awaitDrain--;\n if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\n\nReadable.prototype.unpipe = function(dest) {\n var state = this._readableState;\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0)\n return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes)\n return this;\n\n if (!dest)\n dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest)\n dest.emit('unpipe', this);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++)\n dests[i].emit('unpipe', this);\n return this;\n }\n\n // try to find the right one.\n var i = indexOf(state.pipes, dest);\n if (i === -1)\n return this;\n\n state.pipes.splice(i, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1)\n state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function(ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n // If listening to data, and it has not explicitly been paused,\n // then call resume to start the flow of data on the next tick.\n if (ev === 'data' && false !== this._readableState.flowing) {\n this.resume();\n }\n\n if (ev === 'readable' && this.readable) {\n var state = this._readableState;\n if (!state.readableListening) {\n state.readableListening = true;\n state.emittedReadable = false;\n state.needReadable = true;\n if (!state.reading) {\n var self = this;\n process.nextTick(function() {\n debug('readable nexttick read 0');\n self.read(0);\n });\n } else if (state.length) {\n emitReadable(this, state);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function() {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n if (!state.reading) {\n debug('resume read 0');\n this.read(0);\n }\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(function() {\n resume_(stream, state);\n });\n }\n}\n\nfunction resume_(stream, state) {\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading)\n stream.read(0);\n}\n\nReadable.prototype.pause = function() {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n if (state.flowing) {\n do {\n var chunk = stream.read();\n } while (null !== chunk && state.flowing);\n }\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function(stream) {\n var state = this._readableState;\n var paused = false;\n\n var self = this;\n stream.on('end', function() {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length)\n self.push(chunk);\n }\n\n self.push(null);\n });\n\n stream.on('data', function(chunk) {\n debug('wrapped data');\n if (state.decoder)\n chunk = state.decoder.write(chunk);\n if (!chunk || !state.objectMode && !chunk.length)\n return;\n\n var ret = self.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {\n this[i] = function(method) { return function() {\n return stream[method].apply(stream, arguments);\n }}(i);\n }\n }\n\n // proxy certain important events.\n var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n forEach(events, function(ev) {\n stream.on(ev, self.emit.bind(self, ev));\n });\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n self._read = function(n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return self;\n};\n\n\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\nfunction fromList(n, state) {\n var list = state.buffer;\n var length = state.length;\n var stringMode = !!state.decoder;\n var objectMode = !!state.objectMode;\n var ret;\n\n // nothing in the list, definitely empty.\n if (list.length === 0)\n return null;\n\n if (length === 0)\n ret = null;\n else if (objectMode)\n ret = list.shift();\n else if (!n || n >= length) {\n // read it all, truncate the array.\n if (stringMode)\n ret = list.join('');\n else\n ret = Buffer.concat(list, length);\n list.length = 0;\n } else {\n // read just some of it.\n if (n < list[0].length) {\n // just take a part of the first list item.\n // slice is the same for buffers and strings.\n var buf = list[0];\n ret = buf.slice(0, n);\n list[0] = buf.slice(n);\n } else if (n === list[0].length) {\n // first list is a perfect match\n ret = list.shift();\n } else {\n // complex case.\n // we have enough to cover it, but it spans past the first buffer.\n if (stringMode)\n ret = '';\n else\n ret = new Buffer(n);\n\n var c = 0;\n for (var i = 0, l = list.length; i < l && c < n; i++) {\n var buf = list[0];\n var cpy = Math.min(n - c, buf.length);\n\n if (stringMode)\n ret += buf.slice(0, cpy);\n else\n buf.copy(ret, c, 0, cpy);\n\n if (cpy < buf.length)\n list[0] = buf.slice(cpy);\n else\n list.shift();\n\n c += cpy;\n }\n }\n }\n\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0)\n throw new Error('endReadable called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(function() {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n });\n }\n}\n\nfunction forEach (xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n\nfunction indexOf (xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\n\nfunction TransformState(options, stream) {\n this.afterTransform = function(er, data) {\n return afterTransform(stream, er, data);\n };\n\n this.needTransform = false;\n this.transforming = false;\n this.writecb = null;\n this.writechunk = null;\n}\n\nfunction afterTransform(stream, er, data) {\n var ts = stream._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb)\n return stream.emit('error', new Error('no writecb in Transform class'));\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (!util.isNullOrUndefined(data))\n stream.push(data);\n\n if (cb)\n cb(er);\n\n var rs = stream._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n stream._read(rs.highWaterMark);\n }\n}\n\n\nfunction Transform(options) {\n if (!(this instanceof Transform))\n return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = new TransformState(options, this);\n\n // when the writable side finishes, then flush out anything remaining.\n var stream = this;\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n this.once('prefinish', function() {\n if (util.isFunction(this._flush))\n this._flush(function(er) {\n done(stream, er);\n });\n else\n done(stream);\n });\n}\n\nTransform.prototype.push = function(chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function(chunk, encoding, cb) {\n throw new Error('not implemented');\n};\n\nTransform.prototype._write = function(chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform ||\n rs.needReadable ||\n rs.length < rs.highWaterMark)\n this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function(n) {\n var ts = this._transformState;\n\n if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\n\nfunction done(stream, er) {\n if (er)\n return stream.emit('error', er);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n var ws = stream._writableState;\n var ts = stream._transformState;\n\n if (ws.length)\n throw new Error('calling transform done when ws.length != 0');\n\n if (ts.transforming)\n throw new Error('calling transform done when still transforming');\n\n return stream.push(null);\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, cb), and it'll handle all\n// the drain event emission and buffering.\n\nmodule.exports = Writable;\n\n/**/\nvar Buffer = require('buffer').Buffer;\n/**/\n\nWritable.WritableState = WritableState;\n\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nvar Stream = require('stream');\n\nutil.inherits(Writable, Stream);\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n}\n\nfunction WritableState(options, stream) {\n var Duplex = require('./_stream_duplex');\n\n options = options || {};\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var defaultHwm = options.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex)\n this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // cast to ints.\n this.highWaterMark = ~~this.highWaterMark;\n\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function(er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.buffer = [];\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n}\n\nfunction Writable(options) {\n var Duplex = require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, though they're not\n // instanceof Writable, they're instanceof Readable.\n if (!(this instanceof Writable) && !(this instanceof Duplex))\n return new Writable(options);\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function() {\n this.emit('error', new Error('Cannot pipe. Not readable.'));\n};\n\n\nfunction writeAfterEnd(stream, state, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n process.nextTick(function() {\n cb(er);\n });\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n if (!util.isBuffer(chunk) &&\n !util.isString(chunk) &&\n !util.isNullOrUndefined(chunk) &&\n !state.objectMode) {\n var er = new TypeError('Invalid non-string/buffer chunk');\n stream.emit('error', er);\n process.nextTick(function() {\n cb(er);\n });\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function(chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n if (util.isFunction(encoding)) {\n cb = encoding;\n encoding = null;\n }\n\n if (util.isBuffer(chunk))\n encoding = 'buffer';\n else if (!encoding)\n encoding = state.defaultEncoding;\n\n if (!util.isFunction(cb))\n cb = function() {};\n\n if (state.ended)\n writeAfterEnd(this, state, cb);\n else if (validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function() {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function() {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing &&\n !state.corked &&\n !state.finished &&\n !state.bufferProcessing &&\n state.buffer.length)\n clearBuffer(this, state);\n }\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode &&\n state.decodeStrings !== false &&\n util.isString(chunk)) {\n chunk = new Buffer(chunk, encoding);\n }\n return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n chunk = decodeChunk(state, chunk, encoding);\n if (util.isBuffer(chunk))\n encoding = 'buffer';\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret)\n state.needDrain = true;\n\n if (state.writing || state.corked)\n state.buffer.push(new WriteReq(chunk, encoding, cb));\n else\n doWrite(stream, state, false, len, chunk, encoding, cb);\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev)\n stream._writev(chunk, state.onwrite);\n else\n stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n if (sync)\n process.nextTick(function() {\n state.pendingcb--;\n cb(er);\n });\n else {\n state.pendingcb--;\n cb(er);\n }\n\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er)\n onwriteError(stream, state, sync, er, cb);\n else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(stream, state);\n\n if (!finished &&\n !state.corked &&\n !state.bufferProcessing &&\n state.buffer.length) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(function() {\n afterWrite(stream, state, finished, cb);\n });\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished)\n onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n\n if (stream._writev && state.buffer.length > 1) {\n // Fast case, write everything using _writev()\n var cbs = [];\n for (var c = 0; c < state.buffer.length; c++)\n cbs.push(state.buffer[c].callback);\n\n // count the one we are adding, as well.\n // TODO(isaacs) clean this up\n state.pendingcb++;\n doWrite(stream, state, true, state.length, state.buffer, '', function(err) {\n for (var i = 0; i < cbs.length; i++) {\n state.pendingcb--;\n cbs[i](err);\n }\n });\n\n // Clear buffer\n state.buffer = [];\n } else {\n // Slow case, write chunks one-by-one\n for (var c = 0; c < state.buffer.length; c++) {\n var entry = state.buffer[c];\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n c++;\n break;\n }\n }\n\n if (c < state.buffer.length)\n state.buffer = state.buffer.slice(c);\n else\n state.buffer.length = 0;\n }\n\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function(chunk, encoding, cb) {\n cb(new Error('not implemented'));\n\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function(chunk, encoding, cb) {\n var state = this._writableState;\n\n if (util.isFunction(chunk)) {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (util.isFunction(encoding)) {\n cb = encoding;\n encoding = null;\n }\n\n if (!util.isNullOrUndefined(chunk))\n this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished)\n endWritable(this, state, cb);\n};\n\n\nfunction needFinish(stream, state) {\n return (state.ending &&\n state.length === 0 &&\n !state.finished &&\n !state.writing);\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished) {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(stream, state);\n if (need) {\n if (state.pendingcb === 0) {\n prefinish(stream, state);\n state.finished = true;\n stream.emit('finish');\n } else\n prefinish(stream, state);\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished)\n process.nextTick(cb);\n else\n stream.once('finish', cb);\n }\n state.ended = true;\n}\n","module.exports = require(\"./lib/_stream_passthrough.js\")\n","'use strict';\n\nvar core = require('../'),\n isArray = require('lodash/isArray'),\n isFunction = require('lodash/isFunction'),\n isObjectLike = require('lodash/isObjectLike');\n\n\nmodule.exports = function (options) {\n\n var errorText = 'Please verify options'; // For better minification because this string is repeating\n\n if (!isObjectLike(options)) {\n throw new TypeError(errorText);\n }\n\n if (!isFunction(options.request)) {\n throw new TypeError(errorText + '.request');\n }\n\n if (!isArray(options.expose) || options.expose.length === 0) {\n throw new TypeError(errorText + '.expose');\n }\n\n\n var plumbing = core({\n PromiseImpl: options.PromiseImpl,\n constructorMixin: options.constructorMixin\n });\n\n\n // Intercepting Request's init method\n\n var originalInit = options.request.Request.prototype.init;\n\n options.request.Request.prototype.init = function RP$initInterceptor(requestOptions) {\n\n // Init may be called again - currently in case of redirects\n if (isObjectLike(requestOptions) && !this._callback && !this._rp_promise) {\n\n plumbing.init.call(this, requestOptions);\n\n }\n\n return originalInit.apply(this, arguments);\n\n };\n\n\n // Exposing the Promise capabilities\n\n var thenExposed = false;\n for ( var i = 0; i < options.expose.length; i+=1 ) {\n\n var method = options.expose[i];\n\n plumbing[ method === 'promise' ? 'exposePromise' : 'exposePromiseMethod' ](\n options.request.Request.prototype,\n null,\n '_rp_promise',\n method\n );\n\n if (method === 'then') {\n thenExposed = true;\n }\n\n }\n\n if (!thenExposed) {\n throw new Error('Please expose \"then\"');\n }\n\n};\n","'use strict';\n\n\nfunction RequestError(cause, options, response) {\n\n this.name = 'RequestError';\n this.message = String(cause);\n this.cause = cause;\n this.error = cause; // legacy attribute\n this.options = options;\n this.response = response;\n\n if (Error.captureStackTrace) { // required for non-V8 environments\n Error.captureStackTrace(this);\n }\n\n}\nRequestError.prototype = Object.create(Error.prototype);\nRequestError.prototype.constructor = RequestError;\n\n\nfunction StatusCodeError(statusCode, body, options, response) {\n\n this.name = 'StatusCodeError';\n this.statusCode = statusCode;\n this.message = statusCode + ' - ' + (JSON && JSON.stringify ? JSON.stringify(body) : body);\n this.error = body; // legacy attribute\n this.options = options;\n this.response = response;\n\n if (Error.captureStackTrace) { // required for non-V8 environments\n Error.captureStackTrace(this);\n }\n\n}\nStatusCodeError.prototype = Object.create(Error.prototype);\nStatusCodeError.prototype.constructor = StatusCodeError;\n\n\nfunction TransformError(cause, options, response) {\n\n this.name = 'TransformError';\n this.message = String(cause);\n this.cause = cause;\n this.error = cause; // legacy attribute\n this.options = options;\n this.response = response;\n\n if (Error.captureStackTrace) { // required for non-V8 environments\n Error.captureStackTrace(this);\n }\n\n}\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\n\n\nmodule.exports = {\n RequestError: RequestError,\n StatusCodeError: StatusCodeError,\n TransformError: TransformError\n};\n","'use strict';\n\nvar errors = require('./errors.js'),\n isFunction = require('lodash/isFunction'),\n isObjectLike = require('lodash/isObjectLike'),\n isString = require('lodash/isString'),\n isUndefined = require('lodash/isUndefined');\n\n\nmodule.exports = function (options) {\n\n var errorText = 'Please verify options'; // For better minification because this string is repeating\n\n if (!isObjectLike(options)) {\n throw new TypeError(errorText);\n }\n\n if (!isFunction(options.PromiseImpl)) {\n throw new TypeError(errorText + '.PromiseImpl');\n }\n\n if (!isUndefined(options.constructorMixin) && !isFunction(options.constructorMixin)) {\n throw new TypeError(errorText + '.PromiseImpl');\n }\n\n var PromiseImpl = options.PromiseImpl;\n var constructorMixin = options.constructorMixin;\n\n\n var plumbing = {};\n\n plumbing.init = function (requestOptions) {\n\n var self = this;\n\n self._rp_promise = new PromiseImpl(function (resolve, reject) {\n self._rp_resolve = resolve;\n self._rp_reject = reject;\n if (constructorMixin) {\n constructorMixin.apply(self, arguments); // Using arguments since specific Promise libraries may pass additional parameters\n }\n });\n\n self._rp_callbackOrig = requestOptions.callback;\n requestOptions.callback = self.callback = function RP$callback(err, response, body) {\n plumbing.callback.call(self, err, response, body);\n };\n\n if (isString(requestOptions.method)) {\n requestOptions.method = requestOptions.method.toUpperCase();\n }\n\n requestOptions.transform = requestOptions.transform || plumbing.defaultTransformations[requestOptions.method];\n\n self._rp_options = requestOptions;\n self._rp_options.simple = requestOptions.simple !== false;\n self._rp_options.resolveWithFullResponse = requestOptions.resolveWithFullResponse === true;\n self._rp_options.transform2xxOnly = requestOptions.transform2xxOnly === true;\n\n };\n\n plumbing.defaultTransformations = {\n HEAD: function (body, response, resolveWithFullResponse) {\n return resolveWithFullResponse ? response : response.headers;\n }\n };\n\n plumbing.callback = function (err, response, body) {\n\n var self = this;\n\n var origCallbackThrewException = false, thrownException = null;\n\n if (isFunction(self._rp_callbackOrig)) {\n try {\n self._rp_callbackOrig.apply(self, arguments); // TODO: Apply to self mimics behavior of request@2. Is that also right for request@next?\n } catch (e) {\n origCallbackThrewException = true;\n thrownException = e;\n }\n }\n\n var is2xx = !err && /^2/.test('' + response.statusCode);\n\n if (err) {\n\n self._rp_reject(new errors.RequestError(err, self._rp_options, response));\n\n } else if (self._rp_options.simple && !is2xx) {\n\n if (isFunction(self._rp_options.transform) && self._rp_options.transform2xxOnly === false) {\n\n (new PromiseImpl(function (resolve) {\n resolve(self._rp_options.transform(body, response, self._rp_options.resolveWithFullResponse)); // transform may return a Promise\n }))\n .then(function (transformedResponse) {\n self._rp_reject(new errors.StatusCodeError(response.statusCode, body, self._rp_options, transformedResponse));\n })\n .catch(function (transformErr) {\n self._rp_reject(new errors.TransformError(transformErr, self._rp_options, response));\n });\n\n } else {\n self._rp_reject(new errors.StatusCodeError(response.statusCode, body, self._rp_options, response));\n }\n\n } else {\n\n if (isFunction(self._rp_options.transform) && (is2xx || self._rp_options.transform2xxOnly === false)) {\n\n (new PromiseImpl(function (resolve) {\n resolve(self._rp_options.transform(body, response, self._rp_options.resolveWithFullResponse)); // transform may return a Promise\n }))\n .then(function (transformedResponse) {\n self._rp_resolve(transformedResponse);\n })\n .catch(function (transformErr) {\n self._rp_reject(new errors.TransformError(transformErr, self._rp_options, response));\n });\n\n } else if (self._rp_options.resolveWithFullResponse) {\n self._rp_resolve(response);\n } else {\n self._rp_resolve(body);\n }\n\n }\n\n if (origCallbackThrewException) {\n throw thrownException;\n }\n\n };\n\n plumbing.exposePromiseMethod = function (exposeTo, bindTo, promisePropertyKey, methodToExpose, exposeAs) {\n\n exposeAs = exposeAs || methodToExpose;\n\n if (exposeAs in exposeTo) {\n throw new Error('Unable to expose method \"' + exposeAs + '\"');\n }\n\n exposeTo[exposeAs] = function RP$exposed() {\n var self = bindTo || this;\n return self[promisePropertyKey][methodToExpose].apply(self[promisePropertyKey], arguments);\n };\n\n };\n\n plumbing.exposePromise = function (exposeTo, bindTo, promisePropertyKey, exposeAs) {\n\n exposeAs = exposeAs || 'promise';\n\n if (exposeAs in exposeTo) {\n throw new Error('Unable to expose method \"' + exposeAs + '\"');\n }\n\n exposeTo[exposeAs] = function RP$promise() {\n var self = bindTo || this;\n return self[promisePropertyKey];\n };\n\n };\n\n return plumbing;\n\n};\n","'use strict';\n\nvar Bluebird = require('bluebird').getNewLibraryCopy(),\n configure = require('request-promise-core/configure/request2'),\n stealthyRequire = require('stealthy-require');\n\ntry {\n\n // Load Request freshly - so that users can require an unaltered request instance!\n var request = stealthyRequire(require.cache, function () {\n return require('request');\n },\n function () {\n require('tough-cookie');\n }, module);\n\n} catch (err) {\n /* istanbul ignore next */\n var EOL = require('os').EOL;\n /* istanbul ignore next */\n console.error(EOL + '###' + EOL + '### The \"request\" library is not installed automatically anymore.' + EOL + '### But is a dependency of \"request-promise\".' + EOL + '### Please install it with:' + EOL + '### npm install request --save' + EOL + '###' + EOL);\n /* istanbul ignore next */\n throw err;\n}\n\nBluebird.config({cancellation: true});\n\nconfigure({\n request: request,\n PromiseImpl: Bluebird,\n expose: [\n 'then',\n 'catch',\n 'finally',\n 'cancel',\n 'promise'\n // Would you like to expose more Bluebird methods? Try e.g. `rp(...).promise().tap(...)` first. `.promise()` returns the full-fledged Bluebird promise.\n ],\n constructorMixin: function (resolve, reject, onCancel) {\n var self = this;\n onCancel(function () {\n self.abort();\n });\n }\n});\n\nrequest.bindCLS = function RP$bindCLS() {\n throw new Error('CLS support was dropped. To get it back read: https://github.com/request/request-promise/wiki/Getting-Back-Support-for-Continuation-Local-Storage');\n};\n\n\nmodule.exports = request;\n","/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n'use strict';\nvar net = require('net');\nvar urlParse = require('url').parse;\nvar util = require('util');\nvar pubsuffix = require('./pubsuffix-psl');\nvar Store = require('./store').Store;\nvar MemoryCookieStore = require('./memstore').MemoryCookieStore;\nvar pathMatch = require('./pathMatch').pathMatch;\nvar VERSION = require('./version');\n\nvar punycode;\ntry {\n punycode = require('punycode');\n} catch(e) {\n console.warn(\"tough-cookie: can't load punycode; won't use punycode for domain normalization\");\n}\n\n// From RFC6265 S4.1.1\n// note that it excludes \\x3B \";\"\nvar COOKIE_OCTETS = /^[\\x21\\x23-\\x2B\\x2D-\\x3A\\x3C-\\x5B\\x5D-\\x7E]+$/;\n\nvar CONTROL_CHARS = /[\\x00-\\x1F]/;\n\n// From Chromium // '\\r', '\\n' and '\\0' should be treated as a terminator in\n// the \"relaxed\" mode, see:\n// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60\nvar TERMINATORS = ['\\n', '\\r', '\\0'];\n\n// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or \";\"'\n// Note ';' is \\x3B\nvar PATH_VALUE = /[\\x20-\\x3A\\x3C-\\x7E]+/;\n\n// date-time parsing constants (RFC6265 S5.1.1)\n\nvar DATE_DELIM = /[\\x09\\x20-\\x2F\\x3B-\\x40\\x5B-\\x60\\x7B-\\x7E]/;\n\nvar MONTH_TO_NUM = {\n jan:0, feb:1, mar:2, apr:3, may:4, jun:5,\n jul:6, aug:7, sep:8, oct:9, nov:10, dec:11\n};\nvar NUM_TO_MONTH = [\n 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'\n];\nvar NUM_TO_DAY = [\n 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'\n];\n\nvar MAX_TIME = 2147483647000; // 31-bit max\nvar MIN_TIME = 0; // 31-bit min\n\n/*\n * Parses a Natural number (i.e., non-negative integer) with either the\n * *DIGIT ( non-digit *OCTET )\n * or\n * *DIGIT\n * grammar (RFC6265 S5.1.1).\n *\n * The \"trailingOK\" boolean controls if the grammar accepts a\n * \"( non-digit *OCTET )\" trailer.\n */\nfunction parseDigits(token, minDigits, maxDigits, trailingOK) {\n var count = 0;\n while (count < token.length) {\n var c = token.charCodeAt(count);\n // \"non-digit = %x00-2F / %x3A-FF\"\n if (c <= 0x2F || c >= 0x3A) {\n break;\n }\n count++;\n }\n\n // constrain to a minimum and maximum number of digits.\n if (count < minDigits || count > maxDigits) {\n return null;\n }\n\n if (!trailingOK && count != token.length) {\n return null;\n }\n\n return parseInt(token.substr(0,count), 10);\n}\n\nfunction parseTime(token) {\n var parts = token.split(':');\n var result = [0,0,0];\n\n /* RF6256 S5.1.1:\n * time = hms-time ( non-digit *OCTET )\n * hms-time = time-field \":\" time-field \":\" time-field\n * time-field = 1*2DIGIT\n */\n\n if (parts.length !== 3) {\n return null;\n }\n\n for (var i = 0; i < 3; i++) {\n // \"time-field\" must be strictly \"1*2DIGIT\", HOWEVER, \"hms-time\" can be\n // followed by \"( non-digit *OCTET )\" so therefore the last time-field can\n // have a trailer\n var trailingOK = (i == 2);\n var num = parseDigits(parts[i], 1, 2, trailingOK);\n if (num === null) {\n return null;\n }\n result[i] = num;\n }\n\n return result;\n}\n\nfunction parseMonth(token) {\n token = String(token).substr(0,3).toLowerCase();\n var num = MONTH_TO_NUM[token];\n return num >= 0 ? num : null;\n}\n\n/*\n * RFC6265 S5.1.1 date parser (see RFC for full grammar)\n */\nfunction parseDate(str) {\n if (!str) {\n return;\n }\n\n /* RFC6265 S5.1.1:\n * 2. Process each date-token sequentially in the order the date-tokens\n * appear in the cookie-date\n */\n var tokens = str.split(DATE_DELIM);\n if (!tokens) {\n return;\n }\n\n var hour = null;\n var minute = null;\n var second = null;\n var dayOfMonth = null;\n var month = null;\n var year = null;\n\n for (var i=0; i= 70 && year <= 99) {\n year += 1900;\n } else if (year >= 0 && year <= 69) {\n year += 2000;\n }\n }\n }\n }\n\n /* RFC 6265 S5.1.1\n * \"5. Abort these steps and fail to parse the cookie-date if:\n * * at least one of the found-day-of-month, found-month, found-\n * year, or found-time flags is not set,\n * * the day-of-month-value is less than 1 or greater than 31,\n * * the year-value is less than 1601,\n * * the hour-value is greater than 23,\n * * the minute-value is greater than 59, or\n * * the second-value is greater than 59.\n * (Note that leap seconds cannot be represented in this syntax.)\"\n *\n * So, in order as above:\n */\n if (\n dayOfMonth === null || month === null || year === null || second === null ||\n dayOfMonth < 1 || dayOfMonth > 31 ||\n year < 1601 ||\n hour > 23 ||\n minute > 59 ||\n second > 59\n ) {\n return;\n }\n\n return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));\n}\n\nfunction formatDate(date) {\n var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;\n var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;\n var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;\n var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;\n return NUM_TO_DAY[date.getUTCDay()] + ', ' +\n d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+\n h+':'+m+':'+s+' GMT';\n}\n\n// S5.1.2 Canonicalized Host Names\nfunction canonicalDomain(str) {\n if (str == null) {\n return null;\n }\n str = str.trim().replace(/^\\./,''); // S4.1.2.3 & S5.2.3: ignore leading .\n\n // convert to IDN if any non-ASCII characters\n if (punycode && /[^\\u0001-\\u007f]/.test(str)) {\n str = punycode.toASCII(str);\n }\n\n return str.toLowerCase();\n}\n\n// S5.1.3 Domain Matching\nfunction domainMatch(str, domStr, canonicalize) {\n if (str == null || domStr == null) {\n return null;\n }\n if (canonicalize !== false) {\n str = canonicalDomain(str);\n domStr = canonicalDomain(domStr);\n }\n\n /*\n * \"The domain string and the string are identical. (Note that both the\n * domain string and the string will have been canonicalized to lower case at\n * this point)\"\n */\n if (str == domStr) {\n return true;\n }\n\n /* \"All of the following [three] conditions hold:\" (order adjusted from the RFC) */\n\n /* \"* The string is a host name (i.e., not an IP address).\" */\n if (net.isIP(str)) {\n return false;\n }\n\n /* \"* The domain string is a suffix of the string\" */\n var idx = str.indexOf(domStr);\n if (idx <= 0) {\n return false; // it's a non-match (-1) or prefix (0)\n }\n\n // e.g \"a.b.c\".indexOf(\"b.c\") === 2\n // 5 === 3+2\n if (str.length !== domStr.length + idx) { // it's not a suffix\n return false;\n }\n\n /* \"* The last character of the string that is not included in the domain\n * string is a %x2E (\".\") character.\" */\n if (str.substr(idx-1,1) !== '.') {\n return false;\n }\n\n return true;\n}\n\n\n// RFC6265 S5.1.4 Paths and Path-Match\n\n/*\n * \"The user agent MUST use an algorithm equivalent to the following algorithm\n * to compute the default-path of a cookie:\"\n *\n * Assumption: the path (and not query part or absolute uri) is passed in.\n */\nfunction defaultPath(path) {\n // \"2. If the uri-path is empty or if the first character of the uri-path is not\n // a %x2F (\"/\") character, output %x2F (\"/\") and skip the remaining steps.\n if (!path || path.substr(0,1) !== \"/\") {\n return \"/\";\n }\n\n // \"3. If the uri-path contains no more than one %x2F (\"/\") character, output\n // %x2F (\"/\") and skip the remaining step.\"\n if (path === \"/\") {\n return path;\n }\n\n var rightSlash = path.lastIndexOf(\"/\");\n if (rightSlash === 0) {\n return \"/\";\n }\n\n // \"4. Output the characters of the uri-path from the first character up to,\n // but not including, the right-most %x2F (\"/\").\"\n return path.slice(0, rightSlash);\n}\n\nfunction trimTerminator(str) {\n for (var t = 0; t < TERMINATORS.length; t++) {\n var terminatorIdx = str.indexOf(TERMINATORS[t]);\n if (terminatorIdx !== -1) {\n str = str.substr(0,terminatorIdx);\n }\n }\n\n return str;\n}\n\nfunction parseCookiePair(cookiePair, looseMode) {\n cookiePair = trimTerminator(cookiePair);\n\n var firstEq = cookiePair.indexOf('=');\n if (looseMode) {\n if (firstEq === 0) { // '=' is immediately at start\n cookiePair = cookiePair.substr(1);\n firstEq = cookiePair.indexOf('='); // might still need to split on '='\n }\n } else { // non-loose mode\n if (firstEq <= 0) { // no '=' or is at start\n return; // needs to have non-empty \"cookie-name\"\n }\n }\n\n var cookieName, cookieValue;\n if (firstEq <= 0) {\n cookieName = \"\";\n cookieValue = cookiePair.trim();\n } else {\n cookieName = cookiePair.substr(0, firstEq).trim();\n cookieValue = cookiePair.substr(firstEq+1).trim();\n }\n\n if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {\n return;\n }\n\n var c = new Cookie();\n c.key = cookieName;\n c.value = cookieValue;\n return c;\n}\n\nfunction parse(str, options) {\n if (!options || typeof options !== 'object') {\n options = {};\n }\n str = str.trim();\n\n // We use a regex to parse the \"name-value-pair\" part of S5.2\n var firstSemi = str.indexOf(';'); // S5.2 step 1\n var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);\n var c = parseCookiePair(cookiePair, !!options.loose);\n if (!c) {\n return;\n }\n\n if (firstSemi === -1) {\n return c;\n }\n\n // S5.2.3 \"unparsed-attributes consist of the remainder of the set-cookie-string\n // (including the %x3B (\";\") in question).\" plus later on in the same section\n // \"discard the first \";\" and trim\".\n var unparsed = str.slice(firstSemi + 1).trim();\n\n // \"If the unparsed-attributes string is empty, skip the rest of these\n // steps.\"\n if (unparsed.length === 0) {\n return c;\n }\n\n /*\n * S5.2 says that when looping over the items \"[p]rocess the attribute-name\n * and attribute-value according to the requirements in the following\n * subsections\" for every item. Plus, for many of the individual attributes\n * in S5.3 it says to use the \"attribute-value of the last attribute in the\n * cookie-attribute-list\". Therefore, in this implementation, we overwrite\n * the previous value.\n */\n var cookie_avs = unparsed.split(';');\n while (cookie_avs.length) {\n var av = cookie_avs.shift().trim();\n if (av.length === 0) { // happens if \";;\" appears\n continue;\n }\n var av_sep = av.indexOf('=');\n var av_key, av_value;\n\n if (av_sep === -1) {\n av_key = av;\n av_value = null;\n } else {\n av_key = av.substr(0,av_sep);\n av_value = av.substr(av_sep+1);\n }\n\n av_key = av_key.trim().toLowerCase();\n\n if (av_value) {\n av_value = av_value.trim();\n }\n\n switch(av_key) {\n case 'expires': // S5.2.1\n if (av_value) {\n var exp = parseDate(av_value);\n // \"If the attribute-value failed to parse as a cookie date, ignore the\n // cookie-av.\"\n if (exp) {\n // over and underflow not realistically a concern: V8's getTime() seems to\n // store something larger than a 32-bit time_t (even with 32-bit node)\n c.expires = exp;\n }\n }\n break;\n\n case 'max-age': // S5.2.2\n if (av_value) {\n // \"If the first character of the attribute-value is not a DIGIT or a \"-\"\n // character ...[or]... If the remainder of attribute-value contains a\n // non-DIGIT character, ignore the cookie-av.\"\n if (/^-?[0-9]+$/.test(av_value)) {\n var delta = parseInt(av_value, 10);\n // \"If delta-seconds is less than or equal to zero (0), let expiry-time\n // be the earliest representable date and time.\"\n c.setMaxAge(delta);\n }\n }\n break;\n\n case 'domain': // S5.2.3\n // \"If the attribute-value is empty, the behavior is undefined. However,\n // the user agent SHOULD ignore the cookie-av entirely.\"\n if (av_value) {\n // S5.2.3 \"Let cookie-domain be the attribute-value without the leading %x2E\n // (\".\") character.\"\n var domain = av_value.trim().replace(/^\\./, '');\n if (domain) {\n // \"Convert the cookie-domain to lower case.\"\n c.domain = domain.toLowerCase();\n }\n }\n break;\n\n case 'path': // S5.2.4\n /*\n * \"If the attribute-value is empty or if the first character of the\n * attribute-value is not %x2F (\"/\"):\n * Let cookie-path be the default-path.\n * Otherwise:\n * Let cookie-path be the attribute-value.\"\n *\n * We'll represent the default-path as null since it depends on the\n * context of the parsing.\n */\n c.path = av_value && av_value[0] === \"/\" ? av_value : null;\n break;\n\n case 'secure': // S5.2.5\n /*\n * \"If the attribute-name case-insensitively matches the string \"Secure\",\n * the user agent MUST append an attribute to the cookie-attribute-list\n * with an attribute-name of Secure and an empty attribute-value.\"\n */\n c.secure = true;\n break;\n\n case 'httponly': // S5.2.6 -- effectively the same as 'secure'\n c.httpOnly = true;\n break;\n\n default:\n c.extensions = c.extensions || [];\n c.extensions.push(av);\n break;\n }\n }\n\n return c;\n}\n\n// avoid the V8 deoptimization monster!\nfunction jsonParse(str) {\n var obj;\n try {\n obj = JSON.parse(str);\n } catch (e) {\n return e;\n }\n return obj;\n}\n\nfunction fromJSON(str) {\n if (!str) {\n return null;\n }\n\n var obj;\n if (typeof str === 'string') {\n obj = jsonParse(str);\n if (obj instanceof Error) {\n return null;\n }\n } else {\n // assume it's an Object\n obj = str;\n }\n\n var c = new Cookie();\n for (var i=0; i 1) {\n var lindex = path.lastIndexOf('/');\n if (lindex === 0) {\n break;\n }\n path = path.substr(0,lindex);\n permutations.push(path);\n }\n permutations.push('/');\n return permutations;\n}\n\nfunction getCookieContext(url) {\n if (url instanceof Object) {\n return url;\n }\n // NOTE: decodeURI will throw on malformed URIs (see GH-32).\n // Therefore, we will just skip decoding for such URIs.\n try {\n url = decodeURI(url);\n }\n catch(err) {\n // Silently swallow error\n }\n\n return urlParse(url);\n}\n\nfunction Cookie(options) {\n options = options || {};\n\n Object.keys(options).forEach(function(prop) {\n if (Cookie.prototype.hasOwnProperty(prop) &&\n Cookie.prototype[prop] !== options[prop] &&\n prop.substr(0,1) !== '_')\n {\n this[prop] = options[prop];\n }\n }, this);\n\n this.creation = this.creation || new Date();\n\n // used to break creation ties in cookieCompare():\n Object.defineProperty(this, 'creationIndex', {\n configurable: false,\n enumerable: false, // important for assert.deepEqual checks\n writable: true,\n value: ++Cookie.cookiesCreated\n });\n}\n\nCookie.cookiesCreated = 0; // incremented each time a cookie is created\n\nCookie.parse = parse;\nCookie.fromJSON = fromJSON;\n\nCookie.prototype.key = \"\";\nCookie.prototype.value = \"\";\n\n// the order in which the RFC has them:\nCookie.prototype.expires = \"Infinity\"; // coerces to literal Infinity\nCookie.prototype.maxAge = null; // takes precedence over expires for TTL\nCookie.prototype.domain = null;\nCookie.prototype.path = null;\nCookie.prototype.secure = false;\nCookie.prototype.httpOnly = false;\nCookie.prototype.extensions = null;\n\n// set by the CookieJar:\nCookie.prototype.hostOnly = null; // boolean when set\nCookie.prototype.pathIsDefault = null; // boolean when set\nCookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse\nCookie.prototype.lastAccessed = null; // Date when set\nObject.defineProperty(Cookie.prototype, 'creationIndex', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: 0\n});\n\nCookie.serializableProperties = Object.keys(Cookie.prototype)\n .filter(function(prop) {\n return !(\n Cookie.prototype[prop] instanceof Function ||\n prop === 'creationIndex' ||\n prop.substr(0,1) === '_'\n );\n });\n\nCookie.prototype.inspect = function inspect() {\n var now = Date.now();\n return 'Cookie=\"'+this.toString() +\n '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +\n '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +\n '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +\n '\"';\n};\n\n// Use the new custom inspection symbol to add the custom inspect function if\n// available.\nif (util.inspect.custom) {\n Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;\n}\n\nCookie.prototype.toJSON = function() {\n var obj = {};\n\n var props = Cookie.serializableProperties;\n for (var i=0; i -1\n\n return {hostname: zoneHost, port: zonePort, hasPort: hasPort}\n}\n\nfunction uriInNoProxy (uri, noProxy) {\n var port = uri.port || (uri.protocol === 'https:' ? '443' : '80')\n var hostname = formatHostname(uri.hostname)\n var noProxyList = noProxy.split(',')\n\n // iterate through the noProxyList until it finds a match.\n return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) {\n var isMatchedAt = hostname.indexOf(noProxyZone.hostname)\n var hostnameMatched = (\n isMatchedAt > -1 &&\n (isMatchedAt === hostname.length - noProxyZone.hostname.length)\n )\n\n if (noProxyZone.hasPort) {\n return (port === noProxyZone.port) && hostnameMatched\n }\n\n return hostnameMatched\n })\n}\n\nfunction getProxyFromURI (uri) {\n // Decide the proper request proxy to use based on the request URI object and the\n // environmental variables (NO_PROXY, HTTP_PROXY, etc.)\n // respect NO_PROXY environment variables (see: https://lynx.invisible-island.net/lynx2.8.7/breakout/lynx_help/keystrokes/environments.html)\n\n var noProxy = process.env.NO_PROXY || process.env.no_proxy || ''\n\n // if the noProxy is a wildcard then return null\n\n if (noProxy === '*') {\n return null\n }\n\n // if the noProxy is not empty and the uri is found return null\n\n if (noProxy !== '' && uriInNoProxy(uri, noProxy)) {\n return null\n }\n\n // Check for HTTP or HTTPS Proxy in environment Else default to null\n\n if (uri.protocol === 'http:') {\n return process.env.HTTP_PROXY ||\n process.env.http_proxy || null\n }\n\n if (uri.protocol === 'https:') {\n return process.env.HTTPS_PROXY ||\n process.env.https_proxy ||\n process.env.HTTP_PROXY ||\n process.env.http_proxy || null\n }\n\n // if none of that works, return null\n // (What uri protocol are you using then?)\n\n return null\n}\n\nmodule.exports = getProxyFromURI\n","'use strict'\n\nvar fs = require('fs')\nvar qs = require('querystring')\nvar validate = require('har-validator')\nvar extend = require('extend')\n\nfunction Har (request) {\n this.request = request\n}\n\nHar.prototype.reducer = function (obj, pair) {\n // new property ?\n if (obj[pair.name] === undefined) {\n obj[pair.name] = pair.value\n return obj\n }\n\n // existing? convert to array\n var arr = [\n obj[pair.name],\n pair.value\n ]\n\n obj[pair.name] = arr\n\n return obj\n}\n\nHar.prototype.prep = function (data) {\n // construct utility properties\n data.queryObj = {}\n data.headersObj = {}\n data.postData.jsonObj = false\n data.postData.paramsObj = false\n\n // construct query objects\n if (data.queryString && data.queryString.length) {\n data.queryObj = data.queryString.reduce(this.reducer, {})\n }\n\n // construct headers objects\n if (data.headers && data.headers.length) {\n // loweCase header keys\n data.headersObj = data.headers.reduceRight(function (headers, header) {\n headers[header.name] = header.value\n return headers\n }, {})\n }\n\n // construct Cookie header\n if (data.cookies && data.cookies.length) {\n var cookies = data.cookies.map(function (cookie) {\n return cookie.name + '=' + cookie.value\n })\n\n if (cookies.length) {\n data.headersObj.cookie = cookies.join('; ')\n }\n }\n\n // prep body\n function some (arr) {\n return arr.some(function (type) {\n return data.postData.mimeType.indexOf(type) === 0\n })\n }\n\n if (some([\n 'multipart/mixed',\n 'multipart/related',\n 'multipart/form-data',\n 'multipart/alternative'])) {\n // reset values\n data.postData.mimeType = 'multipart/form-data'\n } else if (some([\n 'application/x-www-form-urlencoded'])) {\n if (!data.postData.params) {\n data.postData.text = ''\n } else {\n data.postData.paramsObj = data.postData.params.reduce(this.reducer, {})\n\n // always overwrite\n data.postData.text = qs.stringify(data.postData.paramsObj)\n }\n } else if (some([\n 'text/json',\n 'text/x-json',\n 'application/json',\n 'application/x-json'])) {\n data.postData.mimeType = 'application/json'\n\n if (data.postData.text) {\n try {\n data.postData.jsonObj = JSON.parse(data.postData.text)\n } catch (e) {\n this.request.debug(e)\n\n // force back to text/plain\n data.postData.mimeType = 'text/plain'\n }\n }\n }\n\n return data\n}\n\nHar.prototype.options = function (options) {\n // skip if no har property defined\n if (!options.har) {\n return options\n }\n\n var har = {}\n extend(har, options.har)\n\n // only process the first entry\n if (har.log && har.log.entries) {\n har = har.log.entries[0]\n }\n\n // add optional properties to make validation successful\n har.url = har.url || options.url || options.uri || options.baseUrl || '/'\n har.httpVersion = har.httpVersion || 'HTTP/1.1'\n har.queryString = har.queryString || []\n har.headers = har.headers || []\n har.cookies = har.cookies || []\n har.postData = har.postData || {}\n har.postData.mimeType = har.postData.mimeType || 'application/octet-stream'\n\n har.bodySize = 0\n har.headersSize = 0\n har.postData.size = 0\n\n if (!validate.request(har)) {\n return options\n }\n\n // clean up and get some utility properties\n var req = this.prep(har)\n\n // construct new options\n if (req.url) {\n options.url = req.url\n }\n\n if (req.method) {\n options.method = req.method\n }\n\n if (Object.keys(req.queryObj).length) {\n options.qs = req.queryObj\n }\n\n if (Object.keys(req.headersObj).length) {\n options.headers = req.headersObj\n }\n\n function test (type) {\n return req.postData.mimeType.indexOf(type) === 0\n }\n if (test('application/x-www-form-urlencoded')) {\n options.form = req.postData.paramsObj\n } else if (test('application/json')) {\n if (req.postData.jsonObj) {\n options.body = req.postData.jsonObj\n options.json = true\n }\n } else if (test('multipart/form-data')) {\n options.formData = {}\n\n req.postData.params.forEach(function (param) {\n var attachment = {}\n\n if (!param.fileName && !param.contentType) {\n options.formData[param.name] = param.value\n return\n }\n\n // attempt to read from disk!\n if (param.fileName && !param.value) {\n attachment.value = fs.createReadStream(param.fileName)\n } else if (param.value) {\n attachment.value = param.value\n }\n\n if (param.fileName) {\n attachment.options = {\n filename: param.fileName,\n contentType: param.contentType ? param.contentType : null\n }\n }\n\n options.formData[param.name] = attachment\n })\n } else {\n if (req.postData.text) {\n options.body = req.postData.text\n }\n }\n\n return options\n}\n\nexports.Har = Har\n","'use strict'\n\nvar crypto = require('crypto')\n\nfunction randomString (size) {\n var bits = (size + 1) * 6\n var buffer = crypto.randomBytes(Math.ceil(bits / 8))\n var string = buffer.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n return string.slice(0, size)\n}\n\nfunction calculatePayloadHash (payload, algorithm, contentType) {\n var hash = crypto.createHash(algorithm)\n hash.update('hawk.1.payload\\n')\n hash.update((contentType ? contentType.split(';')[0].trim().toLowerCase() : '') + '\\n')\n hash.update(payload || '')\n hash.update('\\n')\n return hash.digest('base64')\n}\n\nexports.calculateMac = function (credentials, opts) {\n var normalized = 'hawk.1.header\\n' +\n opts.ts + '\\n' +\n opts.nonce + '\\n' +\n (opts.method || '').toUpperCase() + '\\n' +\n opts.resource + '\\n' +\n opts.host.toLowerCase() + '\\n' +\n opts.port + '\\n' +\n (opts.hash || '') + '\\n'\n\n if (opts.ext) {\n normalized = normalized + opts.ext.replace('\\\\', '\\\\\\\\').replace('\\n', '\\\\n')\n }\n\n normalized = normalized + '\\n'\n\n if (opts.app) {\n normalized = normalized + opts.app + '\\n' + (opts.dlg || '') + '\\n'\n }\n\n var hmac = crypto.createHmac(credentials.algorithm, credentials.key).update(normalized)\n var digest = hmac.digest('base64')\n return digest\n}\n\nexports.header = function (uri, method, opts) {\n var timestamp = opts.timestamp || Math.floor((Date.now() + (opts.localtimeOffsetMsec || 0)) / 1000)\n var credentials = opts.credentials\n if (!credentials || !credentials.id || !credentials.key || !credentials.algorithm) {\n return ''\n }\n\n if (['sha1', 'sha256'].indexOf(credentials.algorithm) === -1) {\n return ''\n }\n\n var artifacts = {\n ts: timestamp,\n nonce: opts.nonce || randomString(6),\n method: method,\n resource: uri.pathname + (uri.search || ''),\n host: uri.hostname,\n port: uri.port || (uri.protocol === 'http:' ? 80 : 443),\n hash: opts.hash,\n ext: opts.ext,\n app: opts.app,\n dlg: opts.dlg\n }\n\n if (!artifacts.hash && (opts.payload || opts.payload === '')) {\n artifacts.hash = calculatePayloadHash(opts.payload, credentials.algorithm, opts.contentType)\n }\n\n var mac = exports.calculateMac(credentials, artifacts)\n\n var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''\n var header = 'Hawk id=\"' + credentials.id +\n '\", ts=\"' + artifacts.ts +\n '\", nonce=\"' + artifacts.nonce +\n (artifacts.hash ? '\", hash=\"' + artifacts.hash : '') +\n (hasExt ? '\", ext=\"' + artifacts.ext.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"') : '') +\n '\", mac=\"' + mac + '\"'\n\n if (artifacts.app) {\n header = header + ', app=\"' + artifacts.app + (artifacts.dlg ? '\", dlg=\"' + artifacts.dlg : '') + '\"'\n }\n\n return header\n}\n","'use strict'\n\nvar jsonSafeStringify = require('json-stringify-safe')\nvar crypto = require('crypto')\nvar Buffer = require('safe-buffer').Buffer\n\nvar defer = typeof setImmediate === 'undefined'\n ? process.nextTick\n : setImmediate\n\nfunction paramsHaveRequestBody (params) {\n return (\n params.body ||\n params.requestBodyStream ||\n (params.json && typeof params.json !== 'boolean') ||\n params.multipart\n )\n}\n\nfunction safeStringify (obj, replacer) {\n var ret\n try {\n ret = JSON.stringify(obj, replacer)\n } catch (e) {\n ret = jsonSafeStringify(obj, replacer)\n }\n return ret\n}\n\nfunction md5 (str) {\n return crypto.createHash('md5').update(str).digest('hex')\n}\n\nfunction isReadStream (rs) {\n return rs.readable && rs.path && rs.mode\n}\n\nfunction toBase64 (str) {\n return Buffer.from(str || '', 'utf8').toString('base64')\n}\n\nfunction copy (obj) {\n var o = {}\n Object.keys(obj).forEach(function (i) {\n o[i] = obj[i]\n })\n return o\n}\n\nfunction version () {\n var numbers = process.version.replace('v', '').split('.')\n return {\n major: parseInt(numbers[0], 10),\n minor: parseInt(numbers[1], 10),\n patch: parseInt(numbers[2], 10)\n }\n}\n\nexports.paramsHaveRequestBody = paramsHaveRequestBody\nexports.safeStringify = safeStringify\nexports.md5 = md5\nexports.isReadStream = isReadStream\nexports.toBase64 = toBase64\nexports.copy = copy\nexports.version = version\nexports.defer = defer\n","'use strict'\n\nvar uuid = require('uuid/v4')\nvar CombinedStream = require('combined-stream')\nvar isstream = require('isstream')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction Multipart (request) {\n this.request = request\n this.boundary = uuid()\n this.chunked = false\n this.body = null\n}\n\nMultipart.prototype.isChunked = function (options) {\n var self = this\n var chunked = false\n var parts = options.data || options\n\n if (!parts.forEach) {\n self.request.emit('error', new Error('Argument error, options.multipart.'))\n }\n\n if (options.chunked !== undefined) {\n chunked = options.chunked\n }\n\n if (self.request.getHeader('transfer-encoding') === 'chunked') {\n chunked = true\n }\n\n if (!chunked) {\n parts.forEach(function (part) {\n if (typeof part.body === 'undefined') {\n self.request.emit('error', new Error('Body attribute missing in multipart.'))\n }\n if (isstream(part.body)) {\n chunked = true\n }\n })\n }\n\n return chunked\n}\n\nMultipart.prototype.setHeaders = function (chunked) {\n var self = this\n\n if (chunked && !self.request.hasHeader('transfer-encoding')) {\n self.request.setHeader('transfer-encoding', 'chunked')\n }\n\n var header = self.request.getHeader('content-type')\n\n if (!header || header.indexOf('multipart') === -1) {\n self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary)\n } else {\n if (header.indexOf('boundary') !== -1) {\n self.boundary = header.replace(/.*boundary=([^\\s;]+).*/, '$1')\n } else {\n self.request.setHeader('content-type', header + '; boundary=' + self.boundary)\n }\n }\n}\n\nMultipart.prototype.build = function (parts, chunked) {\n var self = this\n var body = chunked ? new CombinedStream() : []\n\n function add (part) {\n if (typeof part === 'number') {\n part = part.toString()\n }\n return chunked ? body.append(part) : body.push(Buffer.from(part))\n }\n\n if (self.request.preambleCRLF) {\n add('\\r\\n')\n }\n\n parts.forEach(function (part) {\n var preamble = '--' + self.boundary + '\\r\\n'\n Object.keys(part).forEach(function (key) {\n if (key === 'body') { return }\n preamble += key + ': ' + part[key] + '\\r\\n'\n })\n preamble += '\\r\\n'\n add(preamble)\n add(part.body)\n add('\\r\\n')\n })\n add('--' + self.boundary + '--')\n\n if (self.request.postambleCRLF) {\n add('\\r\\n')\n }\n\n return body\n}\n\nMultipart.prototype.onRequest = function (options) {\n var self = this\n\n var chunked = self.isChunked(options)\n var parts = options.data || options\n\n self.setHeaders(chunked)\n self.chunked = chunked\n self.body = self.build(parts, chunked)\n}\n\nexports.Multipart = Multipart\n","'use strict'\n\nvar url = require('url')\nvar qs = require('qs')\nvar caseless = require('caseless')\nvar uuid = require('uuid/v4')\nvar oauth = require('oauth-sign')\nvar crypto = require('crypto')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction OAuth (request) {\n this.request = request\n this.params = null\n}\n\nOAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) {\n var oa = {}\n for (var i in _oauth) {\n oa['oauth_' + i] = _oauth[i]\n }\n if (!oa.oauth_version) {\n oa.oauth_version = '1.0'\n }\n if (!oa.oauth_timestamp) {\n oa.oauth_timestamp = Math.floor(Date.now() / 1000).toString()\n }\n if (!oa.oauth_nonce) {\n oa.oauth_nonce = uuid().replace(/-/g, '')\n }\n if (!oa.oauth_signature_method) {\n oa.oauth_signature_method = 'HMAC-SHA1'\n }\n\n var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key // eslint-disable-line camelcase\n delete oa.oauth_consumer_secret\n delete oa.oauth_private_key\n\n var token_secret = oa.oauth_token_secret // eslint-disable-line camelcase\n delete oa.oauth_token_secret\n\n var realm = oa.oauth_realm\n delete oa.oauth_realm\n delete oa.oauth_transport_method\n\n var baseurl = uri.protocol + '//' + uri.host + uri.pathname\n var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&'))\n\n oa.oauth_signature = oauth.sign(\n oa.oauth_signature_method,\n method,\n baseurl,\n params,\n consumer_secret_or_private_key, // eslint-disable-line camelcase\n token_secret // eslint-disable-line camelcase\n )\n\n if (realm) {\n oa.realm = realm\n }\n\n return oa\n}\n\nOAuth.prototype.buildBodyHash = function (_oauth, body) {\n if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) {\n this.request.emit('error', new Error('oauth: ' + _oauth.signature_method +\n ' signature_method not supported with body_hash signing.'))\n }\n\n var shasum = crypto.createHash('sha1')\n shasum.update(body || '')\n var sha1 = shasum.digest('hex')\n\n return Buffer.from(sha1, 'hex').toString('base64')\n}\n\nOAuth.prototype.concatParams = function (oa, sep, wrap) {\n wrap = wrap || ''\n\n var params = Object.keys(oa).filter(function (i) {\n return i !== 'realm' && i !== 'oauth_signature'\n }).sort()\n\n if (oa.realm) {\n params.splice(0, 0, 'realm')\n }\n params.push('oauth_signature')\n\n return params.map(function (i) {\n return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap\n }).join(sep)\n}\n\nOAuth.prototype.onRequest = function (_oauth) {\n var self = this\n self.params = _oauth\n\n var uri = self.request.uri || {}\n var method = self.request.method || ''\n var headers = caseless(self.request.headers)\n var body = self.request.body || ''\n var qsLib = self.request.qsLib || qs\n\n var form\n var query\n var contentType = headers.get('content-type') || ''\n var formContentType = 'application/x-www-form-urlencoded'\n var transport = _oauth.transport_method || 'header'\n\n if (contentType.slice(0, formContentType.length) === formContentType) {\n contentType = formContentType\n form = body\n }\n if (uri.query) {\n query = uri.query\n }\n if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) {\n self.request.emit('error', new Error('oauth: transport_method of body requires POST ' +\n 'and content-type ' + formContentType))\n }\n\n if (!form && typeof _oauth.body_hash === 'boolean') {\n _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString())\n }\n\n var oa = self.buildParams(_oauth, uri, method, query, form, qsLib)\n\n switch (transport) {\n case 'header':\n self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '\"'))\n break\n\n case 'query':\n var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&')\n self.request.uri = url.parse(href)\n self.request.path = self.request.uri.path\n break\n\n case 'body':\n self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&')\n break\n\n default:\n self.request.emit('error', new Error('oauth: transport_method invalid'))\n }\n}\n\nexports.OAuth = OAuth\n","'use strict'\n\nvar qs = require('qs')\nvar querystring = require('querystring')\n\nfunction Querystring (request) {\n this.request = request\n this.lib = null\n this.useQuerystring = null\n this.parseOptions = null\n this.stringifyOptions = null\n}\n\nQuerystring.prototype.init = function (options) {\n if (this.lib) { return }\n\n this.useQuerystring = options.useQuerystring\n this.lib = (this.useQuerystring ? querystring : qs)\n\n this.parseOptions = options.qsParseOptions || {}\n this.stringifyOptions = options.qsStringifyOptions || {}\n}\n\nQuerystring.prototype.stringify = function (obj) {\n return (this.useQuerystring)\n ? this.rfc3986(this.lib.stringify(obj,\n this.stringifyOptions.sep || null,\n this.stringifyOptions.eq || null,\n this.stringifyOptions))\n : this.lib.stringify(obj, this.stringifyOptions)\n}\n\nQuerystring.prototype.parse = function (str) {\n return (this.useQuerystring)\n ? this.lib.parse(str,\n this.parseOptions.sep || null,\n this.parseOptions.eq || null,\n this.parseOptions)\n : this.lib.parse(str, this.parseOptions)\n}\n\nQuerystring.prototype.rfc3986 = function (str) {\n return str.replace(/[!'()*]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\nQuerystring.prototype.unescape = querystring.unescape\n\nexports.Querystring = Querystring\n","'use strict'\n\nvar url = require('url')\nvar isUrl = /^https?:/\n\nfunction Redirect (request) {\n this.request = request\n this.followRedirect = true\n this.followRedirects = true\n this.followAllRedirects = false\n this.followOriginalHttpMethod = false\n this.allowRedirect = function () { return true }\n this.maxRedirects = 10\n this.redirects = []\n this.redirectsFollowed = 0\n this.removeRefererHeader = false\n}\n\nRedirect.prototype.onRequest = function (options) {\n var self = this\n\n if (options.maxRedirects !== undefined) {\n self.maxRedirects = options.maxRedirects\n }\n if (typeof options.followRedirect === 'function') {\n self.allowRedirect = options.followRedirect\n }\n if (options.followRedirect !== undefined) {\n self.followRedirects = !!options.followRedirect\n }\n if (options.followAllRedirects !== undefined) {\n self.followAllRedirects = options.followAllRedirects\n }\n if (self.followRedirects || self.followAllRedirects) {\n self.redirects = self.redirects || []\n }\n if (options.removeRefererHeader !== undefined) {\n self.removeRefererHeader = options.removeRefererHeader\n }\n if (options.followOriginalHttpMethod !== undefined) {\n self.followOriginalHttpMethod = options.followOriginalHttpMethod\n }\n}\n\nRedirect.prototype.redirectTo = function (response) {\n var self = this\n var request = self.request\n\n var redirectTo = null\n if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) {\n var location = response.caseless.get('location')\n request.debug('redirect', location)\n\n if (self.followAllRedirects) {\n redirectTo = location\n } else if (self.followRedirects) {\n switch (request.method) {\n case 'PATCH':\n case 'PUT':\n case 'POST':\n case 'DELETE':\n // Do not follow redirects\n break\n default:\n redirectTo = location\n break\n }\n }\n } else if (response.statusCode === 401) {\n var authHeader = request._auth.onResponse(response)\n if (authHeader) {\n request.setHeader('authorization', authHeader)\n redirectTo = request.uri\n }\n }\n return redirectTo\n}\n\nRedirect.prototype.onResponse = function (response) {\n var self = this\n var request = self.request\n\n var redirectTo = self.redirectTo(response)\n if (!redirectTo || !self.allowRedirect.call(request, response)) {\n return false\n }\n\n request.debug('redirect to', redirectTo)\n\n // ignore any potential response body. it cannot possibly be useful\n // to us at this point.\n // response.resume should be defined, but check anyway before calling. Workaround for browserify.\n if (response.resume) {\n response.resume()\n }\n\n if (self.redirectsFollowed >= self.maxRedirects) {\n request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href))\n return false\n }\n self.redirectsFollowed += 1\n\n if (!isUrl.test(redirectTo)) {\n redirectTo = url.resolve(request.uri.href, redirectTo)\n }\n\n var uriPrev = request.uri\n request.uri = url.parse(redirectTo)\n\n // handle the case where we change protocol from https to http or vice versa\n if (request.uri.protocol !== uriPrev.protocol) {\n delete request.agent\n }\n\n self.redirects.push({ statusCode: response.statusCode, redirectUri: redirectTo })\n\n if (self.followAllRedirects && request.method !== 'HEAD' &&\n response.statusCode !== 401 && response.statusCode !== 307) {\n request.method = self.followOriginalHttpMethod ? request.method : 'GET'\n }\n // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215\n delete request.src\n delete request.req\n delete request._started\n if (response.statusCode !== 401 && response.statusCode !== 307) {\n // Remove parameters from the previous response, unless this is the second request\n // for a server that requires digest authentication.\n delete request.body\n delete request._form\n if (request.headers) {\n request.removeHeader('host')\n request.removeHeader('content-type')\n request.removeHeader('content-length')\n if (request.uri.hostname !== request.originalHost.split(':')[0]) {\n // Remove authorization if changing hostnames (but not if just\n // changing ports or protocols). This matches the behavior of curl:\n // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710\n request.removeHeader('authorization')\n }\n }\n }\n\n if (!self.removeRefererHeader) {\n request.setHeader('referer', uriPrev.href)\n }\n\n request.emit('redirect')\n\n request.init()\n\n return true\n}\n\nexports.Redirect = Redirect\n","'use strict'\n\nvar url = require('url')\nvar tunnel = require('tunnel-agent')\n\nvar defaultProxyHeaderWhiteList = [\n 'accept',\n 'accept-charset',\n 'accept-encoding',\n 'accept-language',\n 'accept-ranges',\n 'cache-control',\n 'content-encoding',\n 'content-language',\n 'content-location',\n 'content-md5',\n 'content-range',\n 'content-type',\n 'connection',\n 'date',\n 'expect',\n 'max-forwards',\n 'pragma',\n 'referer',\n 'te',\n 'user-agent',\n 'via'\n]\n\nvar defaultProxyHeaderExclusiveList = [\n 'proxy-authorization'\n]\n\nfunction constructProxyHost (uriObject) {\n var port = uriObject.port\n var protocol = uriObject.protocol\n var proxyHost = uriObject.hostname + ':'\n\n if (port) {\n proxyHost += port\n } else if (protocol === 'https:') {\n proxyHost += '443'\n } else {\n proxyHost += '80'\n }\n\n return proxyHost\n}\n\nfunction constructProxyHeaderWhiteList (headers, proxyHeaderWhiteList) {\n var whiteList = proxyHeaderWhiteList\n .reduce(function (set, header) {\n set[header.toLowerCase()] = true\n return set\n }, {})\n\n return Object.keys(headers)\n .filter(function (header) {\n return whiteList[header.toLowerCase()]\n })\n .reduce(function (set, header) {\n set[header] = headers[header]\n return set\n }, {})\n}\n\nfunction constructTunnelOptions (request, proxyHeaders) {\n var proxy = request.proxy\n\n var tunnelOptions = {\n proxy: {\n host: proxy.hostname,\n port: +proxy.port,\n proxyAuth: proxy.auth,\n headers: proxyHeaders\n },\n headers: request.headers,\n ca: request.ca,\n cert: request.cert,\n key: request.key,\n passphrase: request.passphrase,\n pfx: request.pfx,\n ciphers: request.ciphers,\n rejectUnauthorized: request.rejectUnauthorized,\n secureOptions: request.secureOptions,\n secureProtocol: request.secureProtocol\n }\n\n return tunnelOptions\n}\n\nfunction constructTunnelFnName (uri, proxy) {\n var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http')\n var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http')\n return [uriProtocol, proxyProtocol].join('Over')\n}\n\nfunction getTunnelFn (request) {\n var uri = request.uri\n var proxy = request.proxy\n var tunnelFnName = constructTunnelFnName(uri, proxy)\n return tunnel[tunnelFnName]\n}\n\nfunction Tunnel (request) {\n this.request = request\n this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList\n this.proxyHeaderExclusiveList = []\n if (typeof request.tunnel !== 'undefined') {\n this.tunnelOverride = request.tunnel\n }\n}\n\nTunnel.prototype.isEnabled = function () {\n var self = this\n var request = self.request\n // Tunnel HTTPS by default. Allow the user to override this setting.\n\n // If self.tunnelOverride is set (the user specified a value), use it.\n if (typeof self.tunnelOverride !== 'undefined') {\n return self.tunnelOverride\n }\n\n // If the destination is HTTPS, tunnel.\n if (request.uri.protocol === 'https:') {\n return true\n }\n\n // Otherwise, do not use tunnel.\n return false\n}\n\nTunnel.prototype.setup = function (options) {\n var self = this\n var request = self.request\n\n options = options || {}\n\n if (typeof request.proxy === 'string') {\n request.proxy = url.parse(request.proxy)\n }\n\n if (!request.proxy || !request.tunnel) {\n return false\n }\n\n // Setup Proxy Header Exclusive List and White List\n if (options.proxyHeaderWhiteList) {\n self.proxyHeaderWhiteList = options.proxyHeaderWhiteList\n }\n if (options.proxyHeaderExclusiveList) {\n self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList\n }\n\n var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)\n var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)\n\n // Setup Proxy Headers and Proxy Headers Host\n // Only send the Proxy White Listed Header names\n var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList)\n proxyHeaders.host = constructProxyHost(request.uri)\n\n proxyHeaderExclusiveList.forEach(request.removeHeader, request)\n\n // Set Agent from Tunnel Data\n var tunnelFn = getTunnelFn(request)\n var tunnelOptions = constructTunnelOptions(request, proxyHeaders)\n request.agent = tunnelFn(tunnelOptions)\n\n return true\n}\n\nTunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList\nTunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList\nexports.Tunnel = Tunnel\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n'use strict';\nvar net = require('net');\nvar urlParse = require('url').parse;\nvar util = require('util');\nvar pubsuffix = require('./pubsuffix-psl');\nvar Store = require('./store').Store;\nvar MemoryCookieStore = require('./memstore').MemoryCookieStore;\nvar pathMatch = require('./pathMatch').pathMatch;\nvar VERSION = require('./version');\n\nvar punycode;\ntry {\n punycode = require('punycode');\n} catch(e) {\n console.warn(\"tough-cookie: can't load punycode; won't use punycode for domain normalization\");\n}\n\n// From RFC6265 S4.1.1\n// note that it excludes \\x3B \";\"\nvar COOKIE_OCTETS = /^[\\x21\\x23-\\x2B\\x2D-\\x3A\\x3C-\\x5B\\x5D-\\x7E]+$/;\n\nvar CONTROL_CHARS = /[\\x00-\\x1F]/;\n\n// From Chromium // '\\r', '\\n' and '\\0' should be treated as a terminator in\n// the \"relaxed\" mode, see:\n// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60\nvar TERMINATORS = ['\\n', '\\r', '\\0'];\n\n// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or \";\"'\n// Note ';' is \\x3B\nvar PATH_VALUE = /[\\x20-\\x3A\\x3C-\\x7E]+/;\n\n// date-time parsing constants (RFC6265 S5.1.1)\n\nvar DATE_DELIM = /[\\x09\\x20-\\x2F\\x3B-\\x40\\x5B-\\x60\\x7B-\\x7E]/;\n\nvar MONTH_TO_NUM = {\n jan:0, feb:1, mar:2, apr:3, may:4, jun:5,\n jul:6, aug:7, sep:8, oct:9, nov:10, dec:11\n};\nvar NUM_TO_MONTH = [\n 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'\n];\nvar NUM_TO_DAY = [\n 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'\n];\n\nvar MAX_TIME = 2147483647000; // 31-bit max\nvar MIN_TIME = 0; // 31-bit min\n\n/*\n * Parses a Natural number (i.e., non-negative integer) with either the\n * *DIGIT ( non-digit *OCTET )\n * or\n * *DIGIT\n * grammar (RFC6265 S5.1.1).\n *\n * The \"trailingOK\" boolean controls if the grammar accepts a\n * \"( non-digit *OCTET )\" trailer.\n */\nfunction parseDigits(token, minDigits, maxDigits, trailingOK) {\n var count = 0;\n while (count < token.length) {\n var c = token.charCodeAt(count);\n // \"non-digit = %x00-2F / %x3A-FF\"\n if (c <= 0x2F || c >= 0x3A) {\n break;\n }\n count++;\n }\n\n // constrain to a minimum and maximum number of digits.\n if (count < minDigits || count > maxDigits) {\n return null;\n }\n\n if (!trailingOK && count != token.length) {\n return null;\n }\n\n return parseInt(token.substr(0,count), 10);\n}\n\nfunction parseTime(token) {\n var parts = token.split(':');\n var result = [0,0,0];\n\n /* RF6256 S5.1.1:\n * time = hms-time ( non-digit *OCTET )\n * hms-time = time-field \":\" time-field \":\" time-field\n * time-field = 1*2DIGIT\n */\n\n if (parts.length !== 3) {\n return null;\n }\n\n for (var i = 0; i < 3; i++) {\n // \"time-field\" must be strictly \"1*2DIGIT\", HOWEVER, \"hms-time\" can be\n // followed by \"( non-digit *OCTET )\" so therefore the last time-field can\n // have a trailer\n var trailingOK = (i == 2);\n var num = parseDigits(parts[i], 1, 2, trailingOK);\n if (num === null) {\n return null;\n }\n result[i] = num;\n }\n\n return result;\n}\n\nfunction parseMonth(token) {\n token = String(token).substr(0,3).toLowerCase();\n var num = MONTH_TO_NUM[token];\n return num >= 0 ? num : null;\n}\n\n/*\n * RFC6265 S5.1.1 date parser (see RFC for full grammar)\n */\nfunction parseDate(str) {\n if (!str) {\n return;\n }\n\n /* RFC6265 S5.1.1:\n * 2. Process each date-token sequentially in the order the date-tokens\n * appear in the cookie-date\n */\n var tokens = str.split(DATE_DELIM);\n if (!tokens) {\n return;\n }\n\n var hour = null;\n var minute = null;\n var second = null;\n var dayOfMonth = null;\n var month = null;\n var year = null;\n\n for (var i=0; i= 70 && year <= 99) {\n year += 1900;\n } else if (year >= 0 && year <= 69) {\n year += 2000;\n }\n }\n }\n }\n\n /* RFC 6265 S5.1.1\n * \"5. Abort these steps and fail to parse the cookie-date if:\n * * at least one of the found-day-of-month, found-month, found-\n * year, or found-time flags is not set,\n * * the day-of-month-value is less than 1 or greater than 31,\n * * the year-value is less than 1601,\n * * the hour-value is greater than 23,\n * * the minute-value is greater than 59, or\n * * the second-value is greater than 59.\n * (Note that leap seconds cannot be represented in this syntax.)\"\n *\n * So, in order as above:\n */\n if (\n dayOfMonth === null || month === null || year === null || second === null ||\n dayOfMonth < 1 || dayOfMonth > 31 ||\n year < 1601 ||\n hour > 23 ||\n minute > 59 ||\n second > 59\n ) {\n return;\n }\n\n return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));\n}\n\nfunction formatDate(date) {\n var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;\n var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;\n var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;\n var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;\n return NUM_TO_DAY[date.getUTCDay()] + ', ' +\n d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+\n h+':'+m+':'+s+' GMT';\n}\n\n// S5.1.2 Canonicalized Host Names\nfunction canonicalDomain(str) {\n if (str == null) {\n return null;\n }\n str = str.trim().replace(/^\\./,''); // S4.1.2.3 & S5.2.3: ignore leading .\n\n // convert to IDN if any non-ASCII characters\n if (punycode && /[^\\u0001-\\u007f]/.test(str)) {\n str = punycode.toASCII(str);\n }\n\n return str.toLowerCase();\n}\n\n// S5.1.3 Domain Matching\nfunction domainMatch(str, domStr, canonicalize) {\n if (str == null || domStr == null) {\n return null;\n }\n if (canonicalize !== false) {\n str = canonicalDomain(str);\n domStr = canonicalDomain(domStr);\n }\n\n /*\n * \"The domain string and the string are identical. (Note that both the\n * domain string and the string will have been canonicalized to lower case at\n * this point)\"\n */\n if (str == domStr) {\n return true;\n }\n\n /* \"All of the following [three] conditions hold:\" (order adjusted from the RFC) */\n\n /* \"* The string is a host name (i.e., not an IP address).\" */\n if (net.isIP(str)) {\n return false;\n }\n\n /* \"* The domain string is a suffix of the string\" */\n var idx = str.indexOf(domStr);\n if (idx <= 0) {\n return false; // it's a non-match (-1) or prefix (0)\n }\n\n // e.g \"a.b.c\".indexOf(\"b.c\") === 2\n // 5 === 3+2\n if (str.length !== domStr.length + idx) { // it's not a suffix\n return false;\n }\n\n /* \"* The last character of the string that is not included in the domain\n * string is a %x2E (\".\") character.\" */\n if (str.substr(idx-1,1) !== '.') {\n return false;\n }\n\n return true;\n}\n\n\n// RFC6265 S5.1.4 Paths and Path-Match\n\n/*\n * \"The user agent MUST use an algorithm equivalent to the following algorithm\n * to compute the default-path of a cookie:\"\n *\n * Assumption: the path (and not query part or absolute uri) is passed in.\n */\nfunction defaultPath(path) {\n // \"2. If the uri-path is empty or if the first character of the uri-path is not\n // a %x2F (\"/\") character, output %x2F (\"/\") and skip the remaining steps.\n if (!path || path.substr(0,1) !== \"/\") {\n return \"/\";\n }\n\n // \"3. If the uri-path contains no more than one %x2F (\"/\") character, output\n // %x2F (\"/\") and skip the remaining step.\"\n if (path === \"/\") {\n return path;\n }\n\n var rightSlash = path.lastIndexOf(\"/\");\n if (rightSlash === 0) {\n return \"/\";\n }\n\n // \"4. Output the characters of the uri-path from the first character up to,\n // but not including, the right-most %x2F (\"/\").\"\n return path.slice(0, rightSlash);\n}\n\nfunction trimTerminator(str) {\n for (var t = 0; t < TERMINATORS.length; t++) {\n var terminatorIdx = str.indexOf(TERMINATORS[t]);\n if (terminatorIdx !== -1) {\n str = str.substr(0,terminatorIdx);\n }\n }\n\n return str;\n}\n\nfunction parseCookiePair(cookiePair, looseMode) {\n cookiePair = trimTerminator(cookiePair);\n\n var firstEq = cookiePair.indexOf('=');\n if (looseMode) {\n if (firstEq === 0) { // '=' is immediately at start\n cookiePair = cookiePair.substr(1);\n firstEq = cookiePair.indexOf('='); // might still need to split on '='\n }\n } else { // non-loose mode\n if (firstEq <= 0) { // no '=' or is at start\n return; // needs to have non-empty \"cookie-name\"\n }\n }\n\n var cookieName, cookieValue;\n if (firstEq <= 0) {\n cookieName = \"\";\n cookieValue = cookiePair.trim();\n } else {\n cookieName = cookiePair.substr(0, firstEq).trim();\n cookieValue = cookiePair.substr(firstEq+1).trim();\n }\n\n if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {\n return;\n }\n\n var c = new Cookie();\n c.key = cookieName;\n c.value = cookieValue;\n return c;\n}\n\nfunction parse(str, options) {\n if (!options || typeof options !== 'object') {\n options = {};\n }\n str = str.trim();\n\n // We use a regex to parse the \"name-value-pair\" part of S5.2\n var firstSemi = str.indexOf(';'); // S5.2 step 1\n var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);\n var c = parseCookiePair(cookiePair, !!options.loose);\n if (!c) {\n return;\n }\n\n if (firstSemi === -1) {\n return c;\n }\n\n // S5.2.3 \"unparsed-attributes consist of the remainder of the set-cookie-string\n // (including the %x3B (\";\") in question).\" plus later on in the same section\n // \"discard the first \";\" and trim\".\n var unparsed = str.slice(firstSemi + 1).trim();\n\n // \"If the unparsed-attributes string is empty, skip the rest of these\n // steps.\"\n if (unparsed.length === 0) {\n return c;\n }\n\n /*\n * S5.2 says that when looping over the items \"[p]rocess the attribute-name\n * and attribute-value according to the requirements in the following\n * subsections\" for every item. Plus, for many of the individual attributes\n * in S5.3 it says to use the \"attribute-value of the last attribute in the\n * cookie-attribute-list\". Therefore, in this implementation, we overwrite\n * the previous value.\n */\n var cookie_avs = unparsed.split(';');\n while (cookie_avs.length) {\n var av = cookie_avs.shift().trim();\n if (av.length === 0) { // happens if \";;\" appears\n continue;\n }\n var av_sep = av.indexOf('=');\n var av_key, av_value;\n\n if (av_sep === -1) {\n av_key = av;\n av_value = null;\n } else {\n av_key = av.substr(0,av_sep);\n av_value = av.substr(av_sep+1);\n }\n\n av_key = av_key.trim().toLowerCase();\n\n if (av_value) {\n av_value = av_value.trim();\n }\n\n switch(av_key) {\n case 'expires': // S5.2.1\n if (av_value) {\n var exp = parseDate(av_value);\n // \"If the attribute-value failed to parse as a cookie date, ignore the\n // cookie-av.\"\n if (exp) {\n // over and underflow not realistically a concern: V8's getTime() seems to\n // store something larger than a 32-bit time_t (even with 32-bit node)\n c.expires = exp;\n }\n }\n break;\n\n case 'max-age': // S5.2.2\n if (av_value) {\n // \"If the first character of the attribute-value is not a DIGIT or a \"-\"\n // character ...[or]... If the remainder of attribute-value contains a\n // non-DIGIT character, ignore the cookie-av.\"\n if (/^-?[0-9]+$/.test(av_value)) {\n var delta = parseInt(av_value, 10);\n // \"If delta-seconds is less than or equal to zero (0), let expiry-time\n // be the earliest representable date and time.\"\n c.setMaxAge(delta);\n }\n }\n break;\n\n case 'domain': // S5.2.3\n // \"If the attribute-value is empty, the behavior is undefined. However,\n // the user agent SHOULD ignore the cookie-av entirely.\"\n if (av_value) {\n // S5.2.3 \"Let cookie-domain be the attribute-value without the leading %x2E\n // (\".\") character.\"\n var domain = av_value.trim().replace(/^\\./, '');\n if (domain) {\n // \"Convert the cookie-domain to lower case.\"\n c.domain = domain.toLowerCase();\n }\n }\n break;\n\n case 'path': // S5.2.4\n /*\n * \"If the attribute-value is empty or if the first character of the\n * attribute-value is not %x2F (\"/\"):\n * Let cookie-path be the default-path.\n * Otherwise:\n * Let cookie-path be the attribute-value.\"\n *\n * We'll represent the default-path as null since it depends on the\n * context of the parsing.\n */\n c.path = av_value && av_value[0] === \"/\" ? av_value : null;\n break;\n\n case 'secure': // S5.2.5\n /*\n * \"If the attribute-name case-insensitively matches the string \"Secure\",\n * the user agent MUST append an attribute to the cookie-attribute-list\n * with an attribute-name of Secure and an empty attribute-value.\"\n */\n c.secure = true;\n break;\n\n case 'httponly': // S5.2.6 -- effectively the same as 'secure'\n c.httpOnly = true;\n break;\n\n default:\n c.extensions = c.extensions || [];\n c.extensions.push(av);\n break;\n }\n }\n\n return c;\n}\n\n// avoid the V8 deoptimization monster!\nfunction jsonParse(str) {\n var obj;\n try {\n obj = JSON.parse(str);\n } catch (e) {\n return e;\n }\n return obj;\n}\n\nfunction fromJSON(str) {\n if (!str) {\n return null;\n }\n\n var obj;\n if (typeof str === 'string') {\n obj = jsonParse(str);\n if (obj instanceof Error) {\n return null;\n }\n } else {\n // assume it's an Object\n obj = str;\n }\n\n var c = new Cookie();\n for (var i=0; i 1) {\n var lindex = path.lastIndexOf('/');\n if (lindex === 0) {\n break;\n }\n path = path.substr(0,lindex);\n permutations.push(path);\n }\n permutations.push('/');\n return permutations;\n}\n\nfunction getCookieContext(url) {\n if (url instanceof Object) {\n return url;\n }\n // NOTE: decodeURI will throw on malformed URIs (see GH-32).\n // Therefore, we will just skip decoding for such URIs.\n try {\n url = decodeURI(url);\n }\n catch(err) {\n // Silently swallow error\n }\n\n return urlParse(url);\n}\n\nfunction Cookie(options) {\n options = options || {};\n\n Object.keys(options).forEach(function(prop) {\n if (Cookie.prototype.hasOwnProperty(prop) &&\n Cookie.prototype[prop] !== options[prop] &&\n prop.substr(0,1) !== '_')\n {\n this[prop] = options[prop];\n }\n }, this);\n\n this.creation = this.creation || new Date();\n\n // used to break creation ties in cookieCompare():\n Object.defineProperty(this, 'creationIndex', {\n configurable: false,\n enumerable: false, // important for assert.deepEqual checks\n writable: true,\n value: ++Cookie.cookiesCreated\n });\n}\n\nCookie.cookiesCreated = 0; // incremented each time a cookie is created\n\nCookie.parse = parse;\nCookie.fromJSON = fromJSON;\n\nCookie.prototype.key = \"\";\nCookie.prototype.value = \"\";\n\n// the order in which the RFC has them:\nCookie.prototype.expires = \"Infinity\"; // coerces to literal Infinity\nCookie.prototype.maxAge = null; // takes precedence over expires for TTL\nCookie.prototype.domain = null;\nCookie.prototype.path = null;\nCookie.prototype.secure = false;\nCookie.prototype.httpOnly = false;\nCookie.prototype.extensions = null;\n\n// set by the CookieJar:\nCookie.prototype.hostOnly = null; // boolean when set\nCookie.prototype.pathIsDefault = null; // boolean when set\nCookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse\nCookie.prototype.lastAccessed = null; // Date when set\nObject.defineProperty(Cookie.prototype, 'creationIndex', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: 0\n});\n\nCookie.serializableProperties = Object.keys(Cookie.prototype)\n .filter(function(prop) {\n return !(\n Cookie.prototype[prop] instanceof Function ||\n prop === 'creationIndex' ||\n prop.substr(0,1) === '_'\n );\n });\n\nCookie.prototype.inspect = function inspect() {\n var now = Date.now();\n return 'Cookie=\"'+this.toString() +\n '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +\n '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +\n '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +\n '\"';\n};\n\n// Use the new custom inspection symbol to add the custom inspect function if\n// available.\nif (util.inspect.custom) {\n Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;\n}\n\nCookie.prototype.toJSON = function() {\n var obj = {};\n\n var props = Cookie.serializableProperties;\n for (var i=0; i= 100 && code < 200) ||\n // No Content\n code === 204 ||\n // Not Modified\n code === 304\n )\n }\n\n var responseContent\n if (self.gzip && !noBody(response.statusCode)) {\n var contentEncoding = response.headers['content-encoding'] || 'identity'\n contentEncoding = contentEncoding.trim().toLowerCase()\n\n // Be more lenient with decoding compressed responses, since (very rarely)\n // servers send slightly invalid gzip responses that are still accepted\n // by common browsers.\n // Always using Z_SYNC_FLUSH is what cURL does.\n var zlibOptions = {\n flush: zlib.Z_SYNC_FLUSH,\n finishFlush: zlib.Z_SYNC_FLUSH\n }\n\n if (contentEncoding === 'gzip') {\n responseContent = zlib.createGunzip(zlibOptions)\n response.pipe(responseContent)\n } else if (contentEncoding === 'deflate') {\n responseContent = zlib.createInflate(zlibOptions)\n response.pipe(responseContent)\n } else {\n // Since previous versions didn't check for Content-Encoding header,\n // ignore any invalid values to preserve backwards-compatibility\n if (contentEncoding !== 'identity') {\n debug('ignoring unrecognized Content-Encoding ' + contentEncoding)\n }\n responseContent = response\n }\n } else {\n responseContent = response\n }\n\n if (self.encoding) {\n if (self.dests.length !== 0) {\n console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.')\n } else {\n responseContent.setEncoding(self.encoding)\n }\n }\n\n if (self._paused) {\n responseContent.pause()\n }\n\n self.responseContent = responseContent\n\n self.emit('response', response)\n\n self.dests.forEach(function (dest) {\n self.pipeDest(dest)\n })\n\n responseContent.on('data', function (chunk) {\n if (self.timing && !self.responseStarted) {\n self.responseStartTime = (new Date()).getTime()\n\n // NOTE: responseStartTime is deprecated in favor of .timings\n response.responseStartTime = self.responseStartTime\n }\n self._destdata = true\n self.emit('data', chunk)\n })\n responseContent.once('end', function (chunk) {\n self.emit('end', chunk)\n })\n responseContent.on('error', function (error) {\n self.emit('error', error)\n })\n responseContent.on('close', function () { self.emit('close') })\n\n if (self.callback) {\n self.readResponseBody(response)\n } else { // if no callback\n self.on('end', function () {\n if (self._aborted) {\n debug('aborted', self.uri.href)\n return\n }\n self.emit('complete', response)\n })\n }\n }\n debug('finish init function', self.uri.href)\n}\n\nRequest.prototype.readResponseBody = function (response) {\n var self = this\n debug(\"reading response's body\")\n var buffers = []\n var bufferLength = 0\n var strings = []\n\n self.on('data', function (chunk) {\n if (!Buffer.isBuffer(chunk)) {\n strings.push(chunk)\n } else if (chunk.length) {\n bufferLength += chunk.length\n buffers.push(chunk)\n }\n })\n self.on('end', function () {\n debug('end event', self.uri.href)\n if (self._aborted) {\n debug('aborted', self.uri.href)\n // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request.\n // This can lead to leaky behavior if the user retains a reference to the request object.\n buffers = []\n bufferLength = 0\n return\n }\n\n if (bufferLength) {\n debug('has body', self.uri.href, bufferLength)\n response.body = Buffer.concat(buffers, bufferLength)\n if (self.encoding !== null) {\n response.body = response.body.toString(self.encoding)\n }\n // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request.\n // This can lead to leaky behavior if the user retains a reference to the request object.\n buffers = []\n bufferLength = 0\n } else if (strings.length) {\n // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.\n // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().\n if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\\uFEFF') {\n strings[0] = strings[0].substring(1)\n }\n response.body = strings.join('')\n }\n\n if (self._json) {\n try {\n response.body = JSON.parse(response.body, self._jsonReviver)\n } catch (e) {\n debug('invalid JSON received', self.uri.href)\n }\n }\n debug('emitting complete', self.uri.href)\n if (typeof response.body === 'undefined' && !self._json) {\n response.body = self.encoding === null ? Buffer.alloc(0) : ''\n }\n self.emit('complete', response, response.body)\n })\n}\n\nRequest.prototype.abort = function () {\n var self = this\n self._aborted = true\n\n if (self.req) {\n self.req.abort()\n } else if (self.response) {\n self.response.destroy()\n }\n\n self.clearTimeout()\n self.emit('abort')\n}\n\nRequest.prototype.pipeDest = function (dest) {\n var self = this\n var response = self.response\n // Called after the response is received\n if (dest.headers && !dest.headersSent) {\n if (response.caseless.has('content-type')) {\n var ctname = response.caseless.has('content-type')\n if (dest.setHeader) {\n dest.setHeader(ctname, response.headers[ctname])\n } else {\n dest.headers[ctname] = response.headers[ctname]\n }\n }\n\n if (response.caseless.has('content-length')) {\n var clname = response.caseless.has('content-length')\n if (dest.setHeader) {\n dest.setHeader(clname, response.headers[clname])\n } else {\n dest.headers[clname] = response.headers[clname]\n }\n }\n }\n if (dest.setHeader && !dest.headersSent) {\n for (var i in response.headers) {\n // If the response content is being decoded, the Content-Encoding header\n // of the response doesn't represent the piped content, so don't pass it.\n if (!self.gzip || i !== 'content-encoding') {\n dest.setHeader(i, response.headers[i])\n }\n }\n dest.statusCode = response.statusCode\n }\n if (self.pipefilter) {\n self.pipefilter(response, dest)\n }\n}\n\nRequest.prototype.qs = function (q, clobber) {\n var self = this\n var base\n if (!clobber && self.uri.query) {\n base = self._qs.parse(self.uri.query)\n } else {\n base = {}\n }\n\n for (var i in q) {\n base[i] = q[i]\n }\n\n var qs = self._qs.stringify(base)\n\n if (qs === '') {\n return self\n }\n\n self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs)\n self.url = self.uri\n self.path = self.uri.path\n\n if (self.uri.host === 'unix') {\n self.enableUnixSocket()\n }\n\n return self\n}\nRequest.prototype.form = function (form) {\n var self = this\n if (form) {\n if (!/^application\\/x-www-form-urlencoded\\b/.test(self.getHeader('content-type'))) {\n self.setHeader('content-type', 'application/x-www-form-urlencoded')\n }\n self.body = (typeof form === 'string')\n ? self._qs.rfc3986(form.toString('utf8'))\n : self._qs.stringify(form).toString('utf8')\n return self\n }\n // create form-data object\n self._form = new FormData()\n self._form.on('error', function (err) {\n err.message = 'form-data: ' + err.message\n self.emit('error', err)\n self.abort()\n })\n return self._form\n}\nRequest.prototype.multipart = function (multipart) {\n var self = this\n\n self._multipart.onRequest(multipart)\n\n if (!self._multipart.chunked) {\n self.body = self._multipart.body\n }\n\n return self\n}\nRequest.prototype.json = function (val) {\n var self = this\n\n if (!self.hasHeader('accept')) {\n self.setHeader('accept', 'application/json')\n }\n\n if (typeof self.jsonReplacer === 'function') {\n self._jsonReplacer = self.jsonReplacer\n }\n\n self._json = true\n if (typeof val === 'boolean') {\n if (self.body !== undefined) {\n if (!/^application\\/x-www-form-urlencoded\\b/.test(self.getHeader('content-type'))) {\n self.body = safeStringify(self.body, self._jsonReplacer)\n } else {\n self.body = self._qs.rfc3986(self.body)\n }\n if (!self.hasHeader('content-type')) {\n self.setHeader('content-type', 'application/json')\n }\n }\n } else {\n self.body = safeStringify(val, self._jsonReplacer)\n if (!self.hasHeader('content-type')) {\n self.setHeader('content-type', 'application/json')\n }\n }\n\n if (typeof self.jsonReviver === 'function') {\n self._jsonReviver = self.jsonReviver\n }\n\n return self\n}\nRequest.prototype.getHeader = function (name, headers) {\n var self = this\n var result, re, match\n if (!headers) {\n headers = self.headers\n }\n Object.keys(headers).forEach(function (key) {\n if (key.length !== name.length) {\n return\n }\n re = new RegExp(name, 'i')\n match = key.match(re)\n if (match) {\n result = headers[key]\n }\n })\n return result\n}\nRequest.prototype.enableUnixSocket = function () {\n // Get the socket & request paths from the URL\n var unixParts = this.uri.path.split(':')\n var host = unixParts[0]\n var path = unixParts[1]\n // Apply unix properties to request\n this.socketPath = host\n this.uri.pathname = path\n this.uri.path = path\n this.uri.host = host\n this.uri.hostname = host\n this.uri.isUnix = true\n}\n\nRequest.prototype.auth = function (user, pass, sendImmediately, bearer) {\n var self = this\n\n self._auth.onRequest(user, pass, sendImmediately, bearer)\n\n return self\n}\nRequest.prototype.aws = function (opts, now) {\n var self = this\n\n if (!now) {\n self._aws = opts\n return self\n }\n\n if (opts.sign_version === 4 || opts.sign_version === '4') {\n // use aws4\n var options = {\n host: self.uri.host,\n path: self.uri.path,\n method: self.method,\n headers: self.headers,\n body: self.body\n }\n if (opts.service) {\n options.service = opts.service\n }\n var signRes = aws4.sign(options, {\n accessKeyId: opts.key,\n secretAccessKey: opts.secret,\n sessionToken: opts.session\n })\n self.setHeader('authorization', signRes.headers.Authorization)\n self.setHeader('x-amz-date', signRes.headers['X-Amz-Date'])\n if (signRes.headers['X-Amz-Security-Token']) {\n self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token'])\n }\n } else {\n // default: use aws-sign2\n var date = new Date()\n self.setHeader('date', date.toUTCString())\n var auth = {\n key: opts.key,\n secret: opts.secret,\n verb: self.method.toUpperCase(),\n date: date,\n contentType: self.getHeader('content-type') || '',\n md5: self.getHeader('content-md5') || '',\n amazonHeaders: aws2.canonicalizeHeaders(self.headers)\n }\n var path = self.uri.path\n if (opts.bucket && path) {\n auth.resource = '/' + opts.bucket + path\n } else if (opts.bucket && !path) {\n auth.resource = '/' + opts.bucket\n } else if (!opts.bucket && path) {\n auth.resource = path\n } else if (!opts.bucket && !path) {\n auth.resource = '/'\n }\n auth.resource = aws2.canonicalizeResource(auth.resource)\n self.setHeader('authorization', aws2.authorization(auth))\n }\n\n return self\n}\nRequest.prototype.httpSignature = function (opts) {\n var self = this\n httpSignature.signRequest({\n getHeader: function (header) {\n return self.getHeader(header, self.headers)\n },\n setHeader: function (header, value) {\n self.setHeader(header, value)\n },\n method: self.method,\n path: self.path\n }, opts)\n debug('httpSignature authorization', self.getHeader('authorization'))\n\n return self\n}\nRequest.prototype.hawk = function (opts) {\n var self = this\n self.setHeader('Authorization', hawk.header(self.uri, self.method, opts))\n}\nRequest.prototype.oauth = function (_oauth) {\n var self = this\n\n self._oauth.onRequest(_oauth)\n\n return self\n}\n\nRequest.prototype.jar = function (jar) {\n var self = this\n var cookies\n\n if (self._redirect.redirectsFollowed === 0) {\n self.originalCookieHeader = self.getHeader('cookie')\n }\n\n if (!jar) {\n // disable cookies\n cookies = false\n self._disableCookies = true\n } else {\n var targetCookieJar = jar.getCookieString ? jar : globalCookieJar\n var urihref = self.uri.href\n // fetch cookie in the Specified host\n if (targetCookieJar) {\n cookies = targetCookieJar.getCookieString(urihref)\n }\n }\n\n // if need cookie and cookie is not empty\n if (cookies && cookies.length) {\n if (self.originalCookieHeader) {\n // Don't overwrite existing Cookie header\n self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies)\n } else {\n self.setHeader('cookie', cookies)\n }\n }\n self._jar = jar\n return self\n}\n\n// Stream API\nRequest.prototype.pipe = function (dest, opts) {\n var self = this\n\n if (self.response) {\n if (self._destdata) {\n self.emit('error', new Error('You cannot pipe after data has been emitted from the response.'))\n } else if (self._ended) {\n self.emit('error', new Error('You cannot pipe after the response has been ended.'))\n } else {\n stream.Stream.prototype.pipe.call(self, dest, opts)\n self.pipeDest(dest)\n return dest\n }\n } else {\n self.dests.push(dest)\n stream.Stream.prototype.pipe.call(self, dest, opts)\n return dest\n }\n}\nRequest.prototype.write = function () {\n var self = this\n if (self._aborted) { return }\n\n if (!self._started) {\n self.start()\n }\n if (self.req) {\n return self.req.write.apply(self.req, arguments)\n }\n}\nRequest.prototype.end = function (chunk) {\n var self = this\n if (self._aborted) { return }\n\n if (chunk) {\n self.write(chunk)\n }\n if (!self._started) {\n self.start()\n }\n if (self.req) {\n self.req.end()\n }\n}\nRequest.prototype.pause = function () {\n var self = this\n if (!self.responseContent) {\n self._paused = true\n } else {\n self.responseContent.pause.apply(self.responseContent, arguments)\n }\n}\nRequest.prototype.resume = function () {\n var self = this\n if (!self.responseContent) {\n self._paused = false\n } else {\n self.responseContent.resume.apply(self.responseContent, arguments)\n }\n}\nRequest.prototype.destroy = function () {\n var self = this\n this.clearTimeout()\n if (!self._ended) {\n self.end()\n } else if (self.response) {\n self.response.destroy()\n }\n}\n\nRequest.prototype.clearTimeout = function () {\n if (this.timeoutTimer) {\n clearTimeout(this.timeoutTimer)\n this.timeoutTimer = null\n }\n}\n\nRequest.defaultProxyHeaderWhiteList =\n Tunnel.defaultProxyHeaderWhiteList.slice()\n\nRequest.defaultProxyHeaderExclusiveList =\n Tunnel.defaultProxyHeaderExclusiveList.slice()\n\n// Exports\n\nRequest.prototype.toJSON = requestToJSON\nmodule.exports = Request\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","import BN from 'bn.js'\n\nimport { Decoded, Input, List } from './types'\n\n// Types exported outside of this package\nexport { Decoded, Input, List }\n\n/**\n * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP\n * This function takes in a data, convert it to buffer if not, and a length for recursion\n * @param input - will be converted to buffer\n * @returns returns buffer of encoded data\n **/\nexport function encode(input: Input): Buffer {\n if (Array.isArray(input)) {\n const output: Buffer[] = []\n for (let i = 0; i < input.length; i++) {\n output.push(encode(input[i]))\n }\n const buf = Buffer.concat(output)\n return Buffer.concat([encodeLength(buf.length, 192), buf])\n } else {\n const inputBuf = toBuffer(input)\n return inputBuf.length === 1 && inputBuf[0] < 128\n ? inputBuf\n : Buffer.concat([encodeLength(inputBuf.length, 128), inputBuf])\n }\n}\n\n/**\n * Parse integers. Check if there is no leading zeros\n * @param v The value to parse\n * @param base The base to parse the integer into\n */\nfunction safeParseInt(v: string, base: number): number {\n if (v[0] === '0' && v[1] === '0') {\n throw new Error('invalid RLP: extra zeros')\n }\n\n return parseInt(v, base)\n}\n\nfunction encodeLength(len: number, offset: number): Buffer {\n if (len < 56) {\n return Buffer.from([len + offset])\n } else {\n const hexLength = intToHex(len)\n const lLength = hexLength.length / 2\n const firstByte = intToHex(offset + 55 + lLength)\n return Buffer.from(firstByte + hexLength, 'hex')\n }\n}\n\n/**\n * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}\n * @param input - will be converted to buffer\n * @param stream - Is the input a stream (false by default)\n * @returns - returns decode Array of Buffers containg the original message\n **/\nexport function decode(input: Buffer, stream?: boolean): Buffer\nexport function decode(input: Buffer[], stream?: boolean): Buffer[]\nexport function decode(input: Input, stream?: boolean): Buffer[] | Buffer | Decoded\nexport function decode(input: Input, stream: boolean = false): Buffer[] | Buffer | Decoded {\n if (!input || (input as any).length === 0) {\n return Buffer.from([])\n }\n\n const inputBuffer = toBuffer(input)\n const decoded = _decode(inputBuffer)\n\n if (stream) {\n return decoded\n }\n if (decoded.remainder.length !== 0) {\n throw new Error('invalid remainder')\n }\n\n return decoded.data\n}\n\n/**\n * Get the length of the RLP input\n * @param input\n * @returns The length of the input or an empty Buffer if no input\n */\nexport function getLength(input: Input): Buffer | number {\n if (!input || (input as any).length === 0) {\n return Buffer.from([])\n }\n\n const inputBuffer = toBuffer(input)\n const firstByte = inputBuffer[0]\n\n if (firstByte <= 0x7f) {\n return inputBuffer.length\n } else if (firstByte <= 0xb7) {\n return firstByte - 0x7f\n } else if (firstByte <= 0xbf) {\n return firstByte - 0xb6\n } else if (firstByte <= 0xf7) {\n // a list between 0-55 bytes long\n return firstByte - 0xbf\n } else {\n // a list over 55 bytes long\n const llength = firstByte - 0xf6\n const length = safeParseInt(inputBuffer.slice(1, llength).toString('hex'), 16)\n return llength + length\n }\n}\n\n/** Decode an input with RLP */\nfunction _decode(input: Buffer): Decoded {\n let length, llength, data, innerRemainder, d\n const decoded = []\n const firstByte = input[0]\n\n if (firstByte <= 0x7f) {\n // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.\n return {\n data: input.slice(0, 1),\n remainder: input.slice(1),\n }\n } else if (firstByte <= 0xb7) {\n // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string\n // The range of the first byte is [0x80, 0xb7]\n length = firstByte - 0x7f\n\n // set 0x80 null to 0\n if (firstByte === 0x80) {\n data = Buffer.from([])\n } else {\n data = input.slice(1, length)\n }\n\n if (length === 2 && data[0] < 0x80) {\n throw new Error('invalid rlp encoding: byte must be less 0x80')\n }\n\n return {\n data: data,\n remainder: input.slice(length),\n }\n } else if (firstByte <= 0xbf) {\n // string is greater than 55 bytes long. A single byte with the value (0xb7 plus the length of the length),\n // followed by the length, followed by the string\n llength = firstByte - 0xb6\n if (input.length - 1 < llength) {\n throw new Error('invalid RLP: not enough bytes for string length')\n }\n length = safeParseInt(input.slice(1, llength).toString('hex'), 16)\n if (length <= 55) {\n throw new Error('invalid RLP: expected string length to be greater than 55')\n }\n data = input.slice(llength, length + llength)\n if (data.length < length) {\n throw new Error('invalid RLP: not enough bytes for string')\n }\n\n return {\n data: data,\n remainder: input.slice(length + llength),\n }\n } else if (firstByte <= 0xf7) {\n // a list between 0-55 bytes long\n length = firstByte - 0xbf\n innerRemainder = input.slice(1, length)\n while (innerRemainder.length) {\n d = _decode(innerRemainder)\n decoded.push(d.data as Buffer)\n innerRemainder = d.remainder\n }\n\n return {\n data: decoded,\n remainder: input.slice(length),\n }\n } else {\n // a list over 55 bytes long\n llength = firstByte - 0xf6\n length = safeParseInt(input.slice(1, llength).toString('hex'), 16)\n const totalLength = llength + length\n if (totalLength > input.length) {\n throw new Error('invalid rlp: total length is larger than the data')\n }\n\n innerRemainder = input.slice(llength, totalLength)\n if (innerRemainder.length === 0) {\n throw new Error('invalid rlp, List has a invalid length')\n }\n\n while (innerRemainder.length) {\n d = _decode(innerRemainder)\n decoded.push(d.data as Buffer)\n innerRemainder = d.remainder\n }\n return {\n data: decoded,\n remainder: input.slice(totalLength),\n }\n }\n}\n\n/** Check if a string is prefixed by 0x */\nfunction isHexPrefixed(str: string): boolean {\n return str.slice(0, 2) === '0x'\n}\n\n/** Removes 0x from a given String */\nfunction stripHexPrefix(str: string): string {\n if (typeof str !== 'string') {\n return str\n }\n return isHexPrefixed(str) ? str.slice(2) : str\n}\n\n/** Transform an integer into its hexadecimal value */\nfunction intToHex(integer: number | bigint): string {\n if (integer < 0) {\n throw new Error('Invalid integer as argument, must be unsigned!')\n }\n const hex = integer.toString(16)\n return hex.length % 2 ? `0${hex}` : hex\n}\n\n/** Pad a string to be even */\nfunction padToEven(a: string): string {\n return a.length % 2 ? `0${a}` : a\n}\n\n/** Transform an integer into a Buffer */\nfunction intToBuffer(integer: number | bigint): Buffer {\n const hex = intToHex(integer)\n return Buffer.from(hex, 'hex')\n}\n\n/** Transform anything into a Buffer */\nfunction toBuffer(v: Input): Buffer {\n if (!Buffer.isBuffer(v)) {\n if (typeof v === 'string') {\n if (isHexPrefixed(v)) {\n return Buffer.from(padToEven(stripHexPrefix(v)), 'hex')\n } else {\n return Buffer.from(v)\n }\n } else if (typeof v === 'number' || typeof v === 'bigint') {\n if (!v) {\n return Buffer.from([])\n } else {\n return intToBuffer(v)\n }\n } else if (v === null || v === undefined) {\n return Buffer.from([])\n } else if (v instanceof Uint8Array) {\n return Buffer.from(v as any)\n } else if (BN.isBN(v)) {\n // converts a BN to a Buffer\n return Buffer.from(v.toArray())\n } else {\n throw new Error('invalid type')\n }\n }\n return v\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\"use strict\";\n\n(function(root) {\n const MAX_VALUE = 0x7fffffff;\n\n // The SHA256 and PBKDF2 implementation are from scrypt-async-js:\n // See: https://github.com/dchest/scrypt-async-js\n function SHA256(m) {\n const K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ]);\n\n let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\n let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\n const w = new Uint32Array(64);\n\n function blocks(p) {\n let off = 0, len = p.length;\n while (len >= 64) {\n let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;\n\n for (i = 0; i < 16; i++) {\n j = off + i*4;\n w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |\n ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);\n }\n\n for (i = 16; i < 64; i++) {\n u = w[i-2];\n t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);\n\n u = w[i-15];\n t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);\n\n w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;\n }\n\n for (i = 0; i < 64; i++) {\n t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^\n ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n\n t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^\n ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n h0 = (h0 + a) | 0;\n h1 = (h1 + b) | 0;\n h2 = (h2 + c) | 0;\n h3 = (h3 + d) | 0;\n h4 = (h4 + e) | 0;\n h5 = (h5 + f) | 0;\n h6 = (h6 + g) | 0;\n h7 = (h7 + h) | 0;\n\n off += 64;\n len -= 64;\n }\n }\n\n blocks(m);\n\n let i, bytesLeft = m.length % 64,\n bitLenHi = (m.length / 0x20000000) | 0,\n bitLenLo = m.length << 3,\n numZeros = (bytesLeft < 56) ? 56 : 120,\n p = m.slice(m.length - bytesLeft, m.length);\n\n p.push(0x80);\n for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }\n p.push((bitLenHi >>> 24) & 0xff);\n p.push((bitLenHi >>> 16) & 0xff);\n p.push((bitLenHi >>> 8) & 0xff);\n p.push((bitLenHi >>> 0) & 0xff);\n p.push((bitLenLo >>> 24) & 0xff);\n p.push((bitLenLo >>> 16) & 0xff);\n p.push((bitLenLo >>> 8) & 0xff);\n p.push((bitLenLo >>> 0) & 0xff);\n\n blocks(p);\n\n return [\n (h0 >>> 24) & 0xff, (h0 >>> 16) & 0xff, (h0 >>> 8) & 0xff, (h0 >>> 0) & 0xff,\n (h1 >>> 24) & 0xff, (h1 >>> 16) & 0xff, (h1 >>> 8) & 0xff, (h1 >>> 0) & 0xff,\n (h2 >>> 24) & 0xff, (h2 >>> 16) & 0xff, (h2 >>> 8) & 0xff, (h2 >>> 0) & 0xff,\n (h3 >>> 24) & 0xff, (h3 >>> 16) & 0xff, (h3 >>> 8) & 0xff, (h3 >>> 0) & 0xff,\n (h4 >>> 24) & 0xff, (h4 >>> 16) & 0xff, (h4 >>> 8) & 0xff, (h4 >>> 0) & 0xff,\n (h5 >>> 24) & 0xff, (h5 >>> 16) & 0xff, (h5 >>> 8) & 0xff, (h5 >>> 0) & 0xff,\n (h6 >>> 24) & 0xff, (h6 >>> 16) & 0xff, (h6 >>> 8) & 0xff, (h6 >>> 0) & 0xff,\n (h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, (h7 >>> 0) & 0xff\n ];\n }\n\n function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {\n // compress password if it's longer than hash block length\n password = (password.length <= 64) ? password : SHA256(password);\n\n const innerLen = 64 + salt.length + 4;\n const inner = new Array(innerLen);\n const outerKey = new Array(64);\n\n let i;\n let dk = [];\n\n // inner = (password ^ ipad) || salt || counter\n for (i = 0; i < 64; i++) { inner[i] = 0x36; }\n for (i = 0; i < password.length; i++) { inner[i] ^= password[i]; }\n for (i = 0; i < salt.length; i++) { inner[64 + i] = salt[i]; }\n for (i = innerLen - 4; i < innerLen; i++) { inner[i] = 0; }\n\n // outerKey = password ^ opad\n for (i = 0; i < 64; i++) outerKey[i] = 0x5c;\n for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];\n\n // increments counter inside inner\n function incrementCounter() {\n for (let i = innerLen - 1; i >= innerLen - 4; i--) {\n inner[i]++;\n if (inner[i] <= 0xff) return;\n inner[i] = 0;\n }\n }\n\n // output blocks = SHA256(outerKey || SHA256(inner)) ...\n while (dkLen >= 32) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));\n dkLen -= 32;\n }\n if (dkLen > 0) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));\n }\n\n return dk;\n }\n\n // The following is an adaptation of scryptsy\n // See: https://www.npmjs.com/package/scryptsy\n function blockmix_salsa8(BY, Yi, r, x, _X) {\n let i;\n\n arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);\n for (i = 0; i < 2 * r; i++) {\n blockxor(BY, i * 16, _X, 16);\n salsa20_8(_X, x);\n arraycopy(_X, 0, BY, Yi + (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);\n }\n }\n\n function R(a, b) {\n return (a << b) | (a >>> (32 - b));\n }\n\n function salsa20_8(B, x) {\n arraycopy(B, 0, x, 0, 16);\n\n for (let i = 8; i > 0; i -= 2) {\n x[ 4] ^= R(x[ 0] + x[12], 7);\n x[ 8] ^= R(x[ 4] + x[ 0], 9);\n x[12] ^= R(x[ 8] + x[ 4], 13);\n x[ 0] ^= R(x[12] + x[ 8], 18);\n x[ 9] ^= R(x[ 5] + x[ 1], 7);\n x[13] ^= R(x[ 9] + x[ 5], 9);\n x[ 1] ^= R(x[13] + x[ 9], 13);\n x[ 5] ^= R(x[ 1] + x[13], 18);\n x[14] ^= R(x[10] + x[ 6], 7);\n x[ 2] ^= R(x[14] + x[10], 9);\n x[ 6] ^= R(x[ 2] + x[14], 13);\n x[10] ^= R(x[ 6] + x[ 2], 18);\n x[ 3] ^= R(x[15] + x[11], 7);\n x[ 7] ^= R(x[ 3] + x[15], 9);\n x[11] ^= R(x[ 7] + x[ 3], 13);\n x[15] ^= R(x[11] + x[ 7], 18);\n x[ 1] ^= R(x[ 0] + x[ 3], 7);\n x[ 2] ^= R(x[ 1] + x[ 0], 9);\n x[ 3] ^= R(x[ 2] + x[ 1], 13);\n x[ 0] ^= R(x[ 3] + x[ 2], 18);\n x[ 6] ^= R(x[ 5] + x[ 4], 7);\n x[ 7] ^= R(x[ 6] + x[ 5], 9);\n x[ 4] ^= R(x[ 7] + x[ 6], 13);\n x[ 5] ^= R(x[ 4] + x[ 7], 18);\n x[11] ^= R(x[10] + x[ 9], 7);\n x[ 8] ^= R(x[11] + x[10], 9);\n x[ 9] ^= R(x[ 8] + x[11], 13);\n x[10] ^= R(x[ 9] + x[ 8], 18);\n x[12] ^= R(x[15] + x[14], 7);\n x[13] ^= R(x[12] + x[15], 9);\n x[14] ^= R(x[13] + x[12], 13);\n x[15] ^= R(x[14] + x[13], 18);\n }\n\n for (let i = 0; i < 16; ++i) {\n B[i] += x[i];\n }\n }\n\n // naive approach... going back to loop unrolling may yield additional performance\n function blockxor(S, Si, D, len) {\n for (let i = 0; i < len; i++) {\n D[i] ^= S[Si + i]\n }\n }\n\n function arraycopy(src, srcPos, dest, destPos, length) {\n while (length--) {\n dest[destPos++] = src[srcPos++];\n }\n }\n\n function checkBufferish(o) {\n if (!o || typeof(o.length) !== 'number') { return false; }\n\n for (let i = 0; i < o.length; i++) {\n const v = o[i];\n if (typeof(v) !== 'number' || v % 1 || v < 0 || v >= 256) {\n return false;\n }\n }\n\n return true;\n }\n\n function ensureInteger(value, name) {\n if (typeof(value) !== \"number\" || (value % 1)) { throw new Error('invalid ' + name); }\n return value;\n }\n\n // N = Cpu cost, r = Memory cost, p = parallelization cost\n // callback(error, progress, key)\n function _scrypt(password, salt, N, r, p, dkLen, callback) {\n\n N = ensureInteger(N, 'N');\n r = ensureInteger(r, 'r');\n p = ensureInteger(p, 'p');\n\n dkLen = ensureInteger(dkLen, 'dkLen');\n\n if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }\n\n if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }\n if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }\n\n if (!checkBufferish(password)) {\n throw new Error('password must be an array or buffer');\n }\n password = Array.prototype.slice.call(password);\n\n if (!checkBufferish(salt)) {\n throw new Error('salt must be an array or buffer');\n }\n salt = Array.prototype.slice.call(salt);\n\n let b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);\n const B = new Uint32Array(p * 32 * r)\n for (let i = 0; i < B.length; i++) {\n const j = i * 4;\n B[i] = ((b[j + 3] & 0xff) << 24) |\n ((b[j + 2] & 0xff) << 16) |\n ((b[j + 1] & 0xff) << 8) |\n ((b[j + 0] & 0xff) << 0);\n }\n\n const XY = new Uint32Array(64 * r);\n const V = new Uint32Array(32 * r * N);\n\n const Yi = 32 * r;\n\n // scratch space\n const x = new Uint32Array(16); // salsa20_8\n const _X = new Uint32Array(16); // blockmix_salsa8\n\n const totalOps = p * N * 2;\n let currentOp = 0;\n let lastPercent10 = null;\n\n // Set this to true to abandon the scrypt on the next step\n let stop = false;\n\n // State information\n let state = 0;\n let i0 = 0, i1;\n let Bi;\n\n // How many blockmix_salsa8 can we do per step?\n const limit = callback ? parseInt(1000 / r): 0xffffffff;\n\n // Trick from scrypt-async; if there is a setImmediate shim in place, use it\n const nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;\n\n // This is really all I changed; making scryptsy a state machine so we occasionally\n // stop and give other evnts on the evnt loop a chance to run. ~RicMoo\n const incrementalSMix = function() {\n if (stop) {\n return callback(new Error('cancelled'), currentOp / totalOps);\n }\n\n let steps;\n\n switch (state) {\n case 0:\n // for (var i = 0; i < p; i++)...\n Bi = i0 * 32 * r;\n\n arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1\n\n state = 1; // Move to ROMix 2\n i1 = 0;\n\n // Fall through\n\n case 1:\n\n // Run up to 1000 steps of the first inner smix loop\n steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (let i = 0; i < steps; i++) { // ROMix - 2\n arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4\n }\n\n // for (var i = 0; i < N; i++)\n i1 += steps;\n currentOp += steps;\n\n if (callback) {\n // Call the callback with the progress (optionally stopping us)\n const percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n }\n\n if (i1 < N) { break; }\n\n i1 = 0; // Move to ROMix 6\n state = 2;\n\n // Fall through\n\n case 2:\n\n // Run up to 1000 steps of the second inner smix loop\n steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (let i = 0; i < steps; i++) { // ROMix - 6\n const offset = (2 * r - 1) * 16; // ROMix - 7\n const j = XY[offset] & (N - 1);\n blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner)\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer)\n }\n\n // for (var i = 0; i < N; i++)...\n i1 += steps;\n currentOp += steps;\n\n // Call the callback with the progress (optionally stopping us)\n if (callback) {\n const percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n }\n\n if (i1 < N) { break; }\n\n arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10\n\n // for (var i = 0; i < p; i++)...\n i0++;\n if (i0 < p) {\n state = 0;\n break;\n }\n\n b = [];\n for (let i = 0; i < B.length; i++) {\n b.push((B[i] >> 0) & 0xff);\n b.push((B[i] >> 8) & 0xff);\n b.push((B[i] >> 16) & 0xff);\n b.push((B[i] >> 24) & 0xff);\n }\n\n const derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);\n\n // Send the result to the callback\n if (callback) { callback(null, 1.0, derivedKey); }\n\n // Done; don't break (which would reschedule)\n return derivedKey;\n }\n\n // Schedule the next steps\n if (callback) { nextTick(incrementalSMix); }\n }\n\n // Run the smix state machine until completion\n if (!callback) {\n while (true) {\n const derivedKey = incrementalSMix();\n if (derivedKey != undefined) { return derivedKey; }\n }\n }\n\n // Bootstrap the async incremental smix\n incrementalSMix();\n }\n\n const lib = {\n scrypt: function(password, salt, N, r, p, dkLen, progressCallback) {\n return new Promise(function(resolve, reject) {\n let lastProgress = 0;\n if (progressCallback) { progressCallback(0); }\n _scrypt(password, salt, N, r, p, dkLen, function(error, progress, key) {\n if (error) {\n reject(error);\n } else if (key) {\n if (progressCallback && lastProgress !== 1) {\n progressCallback(1);\n }\n resolve(new Uint8Array(key));\n } else if (progressCallback && progress !== lastProgress) {\n lastProgress = progress;\n return progressCallback(progress);\n }\n });\n });\n },\n syncScrypt: function(password, salt, N, r, p, dkLen) {\n return new Uint8Array(_scrypt(password, salt, N, r, p, dkLen));\n }\n };\n\n // node.js\n if (typeof(exports) !== 'undefined') {\n module.exports = lib;\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(lib);\n\n // Web Browsers\n } else if (root) {\n\n // If there was an existing library \"scrypt\", make sure it is still available\n if (root.scrypt) {\n root._scrypt = root.scrypt;\n }\n\n root.scrypt = lib;\n }\n\n})(this);\n","module.exports = require('./lib')(require('./lib/elliptic'))\n","const EC = require('elliptic').ec\n\nconst ec = new EC('secp256k1')\nconst ecparams = ec.curve\n\n// Hack, we can not use bn.js@5, while elliptic uses bn.js@4\n// See https://github.com/indutny/elliptic/issues/191#issuecomment-569888758\nconst BN = ecparams.n.constructor\n\nfunction loadCompressedPublicKey (first, xbuf) {\n let x = new BN(xbuf)\n\n // overflow\n if (x.cmp(ecparams.p) >= 0) return null\n x = x.toRed(ecparams.red)\n\n // compute corresponding Y\n let y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()\n if ((first === 0x03) !== y.isOdd()) y = y.redNeg()\n\n return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadUncompressedPublicKey (first, xbuf, ybuf) {\n let x = new BN(xbuf)\n let y = new BN(ybuf)\n\n // overflow\n if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null\n\n x = x.toRed(ecparams.red)\n y = y.toRed(ecparams.red)\n\n // is odd flag\n if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null\n\n // x*x*x + b = y*y\n const x3 = x.redSqr().redIMul(x)\n if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null\n\n return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadPublicKey (pubkey) {\n // length should be validated in interface\n const first = pubkey[0]\n switch (first) {\n case 0x02:\n case 0x03:\n if (pubkey.length !== 33) return null\n return loadCompressedPublicKey(first, pubkey.subarray(1, 33))\n case 0x04:\n case 0x06:\n case 0x07:\n if (pubkey.length !== 65) return null\n return loadUncompressedPublicKey(first, pubkey.subarray(1, 33), pubkey.subarray(33, 65))\n default:\n return null\n }\n}\n\nfunction savePublicKey (output, point) {\n const pubkey = point.encode(null, output.length === 33)\n // Loop should be faster because we do not need create extra Uint8Array\n // output.set(new Uint8Array(pubkey))\n for (let i = 0; i < output.length; ++i) output[i] = pubkey[i]\n}\n\nmodule.exports = {\n contextRandomize () {\n return 0\n },\n\n privateKeyVerify (seckey) {\n const bn = new BN(seckey)\n return bn.cmp(ecparams.n) < 0 && !bn.isZero() ? 0 : 1\n },\n\n privateKeyNegate (seckey) {\n const bn = new BN(seckey)\n const negate = ecparams.n.sub(bn).umod(ecparams.n).toArrayLike(Uint8Array, 'be', 32)\n seckey.set(negate)\n return 0\n },\n\n privateKeyTweakAdd (seckey, tweak) {\n const bn = new BN(tweak)\n if (bn.cmp(ecparams.n) >= 0) return 1\n\n bn.iadd(new BN(seckey))\n if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)\n if (bn.isZero()) return 1\n\n const tweaked = bn.toArrayLike(Uint8Array, 'be', 32)\n seckey.set(tweaked)\n\n return 0\n },\n\n privateKeyTweakMul (seckey, tweak) {\n let bn = new BN(tweak)\n if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) return 1\n\n bn.imul(new BN(seckey))\n if (bn.cmp(ecparams.n) >= 0) bn = bn.umod(ecparams.n)\n\n const tweaked = bn.toArrayLike(Uint8Array, 'be', 32)\n seckey.set(tweaked)\n\n return 0\n },\n\n publicKeyVerify (pubkey) {\n const pair = loadPublicKey(pubkey)\n return pair === null ? 1 : 0\n },\n\n publicKeyCreate (output, seckey) {\n const bn = new BN(seckey)\n if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) return 1\n\n const point = ec.keyFromPrivate(seckey).getPublic()\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyConvert (output, pubkey) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n const point = pair.getPublic()\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyNegate (output, pubkey) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n const point = pair.getPublic()\n point.y = point.y.redNeg()\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyCombine (output, pubkeys) {\n const pairs = new Array(pubkeys.length)\n for (let i = 0; i < pubkeys.length; ++i) {\n pairs[i] = loadPublicKey(pubkeys[i])\n if (pairs[i] === null) return 1\n }\n\n let point = pairs[0].getPublic()\n for (let i = 1; i < pairs.length; ++i) point = point.add(pairs[i].pub)\n if (point.isInfinity()) return 2\n\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyTweakAdd (output, pubkey, tweak) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n tweak = new BN(tweak)\n if (tweak.cmp(ecparams.n) >= 0) return 2\n\n const point = pair.getPublic().add(ecparams.g.mul(tweak))\n if (point.isInfinity()) return 2\n\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyTweakMul (output, pubkey, tweak) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n tweak = new BN(tweak)\n if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) return 2\n\n const point = pair.getPublic().mul(tweak)\n savePublicKey(output, point)\n\n return 0\n },\n\n signatureNormalize (sig) {\n const r = new BN(sig.subarray(0, 32))\n const s = new BN(sig.subarray(32, 64))\n if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) return 1\n\n if (s.cmp(ec.nh) === 1) {\n sig.set(ecparams.n.sub(s).toArrayLike(Uint8Array, 'be', 32), 32)\n }\n\n return 0\n },\n\n // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js\n // Adapted for Uint8Array instead Buffer\n signatureExport (obj, sig) {\n const sigR = sig.subarray(0, 32)\n const sigS = sig.subarray(32, 64)\n if (new BN(sigR).cmp(ecparams.n) >= 0) return 1\n if (new BN(sigS).cmp(ecparams.n) >= 0) return 1\n\n const { output } = obj\n\n // Prepare R\n let r = output.subarray(4, 4 + 33)\n r[0] = 0x00\n r.set(sigR, 1)\n\n let lenR = 33\n let posR = 0\n for (; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);\n\n r = r.subarray(posR)\n if (r[0] & 0x80) return 1\n if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) return 1\n\n // Prepare S\n let s = output.subarray(6 + 33, 6 + 33 + 33)\n s[0] = 0x00\n s.set(sigS, 1)\n\n let lenS = 33\n let posS = 0\n for (; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);\n\n s = s.subarray(posS)\n if (s[0] & 0x80) return 1\n if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) return 1\n\n // Set output length for return\n obj.outputlen = 6 + lenR + lenS\n\n // Output in specified format\n // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n output[0] = 0x30\n output[1] = obj.outputlen - 2\n output[2] = 0x02\n output[3] = r.length\n output.set(r, 4)\n output[4 + lenR] = 0x02\n output[5 + lenR] = s.length\n output.set(s, 6 + lenR)\n\n return 0\n },\n\n // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js\n // Adapted for Uint8Array instead Buffer\n signatureImport (output, sig) {\n if (sig.length < 8) return 1\n if (sig.length > 72) return 1\n if (sig[0] !== 0x30) return 1\n if (sig[1] !== sig.length - 2) return 1\n if (sig[2] !== 0x02) return 1\n\n const lenR = sig[3]\n if (lenR === 0) return 1\n if (5 + lenR >= sig.length) return 1\n if (sig[4 + lenR] !== 0x02) return 1\n\n const lenS = sig[5 + lenR]\n if (lenS === 0) return 1\n if ((6 + lenR + lenS) !== sig.length) return 1\n\n if (sig[4] & 0x80) return 1\n if (lenR > 1 && (sig[4] === 0x00) && !(sig[5] & 0x80)) return 1\n\n if (sig[lenR + 6] & 0x80) return 1\n if (lenS > 1 && (sig[lenR + 6] === 0x00) && !(sig[lenR + 7] & 0x80)) return 1\n\n let sigR = sig.subarray(4, 4 + lenR)\n if (sigR.length === 33 && sigR[0] === 0x00) sigR = sigR.subarray(1)\n if (sigR.length > 32) return 1\n\n let sigS = sig.subarray(6 + lenR)\n if (sigS.length === 33 && sigS[0] === 0x00) sigS = sigS.slice(1)\n if (sigS.length > 32) throw new Error('S length is too long')\n\n let r = new BN(sigR)\n if (r.cmp(ecparams.n) >= 0) r = new BN(0)\n\n let s = new BN(sig.subarray(6 + lenR))\n if (s.cmp(ecparams.n) >= 0) s = new BN(0)\n\n output.set(r.toArrayLike(Uint8Array, 'be', 32), 0)\n output.set(s.toArrayLike(Uint8Array, 'be', 32), 32)\n\n return 0\n },\n\n ecdsaSign (obj, message, seckey, data, noncefn) {\n if (noncefn) {\n const _noncefn = noncefn\n noncefn = (counter) => {\n const nonce = _noncefn(message, seckey, null, data, counter)\n\n const isValid = nonce instanceof Uint8Array && nonce.length === 32\n if (!isValid) throw new Error('This is the way')\n\n return new BN(nonce)\n }\n }\n\n const d = new BN(seckey)\n if (d.cmp(ecparams.n) >= 0 || d.isZero()) return 1\n\n let sig\n try {\n sig = ec.sign(message, seckey, { canonical: true, k: noncefn, pers: data })\n } catch (err) {\n return 1\n }\n\n obj.signature.set(sig.r.toArrayLike(Uint8Array, 'be', 32), 0)\n obj.signature.set(sig.s.toArrayLike(Uint8Array, 'be', 32), 32)\n obj.recid = sig.recoveryParam\n\n return 0\n },\n\n ecdsaVerify (sig, msg32, pubkey) {\n const sigObj = { r: sig.subarray(0, 32), s: sig.subarray(32, 64) }\n\n const sigr = new BN(sigObj.r)\n const sigs = new BN(sigObj.s)\n if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1\n if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return 3\n\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 2\n\n const point = pair.getPublic()\n const isValid = ec.verify(msg32, sigObj, point)\n return isValid ? 0 : 3\n },\n\n ecdsaRecover (output, sig, recid, msg32) {\n const sigObj = { r: sig.slice(0, 32), s: sig.slice(32, 64) }\n\n const sigr = new BN(sigObj.r)\n const sigs = new BN(sigObj.s)\n if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1\n\n if (sigr.isZero() || sigs.isZero()) return 2\n\n // Can throw `throw new Error('Unable to find sencond key candinate');`\n let point\n try {\n point = ec.recoverPubKey(msg32, sigObj, recid)\n } catch (err) {\n return 2\n }\n\n savePublicKey(output, point)\n\n return 0\n },\n\n ecdh (output, pubkey, seckey, data, hashfn, xbuf, ybuf) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n const scalar = new BN(seckey)\n if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) return 2\n\n const point = pair.getPublic().mul(scalar)\n\n if (hashfn === undefined) {\n const data = point.encode(null, true)\n const sha256 = ec.hash().update(data).digest()\n for (let i = 0; i < 32; ++i) output[i] = sha256[i]\n } else {\n if (!xbuf) xbuf = new Uint8Array(32)\n const x = point.getX().toArray('be', 32)\n for (let i = 0; i < 32; ++i) xbuf[i] = x[i]\n\n if (!ybuf) ybuf = new Uint8Array(32)\n const y = point.getY().toArray('be', 32)\n for (let i = 0; i < 32; ++i) ybuf[i] = y[i]\n\n const hash = hashfn(xbuf, ybuf, data)\n\n const isValid = hash instanceof Uint8Array && hash.length === output.length\n if (!isValid) return 2\n\n output.set(hash)\n }\n\n return 0\n }\n}\n","const errors = {\n IMPOSSIBLE_CASE: 'Impossible case. Please create issue.',\n TWEAK_ADD:\n 'The tweak was out of range or the resulted private key is invalid',\n TWEAK_MUL: 'The tweak was out of range or equal to zero',\n CONTEXT_RANDOMIZE_UNKNOW: 'Unknow error on context randomization',\n SECKEY_INVALID: 'Private Key is invalid',\n PUBKEY_PARSE: 'Public Key could not be parsed',\n PUBKEY_SERIALIZE: 'Public Key serialization error',\n PUBKEY_COMBINE: 'The sum of the public keys is not valid',\n SIG_PARSE: 'Signature could not be parsed',\n SIGN: 'The nonce generation function failed, or the private key was invalid',\n RECOVER: 'Public key could not be recover',\n ECDH: 'Scalar was invalid (zero or overflow)'\n}\n\nfunction assert (cond, msg) {\n if (!cond) throw new Error(msg)\n}\n\nfunction isUint8Array (name, value, length) {\n assert(value instanceof Uint8Array, `Expected ${name} to be an Uint8Array`)\n\n if (length !== undefined) {\n if (Array.isArray(length)) {\n const numbers = length.join(', ')\n const msg = `Expected ${name} to be an Uint8Array with length [${numbers}]`\n assert(length.includes(value.length), msg)\n } else {\n const msg = `Expected ${name} to be an Uint8Array with length ${length}`\n assert(value.length === length, msg)\n }\n }\n}\n\nfunction isCompressed (value) {\n assert(toTypeString(value) === 'Boolean', 'Expected compressed to be a Boolean')\n}\n\nfunction getAssertedOutput (output = (len) => new Uint8Array(len), length) {\n if (typeof output === 'function') output = output(length)\n isUint8Array('output', output, length)\n return output\n}\n\nfunction toTypeString (value) {\n return Object.prototype.toString.call(value).slice(8, -1)\n}\n\nmodule.exports = (secp256k1) => {\n return {\n contextRandomize (seed) {\n assert(\n seed === null || seed instanceof Uint8Array,\n 'Expected seed to be an Uint8Array or null'\n )\n if (seed !== null) isUint8Array('seed', seed, 32)\n\n switch (secp256k1.contextRandomize(seed)) {\n case 1:\n throw new Error(errors.CONTEXT_RANDOMIZE_UNKNOW)\n }\n },\n\n privateKeyVerify (seckey) {\n isUint8Array('private key', seckey, 32)\n\n return secp256k1.privateKeyVerify(seckey) === 0\n },\n\n privateKeyNegate (seckey) {\n isUint8Array('private key', seckey, 32)\n\n switch (secp256k1.privateKeyNegate(seckey)) {\n case 0:\n return seckey\n case 1:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n privateKeyTweakAdd (seckey, tweak) {\n isUint8Array('private key', seckey, 32)\n isUint8Array('tweak', tweak, 32)\n\n switch (secp256k1.privateKeyTweakAdd(seckey, tweak)) {\n case 0:\n return seckey\n case 1:\n throw new Error(errors.TWEAK_ADD)\n }\n },\n\n privateKeyTweakMul (seckey, tweak) {\n isUint8Array('private key', seckey, 32)\n isUint8Array('tweak', tweak, 32)\n\n switch (secp256k1.privateKeyTweakMul(seckey, tweak)) {\n case 0:\n return seckey\n case 1:\n throw new Error(errors.TWEAK_MUL)\n }\n },\n\n publicKeyVerify (pubkey) {\n isUint8Array('public key', pubkey, [33, 65])\n\n return secp256k1.publicKeyVerify(pubkey) === 0\n },\n\n publicKeyCreate (seckey, compressed = true, output) {\n isUint8Array('private key', seckey, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyCreate(output, seckey)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.SECKEY_INVALID)\n case 2:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyConvert (pubkey, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyConvert(output, pubkey)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyNegate (pubkey, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyNegate(output, pubkey)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n case 3:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyCombine (pubkeys, compressed = true, output) {\n assert(Array.isArray(pubkeys), 'Expected public keys to be an Array')\n assert(pubkeys.length > 0, 'Expected public keys array will have more than zero items')\n for (const pubkey of pubkeys) {\n isUint8Array('public key', pubkey, [33, 65])\n }\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyCombine(output, pubkeys)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.PUBKEY_COMBINE)\n case 3:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyTweakAdd (pubkey, tweak, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isUint8Array('tweak', tweak, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyTweakAdd(output, pubkey, tweak)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.TWEAK_ADD)\n }\n },\n\n publicKeyTweakMul (pubkey, tweak, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isUint8Array('tweak', tweak, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyTweakMul(output, pubkey, tweak)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.TWEAK_MUL)\n }\n },\n\n signatureNormalize (sig) {\n isUint8Array('signature', sig, 64)\n\n switch (secp256k1.signatureNormalize(sig)) {\n case 0:\n return sig\n case 1:\n throw new Error(errors.SIG_PARSE)\n }\n },\n\n signatureExport (sig, output) {\n isUint8Array('signature', sig, 64)\n output = getAssertedOutput(output, 72)\n\n const obj = { output, outputlen: 72 }\n switch (secp256k1.signatureExport(obj, sig)) {\n case 0:\n return output.slice(0, obj.outputlen)\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n signatureImport (sig, output) {\n isUint8Array('signature', sig)\n output = getAssertedOutput(output, 64)\n\n switch (secp256k1.signatureImport(output, sig)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n ecdsaSign (msg32, seckey, options = {}, output) {\n isUint8Array('message', msg32, 32)\n isUint8Array('private key', seckey, 32)\n assert(toTypeString(options) === 'Object', 'Expected options to be an Object')\n if (options.data !== undefined) isUint8Array('options.data', options.data)\n if (options.noncefn !== undefined) assert(toTypeString(options.noncefn) === 'Function', 'Expected options.noncefn to be a Function')\n output = getAssertedOutput(output, 64)\n\n const obj = { signature: output, recid: null }\n switch (secp256k1.ecdsaSign(obj, msg32, seckey, options.data, options.noncefn)) {\n case 0:\n return obj\n case 1:\n throw new Error(errors.SIGN)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n ecdsaVerify (sig, msg32, pubkey) {\n isUint8Array('signature', sig, 64)\n isUint8Array('message', msg32, 32)\n isUint8Array('public key', pubkey, [33, 65])\n\n switch (secp256k1.ecdsaVerify(sig, msg32, pubkey)) {\n case 0:\n return true\n case 3:\n return false\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.PUBKEY_PARSE)\n }\n },\n\n ecdsaRecover (sig, recid, msg32, compressed = true, output) {\n isUint8Array('signature', sig, 64)\n assert(\n toTypeString(recid) === 'Number' &&\n recid >= 0 &&\n recid <= 3,\n 'Expected recovery id to be a Number within interval [0, 3]'\n )\n isUint8Array('message', msg32, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.ecdsaRecover(output, sig, recid, msg32)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.RECOVER)\n case 3:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n ecdh (pubkey, seckey, options = {}, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isUint8Array('private key', seckey, 32)\n assert(toTypeString(options) === 'Object', 'Expected options to be an Object')\n if (options.data !== undefined) isUint8Array('options.data', options.data)\n if (options.hashfn !== undefined) {\n assert(toTypeString(options.hashfn) === 'Function', 'Expected options.hashfn to be a Function')\n if (options.xbuf !== undefined) isUint8Array('options.xbuf', options.xbuf, 32)\n if (options.ybuf !== undefined) isUint8Array('options.ybuf', options.ybuf, 32)\n isUint8Array('output', output)\n } else {\n output = getAssertedOutput(output, 32)\n }\n\n switch (secp256k1.ecdh(output, pubkey, seckey, options.data, options.hashfn, options.xbuf, options.ybuf)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.ECDH)\n }\n }\n }\n}\n","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","'use strict';\n\nclass NonError extends Error {\n\tconstructor(message) {\n\t\tsuper(NonError._prepareSuperMessage(message));\n\t\tObject.defineProperty(this, 'name', {\n\t\t\tvalue: 'NonError',\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t});\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, NonError);\n\t\t}\n\t}\n\n\tstatic _prepareSuperMessage(message) {\n\t\ttry {\n\t\t\treturn JSON.stringify(message);\n\t\t} catch {\n\t\t\treturn String(message);\n\t\t}\n\t}\n}\n\nconst commonProperties = [\n\t{property: 'name', enumerable: false},\n\t{property: 'message', enumerable: false},\n\t{property: 'stack', enumerable: false},\n\t{property: 'code', enumerable: true}\n];\n\nconst isCalled = Symbol('.toJSON called');\n\nconst toJSON = from => {\n\tfrom[isCalled] = true;\n\tconst json = from.toJSON();\n\tdelete from[isCalled];\n\treturn json;\n};\n\nconst destroyCircular = ({\n\tfrom,\n\tseen,\n\tto_,\n\tforceEnumerable,\n\tmaxDepth,\n\tdepth\n}) => {\n\tconst to = to_ || (Array.isArray(from) ? [] : {});\n\n\tseen.push(from);\n\n\tif (depth >= maxDepth) {\n\t\treturn to;\n\t}\n\n\tif (typeof from.toJSON === 'function' && from[isCalled] !== true) {\n\t\treturn toJSON(from);\n\t}\n\n\tfor (const [key, value] of Object.entries(from)) {\n\t\tif (typeof Buffer === 'function' && Buffer.isBuffer(value)) {\n\t\t\tto[key] = '[object Buffer]';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof value === 'function') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!value || typeof value !== 'object') {\n\t\t\tto[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!seen.includes(from[key])) {\n\t\t\tdepth++;\n\n\t\t\tto[key] = destroyCircular({\n\t\t\t\tfrom: from[key],\n\t\t\t\tseen: seen.slice(),\n\t\t\t\tforceEnumerable,\n\t\t\t\tmaxDepth,\n\t\t\t\tdepth\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tto[key] = '[Circular]';\n\t}\n\n\tfor (const {property, enumerable} of commonProperties) {\n\t\tif (typeof from[property] === 'string') {\n\t\t\tObject.defineProperty(to, property, {\n\t\t\t\tvalue: from[property],\n\t\t\t\tenumerable: forceEnumerable ? true : enumerable,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t}\n\n\treturn to;\n};\n\nconst serializeError = (value, options = {}) => {\n\tconst {maxDepth = Number.POSITIVE_INFINITY} = options;\n\n\tif (typeof value === 'object' && value !== null) {\n\t\treturn destroyCircular({\n\t\t\tfrom: value,\n\t\t\tseen: [],\n\t\t\tforceEnumerable: true,\n\t\t\tmaxDepth,\n\t\t\tdepth: 0\n\t\t});\n\t}\n\n\t// People sometimes throw things besides Error objects…\n\tif (typeof value === 'function') {\n\t\t// `JSON.stringify()` discards functions. We do too, unless a function is thrown directly.\n\t\treturn `[Function: ${(value.name || 'anonymous')}]`;\n\t}\n\n\treturn value;\n};\n\nconst deserializeError = (value, options = {}) => {\n\tconst {maxDepth = Number.POSITIVE_INFINITY} = options;\n\n\tif (value instanceof Error) {\n\t\treturn value;\n\t}\n\n\tif (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n\t\tconst newError = new Error(); // eslint-disable-line unicorn/error-message\n\t\tdestroyCircular({\n\t\t\tfrom: value,\n\t\t\tseen: [],\n\t\t\tto_: newError,\n\t\t\tmaxDepth,\n\t\t\tdepth: 0\n\t\t});\n\t\treturn newError;\n\t}\n\n\treturn new NonError(value);\n};\n\nmodule.exports = {\n\tserializeError,\n\tdeserializeError\n};\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","// Copyright 2015 Joyent, Inc.\n\nvar Buffer = require('safer-buffer').Buffer;\n\nvar algInfo = {\n\t'dsa': {\n\t\tparts: ['p', 'q', 'g', 'y'],\n\t\tsizePart: 'p'\n\t},\n\t'rsa': {\n\t\tparts: ['e', 'n'],\n\t\tsizePart: 'n'\n\t},\n\t'ecdsa': {\n\t\tparts: ['curve', 'Q'],\n\t\tsizePart: 'Q'\n\t},\n\t'ed25519': {\n\t\tparts: ['A'],\n\t\tsizePart: 'A'\n\t}\n};\nalgInfo['curve25519'] = algInfo['ed25519'];\n\nvar algPrivInfo = {\n\t'dsa': {\n\t\tparts: ['p', 'q', 'g', 'y', 'x']\n\t},\n\t'rsa': {\n\t\tparts: ['n', 'e', 'd', 'iqmp', 'p', 'q']\n\t},\n\t'ecdsa': {\n\t\tparts: ['curve', 'Q', 'd']\n\t},\n\t'ed25519': {\n\t\tparts: ['A', 'k']\n\t}\n};\nalgPrivInfo['curve25519'] = algPrivInfo['ed25519'];\n\nvar hashAlgs = {\n\t'md5': true,\n\t'sha1': true,\n\t'sha256': true,\n\t'sha384': true,\n\t'sha512': true\n};\n\n/*\n * Taken from\n * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf\n */\nvar curves = {\n\t'nistp256': {\n\t\tsize: 256,\n\t\tpkcs8oid: '1.2.840.10045.3.1.7',\n\t\tp: Buffer.from(('00' +\n\t\t 'ffffffff 00000001 00000000 00000000' +\n\t\t '00000000 ffffffff ffffffff ffffffff').\n\t\t replace(/ /g, ''), 'hex'),\n\t\ta: Buffer.from(('00' +\n\t\t 'FFFFFFFF 00000001 00000000 00000000' +\n\t\t '00000000 FFFFFFFF FFFFFFFF FFFFFFFC').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tb: Buffer.from((\n\t\t '5ac635d8 aa3a93e7 b3ebbd55 769886bc' +\n\t\t '651d06b0 cc53b0f6 3bce3c3e 27d2604b').\n\t\t replace(/ /g, ''), 'hex'),\n\t\ts: Buffer.from(('00' +\n\t\t 'c49d3608 86e70493 6a6678e1 139d26b7' +\n\t\t '819f7e90').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tn: Buffer.from(('00' +\n\t\t 'ffffffff 00000000 ffffffff ffffffff' +\n\t\t 'bce6faad a7179e84 f3b9cac2 fc632551').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tG: Buffer.from(('04' +\n\t\t '6b17d1f2 e12c4247 f8bce6e5 63a440f2' +\n\t\t '77037d81 2deb33a0 f4a13945 d898c296' +\n\t\t '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' +\n\t\t '2bce3357 6b315ece cbb64068 37bf51f5').\n\t\t replace(/ /g, ''), 'hex')\n\t},\n\t'nistp384': {\n\t\tsize: 384,\n\t\tpkcs8oid: '1.3.132.0.34',\n\t\tp: Buffer.from(('00' +\n\t\t 'ffffffff ffffffff ffffffff ffffffff' +\n\t\t 'ffffffff ffffffff ffffffff fffffffe' +\n\t\t 'ffffffff 00000000 00000000 ffffffff').\n\t\t replace(/ /g, ''), 'hex'),\n\t\ta: Buffer.from(('00' +\n\t\t 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' +\n\t\t 'FFFFFFFF 00000000 00000000 FFFFFFFC').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tb: Buffer.from((\n\t\t 'b3312fa7 e23ee7e4 988e056b e3f82d19' +\n\t\t '181d9c6e fe814112 0314088f 5013875a' +\n\t\t 'c656398d 8a2ed19d 2a85c8ed d3ec2aef').\n\t\t replace(/ /g, ''), 'hex'),\n\t\ts: Buffer.from(('00' +\n\t\t 'a335926a a319a27a 1d00896a 6773a482' +\n\t\t '7acdac73').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tn: Buffer.from(('00' +\n\t\t 'ffffffff ffffffff ffffffff ffffffff' +\n\t\t 'ffffffff ffffffff c7634d81 f4372ddf' +\n\t\t '581a0db2 48b0a77a ecec196a ccc52973').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tG: Buffer.from(('04' +\n\t\t 'aa87ca22 be8b0537 8eb1c71e f320ad74' +\n\t\t '6e1d3b62 8ba79b98 59f741e0 82542a38' +\n\t\t '5502f25d bf55296c 3a545e38 72760ab7' +\n\t\t '3617de4a 96262c6f 5d9e98bf 9292dc29' +\n\t\t 'f8f41dbd 289a147c e9da3113 b5f0b8c0' +\n\t\t '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f').\n\t\t replace(/ /g, ''), 'hex')\n\t},\n\t'nistp521': {\n\t\tsize: 521,\n\t\tpkcs8oid: '1.3.132.0.35',\n\t\tp: Buffer.from((\n\t\t '01ffffff ffffffff ffffffff ffffffff' +\n\t\t 'ffffffff ffffffff ffffffff ffffffff' +\n\t\t 'ffffffff ffffffff ffffffff ffffffff' +\n\t\t 'ffffffff ffffffff ffffffff ffffffff' +\n\t\t 'ffff').replace(/ /g, ''), 'hex'),\n\t\ta: Buffer.from(('01FF' +\n\t\t 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tb: Buffer.from(('51' +\n\t\t '953eb961 8e1c9a1f 929a21a0 b68540ee' +\n\t\t 'a2da725b 99b315f3 b8b48991 8ef109e1' +\n\t\t '56193951 ec7e937b 1652c0bd 3bb1bf07' +\n\t\t '3573df88 3d2c34f1 ef451fd4 6b503f00').\n\t\t replace(/ /g, ''), 'hex'),\n\t\ts: Buffer.from(('00' +\n\t\t 'd09e8800 291cb853 96cc6717 393284aa' +\n\t\t 'a0da64ba').replace(/ /g, ''), 'hex'),\n\t\tn: Buffer.from(('01ff' +\n\t\t 'ffffffff ffffffff ffffffff ffffffff' +\n\t\t 'ffffffff ffffffff ffffffff fffffffa' +\n\t\t '51868783 bf2f966b 7fcc0148 f709a5d0' +\n\t\t '3bb5c9b8 899c47ae bb6fb71e 91386409').\n\t\t replace(/ /g, ''), 'hex'),\n\t\tG: Buffer.from(('04' +\n\t\t '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' +\n\t\t '9c648139 053fb521 f828af60 6b4d3dba' +\n\t\t 'a14b5e77 efe75928 fe1dc127 a2ffa8de' +\n\t\t '3348b3c1 856a429b f97e7e31 c2e5bd66' +\n\t\t '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' +\n\t\t '98f54449 579b4468 17afbd17 273e662c' +\n\t\t '97ee7299 5ef42640 c550b901 3fad0761' +\n\t\t '353c7086 a272c240 88be9476 9fd16650').\n\t\t replace(/ /g, ''), 'hex')\n\t}\n};\n\nmodule.exports = {\n\tinfo: algInfo,\n\tprivInfo: algPrivInfo,\n\thashAlgs: hashAlgs,\n\tcurves: curves\n};\n","// Copyright 2016 Joyent, Inc.\n\nmodule.exports = Certificate;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar errs = require('./errors');\nvar util = require('util');\nvar utils = require('./utils');\nvar Key = require('./key');\nvar PrivateKey = require('./private-key');\nvar Identity = require('./identity');\n\nvar formats = {};\nformats['openssh'] = require('./formats/openssh-cert');\nformats['x509'] = require('./formats/x509');\nformats['pem'] = require('./formats/x509-pem');\n\nvar CertificateParseError = errs.CertificateParseError;\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\n\nfunction Certificate(opts) {\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.subjects, 'options.subjects');\n\tutils.assertCompatible(opts.subjects[0], Identity, [1, 0],\n\t 'options.subjects');\n\tutils.assertCompatible(opts.subjectKey, Key, [1, 0],\n\t 'options.subjectKey');\n\tutils.assertCompatible(opts.issuer, Identity, [1, 0], 'options.issuer');\n\tif (opts.issuerKey !== undefined) {\n\t\tutils.assertCompatible(opts.issuerKey, Key, [1, 0],\n\t\t 'options.issuerKey');\n\t}\n\tassert.object(opts.signatures, 'options.signatures');\n\tassert.buffer(opts.serial, 'options.serial');\n\tassert.date(opts.validFrom, 'options.validFrom');\n\tassert.date(opts.validUntil, 'optons.validUntil');\n\n\tassert.optionalArrayOfString(opts.purposes, 'options.purposes');\n\n\tthis._hashCache = {};\n\n\tthis.subjects = opts.subjects;\n\tthis.issuer = opts.issuer;\n\tthis.subjectKey = opts.subjectKey;\n\tthis.issuerKey = opts.issuerKey;\n\tthis.signatures = opts.signatures;\n\tthis.serial = opts.serial;\n\tthis.validFrom = opts.validFrom;\n\tthis.validUntil = opts.validUntil;\n\tthis.purposes = opts.purposes;\n}\n\nCertificate.formats = formats;\n\nCertificate.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'x509';\n\tassert.string(format, 'format');\n\tassert.object(formats[format], 'formats[format]');\n\tassert.optionalObject(options, 'options');\n\n\treturn (formats[format].write(this, options));\n};\n\nCertificate.prototype.toString = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'pem';\n\treturn (this.toBuffer(format, options).toString());\n};\n\nCertificate.prototype.fingerprint = function (algo) {\n\tif (algo === undefined)\n\t\talgo = 'sha256';\n\tassert.string(algo, 'algorithm');\n\tvar opts = {\n\t\ttype: 'certificate',\n\t\thash: this.hash(algo),\n\t\talgorithm: algo\n\t};\n\treturn (new Fingerprint(opts));\n};\n\nCertificate.prototype.hash = function (algo) {\n\tassert.string(algo, 'algorithm');\n\talgo = algo.toLowerCase();\n\tif (algs.hashAlgs[algo] === undefined)\n\t\tthrow (new InvalidAlgorithmError(algo));\n\n\tif (this._hashCache[algo])\n\t\treturn (this._hashCache[algo]);\n\n\tvar hash = crypto.createHash(algo).\n\t update(this.toBuffer('x509')).digest();\n\tthis._hashCache[algo] = hash;\n\treturn (hash);\n};\n\nCertificate.prototype.isExpired = function (when) {\n\tif (when === undefined)\n\t\twhen = new Date();\n\treturn (!((when.getTime() >= this.validFrom.getTime()) &&\n\t\t(when.getTime() < this.validUntil.getTime())));\n};\n\nCertificate.prototype.isSignedBy = function (issuerCert) {\n\tutils.assertCompatible(issuerCert, Certificate, [1, 0], 'issuer');\n\n\tif (!this.issuer.equals(issuerCert.subjects[0]))\n\t\treturn (false);\n\tif (this.issuer.purposes && this.issuer.purposes.length > 0 &&\n\t this.issuer.purposes.indexOf('ca') === -1) {\n\t\treturn (false);\n\t}\n\n\treturn (this.isSignedByKey(issuerCert.subjectKey));\n};\n\nCertificate.prototype.getExtension = function (keyOrOid) {\n\tassert.string(keyOrOid, 'keyOrOid');\n\tvar ext = this.getExtensions().filter(function (maybeExt) {\n\t\tif (maybeExt.format === 'x509')\n\t\t\treturn (maybeExt.oid === keyOrOid);\n\t\tif (maybeExt.format === 'openssh')\n\t\t\treturn (maybeExt.name === keyOrOid);\n\t\treturn (false);\n\t})[0];\n\treturn (ext);\n};\n\nCertificate.prototype.getExtensions = function () {\n\tvar exts = [];\n\tvar x509 = this.signatures.x509;\n\tif (x509 && x509.extras && x509.extras.exts) {\n\t\tx509.extras.exts.forEach(function (ext) {\n\t\t\text.format = 'x509';\n\t\t\texts.push(ext);\n\t\t});\n\t}\n\tvar openssh = this.signatures.openssh;\n\tif (openssh && openssh.exts) {\n\t\topenssh.exts.forEach(function (ext) {\n\t\t\text.format = 'openssh';\n\t\t\texts.push(ext);\n\t\t});\n\t}\n\treturn (exts);\n};\n\nCertificate.prototype.isSignedByKey = function (issuerKey) {\n\tutils.assertCompatible(issuerKey, Key, [1, 2], 'issuerKey');\n\n\tif (this.issuerKey !== undefined) {\n\t\treturn (this.issuerKey.\n\t\t fingerprint('sha512').matches(issuerKey));\n\t}\n\n\tvar fmt = Object.keys(this.signatures)[0];\n\tvar valid = formats[fmt].verify(this, issuerKey);\n\tif (valid)\n\t\tthis.issuerKey = issuerKey;\n\treturn (valid);\n};\n\nCertificate.prototype.signWith = function (key) {\n\tutils.assertCompatible(key, PrivateKey, [1, 2], 'key');\n\tvar fmts = Object.keys(formats);\n\tvar didOne = false;\n\tfor (var i = 0; i < fmts.length; ++i) {\n\t\tif (fmts[i] !== 'pem') {\n\t\t\tvar ret = formats[fmts[i]].sign(this, key);\n\t\t\tif (ret === true)\n\t\t\t\tdidOne = true;\n\t\t}\n\t}\n\tif (!didOne) {\n\t\tthrow (new Error('Failed to sign the certificate for any ' +\n\t\t 'available certificate formats'));\n\t}\n};\n\nCertificate.createSelfSigned = function (subjectOrSubjects, key, options) {\n\tvar subjects;\n\tif (Array.isArray(subjectOrSubjects))\n\t\tsubjects = subjectOrSubjects;\n\telse\n\t\tsubjects = [subjectOrSubjects];\n\n\tassert.arrayOfObject(subjects);\n\tsubjects.forEach(function (subject) {\n\t\tutils.assertCompatible(subject, Identity, [1, 0], 'subject');\n\t});\n\n\tutils.assertCompatible(key, PrivateKey, [1, 2], 'private key');\n\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalObject(options.validFrom, 'options.validFrom');\n\tassert.optionalObject(options.validUntil, 'options.validUntil');\n\tvar validFrom = options.validFrom;\n\tvar validUntil = options.validUntil;\n\tif (validFrom === undefined)\n\t\tvalidFrom = new Date();\n\tif (validUntil === undefined) {\n\t\tassert.optionalNumber(options.lifetime, 'options.lifetime');\n\t\tvar lifetime = options.lifetime;\n\t\tif (lifetime === undefined)\n\t\t\tlifetime = 10*365*24*3600;\n\t\tvalidUntil = new Date();\n\t\tvalidUntil.setTime(validUntil.getTime() + lifetime*1000);\n\t}\n\tassert.optionalBuffer(options.serial, 'options.serial');\n\tvar serial = options.serial;\n\tif (serial === undefined)\n\t\tserial = Buffer.from('0000000000000001', 'hex');\n\n\tvar purposes = options.purposes;\n\tif (purposes === undefined)\n\t\tpurposes = [];\n\n\tif (purposes.indexOf('signature') === -1)\n\t\tpurposes.push('signature');\n\n\t/* Self-signed certs are always CAs. */\n\tif (purposes.indexOf('ca') === -1)\n\t\tpurposes.push('ca');\n\tif (purposes.indexOf('crl') === -1)\n\t\tpurposes.push('crl');\n\n\t/*\n\t * If we weren't explicitly given any other purposes, do the sensible\n\t * thing and add some basic ones depending on the subject type.\n\t */\n\tif (purposes.length <= 3) {\n\t\tvar hostSubjects = subjects.filter(function (subject) {\n\t\t\treturn (subject.type === 'host');\n\t\t});\n\t\tvar userSubjects = subjects.filter(function (subject) {\n\t\t\treturn (subject.type === 'user');\n\t\t});\n\t\tif (hostSubjects.length > 0) {\n\t\t\tif (purposes.indexOf('serverAuth') === -1)\n\t\t\t\tpurposes.push('serverAuth');\n\t\t}\n\t\tif (userSubjects.length > 0) {\n\t\t\tif (purposes.indexOf('clientAuth') === -1)\n\t\t\t\tpurposes.push('clientAuth');\n\t\t}\n\t\tif (userSubjects.length > 0 || hostSubjects.length > 0) {\n\t\t\tif (purposes.indexOf('keyAgreement') === -1)\n\t\t\t\tpurposes.push('keyAgreement');\n\t\t\tif (key.type === 'rsa' &&\n\t\t\t purposes.indexOf('encryption') === -1)\n\t\t\t\tpurposes.push('encryption');\n\t\t}\n\t}\n\n\tvar cert = new Certificate({\n\t\tsubjects: subjects,\n\t\tissuer: subjects[0],\n\t\tsubjectKey: key.toPublic(),\n\t\tissuerKey: key.toPublic(),\n\t\tsignatures: {},\n\t\tserial: serial,\n\t\tvalidFrom: validFrom,\n\t\tvalidUntil: validUntil,\n\t\tpurposes: purposes\n\t});\n\tcert.signWith(key);\n\n\treturn (cert);\n};\n\nCertificate.create =\n function (subjectOrSubjects, key, issuer, issuerKey, options) {\n\tvar subjects;\n\tif (Array.isArray(subjectOrSubjects))\n\t\tsubjects = subjectOrSubjects;\n\telse\n\t\tsubjects = [subjectOrSubjects];\n\n\tassert.arrayOfObject(subjects);\n\tsubjects.forEach(function (subject) {\n\t\tutils.assertCompatible(subject, Identity, [1, 0], 'subject');\n\t});\n\n\tutils.assertCompatible(key, Key, [1, 0], 'key');\n\tif (PrivateKey.isPrivateKey(key))\n\t\tkey = key.toPublic();\n\tutils.assertCompatible(issuer, Identity, [1, 0], 'issuer');\n\tutils.assertCompatible(issuerKey, PrivateKey, [1, 2], 'issuer key');\n\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalObject(options.validFrom, 'options.validFrom');\n\tassert.optionalObject(options.validUntil, 'options.validUntil');\n\tvar validFrom = options.validFrom;\n\tvar validUntil = options.validUntil;\n\tif (validFrom === undefined)\n\t\tvalidFrom = new Date();\n\tif (validUntil === undefined) {\n\t\tassert.optionalNumber(options.lifetime, 'options.lifetime');\n\t\tvar lifetime = options.lifetime;\n\t\tif (lifetime === undefined)\n\t\t\tlifetime = 10*365*24*3600;\n\t\tvalidUntil = new Date();\n\t\tvalidUntil.setTime(validUntil.getTime() + lifetime*1000);\n\t}\n\tassert.optionalBuffer(options.serial, 'options.serial');\n\tvar serial = options.serial;\n\tif (serial === undefined)\n\t\tserial = Buffer.from('0000000000000001', 'hex');\n\n\tvar purposes = options.purposes;\n\tif (purposes === undefined)\n\t\tpurposes = [];\n\n\tif (purposes.indexOf('signature') === -1)\n\t\tpurposes.push('signature');\n\n\tif (options.ca === true) {\n\t\tif (purposes.indexOf('ca') === -1)\n\t\t\tpurposes.push('ca');\n\t\tif (purposes.indexOf('crl') === -1)\n\t\t\tpurposes.push('crl');\n\t}\n\n\tvar hostSubjects = subjects.filter(function (subject) {\n\t\treturn (subject.type === 'host');\n\t});\n\tvar userSubjects = subjects.filter(function (subject) {\n\t\treturn (subject.type === 'user');\n\t});\n\tif (hostSubjects.length > 0) {\n\t\tif (purposes.indexOf('serverAuth') === -1)\n\t\t\tpurposes.push('serverAuth');\n\t}\n\tif (userSubjects.length > 0) {\n\t\tif (purposes.indexOf('clientAuth') === -1)\n\t\t\tpurposes.push('clientAuth');\n\t}\n\tif (userSubjects.length > 0 || hostSubjects.length > 0) {\n\t\tif (purposes.indexOf('keyAgreement') === -1)\n\t\t\tpurposes.push('keyAgreement');\n\t\tif (key.type === 'rsa' &&\n\t\t purposes.indexOf('encryption') === -1)\n\t\t\tpurposes.push('encryption');\n\t}\n\n\tvar cert = new Certificate({\n\t\tsubjects: subjects,\n\t\tissuer: issuer,\n\t\tsubjectKey: key,\n\t\tissuerKey: issuerKey.toPublic(),\n\t\tsignatures: {},\n\t\tserial: serial,\n\t\tvalidFrom: validFrom,\n\t\tvalidUntil: validUntil,\n\t\tpurposes: purposes\n\t});\n\tcert.signWith(issuerKey);\n\n\treturn (cert);\n};\n\nCertificate.parse = function (data, format, options) {\n\tif (typeof (data) !== 'string')\n\t\tassert.buffer(data, 'data');\n\tif (format === undefined)\n\t\tformat = 'auto';\n\tassert.string(format, 'format');\n\tif (typeof (options) === 'string')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, 'options.filename');\n\tif (options.filename === undefined)\n\t\toptions.filename = '(unnamed)';\n\n\tassert.object(formats[format], 'formats[format]');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\treturn (k);\n\t} catch (e) {\n\t\tthrow (new CertificateParseError(options.filename, format, e));\n\t}\n};\n\nCertificate.isCertificate = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Certificate, ver));\n};\n\n/*\n * API versions for Certificate:\n * [1,0] -- initial ver\n * [1,1] -- openssh format now unpacks extensions\n */\nCertificate.prototype._sshpkApiVersion = [1, 1];\n\nCertificate._oldVersionDetect = function (obj) {\n\treturn ([1, 0]);\n};\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tDiffieHellman: DiffieHellman,\n\tgenerateECDSA: generateECDSA,\n\tgenerateED25519: generateED25519\n};\n\nvar assert = require('assert-plus');\nvar crypto = require('crypto');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar utils = require('./utils');\nvar nacl = require('tweetnacl');\n\nvar Key = require('./key');\nvar PrivateKey = require('./private-key');\n\nvar CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined);\n\nvar ecdh = require('ecc-jsbn');\nvar ec = require('ecc-jsbn/lib/ec');\nvar jsbn = require('jsbn').BigInteger;\n\nfunction DiffieHellman(key) {\n\tutils.assertCompatible(key, Key, [1, 4], 'key');\n\tthis._isPriv = PrivateKey.isPrivateKey(key, [1, 3]);\n\tthis._algo = key.type;\n\tthis._curve = key.curve;\n\tthis._key = key;\n\tif (key.type === 'dsa') {\n\t\tif (!CRYPTO_HAVE_ECDH) {\n\t\t\tthrow (new Error('Due to bugs in the node 0.10 ' +\n\t\t\t 'crypto API, node 0.12.x or later is required ' +\n\t\t\t 'to use DH'));\n\t\t}\n\t\tthis._dh = crypto.createDiffieHellman(\n\t\t key.part.p.data, undefined,\n\t\t key.part.g.data, undefined);\n\t\tthis._p = key.part.p;\n\t\tthis._g = key.part.g;\n\t\tif (this._isPriv)\n\t\t\tthis._dh.setPrivateKey(key.part.x.data);\n\t\tthis._dh.setPublicKey(key.part.y.data);\n\n\t} else if (key.type === 'ecdsa') {\n\t\tif (!CRYPTO_HAVE_ECDH) {\n\t\t\tthis._ecParams = new X9ECParameters(this._curve);\n\n\t\t\tif (this._isPriv) {\n\t\t\t\tthis._priv = new ECPrivate(\n\t\t\t\t this._ecParams, key.part.d.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tvar curve = {\n\t\t\t'nistp256': 'prime256v1',\n\t\t\t'nistp384': 'secp384r1',\n\t\t\t'nistp521': 'secp521r1'\n\t\t}[key.curve];\n\t\tthis._dh = crypto.createECDH(curve);\n\t\tif (typeof (this._dh) !== 'object' ||\n\t\t typeof (this._dh.setPrivateKey) !== 'function') {\n\t\t\tCRYPTO_HAVE_ECDH = false;\n\t\t\tDiffieHellman.call(this, key);\n\t\t\treturn;\n\t\t}\n\t\tif (this._isPriv)\n\t\t\tthis._dh.setPrivateKey(key.part.d.data);\n\t\tthis._dh.setPublicKey(key.part.Q.data);\n\n\t} else if (key.type === 'curve25519') {\n\t\tif (this._isPriv) {\n\t\t\tutils.assertCompatible(key, PrivateKey, [1, 5], 'key');\n\t\t\tthis._priv = key.part.k.data;\n\t\t}\n\n\t} else {\n\t\tthrow (new Error('DH not supported for ' + key.type + ' keys'));\n\t}\n}\n\nDiffieHellman.prototype.getPublicKey = function () {\n\tif (this._isPriv)\n\t\treturn (this._key.toPublic());\n\treturn (this._key);\n};\n\nDiffieHellman.prototype.getPrivateKey = function () {\n\tif (this._isPriv)\n\t\treturn (this._key);\n\telse\n\t\treturn (undefined);\n};\nDiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey;\n\nDiffieHellman.prototype._keyCheck = function (pk, isPub) {\n\tassert.object(pk, 'key');\n\tif (!isPub)\n\t\tutils.assertCompatible(pk, PrivateKey, [1, 3], 'key');\n\tutils.assertCompatible(pk, Key, [1, 4], 'key');\n\n\tif (pk.type !== this._algo) {\n\t\tthrow (new Error('A ' + pk.type + ' key cannot be used in ' +\n\t\t this._algo + ' Diffie-Hellman'));\n\t}\n\n\tif (pk.curve !== this._curve) {\n\t\tthrow (new Error('A key from the ' + pk.curve + ' curve ' +\n\t\t 'cannot be used with a ' + this._curve +\n\t\t ' Diffie-Hellman'));\n\t}\n\n\tif (pk.type === 'dsa') {\n\t\tassert.deepEqual(pk.part.p, this._p,\n\t\t 'DSA key prime does not match');\n\t\tassert.deepEqual(pk.part.g, this._g,\n\t\t 'DSA key generator does not match');\n\t}\n};\n\nDiffieHellman.prototype.setKey = function (pk) {\n\tthis._keyCheck(pk);\n\n\tif (pk.type === 'dsa') {\n\t\tthis._dh.setPrivateKey(pk.part.x.data);\n\t\tthis._dh.setPublicKey(pk.part.y.data);\n\n\t} else if (pk.type === 'ecdsa') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\tthis._dh.setPrivateKey(pk.part.d.data);\n\t\t\tthis._dh.setPublicKey(pk.part.Q.data);\n\t\t} else {\n\t\t\tthis._priv = new ECPrivate(\n\t\t\t this._ecParams, pk.part.d.data);\n\t\t}\n\n\t} else if (pk.type === 'curve25519') {\n\t\tvar k = pk.part.k;\n\t\tif (!pk.part.k)\n\t\t\tk = pk.part.r;\n\t\tthis._priv = k.data;\n\t\tif (this._priv[0] === 0x00)\n\t\t\tthis._priv = this._priv.slice(1);\n\t\tthis._priv = this._priv.slice(0, 32);\n\t}\n\tthis._key = pk;\n\tthis._isPriv = true;\n};\nDiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey;\n\nDiffieHellman.prototype.computeSecret = function (otherpk) {\n\tthis._keyCheck(otherpk, true);\n\tif (!this._isPriv)\n\t\tthrow (new Error('DH exchange has not been initialized with ' +\n\t\t 'a private key yet'));\n\n\tvar pub;\n\tif (this._algo === 'dsa') {\n\t\treturn (this._dh.computeSecret(\n\t\t otherpk.part.y.data));\n\n\t} else if (this._algo === 'ecdsa') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\treturn (this._dh.computeSecret(\n\t\t\t otherpk.part.Q.data));\n\t\t} else {\n\t\t\tpub = new ECPublic(\n\t\t\t this._ecParams, otherpk.part.Q.data);\n\t\t\treturn (this._priv.deriveSharedSecret(pub));\n\t\t}\n\n\t} else if (this._algo === 'curve25519') {\n\t\tpub = otherpk.part.A.data;\n\t\twhile (pub[0] === 0x00 && pub.length > 32)\n\t\t\tpub = pub.slice(1);\n\t\tvar priv = this._priv;\n\t\tassert.strictEqual(pub.length, 32);\n\t\tassert.strictEqual(priv.length, 32);\n\n\t\tvar secret = nacl.box.before(new Uint8Array(pub),\n\t\t new Uint8Array(priv));\n\n\t\treturn (Buffer.from(secret));\n\t}\n\n\tthrow (new Error('Invalid algorithm: ' + this._algo));\n};\n\nDiffieHellman.prototype.generateKey = function () {\n\tvar parts = [];\n\tvar priv, pub;\n\tif (this._algo === 'dsa') {\n\t\tthis._dh.generateKeys();\n\n\t\tparts.push({name: 'p', data: this._p.data});\n\t\tparts.push({name: 'q', data: this._key.part.q.data});\n\t\tparts.push({name: 'g', data: this._g.data});\n\t\tparts.push({name: 'y', data: this._dh.getPublicKey()});\n\t\tparts.push({name: 'x', data: this._dh.getPrivateKey()});\n\t\tthis._key = new PrivateKey({\n\t\t\ttype: 'dsa',\n\t\t\tparts: parts\n\t\t});\n\t\tthis._isPriv = true;\n\t\treturn (this._key);\n\n\t} else if (this._algo === 'ecdsa') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\tthis._dh.generateKeys();\n\n\t\t\tparts.push({name: 'curve',\n\t\t\t data: Buffer.from(this._curve)});\n\t\t\tparts.push({name: 'Q', data: this._dh.getPublicKey()});\n\t\t\tparts.push({name: 'd', data: this._dh.getPrivateKey()});\n\t\t\tthis._key = new PrivateKey({\n\t\t\t\ttype: 'ecdsa',\n\t\t\t\tcurve: this._curve,\n\t\t\t\tparts: parts\n\t\t\t});\n\t\t\tthis._isPriv = true;\n\t\t\treturn (this._key);\n\n\t\t} else {\n\t\t\tvar n = this._ecParams.getN();\n\t\t\tvar r = new jsbn(crypto.randomBytes(n.bitLength()));\n\t\t\tvar n1 = n.subtract(jsbn.ONE);\n\t\t\tpriv = r.mod(n1).add(jsbn.ONE);\n\t\t\tpub = this._ecParams.getG().multiply(priv);\n\n\t\t\tpriv = Buffer.from(priv.toByteArray());\n\t\t\tpub = Buffer.from(this._ecParams.getCurve().\n\t\t\t encodePointHex(pub), 'hex');\n\n\t\t\tthis._priv = new ECPrivate(this._ecParams, priv);\n\n\t\t\tparts.push({name: 'curve',\n\t\t\t data: Buffer.from(this._curve)});\n\t\t\tparts.push({name: 'Q', data: pub});\n\t\t\tparts.push({name: 'd', data: priv});\n\n\t\t\tthis._key = new PrivateKey({\n\t\t\t\ttype: 'ecdsa',\n\t\t\t\tcurve: this._curve,\n\t\t\t\tparts: parts\n\t\t\t});\n\t\t\tthis._isPriv = true;\n\t\t\treturn (this._key);\n\t\t}\n\n\t} else if (this._algo === 'curve25519') {\n\t\tvar pair = nacl.box.keyPair();\n\t\tpriv = Buffer.from(pair.secretKey);\n\t\tpub = Buffer.from(pair.publicKey);\n\t\tpriv = Buffer.concat([priv, pub]);\n\t\tassert.strictEqual(priv.length, 64);\n\t\tassert.strictEqual(pub.length, 32);\n\n\t\tparts.push({name: 'A', data: pub});\n\t\tparts.push({name: 'k', data: priv});\n\t\tthis._key = new PrivateKey({\n\t\t\ttype: 'curve25519',\n\t\t\tparts: parts\n\t\t});\n\t\tthis._isPriv = true;\n\t\treturn (this._key);\n\t}\n\n\tthrow (new Error('Invalid algorithm: ' + this._algo));\n};\nDiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey;\n\n/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */\n\nfunction X9ECParameters(name) {\n\tvar params = algs.curves[name];\n\tassert.object(params);\n\n\tvar p = new jsbn(params.p);\n\tvar a = new jsbn(params.a);\n\tvar b = new jsbn(params.b);\n\tvar n = new jsbn(params.n);\n\tvar h = jsbn.ONE;\n\tvar curve = new ec.ECCurveFp(p, a, b);\n\tvar G = curve.decodePointHex(params.G.toString('hex'));\n\n\tthis.curve = curve;\n\tthis.g = G;\n\tthis.n = n;\n\tthis.h = h;\n}\nX9ECParameters.prototype.getCurve = function () { return (this.curve); };\nX9ECParameters.prototype.getG = function () { return (this.g); };\nX9ECParameters.prototype.getN = function () { return (this.n); };\nX9ECParameters.prototype.getH = function () { return (this.h); };\n\nfunction ECPublic(params, buffer) {\n\tthis._params = params;\n\tif (buffer[0] === 0x00)\n\t\tbuffer = buffer.slice(1);\n\tthis._pub = params.getCurve().decodePointHex(buffer.toString('hex'));\n}\n\nfunction ECPrivate(params, buffer) {\n\tthis._params = params;\n\tthis._priv = new jsbn(utils.mpNormalize(buffer));\n}\nECPrivate.prototype.deriveSharedSecret = function (pubKey) {\n\tassert.ok(pubKey instanceof ECPublic);\n\tvar S = pubKey._pub.multiply(this._priv);\n\treturn (Buffer.from(S.getX().toBigInteger().toByteArray()));\n};\n\nfunction generateED25519() {\n\tvar pair = nacl.sign.keyPair();\n\tvar priv = Buffer.from(pair.secretKey);\n\tvar pub = Buffer.from(pair.publicKey);\n\tassert.strictEqual(priv.length, 64);\n\tassert.strictEqual(pub.length, 32);\n\n\tvar parts = [];\n\tparts.push({name: 'A', data: pub});\n\tparts.push({name: 'k', data: priv.slice(0, 32)});\n\tvar key = new PrivateKey({\n\t\ttype: 'ed25519',\n\t\tparts: parts\n\t});\n\treturn (key);\n}\n\n/* Generates a new ECDSA private key on a given curve. */\nfunction generateECDSA(curve) {\n\tvar parts = [];\n\tvar key;\n\n\tif (CRYPTO_HAVE_ECDH) {\n\t\t/*\n\t\t * Node crypto doesn't expose key generation directly, but the\n\t\t * ECDH instances can generate keys. It turns out this just\n\t\t * calls into the OpenSSL generic key generator, and we can\n\t\t * read its output happily without doing an actual DH. So we\n\t\t * use that here.\n\t\t */\n\t\tvar osCurve = {\n\t\t\t'nistp256': 'prime256v1',\n\t\t\t'nistp384': 'secp384r1',\n\t\t\t'nistp521': 'secp521r1'\n\t\t}[curve];\n\n\t\tvar dh = crypto.createECDH(osCurve);\n\t\tdh.generateKeys();\n\n\t\tparts.push({name: 'curve',\n\t\t data: Buffer.from(curve)});\n\t\tparts.push({name: 'Q', data: dh.getPublicKey()});\n\t\tparts.push({name: 'd', data: dh.getPrivateKey()});\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tparts: parts\n\t\t});\n\t\treturn (key);\n\t} else {\n\n\t\tvar ecParams = new X9ECParameters(curve);\n\n\t\t/* This algorithm taken from FIPS PUB 186-4 (section B.4.1) */\n\t\tvar n = ecParams.getN();\n\t\t/*\n\t\t * The crypto.randomBytes() function can only give us whole\n\t\t * bytes, so taking a nod from X9.62, we round up.\n\t\t */\n\t\tvar cByteLen = Math.ceil((n.bitLength() + 64) / 8);\n\t\tvar c = new jsbn(crypto.randomBytes(cByteLen));\n\n\t\tvar n1 = n.subtract(jsbn.ONE);\n\t\tvar priv = c.mod(n1).add(jsbn.ONE);\n\t\tvar pub = ecParams.getG().multiply(priv);\n\n\t\tpriv = Buffer.from(priv.toByteArray());\n\t\tpub = Buffer.from(ecParams.getCurve().\n\t\t encodePointHex(pub), 'hex');\n\n\t\tparts.push({name: 'curve', data: Buffer.from(curve)});\n\t\tparts.push({name: 'Q', data: pub});\n\t\tparts.push({name: 'd', data: priv});\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tparts: parts\n\t\t});\n\t\treturn (key);\n\t}\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tVerifier: Verifier,\n\tSigner: Signer\n};\n\nvar nacl = require('tweetnacl');\nvar stream = require('stream');\nvar util = require('util');\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar Signature = require('./signature');\n\nfunction Verifier(key, hashAlgo) {\n\tif (hashAlgo.toLowerCase() !== 'sha512')\n\t\tthrow (new Error('ED25519 only supports the use of ' +\n\t\t 'SHA-512 hashes'));\n\n\tthis.key = key;\n\tthis.chunks = [];\n\n\tstream.Writable.call(this, {});\n}\nutil.inherits(Verifier, stream.Writable);\n\nVerifier.prototype._write = function (chunk, enc, cb) {\n\tthis.chunks.push(chunk);\n\tcb();\n};\n\nVerifier.prototype.update = function (chunk) {\n\tif (typeof (chunk) === 'string')\n\t\tchunk = Buffer.from(chunk, 'binary');\n\tthis.chunks.push(chunk);\n};\n\nVerifier.prototype.verify = function (signature, fmt) {\n\tvar sig;\n\tif (Signature.isSignature(signature, [2, 0])) {\n\t\tif (signature.type !== 'ed25519')\n\t\t\treturn (false);\n\t\tsig = signature.toBuffer('raw');\n\n\t} else if (typeof (signature) === 'string') {\n\t\tsig = Buffer.from(signature, 'base64');\n\n\t} else if (Signature.isSignature(signature, [1, 0])) {\n\t\tthrow (new Error('signature was created by too old ' +\n\t\t 'a version of sshpk and cannot be verified'));\n\t}\n\n\tassert.buffer(sig);\n\treturn (nacl.sign.detached.verify(\n\t new Uint8Array(Buffer.concat(this.chunks)),\n\t new Uint8Array(sig),\n\t new Uint8Array(this.key.part.A.data)));\n};\n\nfunction Signer(key, hashAlgo) {\n\tif (hashAlgo.toLowerCase() !== 'sha512')\n\t\tthrow (new Error('ED25519 only supports the use of ' +\n\t\t 'SHA-512 hashes'));\n\n\tthis.key = key;\n\tthis.chunks = [];\n\n\tstream.Writable.call(this, {});\n}\nutil.inherits(Signer, stream.Writable);\n\nSigner.prototype._write = function (chunk, enc, cb) {\n\tthis.chunks.push(chunk);\n\tcb();\n};\n\nSigner.prototype.update = function (chunk) {\n\tif (typeof (chunk) === 'string')\n\t\tchunk = Buffer.from(chunk, 'binary');\n\tthis.chunks.push(chunk);\n};\n\nSigner.prototype.sign = function () {\n\tvar sig = nacl.sign.detached(\n\t new Uint8Array(Buffer.concat(this.chunks)),\n\t new Uint8Array(Buffer.concat([\n\t\tthis.key.part.k.data, this.key.part.A.data])));\n\tvar sigBuf = Buffer.from(sig);\n\tvar sigObj = Signature.parse(sigBuf, 'ed25519', 'raw');\n\tsigObj.hashAlgorithm = 'sha512';\n\treturn (sigObj);\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar assert = require('assert-plus');\nvar util = require('util');\n\nfunction FingerprintFormatError(fp, format) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, FingerprintFormatError);\n\tthis.name = 'FingerprintFormatError';\n\tthis.fingerprint = fp;\n\tthis.format = format;\n\tthis.message = 'Fingerprint format is not supported, or is invalid: ';\n\tif (fp !== undefined)\n\t\tthis.message += ' fingerprint = ' + fp;\n\tif (format !== undefined)\n\t\tthis.message += ' format = ' + format;\n}\nutil.inherits(FingerprintFormatError, Error);\n\nfunction InvalidAlgorithmError(alg) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, InvalidAlgorithmError);\n\tthis.name = 'InvalidAlgorithmError';\n\tthis.algorithm = alg;\n\tthis.message = 'Algorithm \"' + alg + '\" is not supported';\n}\nutil.inherits(InvalidAlgorithmError, Error);\n\nfunction KeyParseError(name, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, KeyParseError);\n\tthis.name = 'KeyParseError';\n\tthis.format = format;\n\tthis.keyName = name;\n\tthis.innerErr = innerErr;\n\tthis.message = 'Failed to parse ' + name + ' as a valid ' + format +\n\t ' format key: ' + innerErr.message;\n}\nutil.inherits(KeyParseError, Error);\n\nfunction SignatureParseError(type, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, SignatureParseError);\n\tthis.name = 'SignatureParseError';\n\tthis.type = type;\n\tthis.format = format;\n\tthis.innerErr = innerErr;\n\tthis.message = 'Failed to parse the given data as a ' + type +\n\t ' signature in ' + format + ' format: ' + innerErr.message;\n}\nutil.inherits(SignatureParseError, Error);\n\nfunction CertificateParseError(name, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, CertificateParseError);\n\tthis.name = 'CertificateParseError';\n\tthis.format = format;\n\tthis.certName = name;\n\tthis.innerErr = innerErr;\n\tthis.message = 'Failed to parse ' + name + ' as a valid ' + format +\n\t ' format certificate: ' + innerErr.message;\n}\nutil.inherits(CertificateParseError, Error);\n\nfunction KeyEncryptedError(name, format) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, KeyEncryptedError);\n\tthis.name = 'KeyEncryptedError';\n\tthis.format = format;\n\tthis.keyName = name;\n\tthis.message = 'The ' + format + ' format key ' + name + ' is ' +\n\t 'encrypted (password-protected), and no passphrase was ' +\n\t 'provided in `options`';\n}\nutil.inherits(KeyEncryptedError, Error);\n\nmodule.exports = {\n\tFingerprintFormatError: FingerprintFormatError,\n\tInvalidAlgorithmError: InvalidAlgorithmError,\n\tKeyParseError: KeyParseError,\n\tSignatureParseError: SignatureParseError,\n\tKeyEncryptedError: KeyEncryptedError,\n\tCertificateParseError: CertificateParseError\n};\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = Fingerprint;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar errs = require('./errors');\nvar Key = require('./key');\nvar PrivateKey = require('./private-key');\nvar Certificate = require('./certificate');\nvar utils = require('./utils');\n\nvar FingerprintFormatError = errs.FingerprintFormatError;\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\n\nfunction Fingerprint(opts) {\n\tassert.object(opts, 'options');\n\tassert.string(opts.type, 'options.type');\n\tassert.buffer(opts.hash, 'options.hash');\n\tassert.string(opts.algorithm, 'options.algorithm');\n\n\tthis.algorithm = opts.algorithm.toLowerCase();\n\tif (algs.hashAlgs[this.algorithm] !== true)\n\t\tthrow (new InvalidAlgorithmError(this.algorithm));\n\n\tthis.hash = opts.hash;\n\tthis.type = opts.type;\n\tthis.hashType = opts.hashType;\n}\n\nFingerprint.prototype.toString = function (format) {\n\tif (format === undefined) {\n\t\tif (this.algorithm === 'md5' || this.hashType === 'spki')\n\t\t\tformat = 'hex';\n\t\telse\n\t\t\tformat = 'base64';\n\t}\n\tassert.string(format);\n\n\tswitch (format) {\n\tcase 'hex':\n\t\tif (this.hashType === 'spki')\n\t\t\treturn (this.hash.toString('hex'));\n\t\treturn (addColons(this.hash.toString('hex')));\n\tcase 'base64':\n\t\tif (this.hashType === 'spki')\n\t\t\treturn (this.hash.toString('base64'));\n\t\treturn (sshBase64Format(this.algorithm,\n\t\t this.hash.toString('base64')));\n\tdefault:\n\t\tthrow (new FingerprintFormatError(undefined, format));\n\t}\n};\n\nFingerprint.prototype.matches = function (other) {\n\tassert.object(other, 'key or certificate');\n\tif (this.type === 'key' && this.hashType !== 'ssh') {\n\t\tutils.assertCompatible(other, Key, [1, 7], 'key with spki');\n\t\tif (PrivateKey.isPrivateKey(other)) {\n\t\t\tutils.assertCompatible(other, PrivateKey, [1, 6],\n\t\t\t 'privatekey with spki support');\n\t\t}\n\t} else if (this.type === 'key') {\n\t\tutils.assertCompatible(other, Key, [1, 0], 'key');\n\t} else {\n\t\tutils.assertCompatible(other, Certificate, [1, 0],\n\t\t 'certificate');\n\t}\n\n\tvar theirHash = other.hash(this.algorithm, this.hashType);\n\tvar theirHash2 = crypto.createHash(this.algorithm).\n\t update(theirHash).digest('base64');\n\n\tif (this.hash2 === undefined)\n\t\tthis.hash2 = crypto.createHash(this.algorithm).\n\t\t update(this.hash).digest('base64');\n\n\treturn (this.hash2 === theirHash2);\n};\n\n/*JSSTYLED*/\nvar base64RE = /^[A-Za-z0-9+\\/=]+$/;\n/*JSSTYLED*/\nvar hexRE = /^[a-fA-F0-9]+$/;\n\nFingerprint.parse = function (fp, options) {\n\tassert.string(fp, 'fingerprint');\n\n\tvar alg, hash, enAlgs;\n\tif (Array.isArray(options)) {\n\t\tenAlgs = options;\n\t\toptions = {};\n\t}\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tif (options.enAlgs !== undefined)\n\t\tenAlgs = options.enAlgs;\n\tif (options.algorithms !== undefined)\n\t\tenAlgs = options.algorithms;\n\tassert.optionalArrayOfString(enAlgs, 'algorithms');\n\n\tvar hashType = 'ssh';\n\tif (options.hashType !== undefined)\n\t\thashType = options.hashType;\n\tassert.string(hashType, 'options.hashType');\n\n\tvar parts = fp.split(':');\n\tif (parts.length == 2) {\n\t\talg = parts[0].toLowerCase();\n\t\tif (!base64RE.test(parts[1]))\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\ttry {\n\t\t\thash = Buffer.from(parts[1], 'base64');\n\t\t} catch (e) {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\t} else if (parts.length > 2) {\n\t\talg = 'md5';\n\t\tif (parts[0].toLowerCase() === 'md5')\n\t\t\tparts = parts.slice(1);\n\t\tparts = parts.map(function (p) {\n\t\t\twhile (p.length < 2)\n\t\t\t\tp = '0' + p;\n\t\t\tif (p.length > 2)\n\t\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t\treturn (p);\n\t\t});\n\t\tparts = parts.join('');\n\t\tif (!hexRE.test(parts) || parts.length % 2 !== 0)\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\ttry {\n\t\t\thash = Buffer.from(parts, 'hex');\n\t\t} catch (e) {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\t} else {\n\t\tif (hexRE.test(fp)) {\n\t\t\thash = Buffer.from(fp, 'hex');\n\t\t} else if (base64RE.test(fp)) {\n\t\t\thash = Buffer.from(fp, 'base64');\n\t\t} else {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\n\t\tswitch (hash.length) {\n\t\tcase 32:\n\t\t\talg = 'sha256';\n\t\t\tbreak;\n\t\tcase 16:\n\t\t\talg = 'md5';\n\t\t\tbreak;\n\t\tcase 20:\n\t\t\talg = 'sha1';\n\t\t\tbreak;\n\t\tcase 64:\n\t\t\talg = 'sha512';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\n\t\t/* Plain hex/base64: guess it's probably SPKI unless told. */\n\t\tif (options.hashType === undefined)\n\t\t\thashType = 'spki';\n\t}\n\n\tif (alg === undefined)\n\t\tthrow (new FingerprintFormatError(fp));\n\n\tif (algs.hashAlgs[alg] === undefined)\n\t\tthrow (new InvalidAlgorithmError(alg));\n\n\tif (enAlgs !== undefined) {\n\t\tenAlgs = enAlgs.map(function (a) { return a.toLowerCase(); });\n\t\tif (enAlgs.indexOf(alg) === -1)\n\t\t\tthrow (new InvalidAlgorithmError(alg));\n\t}\n\n\treturn (new Fingerprint({\n\t\talgorithm: alg,\n\t\thash: hash,\n\t\ttype: options.type || 'key',\n\t\thashType: hashType\n\t}));\n};\n\nfunction addColons(s) {\n\t/*JSSTYLED*/\n\treturn (s.replace(/(.{2})(?=.)/g, '$1:'));\n}\n\nfunction base64Strip(s) {\n\t/*JSSTYLED*/\n\treturn (s.replace(/=*$/, ''));\n}\n\nfunction sshBase64Format(alg, h) {\n\treturn (alg.toUpperCase() + ':' + base64Strip(h));\n}\n\nFingerprint.isFingerprint = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Fingerprint, ver));\n};\n\n/*\n * API versions for Fingerprint:\n * [1,0] -- initial ver\n * [1,1] -- first tagged ver\n * [1,2] -- hashType and spki support\n */\nFingerprint.prototype._sshpkApiVersion = [1, 2];\n\nFingerprint._oldVersionDetect = function (obj) {\n\tassert.func(obj.toString);\n\tassert.func(obj.matches);\n\treturn ([1, 0]);\n};\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\n\nvar pem = require('./pem');\nvar ssh = require('./ssh');\nvar rfc4253 = require('./rfc4253');\nvar dnssec = require('./dnssec');\nvar putty = require('./putty');\n\nvar DNSSEC_PRIVKEY_HEADER_PREFIX = 'Private-key-format: v1';\n\nfunction read(buf, options) {\n\tif (typeof (buf) === 'string') {\n\t\tif (buf.trim().match(/^[-]+[ ]*BEGIN/))\n\t\t\treturn (pem.read(buf, options));\n\t\tif (buf.match(/^\\s*ssh-[a-z]/))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (buf.match(/^\\s*ecdsa-/))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (buf.match(/^putty-user-key-file-2:/i))\n\t\t\treturn (putty.read(buf, options));\n\t\tif (findDNSSECHeader(buf))\n\t\t\treturn (dnssec.read(buf, options));\n\t\tbuf = Buffer.from(buf, 'binary');\n\t} else {\n\t\tassert.buffer(buf);\n\t\tif (findPEMHeader(buf))\n\t\t\treturn (pem.read(buf, options));\n\t\tif (findSSHHeader(buf))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (findPuTTYHeader(buf))\n\t\t\treturn (putty.read(buf, options));\n\t\tif (findDNSSECHeader(buf))\n\t\t\treturn (dnssec.read(buf, options));\n\t}\n\tif (buf.readUInt32BE(0) < buf.length)\n\t\treturn (rfc4253.read(buf, options));\n\tthrow (new Error('Failed to auto-detect format of key'));\n}\n\nfunction findPuTTYHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))\n\t\t++offset;\n\tif (offset + 22 <= buf.length &&\n\t buf.slice(offset, offset + 22).toString('ascii').toLowerCase() ===\n\t 'putty-user-key-file-2:')\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction findSSHHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))\n\t\t++offset;\n\tif (offset + 4 <= buf.length &&\n\t buf.slice(offset, offset + 4).toString('ascii') === 'ssh-')\n\t\treturn (true);\n\tif (offset + 6 <= buf.length &&\n\t buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-')\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction findPEMHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t (buf[offset] === 32 || buf[offset] === 10))\n\t\t++offset;\n\tif (buf[offset] !== 45)\n\t\treturn (false);\n\twhile (offset < buf.length &&\n\t (buf[offset] === 45))\n\t\t++offset;\n\twhile (offset < buf.length &&\n\t (buf[offset] === 32))\n\t\t++offset;\n\tif (offset + 5 > buf.length ||\n\t buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN')\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction findDNSSECHeader(buf) {\n\t// private case first\n\tif (buf.length <= DNSSEC_PRIVKEY_HEADER_PREFIX.length)\n\t\treturn (false);\n\tvar headerCheck = buf.slice(0, DNSSEC_PRIVKEY_HEADER_PREFIX.length);\n\tif (headerCheck.toString('ascii') === DNSSEC_PRIVKEY_HEADER_PREFIX)\n\t\treturn (true);\n\n\t// public-key RFC3110 ?\n\t// 'domain.com. IN KEY ...' or 'domain.com. IN DNSKEY ...'\n\t// skip any comment-lines\n\tif (typeof (buf) !== 'string') {\n\t\tbuf = buf.toString('ascii');\n\t}\n\tvar lines = buf.split('\\n');\n\tvar line = 0;\n\t/* JSSTYLED */\n\twhile (lines[line].match(/^\\;/))\n\t\tline++;\n\tif (lines[line].toString('ascii').match(/\\. IN KEY /))\n\t\treturn (true);\n\tif (lines[line].toString('ascii').match(/\\. IN DNSKEY /))\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction write(key, options) {\n\tthrow (new Error('\"auto\" format cannot be used for writing'));\n}\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar utils = require('../utils');\nvar SSHBuffer = require('../ssh-buffer');\nvar Dhe = require('../dhe');\n\nvar supportedAlgos = {\n\t'rsa-sha1' : 5,\n\t'rsa-sha256' : 8,\n\t'rsa-sha512' : 10,\n\t'ecdsa-p256-sha256' : 13,\n\t'ecdsa-p384-sha384' : 14\n\t/*\n\t * ed25519 is hypothetically supported with id 15\n\t * but the common tools available don't appear to be\n\t * capable of generating/using ed25519 keys\n\t */\n};\n\nvar supportedAlgosById = {};\nObject.keys(supportedAlgos).forEach(function (k) {\n\tsupportedAlgosById[supportedAlgos[k]] = k.toUpperCase();\n});\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\tvar lines = buf.split('\\n');\n\tif (lines[0].match(/^Private-key-format\\: v1/)) {\n\t\tvar algElems = lines[1].split(' ');\n\t\tvar algoNum = parseInt(algElems[1], 10);\n\t\tvar algoName = algElems[2];\n\t\tif (!supportedAlgosById[algoNum])\n\t\t\tthrow (new Error('Unsupported algorithm: ' + algoName));\n\t\treturn (readDNSSECPrivateKey(algoNum, lines.slice(2)));\n\t}\n\n\t// skip any comment-lines\n\tvar line = 0;\n\t/* JSSTYLED */\n\twhile (lines[line].match(/^\\;/))\n\t\tline++;\n\t// we should now have *one single* line left with our KEY on it.\n\tif ((lines[line].match(/\\. IN KEY /) ||\n\t lines[line].match(/\\. IN DNSKEY /)) && lines[line+1].length === 0) {\n\t\treturn (readRFC3110(lines[line]));\n\t}\n\tthrow (new Error('Cannot parse dnssec key'));\n}\n\nfunction readRFC3110(keyString) {\n\tvar elems = keyString.split(' ');\n\t//unused var flags = parseInt(elems[3], 10);\n\t//unused var protocol = parseInt(elems[4], 10);\n\tvar algorithm = parseInt(elems[5], 10);\n\tif (!supportedAlgosById[algorithm])\n\t\tthrow (new Error('Unsupported algorithm: ' + algorithm));\n\tvar base64key = elems.slice(6, elems.length).join();\n\tvar keyBuffer = Buffer.from(base64key, 'base64');\n\tif (supportedAlgosById[algorithm].match(/^RSA-/)) {\n\t\t// join the rest of the body into a single base64-blob\n\t\tvar publicExponentLen = keyBuffer.readUInt8(0);\n\t\tif (publicExponentLen != 3 && publicExponentLen != 1)\n\t\t\tthrow (new Error('Cannot parse dnssec key: ' +\n\t\t\t 'unsupported exponent length'));\n\n\t\tvar publicExponent = keyBuffer.slice(1, publicExponentLen+1);\n\t\tpublicExponent = utils.mpNormalize(publicExponent);\n\t\tvar modulus = keyBuffer.slice(1+publicExponentLen);\n\t\tmodulus = utils.mpNormalize(modulus);\n\t\t// now, make the key\n\t\tvar rsaKey = {\n\t\t\ttype: 'rsa',\n\t\t\tparts: []\n\t\t};\n\t\trsaKey.parts.push({ name: 'e', data: publicExponent});\n\t\trsaKey.parts.push({ name: 'n', data: modulus});\n\t\treturn (new Key(rsaKey));\n\t}\n\tif (supportedAlgosById[algorithm] === 'ECDSA-P384-SHA384' ||\n\t supportedAlgosById[algorithm] === 'ECDSA-P256-SHA256') {\n\t\tvar curve = 'nistp384';\n\t\tvar size = 384;\n\t\tif (supportedAlgosById[algorithm].match(/^ECDSA-P256-SHA256/)) {\n\t\t\tcurve = 'nistp256';\n\t\t\tsize = 256;\n\t\t}\n\n\t\tvar ecdsaKey = {\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tsize: size,\n\t\t\tparts: [\n\t\t\t\t{name: 'curve', data: Buffer.from(curve) },\n\t\t\t\t{name: 'Q', data: utils.ecNormalize(keyBuffer) }\n\t\t\t]\n\t\t};\n\t\treturn (new Key(ecdsaKey));\n\t}\n\tthrow (new Error('Unsupported algorithm: ' +\n\t supportedAlgosById[algorithm]));\n}\n\nfunction elementToBuf(e) {\n\treturn (Buffer.from(e.split(' ')[1], 'base64'));\n}\n\nfunction readDNSSECRSAPrivateKey(elements) {\n\tvar rsaParams = {};\n\telements.forEach(function (element) {\n\t\tif (element.split(' ')[0] === 'Modulus:')\n\t\t\trsaParams['n'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'PublicExponent:')\n\t\t\trsaParams['e'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'PrivateExponent:')\n\t\t\trsaParams['d'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Prime1:')\n\t\t\trsaParams['p'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Prime2:')\n\t\t\trsaParams['q'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Exponent1:')\n\t\t\trsaParams['dmodp'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Exponent2:')\n\t\t\trsaParams['dmodq'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Coefficient:')\n\t\t\trsaParams['iqmp'] = elementToBuf(element);\n\t});\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'e', data: utils.mpNormalize(rsaParams['e'])},\n\t\t\t{ name: 'n', data: utils.mpNormalize(rsaParams['n'])},\n\t\t\t{ name: 'd', data: utils.mpNormalize(rsaParams['d'])},\n\t\t\t{ name: 'p', data: utils.mpNormalize(rsaParams['p'])},\n\t\t\t{ name: 'q', data: utils.mpNormalize(rsaParams['q'])},\n\t\t\t{ name: 'dmodp',\n\t\t\t data: utils.mpNormalize(rsaParams['dmodp'])},\n\t\t\t{ name: 'dmodq',\n\t\t\t data: utils.mpNormalize(rsaParams['dmodq'])},\n\t\t\t{ name: 'iqmp',\n\t\t\t data: utils.mpNormalize(rsaParams['iqmp'])}\n\t\t]\n\t};\n\treturn (new PrivateKey(key));\n}\n\nfunction readDNSSECPrivateKey(alg, elements) {\n\tif (supportedAlgosById[alg].match(/^RSA-/)) {\n\t\treturn (readDNSSECRSAPrivateKey(elements));\n\t}\n\tif (supportedAlgosById[alg] === 'ECDSA-P384-SHA384' ||\n\t supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {\n\t\tvar d = Buffer.from(elements[0].split(' ')[1], 'base64');\n\t\tvar curve = 'nistp384';\n\t\tvar size = 384;\n\t\tif (supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {\n\t\t\tcurve = 'nistp256';\n\t\t\tsize = 256;\n\t\t}\n\t\t// DNSSEC generates the public-key on the fly (go calculate it)\n\t\tvar publicKey = utils.publicFromPrivateECDSA(curve, d);\n\t\tvar Q = publicKey.part['Q'].data;\n\t\tvar ecdsaKey = {\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tsize: size,\n\t\t\tparts: [\n\t\t\t\t{name: 'curve', data: Buffer.from(curve) },\n\t\t\t\t{name: 'd', data: d },\n\t\t\t\t{name: 'Q', data: Q }\n\t\t\t]\n\t\t};\n\t\treturn (new PrivateKey(ecdsaKey));\n\t}\n\tthrow (new Error('Unsupported algorithm: ' + supportedAlgosById[alg]));\n}\n\nfunction dnssecTimestamp(date) {\n\tvar year = date.getFullYear() + ''; //stringify\n\tvar month = (date.getMonth() + 1);\n\tvar timestampStr = year + month + date.getUTCDate();\n\ttimestampStr += '' + date.getUTCHours() + date.getUTCMinutes();\n\ttimestampStr += date.getUTCSeconds();\n\treturn (timestampStr);\n}\n\nfunction rsaAlgFromOptions(opts) {\n\tif (!opts || !opts.hashAlgo || opts.hashAlgo === 'sha1')\n\t\treturn ('5 (RSASHA1)');\n\telse if (opts.hashAlgo === 'sha256')\n\t\treturn ('8 (RSASHA256)');\n\telse if (opts.hashAlgo === 'sha512')\n\t\treturn ('10 (RSASHA512)');\n\telse\n\t\tthrow (new Error('Unknown or unsupported hash: ' +\n\t\t opts.hashAlgo));\n}\n\nfunction writeRSA(key, options) {\n\t// if we're missing parts, add them.\n\tif (!key.part.dmodp || !key.part.dmodq) {\n\t\tutils.addRSAMissing(key);\n\t}\n\n\tvar out = '';\n\tout += 'Private-key-format: v1.3\\n';\n\tout += 'Algorithm: ' + rsaAlgFromOptions(options) + '\\n';\n\tvar n = utils.mpDenormalize(key.part['n'].data);\n\tout += 'Modulus: ' + n.toString('base64') + '\\n';\n\tvar e = utils.mpDenormalize(key.part['e'].data);\n\tout += 'PublicExponent: ' + e.toString('base64') + '\\n';\n\tvar d = utils.mpDenormalize(key.part['d'].data);\n\tout += 'PrivateExponent: ' + d.toString('base64') + '\\n';\n\tvar p = utils.mpDenormalize(key.part['p'].data);\n\tout += 'Prime1: ' + p.toString('base64') + '\\n';\n\tvar q = utils.mpDenormalize(key.part['q'].data);\n\tout += 'Prime2: ' + q.toString('base64') + '\\n';\n\tvar dmodp = utils.mpDenormalize(key.part['dmodp'].data);\n\tout += 'Exponent1: ' + dmodp.toString('base64') + '\\n';\n\tvar dmodq = utils.mpDenormalize(key.part['dmodq'].data);\n\tout += 'Exponent2: ' + dmodq.toString('base64') + '\\n';\n\tvar iqmp = utils.mpDenormalize(key.part['iqmp'].data);\n\tout += 'Coefficient: ' + iqmp.toString('base64') + '\\n';\n\t// Assume that we're valid as-of now\n\tvar timestamp = new Date();\n\tout += 'Created: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Publish: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Activate: ' + dnssecTimestamp(timestamp) + '\\n';\n\treturn (Buffer.from(out, 'ascii'));\n}\n\nfunction writeECDSA(key, options) {\n\tvar out = '';\n\tout += 'Private-key-format: v1.3\\n';\n\n\tif (key.curve === 'nistp256') {\n\t\tout += 'Algorithm: 13 (ECDSAP256SHA256)\\n';\n\t} else if (key.curve === 'nistp384') {\n\t\tout += 'Algorithm: 14 (ECDSAP384SHA384)\\n';\n\t} else {\n\t\tthrow (new Error('Unsupported curve'));\n\t}\n\tvar base64Key = key.part['d'].data.toString('base64');\n\tout += 'PrivateKey: ' + base64Key + '\\n';\n\n\t// Assume that we're valid as-of now\n\tvar timestamp = new Date();\n\tout += 'Created: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Publish: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Activate: ' + dnssecTimestamp(timestamp) + '\\n';\n\n\treturn (Buffer.from(out, 'ascii'));\n}\n\nfunction write(key, options) {\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tif (key.type === 'rsa') {\n\t\t\treturn (writeRSA(key, options));\n\t\t} else if (key.type === 'ecdsa') {\n\t\t\treturn (writeECDSA(key, options));\n\t\t} else {\n\t\t\tthrow (new Error('Unsupported algorithm: ' + key.type));\n\t\t}\n\t} else if (Key.isKey(key)) {\n\t\t/*\n\t\t * RFC3110 requires a keyname, and a keytype, which we\n\t\t * don't really have a mechanism for specifying such\n\t\t * additional metadata.\n\t\t */\n\t\tthrow (new Error('Format \"dnssec\" only supports ' +\n\t\t 'writing private keys'));\n\t} else {\n\t\tthrow (new Error('key is not a Key or PrivateKey'));\n\t}\n}\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\tverify: verify,\n\tsign: sign,\n\tsignAsync: signAsync,\n\twrite: write,\n\n\t/* Internal private API */\n\tfromBuffer: fromBuffer,\n\ttoBuffer: toBuffer\n};\n\nvar assert = require('assert-plus');\nvar SSHBuffer = require('../ssh-buffer');\nvar crypto = require('crypto');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar Identity = require('../identity');\nvar rfc4253 = require('./rfc4253');\nvar Signature = require('../signature');\nvar utils = require('../utils');\nvar Certificate = require('../certificate');\n\nfunction verify(cert, key) {\n\t/*\n\t * We always give an issuerKey, so if our verify() is being called then\n\t * there was no signature. Return false.\n\t */\n\treturn (false);\n}\n\nvar TYPES = {\n\t'user': 1,\n\t'host': 2\n};\nObject.keys(TYPES).forEach(function (k) { TYPES[TYPES[k]] = k; });\n\nvar ECDSA_ALGO = /^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/;\n\nfunction read(buf, options) {\n\tif (Buffer.isBuffer(buf))\n\t\tbuf = buf.toString('ascii');\n\tvar parts = buf.trim().split(/[ \\t\\n]+/g);\n\tif (parts.length < 2 || parts.length > 3)\n\t\tthrow (new Error('Not a valid SSH certificate line'));\n\n\tvar algo = parts[0];\n\tvar data = parts[1];\n\n\tdata = Buffer.from(data, 'base64');\n\treturn (fromBuffer(data, algo));\n}\n\nfunction fromBuffer(data, algo, partial) {\n\tvar sshbuf = new SSHBuffer({ buffer: data });\n\tvar innerAlgo = sshbuf.readString();\n\tif (algo !== undefined && innerAlgo !== algo)\n\t\tthrow (new Error('SSH certificate algorithm mismatch'));\n\tif (algo === undefined)\n\t\talgo = innerAlgo;\n\n\tvar cert = {};\n\tcert.signatures = {};\n\tcert.signatures.openssh = {};\n\n\tcert.signatures.openssh.nonce = sshbuf.readBuffer();\n\n\tvar key = {};\n\tvar parts = (key.parts = []);\n\tkey.type = getAlg(algo);\n\n\tvar partCount = algs.info[key.type].parts.length;\n\twhile (parts.length < partCount)\n\t\tparts.push(sshbuf.readPart());\n\tassert.ok(parts.length >= 1, 'key must have at least one part');\n\n\tvar algInfo = algs.info[key.type];\n\tif (key.type === 'ecdsa') {\n\t\tvar res = ECDSA_ALGO.exec(algo);\n\t\tassert.ok(res !== null);\n\t\tassert.strictEqual(res[1], parts[0].data.toString());\n\t}\n\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tparts[i].name = algInfo.parts[i];\n\t\tif (parts[i].name !== 'curve' &&\n\t\t algInfo.normalize !== false) {\n\t\t\tvar p = parts[i];\n\t\t\tp.data = utils.mpNormalize(p.data);\n\t\t}\n\t}\n\n\tcert.subjectKey = new Key(key);\n\n\tcert.serial = sshbuf.readInt64();\n\n\tvar type = TYPES[sshbuf.readInt()];\n\tassert.string(type, 'valid cert type');\n\n\tcert.signatures.openssh.keyId = sshbuf.readString();\n\n\tvar principals = [];\n\tvar pbuf = sshbuf.readBuffer();\n\tvar psshbuf = new SSHBuffer({ buffer: pbuf });\n\twhile (!psshbuf.atEnd())\n\t\tprincipals.push(psshbuf.readString());\n\tif (principals.length === 0)\n\t\tprincipals = ['*'];\n\n\tcert.subjects = principals.map(function (pr) {\n\t\tif (type === 'user')\n\t\t\treturn (Identity.forUser(pr));\n\t\telse if (type === 'host')\n\t\t\treturn (Identity.forHost(pr));\n\t\tthrow (new Error('Unknown identity type ' + type));\n\t});\n\n\tcert.validFrom = int64ToDate(sshbuf.readInt64());\n\tcert.validUntil = int64ToDate(sshbuf.readInt64());\n\n\tvar exts = [];\n\tvar extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });\n\tvar ext;\n\twhile (!extbuf.atEnd()) {\n\t\text = { critical: true };\n\t\text.name = extbuf.readString();\n\t\text.data = extbuf.readBuffer();\n\t\texts.push(ext);\n\t}\n\textbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });\n\twhile (!extbuf.atEnd()) {\n\t\text = { critical: false };\n\t\text.name = extbuf.readString();\n\t\text.data = extbuf.readBuffer();\n\t\texts.push(ext);\n\t}\n\tcert.signatures.openssh.exts = exts;\n\n\t/* reserved */\n\tsshbuf.readBuffer();\n\n\tvar signingKeyBuf = sshbuf.readBuffer();\n\tcert.issuerKey = rfc4253.read(signingKeyBuf);\n\n\t/*\n\t * OpenSSH certs don't give the identity of the issuer, just their\n\t * public key. So, we use an Identity that matches anything. The\n\t * isSignedBy() function will later tell you if the key matches.\n\t */\n\tcert.issuer = Identity.forHost('**');\n\n\tvar sigBuf = sshbuf.readBuffer();\n\tcert.signatures.openssh.signature =\n\t Signature.parse(sigBuf, cert.issuerKey.type, 'ssh');\n\n\tif (partial !== undefined) {\n\t\tpartial.remainder = sshbuf.remainder();\n\t\tpartial.consumed = sshbuf._offset;\n\t}\n\n\treturn (new Certificate(cert));\n}\n\nfunction int64ToDate(buf) {\n\tvar i = buf.readUInt32BE(0) * 4294967296;\n\ti += buf.readUInt32BE(4);\n\tvar d = new Date();\n\td.setTime(i * 1000);\n\td.sourceInt64 = buf;\n\treturn (d);\n}\n\nfunction dateToInt64(date) {\n\tif (date.sourceInt64 !== undefined)\n\t\treturn (date.sourceInt64);\n\tvar i = Math.round(date.getTime() / 1000);\n\tvar upper = Math.floor(i / 4294967296);\n\tvar lower = Math.floor(i % 4294967296);\n\tvar buf = Buffer.alloc(8);\n\tbuf.writeUInt32BE(upper, 0);\n\tbuf.writeUInt32BE(lower, 4);\n\treturn (buf);\n}\n\nfunction sign(cert, key) {\n\tif (cert.signatures.openssh === undefined)\n\t\tcert.signatures.openssh = {};\n\ttry {\n\t\tvar blob = toBuffer(cert, true);\n\t} catch (e) {\n\t\tdelete (cert.signatures.openssh);\n\t\treturn (false);\n\t}\n\tvar sig = cert.signatures.openssh;\n\tvar hashAlgo = undefined;\n\tif (key.type === 'rsa' || key.type === 'dsa')\n\t\thashAlgo = 'sha1';\n\tvar signer = key.createSign(hashAlgo);\n\tsigner.write(blob);\n\tsig.signature = signer.sign();\n\treturn (true);\n}\n\nfunction signAsync(cert, signer, done) {\n\tif (cert.signatures.openssh === undefined)\n\t\tcert.signatures.openssh = {};\n\ttry {\n\t\tvar blob = toBuffer(cert, true);\n\t} catch (e) {\n\t\tdelete (cert.signatures.openssh);\n\t\tdone(e);\n\t\treturn;\n\t}\n\tvar sig = cert.signatures.openssh;\n\n\tsigner(blob, function (err, signature) {\n\t\tif (err) {\n\t\t\tdone(err);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\t/*\n\t\t\t * This will throw if the signature isn't of a\n\t\t\t * type/algo that can be used for SSH.\n\t\t\t */\n\t\t\tsignature.toBuffer('ssh');\n\t\t} catch (e) {\n\t\t\tdone(e);\n\t\t\treturn;\n\t\t}\n\t\tsig.signature = signature;\n\t\tdone();\n\t});\n}\n\nfunction write(cert, options) {\n\tif (options === undefined)\n\t\toptions = {};\n\n\tvar blob = toBuffer(cert);\n\tvar out = getCertType(cert.subjectKey) + ' ' + blob.toString('base64');\n\tif (options.comment)\n\t\tout = out + ' ' + options.comment;\n\treturn (out);\n}\n\n\nfunction toBuffer(cert, noSig) {\n\tassert.object(cert.signatures.openssh, 'signature for openssh format');\n\tvar sig = cert.signatures.openssh;\n\n\tif (sig.nonce === undefined)\n\t\tsig.nonce = crypto.randomBytes(16);\n\tvar buf = new SSHBuffer({});\n\tbuf.writeString(getCertType(cert.subjectKey));\n\tbuf.writeBuffer(sig.nonce);\n\n\tvar key = cert.subjectKey;\n\tvar algInfo = algs.info[key.type];\n\talgInfo.parts.forEach(function (part) {\n\t\tbuf.writePart(key.part[part]);\n\t});\n\n\tbuf.writeInt64(cert.serial);\n\n\tvar type = cert.subjects[0].type;\n\tassert.notStrictEqual(type, 'unknown');\n\tcert.subjects.forEach(function (id) {\n\t\tassert.strictEqual(id.type, type);\n\t});\n\ttype = TYPES[type];\n\tbuf.writeInt(type);\n\n\tif (sig.keyId === undefined) {\n\t\tsig.keyId = cert.subjects[0].type + '_' +\n\t\t (cert.subjects[0].uid || cert.subjects[0].hostname);\n\t}\n\tbuf.writeString(sig.keyId);\n\n\tvar sub = new SSHBuffer({});\n\tcert.subjects.forEach(function (id) {\n\t\tif (type === TYPES.host)\n\t\t\tsub.writeString(id.hostname);\n\t\telse if (type === TYPES.user)\n\t\t\tsub.writeString(id.uid);\n\t});\n\tbuf.writeBuffer(sub.toBuffer());\n\n\tbuf.writeInt64(dateToInt64(cert.validFrom));\n\tbuf.writeInt64(dateToInt64(cert.validUntil));\n\n\tvar exts = sig.exts;\n\tif (exts === undefined)\n\t\texts = [];\n\n\tvar extbuf = new SSHBuffer({});\n\texts.forEach(function (ext) {\n\t\tif (ext.critical !== true)\n\t\t\treturn;\n\t\textbuf.writeString(ext.name);\n\t\textbuf.writeBuffer(ext.data);\n\t});\n\tbuf.writeBuffer(extbuf.toBuffer());\n\n\textbuf = new SSHBuffer({});\n\texts.forEach(function (ext) {\n\t\tif (ext.critical === true)\n\t\t\treturn;\n\t\textbuf.writeString(ext.name);\n\t\textbuf.writeBuffer(ext.data);\n\t});\n\tbuf.writeBuffer(extbuf.toBuffer());\n\n\t/* reserved */\n\tbuf.writeBuffer(Buffer.alloc(0));\n\n\tsub = rfc4253.write(cert.issuerKey);\n\tbuf.writeBuffer(sub);\n\n\tif (!noSig)\n\t\tbuf.writeBuffer(sig.signature.toBuffer('ssh'));\n\n\treturn (buf.toBuffer());\n}\n\nfunction getAlg(certType) {\n\tif (certType === 'ssh-rsa-cert-v01@openssh.com')\n\t\treturn ('rsa');\n\tif (certType === 'ssh-dss-cert-v01@openssh.com')\n\t\treturn ('dsa');\n\tif (certType.match(ECDSA_ALGO))\n\t\treturn ('ecdsa');\n\tif (certType === 'ssh-ed25519-cert-v01@openssh.com')\n\t\treturn ('ed25519');\n\tthrow (new Error('Unsupported cert type ' + certType));\n}\n\nfunction getCertType(key) {\n\tif (key.type === 'rsa')\n\t\treturn ('ssh-rsa-cert-v01@openssh.com');\n\tif (key.type === 'dsa')\n\t\treturn ('ssh-dss-cert-v01@openssh.com');\n\tif (key.type === 'ecdsa')\n\t\treturn ('ecdsa-sha2-' + key.curve + '-cert-v01@openssh.com');\n\tif (key.type === 'ed25519')\n\t\treturn ('ssh-ed25519-cert-v01@openssh.com');\n\tthrow (new Error('Unsupported key type ' + key.type));\n}\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar crypto = require('crypto');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\n\nvar pkcs1 = require('./pkcs1');\nvar pkcs8 = require('./pkcs8');\nvar sshpriv = require('./ssh-private');\nvar rfc4253 = require('./rfc4253');\n\nvar errors = require('../errors');\n\nvar OID_PBES2 = '1.2.840.113549.1.5.13';\nvar OID_PBKDF2 = '1.2.840.113549.1.5.12';\n\nvar OID_TO_CIPHER = {\n\t'1.2.840.113549.3.7': '3des-cbc',\n\t'2.16.840.1.101.3.4.1.2': 'aes128-cbc',\n\t'2.16.840.1.101.3.4.1.42': 'aes256-cbc'\n};\nvar CIPHER_TO_OID = {};\nObject.keys(OID_TO_CIPHER).forEach(function (k) {\n\tCIPHER_TO_OID[OID_TO_CIPHER[k]] = k;\n});\n\nvar OID_TO_HASH = {\n\t'1.2.840.113549.2.7': 'sha1',\n\t'1.2.840.113549.2.9': 'sha256',\n\t'1.2.840.113549.2.11': 'sha512'\n};\nvar HASH_TO_OID = {};\nObject.keys(OID_TO_HASH).forEach(function (k) {\n\tHASH_TO_OID[OID_TO_HASH[k]] = k;\n});\n\n/*\n * For reading we support both PKCS#1 and PKCS#8. If we find a private key,\n * we just take the public component of it and use that.\n */\nfunction read(buf, options, forceType) {\n\tvar input = buf;\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\n\tvar lines = buf.trim().split(/[\\r\\n]+/g);\n\n\tvar m;\n\tvar si = -1;\n\twhile (!m && si < lines.length) {\n\t\tm = lines[++si].match(/*JSSTYLED*/\n\t\t /[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);\n\t}\n\tassert.ok(m, 'invalid PEM header');\n\n\tvar m2;\n\tvar ei = lines.length;\n\twhile (!m2 && ei > 0) {\n\t\tm2 = lines[--ei].match(/*JSSTYLED*/\n\t\t /[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);\n\t}\n\tassert.ok(m2, 'invalid PEM footer');\n\n\t/* Begin and end banners must match key type */\n\tassert.equal(m[2], m2[2]);\n\tvar type = m[2].toLowerCase();\n\n\tvar alg;\n\tif (m[1]) {\n\t\t/* They also must match algorithms, if given */\n\t\tassert.equal(m[1], m2[1], 'PEM header and footer mismatch');\n\t\talg = m[1].trim();\n\t}\n\n\tlines = lines.slice(si, ei + 1);\n\n\tvar headers = {};\n\twhile (true) {\n\t\tlines = lines.slice(1);\n\t\tm = lines[0].match(/*JSSTYLED*/\n\t\t /^([A-Za-z0-9-]+): (.+)$/);\n\t\tif (!m)\n\t\t\tbreak;\n\t\theaders[m[1].toLowerCase()] = m[2];\n\t}\n\n\t/* Chop off the first and last lines */\n\tlines = lines.slice(0, -1).join('');\n\tbuf = Buffer.from(lines, 'base64');\n\n\tvar cipher, key, iv;\n\tif (headers['proc-type']) {\n\t\tvar parts = headers['proc-type'].split(',');\n\t\tif (parts[0] === '4' && parts[1] === 'ENCRYPTED') {\n\t\t\tif (typeof (options.passphrase) === 'string') {\n\t\t\t\toptions.passphrase = Buffer.from(\n\t\t\t\t options.passphrase, 'utf-8');\n\t\t\t}\n\t\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t\t options.filename, 'PEM'));\n\t\t\t} else {\n\t\t\t\tparts = headers['dek-info'].split(',');\n\t\t\t\tassert.ok(parts.length === 2);\n\t\t\t\tcipher = parts[0].toLowerCase();\n\t\t\t\tiv = Buffer.from(parts[1], 'hex');\n\t\t\t\tkey = utils.opensslKeyDeriv(cipher, iv,\n\t\t\t\t options.passphrase, 1).key;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alg && alg.toLowerCase() === 'encrypted') {\n\t\tvar eder = new asn1.BerReader(buf);\n\t\tvar pbesEnd;\n\t\teder.readSequence();\n\n\t\teder.readSequence();\n\t\tpbesEnd = eder.offset + eder.length;\n\n\t\tvar method = eder.readOID();\n\t\tif (method !== OID_PBES2) {\n\t\t\tthrow (new Error('Unsupported PEM/PKCS8 encryption ' +\n\t\t\t 'scheme: ' + method));\n\t\t}\n\n\t\teder.readSequence();\t/* PBES2-params */\n\n\t\teder.readSequence();\t/* keyDerivationFunc */\n\t\tvar kdfEnd = eder.offset + eder.length;\n\t\tvar kdfOid = eder.readOID();\n\t\tif (kdfOid !== OID_PBKDF2)\n\t\t\tthrow (new Error('Unsupported PBES2 KDF: ' + kdfOid));\n\t\teder.readSequence();\n\t\tvar salt = eder.readString(asn1.Ber.OctetString, true);\n\t\tvar iterations = eder.readInt();\n\t\tvar hashAlg = 'sha1';\n\t\tif (eder.offset < kdfEnd) {\n\t\t\teder.readSequence();\n\t\t\tvar hashAlgOid = eder.readOID();\n\t\t\thashAlg = OID_TO_HASH[hashAlgOid];\n\t\t\tif (hashAlg === undefined) {\n\t\t\t\tthrow (new Error('Unsupported PBKDF2 hash: ' +\n\t\t\t\t hashAlgOid));\n\t\t\t}\n\t\t}\n\t\teder._offset = kdfEnd;\n\n\t\teder.readSequence();\t/* encryptionScheme */\n\t\tvar cipherOid = eder.readOID();\n\t\tcipher = OID_TO_CIPHER[cipherOid];\n\t\tif (cipher === undefined) {\n\t\t\tthrow (new Error('Unsupported PBES2 cipher: ' +\n\t\t\t cipherOid));\n\t\t}\n\t\tiv = eder.readString(asn1.Ber.OctetString, true);\n\n\t\teder._offset = pbesEnd;\n\t\tbuf = eder.readString(asn1.Ber.OctetString, true);\n\n\t\tif (typeof (options.passphrase) === 'string') {\n\t\t\toptions.passphrase = Buffer.from(\n\t\t\t options.passphrase, 'utf-8');\n\t\t}\n\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t options.filename, 'PEM'));\n\t\t}\n\n\t\tvar cinfo = utils.opensshCipherInfo(cipher);\n\n\t\tcipher = cinfo.opensslName;\n\t\tkey = utils.pbkdf2(hashAlg, salt, iterations, cinfo.keySize,\n\t\t options.passphrase);\n\t\talg = undefined;\n\t}\n\n\tif (cipher && key && iv) {\n\t\tvar cipherStream = crypto.createDecipheriv(cipher, key, iv);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once('error', function (e) {\n\t\t\tif (e.toString().indexOf('bad decrypt') !== -1) {\n\t\t\t\tthrow (new Error('Incorrect passphrase ' +\n\t\t\t\t 'supplied, could not decrypt key'));\n\t\t\t}\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(buf);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tbuf = Buffer.concat(chunks);\n\t}\n\n\t/* The new OpenSSH internal format abuses PEM headers */\n\tif (alg && alg.toLowerCase() === 'openssh')\n\t\treturn (sshpriv.readSSHPrivate(type, buf, options));\n\tif (alg && alg.toLowerCase() === 'ssh2')\n\t\treturn (rfc4253.readType(type, buf, options));\n\n\tvar der = new asn1.BerReader(buf);\n\tder.originalInput = input;\n\n\t/*\n\t * All of the PEM file types start with a sequence tag, so chop it\n\t * off here\n\t */\n\tder.readSequence();\n\n\t/* PKCS#1 type keys name an algorithm in the banner explicitly */\n\tif (alg) {\n\t\tif (forceType)\n\t\t\tassert.strictEqual(forceType, 'pkcs1');\n\t\treturn (pkcs1.readPkcs1(alg, type, der));\n\t} else {\n\t\tif (forceType)\n\t\t\tassert.strictEqual(forceType, 'pkcs8');\n\t\treturn (pkcs8.readPkcs8(alg, type, der));\n\t}\n}\n\nfunction write(key, options, type) {\n\tassert.object(key);\n\n\tvar alg = {\n\t 'ecdsa': 'EC',\n\t 'rsa': 'RSA',\n\t 'dsa': 'DSA',\n\t 'ed25519': 'EdDSA'\n\t}[key.type];\n\tvar header;\n\n\tvar der = new asn1.BerWriter();\n\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tif (type && type === 'pkcs8') {\n\t\t\theader = 'PRIVATE KEY';\n\t\t\tpkcs8.writePkcs8(der, key);\n\t\t} else {\n\t\t\tif (type)\n\t\t\t\tassert.strictEqual(type, 'pkcs1');\n\t\t\theader = alg + ' PRIVATE KEY';\n\t\t\tpkcs1.writePkcs1(der, key);\n\t\t}\n\n\t} else if (Key.isKey(key)) {\n\t\tif (type && type === 'pkcs1') {\n\t\t\theader = alg + ' PUBLIC KEY';\n\t\t\tpkcs1.writePkcs1(der, key);\n\t\t} else {\n\t\t\tif (type)\n\t\t\t\tassert.strictEqual(type, 'pkcs8');\n\t\t\theader = 'PUBLIC KEY';\n\t\t\tpkcs8.writePkcs8(der, key);\n\t\t}\n\n\t} else {\n\t\tthrow (new Error('key is not a Key or PrivateKey'));\n\t}\n\n\tvar tmp = der.buffer.toString('base64');\n\tvar len = tmp.length + (tmp.length / 64) +\n\t 18 + 16 + header.length*2 + 10;\n\tvar buf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write('-----BEGIN ' + header + '-----\\n', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 64;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write('-----END ' + header + '-----\\n', o);\n\n\treturn (buf.slice(0, o));\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadPkcs1: readPkcs1,\n\twrite: write,\n\twritePkcs1: writePkcs1\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\n\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\n\nvar pkcs8 = require('./pkcs8');\nvar readECDSACurve = pkcs8.readECDSACurve;\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options, 'pkcs1'));\n}\n\nfunction write(key, options) {\n\treturn (pem.write(key, options, 'pkcs1'));\n}\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t nm + ' is not an Integer');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction readPkcs1(alg, type, der) {\n\tswitch (alg) {\n\tcase 'RSA':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs1RSAPublic(der));\n\t\telse if (type === 'private')\n\t\t\treturn (readPkcs1RSAPrivate(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'DSA':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs1DSAPublic(der));\n\t\telse if (type === 'private')\n\t\t\treturn (readPkcs1DSAPrivate(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'EC':\n\tcase 'ECDSA':\n\t\tif (type === 'private')\n\t\t\treturn (readPkcs1ECDSAPrivate(der));\n\t\telse if (type === 'public')\n\t\t\treturn (readPkcs1ECDSAPublic(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'EDDSA':\n\tcase 'EdDSA':\n\t\tif (type === 'private')\n\t\t\treturn (readPkcs1EdDSAPrivate(der));\n\t\tthrow (new Error(type + ' keys not supported with EdDSA'));\n\tdefault:\n\t\tthrow (new Error('Unknown key algo: ' + alg));\n\t}\n}\n\nfunction readPkcs1RSAPublic(der) {\n\t// modulus and exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'exponent');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'n', data: n }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1RSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version[0], 0);\n\n\t// modulus then public exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'public exponent');\n\tvar d = readMPInt(der, 'private exponent');\n\tvar p = readMPInt(der, 'prime1');\n\tvar q = readMPInt(der, 'prime2');\n\tvar dmodp = readMPInt(der, 'exponent1');\n\tvar dmodq = readMPInt(der, 'exponent2');\n\tvar iqmp = readMPInt(der, 'iqmp');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'n', data: n },\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'd', data: d },\n\t\t\t{ name: 'iqmp', data: iqmp },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'dmodp', data: dmodp },\n\t\t\t{ name: 'dmodq', data: dmodq }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 0);\n\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\tvar y = readMPInt(der, 'y');\n\tvar x = readMPInt(der, 'x');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g },\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'x', data: x }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1EdDSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier');\n\n\tder.readSequence(0xa1);\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: 'ed25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: 'k', data: k }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPublic(der) {\n\tvar y = readMPInt(der, 'y');\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPublic(der) {\n\tder.readSequence();\n\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey');\n\n\tvar curveOid = der.readOID();\n\n\tvar curve;\n\tvar curves = Object.keys(algs.curves);\n\tfor (var j = 0; j < curves.length; ++j) {\n\t\tvar c = curves[j];\n\t\tvar cd = algs.curves[c];\n\t\tif (cd.pkcs8oid === curveOid) {\n\t\t\tcurve = c;\n\t\t\tbreak;\n\t\t}\n\t}\n\tassert.string(curve, 'a known ECDSA named curve');\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curve) },\n\t\t\t{ name: 'Q', data: Q }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar d = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar curve = readECDSACurve(der);\n\tassert.string(curve, 'a known elliptic curve');\n\n\tder.readSequence(0xa1);\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curve) },\n\t\t\t{ name: 'Q', data: Q },\n\t\t\t{ name: 'd', data: d }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction writePkcs1(der, key) {\n\tder.startSequence();\n\n\tswitch (key.type) {\n\tcase 'rsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1RSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1RSAPublic(der, key);\n\t\tbreak;\n\tcase 'dsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1DSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1DSAPublic(der, key);\n\t\tbreak;\n\tcase 'ecdsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1ECDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1ECDSAPublic(der, key);\n\t\tbreak;\n\tcase 'ed25519':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1EdDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1EdDSAPublic(der, key);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error('Unknown key algo: ' + key.type));\n\t}\n\n\tder.endSequence();\n}\n\nfunction writePkcs1RSAPublic(der, key) {\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1RSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tif (!key.part.dmodp || !key.part.dmodq)\n\t\tutils.addRSAMissing(key);\n\tder.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPublic(der, key) {\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1ECDSAPublic(der, key) {\n\tder.startSequence();\n\n\tder.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, 'a known ECDSA named curve');\n\tder.writeOID(curveOid);\n\n\tder.endSequence();\n\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs1ECDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, 'a known ECDSA named curve');\n\tder.writeOID(curveOid);\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.k.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tder.writeOID('1.3.101.112');\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tutils.writeBitString(der, key.part.A.data);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPublic(der, key) {\n\tthrow (new Error('Public keys are not supported for EdDSA PKCS#1'));\n}\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadPkcs8: readPkcs8,\n\twrite: write,\n\twritePkcs8: writePkcs8,\n\tpkcs8ToBuffer: pkcs8ToBuffer,\n\n\treadECDSACurve: readECDSACurve,\n\twriteECDSACurve: writeECDSACurve\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options, 'pkcs8'));\n}\n\nfunction write(key, options) {\n\treturn (pem.write(key, options, 'pkcs8'));\n}\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t nm + ' is not an Integer');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction readPkcs8(alg, type, der) {\n\t/* Private keys in pkcs#8 format have a weird extra int */\n\tif (der.peek() === asn1.Ber.Integer) {\n\t\tassert.strictEqual(type, 'private',\n\t\t 'unexpected Integer at start of public key');\n\t\tder.readString(asn1.Ber.Integer, true);\n\t}\n\n\tder.readSequence();\n\tvar next = der.offset + der.length;\n\n\tvar oid = der.readOID();\n\tswitch (oid) {\n\tcase '1.2.840.113549.1.1.1':\n\t\tder._offset = next;\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs8RSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8RSAPrivate(der));\n\tcase '1.2.840.10040.4.1':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs8DSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8DSAPrivate(der));\n\tcase '1.2.840.10045.2.1':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs8ECDSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8ECDSAPrivate(der));\n\tcase '1.3.101.112':\n\t\tif (type === 'public') {\n\t\t\treturn (readPkcs8EdDSAPublic(der));\n\t\t} else {\n\t\t\treturn (readPkcs8EdDSAPrivate(der));\n\t\t}\n\tcase '1.3.101.110':\n\t\tif (type === 'public') {\n\t\t\treturn (readPkcs8X25519Public(der));\n\t\t} else {\n\t\t\treturn (readPkcs8X25519Private(der));\n\t\t}\n\tdefault:\n\t\tthrow (new Error('Unknown key type OID ' + oid));\n\t}\n}\n\nfunction readPkcs8RSAPublic(der) {\n\t// bit string sequence\n\tder.readSequence(asn1.Ber.BitString);\n\tder.readByte();\n\tder.readSequence();\n\n\t// modulus\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'exponent');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tsource: der.originalInput,\n\t\tparts: [\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'n', data: n }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8RSAPrivate(der) {\n\tder.readSequence(asn1.Ber.OctetString);\n\tder.readSequence();\n\n\tvar ver = readMPInt(der, 'version');\n\tassert.equal(ver[0], 0x0, 'unknown RSA private key version');\n\n\t// modulus then public exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'public exponent');\n\tvar d = readMPInt(der, 'private exponent');\n\tvar p = readMPInt(der, 'prime1');\n\tvar q = readMPInt(der, 'prime2');\n\tvar dmodp = readMPInt(der, 'exponent1');\n\tvar dmodq = readMPInt(der, 'exponent2');\n\tvar iqmp = readMPInt(der, 'iqmp');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'n', data: n },\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'd', data: d },\n\t\t\t{ name: 'iqmp', data: iqmp },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'dmodp', data: dmodp },\n\t\t\t{ name: 'dmodq', data: dmodq }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8DSAPublic(der) {\n\tder.readSequence();\n\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\n\t// bit string sequence\n\tder.readSequence(asn1.Ber.BitString);\n\tder.readByte();\n\n\tvar y = readMPInt(der, 'y');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g },\n\t\t\t{ name: 'y', data: y }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8DSAPrivate(der) {\n\tder.readSequence();\n\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar x = readMPInt(der, 'x');\n\n\t/* The pkcs#8 format does not include the public key */\n\tvar y = utils.calculateDSAPublic(g, p, x);\n\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g },\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'x', data: x }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readECDSACurve(der) {\n\tvar curveName, curveNames;\n\tvar j, c, cd;\n\n\tif (der.peek() === asn1.Ber.OID) {\n\t\tvar oid = der.readOID();\n\n\t\tcurveNames = Object.keys(algs.curves);\n\t\tfor (j = 0; j < curveNames.length; ++j) {\n\t\t\tc = curveNames[j];\n\t\t\tcd = algs.curves[c];\n\t\t\tif (cd.pkcs8oid === oid) {\n\t\t\t\tcurveName = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\t// ECParameters sequence\n\t\tder.readSequence();\n\t\tvar version = der.readString(asn1.Ber.Integer, true);\n\t\tassert.strictEqual(version[0], 1, 'ECDSA key not version 1');\n\n\t\tvar curve = {};\n\n\t\t// FieldID sequence\n\t\tder.readSequence();\n\t\tvar fieldTypeOid = der.readOID();\n\t\tassert.strictEqual(fieldTypeOid, '1.2.840.10045.1.1',\n\t\t 'ECDSA key is not from a prime-field');\n\t\tvar p = curve.p = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.Integer, true));\n\t\t/*\n\t\t * p always starts with a 1 bit, so count the zeros to get its\n\t\t * real size.\n\t\t */\n\t\tcurve.size = p.length * 8 - utils.countZeros(p);\n\n\t\t// Curve sequence\n\t\tder.readSequence();\n\t\tcurve.a = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.OctetString, true));\n\t\tcurve.b = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.OctetString, true));\n\t\tif (der.peek() === asn1.Ber.BitString)\n\t\t\tcurve.s = der.readString(asn1.Ber.BitString, true);\n\n\t\t// Combined Gx and Gy\n\t\tcurve.G = der.readString(asn1.Ber.OctetString, true);\n\t\tassert.strictEqual(curve.G[0], 0x4,\n\t\t 'uncompressed G is required');\n\n\t\tcurve.n = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.Integer, true));\n\t\tcurve.h = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.Integer, true));\n\t\tassert.strictEqual(curve.h[0], 0x1, 'a cofactor=1 curve is ' +\n\t\t 'required');\n\n\t\tcurveNames = Object.keys(algs.curves);\n\t\tvar ks = Object.keys(curve);\n\t\tfor (j = 0; j < curveNames.length; ++j) {\n\t\t\tc = curveNames[j];\n\t\t\tcd = algs.curves[c];\n\t\t\tvar equal = true;\n\t\t\tfor (var i = 0; i < ks.length; ++i) {\n\t\t\t\tvar k = ks[i];\n\t\t\t\tif (cd[k] === undefined)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (typeof (cd[k]) === 'object' &&\n\t\t\t\t cd[k].equals !== undefined) {\n\t\t\t\t\tif (!cd[k].equals(curve[k])) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (Buffer.isBuffer(cd[k])) {\n\t\t\t\t\tif (cd[k].toString('binary')\n\t\t\t\t\t !== curve[k].toString('binary')) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (cd[k] !== curve[k]) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (equal) {\n\t\t\t\tcurveName = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn (curveName);\n}\n\nfunction readPkcs8ECDSAPrivate(der) {\n\tvar curveName = readECDSACurve(der);\n\tassert.string(curveName, 'a known elliptic curve');\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tder.readSequence();\n\n\tvar version = readMPInt(der, 'version');\n\tassert.equal(version[0], 1, 'unknown version of ECDSA key');\n\n\tvar d = der.readString(asn1.Ber.OctetString, true);\n\tvar Q;\n\n\tif (der.peek() == 0xa0) {\n\t\tder.readSequence(0xa0);\n\t\tder._offset += der.length;\n\t}\n\tif (der.peek() == 0xa1) {\n\t\tder.readSequence(0xa1);\n\t\tQ = der.readString(asn1.Ber.BitString, true);\n\t\tQ = utils.ecNormalize(Q);\n\t}\n\n\tif (Q === undefined) {\n\t\tvar pub = utils.publicFromPrivateECDSA(curveName, d);\n\t\tQ = pub.part.Q.data;\n\t}\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curveName) },\n\t\t\t{ name: 'Q', data: Q },\n\t\t\t{ name: 'd', data: d }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8ECDSAPublic(der) {\n\tvar curveName = readECDSACurve(der);\n\tassert.string(curveName, 'a known elliptic curve');\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curveName) },\n\t\t\t{ name: 'Q', data: Q }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8EdDSAPublic(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: 'ed25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8X25519Public(der) {\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: 'curve25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8EdDSAPrivate(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\tk = utils.zeroPadToLength(k, 32);\n\n\tvar A;\n\tif (der.peek() === asn1.Ber.BitString) {\n\t\tA = utils.readBitString(der);\n\t\tA = utils.zeroPadToLength(A, 32);\n\t} else {\n\t\tA = utils.calculateED25519Public(k);\n\t}\n\n\tvar key = {\n\t\ttype: 'ed25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: 'k', data: utils.zeroPadToLength(k, 32) }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8X25519Private(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\tk = utils.zeroPadToLength(k, 32);\n\n\tvar A = utils.calculateX25519Public(k);\n\n\tvar key = {\n\t\ttype: 'curve25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: 'k', data: utils.zeroPadToLength(k, 32) }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction pkcs8ToBuffer(key) {\n\tvar der = new asn1.BerWriter();\n\twritePkcs8(der, key);\n\treturn (der.buffer);\n}\n\nfunction writePkcs8(der, key) {\n\tder.startSequence();\n\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tvar sillyInt = Buffer.from([0]);\n\t\tder.writeBuffer(sillyInt, asn1.Ber.Integer);\n\t}\n\n\tder.startSequence();\n\tswitch (key.type) {\n\tcase 'rsa':\n\t\tder.writeOID('1.2.840.113549.1.1.1');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8RSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8RSAPublic(key, der);\n\t\tbreak;\n\tcase 'dsa':\n\t\tder.writeOID('1.2.840.10040.4.1');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8DSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8DSAPublic(key, der);\n\t\tbreak;\n\tcase 'ecdsa':\n\t\tder.writeOID('1.2.840.10045.2.1');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8ECDSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8ECDSAPublic(key, der);\n\t\tbreak;\n\tcase 'ed25519':\n\t\tder.writeOID('1.3.101.112');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\tthrow (new Error('Ed25519 private keys in pkcs8 ' +\n\t\t\t 'format are not supported'));\n\t\twritePkcs8EdDSAPublic(key, der);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error('Unsupported key type: ' + key.type));\n\t}\n\n\tder.endSequence();\n}\n\nfunction writePkcs8RSAPrivate(key, der) {\n\tder.writeNull();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.startSequence();\n\n\tvar version = Buffer.from([0]);\n\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tif (!key.part.dmodp || !key.part.dmodq)\n\t\tutils.addRSAMissing(key);\n\tder.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n\n\tder.endSequence();\n\tder.endSequence();\n}\n\nfunction writePkcs8RSAPublic(key, der) {\n\tder.writeNull();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.BitString);\n\tder.writeByte(0x00);\n\n\tder.startSequence();\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.endSequence();\n\n\tder.endSequence();\n}\n\nfunction writePkcs8DSAPrivate(key, der) {\n\tder.startSequence();\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.endSequence();\n\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n\tder.endSequence();\n}\n\nfunction writePkcs8DSAPublic(key, der) {\n\tder.startSequence();\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.endSequence();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.BitString);\n\tder.writeByte(0x00);\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.endSequence();\n}\n\nfunction writeECDSACurve(key, der) {\n\tvar curve = algs.curves[key.curve];\n\tif (curve.pkcs8oid) {\n\t\t/* This one has a name in pkcs#8, so just write the oid */\n\t\tder.writeOID(curve.pkcs8oid);\n\n\t} else {\n\t\t// ECParameters sequence\n\t\tder.startSequence();\n\n\t\tvar version = Buffer.from([1]);\n\t\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\t\t// FieldID sequence\n\t\tder.startSequence();\n\t\tder.writeOID('1.2.840.10045.1.1'); // prime-field\n\t\tder.writeBuffer(curve.p, asn1.Ber.Integer);\n\t\tder.endSequence();\n\n\t\t// Curve sequence\n\t\tder.startSequence();\n\t\tvar a = curve.p;\n\t\tif (a[0] === 0x0)\n\t\t\ta = a.slice(1);\n\t\tder.writeBuffer(a, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.b, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.s, asn1.Ber.BitString);\n\t\tder.endSequence();\n\n\t\tder.writeBuffer(curve.G, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.n, asn1.Ber.Integer);\n\t\tvar h = curve.h;\n\t\tif (!h) {\n\t\t\th = Buffer.from([1]);\n\t\t}\n\t\tder.writeBuffer(h, asn1.Ber.Integer);\n\n\t\t// ECParameters\n\t\tder.endSequence();\n\t}\n}\n\nfunction writePkcs8ECDSAPublic(key, der) {\n\twriteECDSACurve(key, der);\n\tder.endSequence();\n\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs8ECDSAPrivate(key, der) {\n\twriteECDSACurve(key, der);\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.startSequence();\n\n\tvar version = Buffer.from([1]);\n\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa1);\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n\tder.endSequence();\n\n\tder.endSequence();\n\tder.endSequence();\n}\n\nfunction writePkcs8EdDSAPublic(key, der) {\n\tder.endSequence();\n\n\tutils.writeBitString(der, key.part.A.data);\n}\n\nfunction writePkcs8EdDSAPrivate(key, der) {\n\tder.endSequence();\n\n\tvar k = utils.mpNormalize(key.part.k.data, true);\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.writeBuffer(k, asn1.Ber.OctetString);\n\tder.endSequence();\n}\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar rfc4253 = require('./rfc4253');\nvar Key = require('../key');\nvar SSHBuffer = require('../ssh-buffer');\nvar crypto = require('crypto');\nvar PrivateKey = require('../private-key');\n\nvar errors = require('../errors');\n\n// https://tartarus.org/~simon/putty-prerel-snapshots/htmldoc/AppendixC.html\nfunction read(buf, options) {\n\tvar lines = buf.toString('ascii').split(/[\\r\\n]+/);\n\tvar found = false;\n\tvar parts;\n\tvar si = 0;\n\tvar formatVersion;\n\twhile (si < lines.length) {\n\t\tparts = splitHeader(lines[si++]);\n\t\tif (parts) {\n\t\t\tformatVersion = {\n\t\t\t\t'putty-user-key-file-2': 2,\n\t\t\t\t'putty-user-key-file-3': 3\n\t\t\t}[parts[0].toLowerCase()];\n\t\t\tif (formatVersion) {\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (!found) {\n\t\tthrow (new Error('No PuTTY format first line found'));\n\t}\n\tvar alg = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'encryption');\n\tvar encryption = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'comment');\n\tvar comment = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'public-lines');\n\tvar publicLines = parseInt(parts[1], 10);\n\tif (!isFinite(publicLines) || publicLines < 0 ||\n\t publicLines > lines.length) {\n\t\tthrow (new Error('Invalid public-lines count'));\n\t}\n\n\tvar publicBuf = Buffer.from(\n\t lines.slice(si, si + publicLines).join(''), 'base64');\n\tvar keyType = rfc4253.algToKeyType(alg);\n\tvar key = rfc4253.read(publicBuf);\n\tif (key.type !== keyType) {\n\t\tthrow (new Error('Outer key algorithm mismatch'));\n\t}\n\n\tsi += publicLines;\n\tif (lines[si]) {\n\t\tparts = splitHeader(lines[si++]);\n\t\tassert.equal(parts[0].toLowerCase(), 'private-lines');\n\t\tvar privateLines = parseInt(parts[1], 10);\n\t\tif (!isFinite(privateLines) || privateLines < 0 ||\n\t\t privateLines > lines.length) {\n\t\t\tthrow (new Error('Invalid private-lines count'));\n\t\t}\n\n\t\tvar privateBuf = Buffer.from(\n\t\t\tlines.slice(si, si + privateLines).join(''), 'base64');\n\n\t\tif (encryption !== 'none' && formatVersion === 3) {\n\t\t\tthrow new Error('Encrypted keys arenot supported for' +\n\t\t\t' PuTTY format version 3');\n\t\t}\n\n\t\tif (encryption === 'aes256-cbc') {\n\t\t\tif (!options.passphrase) {\n\t\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t\t\toptions.filename, 'PEM'));\n\t\t\t}\n\n\t\t\tvar iv = Buffer.alloc(16, 0);\n\t\t\tvar decipher = crypto.createDecipheriv(\n\t\t\t\t'aes-256-cbc',\n\t\t\t\tderivePPK2EncryptionKey(options.passphrase),\n\t\t\t\tiv);\n\t\t\tdecipher.setAutoPadding(false);\n\t\t\tprivateBuf = Buffer.concat([\n\t\t\t\tdecipher.update(privateBuf), decipher.final()]);\n\t\t}\n\n\t\tkey = new PrivateKey(key);\n\t\tif (key.type !== keyType) {\n\t\t\tthrow (new Error('Outer key algorithm mismatch'));\n\t\t}\n\n\t\tvar sshbuf = new SSHBuffer({buffer: privateBuf});\n\t\tvar privateKeyParts;\n\t\tif (alg === 'ssh-dss') {\n\t\t\tprivateKeyParts = [ {\n\t\t\t\tname: 'x',\n\t\t\t\tdata: sshbuf.readBuffer()\n\t\t\t}];\n\t\t} else if (alg === 'ssh-rsa') {\n\t\t\tprivateKeyParts = [\n\t\t\t\t{ name: 'd', data: sshbuf.readBuffer() },\n\t\t\t\t{ name: 'p', data: sshbuf.readBuffer() },\n\t\t\t\t{ name: 'q', data: sshbuf.readBuffer() },\n\t\t\t\t{ name: 'iqmp', data: sshbuf.readBuffer() }\n\t\t\t];\n\t\t} else if (alg.match(/^ecdsa-sha2-nistp/)) {\n\t\t\tprivateKeyParts = [ {\n\t\t\t\tname: 'd', data: sshbuf.readBuffer()\n\t\t\t} ];\n\t\t} else if (alg === 'ssh-ed25519') {\n\t\t\tprivateKeyParts = [ {\n\t\t\t\tname: 'k', data: sshbuf.readBuffer()\n\t\t\t} ];\n\t\t} else {\n\t\t\tthrow new Error('Unsupported PPK key type: ' + alg);\n\t\t}\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: key.type,\n\t\t\tparts: key.parts.concat(privateKeyParts)\n\t\t});\n\t}\n\n\tkey.comment = comment;\n\treturn (key);\n}\n\nfunction derivePPK2EncryptionKey(passphrase) {\n\tvar hash1 = crypto.createHash('sha1').update(Buffer.concat([\n\t\tBuffer.from([0, 0, 0, 0]),\n\t\tBuffer.from(passphrase)\n\t])).digest();\n\tvar hash2 = crypto.createHash('sha1').update(Buffer.concat([\n\t\tBuffer.from([0, 0, 0, 1]),\n\t\tBuffer.from(passphrase)\n\t])).digest();\n\treturn (Buffer.concat([hash1, hash2]).slice(0, 32));\n}\n\nfunction splitHeader(line) {\n\tvar idx = line.indexOf(':');\n\tif (idx === -1)\n\t\treturn (null);\n\tvar header = line.slice(0, idx);\n\t++idx;\n\twhile (line[idx] === ' ')\n\t\t++idx;\n\tvar rest = line.slice(idx);\n\treturn ([header, rest]);\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\tif (!Key.isKey(key))\n\t\tthrow (new Error('Must be a public key'));\n\n\tvar alg = rfc4253.keyTypeToAlg(key);\n\tvar buf = rfc4253.write(key);\n\tvar comment = key.comment || '';\n\n\tvar b64 = buf.toString('base64');\n\tvar lines = wrap(b64, 64);\n\n\tlines.unshift('Public-Lines: ' + lines.length);\n\tlines.unshift('Comment: ' + comment);\n\tlines.unshift('Encryption: none');\n\tlines.unshift('PuTTY-User-Key-File-2: ' + alg);\n\n\treturn (Buffer.from(lines.join('\\n') + '\\n'));\n}\n\nfunction wrap(txt, len) {\n\tvar lines = [];\n\tvar pos = 0;\n\twhile (pos < txt.length) {\n\t\tlines.push(txt.slice(pos, pos + 64));\n\t\tpos += 64;\n\t}\n\treturn (lines);\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read.bind(undefined, false, undefined),\n\treadType: read.bind(undefined, false),\n\twrite: write,\n\t/* semi-private api, used by sshpk-agent */\n\treadPartial: read.bind(undefined, true),\n\n\t/* shared with ssh format */\n\treadInternal: read,\n\tkeyTypeToAlg: keyTypeToAlg,\n\talgToKeyType: algToKeyType\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar SSHBuffer = require('../ssh-buffer');\n\nfunction algToKeyType(alg) {\n\tassert.string(alg);\n\tif (alg === 'ssh-dss')\n\t\treturn ('dsa');\n\telse if (alg === 'ssh-rsa')\n\t\treturn ('rsa');\n\telse if (alg === 'ssh-ed25519')\n\t\treturn ('ed25519');\n\telse if (alg === 'ssh-curve25519')\n\t\treturn ('curve25519');\n\telse if (alg.match(/^ecdsa-sha2-/))\n\t\treturn ('ecdsa');\n\telse\n\t\tthrow (new Error('Unknown algorithm ' + alg));\n}\n\nfunction keyTypeToAlg(key) {\n\tassert.object(key);\n\tif (key.type === 'dsa')\n\t\treturn ('ssh-dss');\n\telse if (key.type === 'rsa')\n\t\treturn ('ssh-rsa');\n\telse if (key.type === 'ed25519')\n\t\treturn ('ssh-ed25519');\n\telse if (key.type === 'curve25519')\n\t\treturn ('ssh-curve25519');\n\telse if (key.type === 'ecdsa')\n\t\treturn ('ecdsa-sha2-' + key.part.curve.data.toString());\n\telse\n\t\tthrow (new Error('Unknown key type ' + key.type));\n}\n\nfunction read(partial, type, buf, options) {\n\tif (typeof (buf) === 'string')\n\t\tbuf = Buffer.from(buf);\n\tassert.buffer(buf, 'buf');\n\n\tvar key = {};\n\n\tvar parts = key.parts = [];\n\tvar sshbuf = new SSHBuffer({buffer: buf});\n\n\tvar alg = sshbuf.readString();\n\tassert.ok(!sshbuf.atEnd(), 'key must have at least one part');\n\n\tkey.type = algToKeyType(alg);\n\n\tvar partCount = algs.info[key.type].parts.length;\n\tif (type && type === 'private')\n\t\tpartCount = algs.privInfo[key.type].parts.length;\n\n\twhile (!sshbuf.atEnd() && parts.length < partCount)\n\t\tparts.push(sshbuf.readPart());\n\twhile (!partial && !sshbuf.atEnd())\n\t\tparts.push(sshbuf.readPart());\n\n\tassert.ok(parts.length >= 1,\n\t 'key must have at least one part');\n\tassert.ok(partial || sshbuf.atEnd(),\n\t 'leftover bytes at end of key');\n\n\tvar Constructor = Key;\n\tvar algInfo = algs.info[key.type];\n\tif (type === 'private' || algInfo.parts.length !== parts.length) {\n\t\talgInfo = algs.privInfo[key.type];\n\t\tConstructor = PrivateKey;\n\t}\n\tassert.strictEqual(algInfo.parts.length, parts.length);\n\n\tif (key.type === 'ecdsa') {\n\t\tvar res = /^ecdsa-sha2-(.+)$/.exec(alg);\n\t\tassert.ok(res !== null);\n\t\tassert.strictEqual(res[1], parts[0].data.toString());\n\t}\n\n\tvar normalized = true;\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tvar p = parts[i];\n\t\tp.name = algInfo.parts[i];\n\t\t/*\n\t\t * OpenSSH stores ed25519 \"private\" keys as seed + public key\n\t\t * concat'd together (k followed by A). We want to keep them\n\t\t * separate for other formats that don't do this.\n\t\t */\n\t\tif (key.type === 'ed25519' && p.name === 'k')\n\t\t\tp.data = p.data.slice(0, 32);\n\n\t\tif (p.name !== 'curve' && algInfo.normalize !== false) {\n\t\t\tvar nd;\n\t\t\tif (key.type === 'ed25519') {\n\t\t\t\tnd = utils.zeroPadToLength(p.data, 32);\n\t\t\t} else {\n\t\t\t\tnd = utils.mpNormalize(p.data);\n\t\t\t}\n\t\t\tif (nd.toString('binary') !==\n\t\t\t p.data.toString('binary')) {\n\t\t\t\tp.data = nd;\n\t\t\t\tnormalized = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (normalized)\n\t\tkey._rfc4253Cache = sshbuf.toBuffer();\n\n\tif (partial && typeof (partial) === 'object') {\n\t\tpartial.remainder = sshbuf.remainder();\n\t\tpartial.consumed = sshbuf._offset;\n\t}\n\n\treturn (new Constructor(key));\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\n\tvar alg = keyTypeToAlg(key);\n\tvar i;\n\n\tvar algInfo = algs.info[key.type];\n\tif (PrivateKey.isPrivateKey(key))\n\t\talgInfo = algs.privInfo[key.type];\n\tvar parts = algInfo.parts;\n\n\tvar buf = new SSHBuffer({});\n\n\tbuf.writeString(alg);\n\n\tfor (i = 0; i < parts.length; ++i) {\n\t\tvar data = key.part[parts[i]].data;\n\t\tif (algInfo.normalize !== false) {\n\t\t\tif (key.type === 'ed25519')\n\t\t\t\tdata = utils.zeroPadToLength(data, 32);\n\t\t\telse\n\t\t\t\tdata = utils.mpNormalize(data);\n\t\t}\n\t\tif (key.type === 'ed25519' && parts[i] === 'k')\n\t\t\tdata = Buffer.concat([data, key.part.A.data]);\n\t\tbuf.writeBuffer(data);\n\t}\n\n\treturn (buf.toBuffer());\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadSSHPrivate: readSSHPrivate,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar crypto = require('crypto');\n\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\nvar rfc4253 = require('./rfc4253');\nvar SSHBuffer = require('../ssh-buffer');\nvar errors = require('../errors');\n\nvar bcrypt;\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options));\n}\n\nvar MAGIC = 'openssh-key-v1';\n\nfunction readSSHPrivate(type, buf, options) {\n\tbuf = new SSHBuffer({buffer: buf});\n\n\tvar magic = buf.readCString();\n\tassert.strictEqual(magic, MAGIC, 'bad magic string');\n\n\tvar cipher = buf.readString();\n\tvar kdf = buf.readString();\n\tvar kdfOpts = buf.readBuffer();\n\n\tvar nkeys = buf.readInt();\n\tif (nkeys !== 1) {\n\t\tthrow (new Error('OpenSSH-format key file contains ' +\n\t\t 'multiple keys: this is unsupported.'));\n\t}\n\n\tvar pubKey = buf.readBuffer();\n\n\tif (type === 'public') {\n\t\tassert.ok(buf.atEnd(), 'excess bytes left after key');\n\t\treturn (rfc4253.read(pubKey));\n\t}\n\n\tvar privKeyBlob = buf.readBuffer();\n\tassert.ok(buf.atEnd(), 'excess bytes left after key');\n\n\tvar kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts });\n\tswitch (kdf) {\n\tcase 'none':\n\t\tif (cipher !== 'none') {\n\t\t\tthrow (new Error('OpenSSH-format key uses KDF \"none\" ' +\n\t\t\t 'but specifies a cipher other than \"none\"'));\n\t\t}\n\t\tbreak;\n\tcase 'bcrypt':\n\t\tvar salt = kdfOptsBuf.readBuffer();\n\t\tvar rounds = kdfOptsBuf.readInt();\n\t\tvar cinf = utils.opensshCipherInfo(cipher);\n\t\tif (bcrypt === undefined) {\n\t\t\tbcrypt = require('bcrypt-pbkdf');\n\t\t}\n\n\t\tif (typeof (options.passphrase) === 'string') {\n\t\t\toptions.passphrase = Buffer.from(options.passphrase,\n\t\t\t 'utf-8');\n\t\t}\n\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t options.filename, 'OpenSSH'));\n\t\t}\n\n\t\tvar pass = new Uint8Array(options.passphrase);\n\t\tvar salti = new Uint8Array(salt);\n\t\t/* Use the pbkdf to derive both the key and the IV. */\n\t\tvar out = new Uint8Array(cinf.keySize + cinf.blockSize);\n\t\tvar res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,\n\t\t out, out.length, rounds);\n\t\tif (res !== 0) {\n\t\t\tthrow (new Error('bcrypt_pbkdf function returned ' +\n\t\t\t 'failure, parameters invalid'));\n\t\t}\n\t\tout = Buffer.from(out);\n\t\tvar ckey = out.slice(0, cinf.keySize);\n\t\tvar iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);\n\t\tvar cipherStream = crypto.createDecipheriv(cinf.opensslName,\n\t\t ckey, iv);\n\t\tcipherStream.setAutoPadding(false);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once('error', function (e) {\n\t\t\tif (e.toString().indexOf('bad decrypt') !== -1) {\n\t\t\t\tthrow (new Error('Incorrect passphrase ' +\n\t\t\t\t 'supplied, could not decrypt key'));\n\t\t\t}\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(privKeyBlob);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tprivKeyBlob = Buffer.concat(chunks);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\n\t\t 'OpenSSH-format key uses unknown KDF \"' + kdf + '\"'));\n\t}\n\n\tbuf = new SSHBuffer({buffer: privKeyBlob});\n\n\tvar checkInt1 = buf.readInt();\n\tvar checkInt2 = buf.readInt();\n\tif (checkInt1 !== checkInt2) {\n\t\tthrow (new Error('Incorrect passphrase supplied, could not ' +\n\t\t 'decrypt key'));\n\t}\n\n\tvar ret = {};\n\tvar key = rfc4253.readInternal(ret, 'private', buf.remainder());\n\n\tbuf.skip(ret.consumed);\n\n\tvar comment = buf.readString();\n\tkey.comment = comment;\n\n\treturn (key);\n}\n\nfunction write(key, options) {\n\tvar pubKey;\n\tif (PrivateKey.isPrivateKey(key))\n\t\tpubKey = key.toPublic();\n\telse\n\t\tpubKey = key;\n\n\tvar cipher = 'none';\n\tvar kdf = 'none';\n\tvar kdfopts = Buffer.alloc(0);\n\tvar cinf = { blockSize: 8 };\n\tvar passphrase;\n\tif (options !== undefined) {\n\t\tpassphrase = options.passphrase;\n\t\tif (typeof (passphrase) === 'string')\n\t\t\tpassphrase = Buffer.from(passphrase, 'utf-8');\n\t\tif (passphrase !== undefined) {\n\t\t\tassert.buffer(passphrase, 'options.passphrase');\n\t\t\tassert.optionalString(options.cipher, 'options.cipher');\n\t\t\tcipher = options.cipher;\n\t\t\tif (cipher === undefined)\n\t\t\t\tcipher = 'aes128-ctr';\n\t\t\tcinf = utils.opensshCipherInfo(cipher);\n\t\t\tkdf = 'bcrypt';\n\t\t}\n\t}\n\n\tvar privBuf;\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tprivBuf = new SSHBuffer({});\n\t\tvar checkInt = crypto.randomBytes(4).readUInt32BE(0);\n\t\tprivBuf.writeInt(checkInt);\n\t\tprivBuf.writeInt(checkInt);\n\t\tprivBuf.write(key.toBuffer('rfc4253'));\n\t\tprivBuf.writeString(key.comment || '');\n\n\t\tvar n = 1;\n\t\twhile (privBuf._offset % cinf.blockSize !== 0)\n\t\t\tprivBuf.writeChar(n++);\n\t\tprivBuf = privBuf.toBuffer();\n\t}\n\n\tswitch (kdf) {\n\tcase 'none':\n\t\tbreak;\n\tcase 'bcrypt':\n\t\tvar salt = crypto.randomBytes(16);\n\t\tvar rounds = 16;\n\t\tvar kdfssh = new SSHBuffer({});\n\t\tkdfssh.writeBuffer(salt);\n\t\tkdfssh.writeInt(rounds);\n\t\tkdfopts = kdfssh.toBuffer();\n\n\t\tif (bcrypt === undefined) {\n\t\t\tbcrypt = require('bcrypt-pbkdf');\n\t\t}\n\t\tvar pass = new Uint8Array(passphrase);\n\t\tvar salti = new Uint8Array(salt);\n\t\t/* Use the pbkdf to derive both the key and the IV. */\n\t\tvar out = new Uint8Array(cinf.keySize + cinf.blockSize);\n\t\tvar res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,\n\t\t out, out.length, rounds);\n\t\tif (res !== 0) {\n\t\t\tthrow (new Error('bcrypt_pbkdf function returned ' +\n\t\t\t 'failure, parameters invalid'));\n\t\t}\n\t\tout = Buffer.from(out);\n\t\tvar ckey = out.slice(0, cinf.keySize);\n\t\tvar iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);\n\n\t\tvar cipherStream = crypto.createCipheriv(cinf.opensslName,\n\t\t ckey, iv);\n\t\tcipherStream.setAutoPadding(false);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once('error', function (e) {\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(privBuf);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tprivBuf = Buffer.concat(chunks);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error('Unsupported kdf ' + kdf));\n\t}\n\n\tvar buf = new SSHBuffer({});\n\n\tbuf.writeCString(MAGIC);\n\tbuf.writeString(cipher);\t/* cipher */\n\tbuf.writeString(kdf);\t\t/* kdf */\n\tbuf.writeBuffer(kdfopts);\t/* kdfoptions */\n\n\tbuf.writeInt(1);\t\t/* nkeys */\n\tbuf.writeBuffer(pubKey.toBuffer('rfc4253'));\n\n\tif (privBuf)\n\t\tbuf.writeBuffer(privBuf);\n\n\tbuf = buf.toBuffer();\n\n\tvar header;\n\tif (PrivateKey.isPrivateKey(key))\n\t\theader = 'OPENSSH PRIVATE KEY';\n\telse\n\t\theader = 'OPENSSH PUBLIC KEY';\n\n\tvar tmp = buf.toString('base64');\n\tvar len = tmp.length + (tmp.length / 70) +\n\t 18 + 16 + header.length*2 + 10;\n\tbuf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write('-----BEGIN ' + header + '-----\\n', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 70;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write('-----END ' + header + '-----\\n', o);\n\n\treturn (buf.slice(0, o));\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar rfc4253 = require('./rfc4253');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\n\nvar sshpriv = require('./ssh-private');\n\n/*JSSTYLED*/\nvar SSHKEY_RE = /^([a-z0-9-]+)[ \\t]+([a-zA-Z0-9+\\/]+[=]*)([ \\t]+([^ \\t][^\\n]*[\\n]*)?)?$/;\n/*JSSTYLED*/\nvar SSHKEY_RE2 = /^([a-z0-9-]+)[ \\t\\n]+([a-zA-Z0-9+\\/][a-zA-Z0-9+\\/ \\t\\n=]*)([^a-zA-Z0-9+\\/ \\t\\n=].*)?$/;\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\n\tvar trimmed = buf.trim().replace(/[\\\\\\r]/g, '');\n\tvar m = trimmed.match(SSHKEY_RE);\n\tif (!m)\n\t\tm = trimmed.match(SSHKEY_RE2);\n\tassert.ok(m, 'key must match regex');\n\n\tvar type = rfc4253.algToKeyType(m[1]);\n\tvar kbuf = Buffer.from(m[2], 'base64');\n\n\t/*\n\t * This is a bit tricky. If we managed to parse the key and locate the\n\t * key comment with the regex, then do a non-partial read and assert\n\t * that we have consumed all bytes. If we couldn't locate the key\n\t * comment, though, there may be whitespace shenanigans going on that\n\t * have conjoined the comment to the rest of the key. We do a partial\n\t * read in this case to try to make the best out of a sorry situation.\n\t */\n\tvar key;\n\tvar ret = {};\n\tif (m[4]) {\n\t\ttry {\n\t\t\tkey = rfc4253.read(kbuf);\n\n\t\t} catch (e) {\n\t\t\tm = trimmed.match(SSHKEY_RE2);\n\t\t\tassert.ok(m, 'key must match regex');\n\t\t\tkbuf = Buffer.from(m[2], 'base64');\n\t\t\tkey = rfc4253.readInternal(ret, 'public', kbuf);\n\t\t}\n\t} else {\n\t\tkey = rfc4253.readInternal(ret, 'public', kbuf);\n\t}\n\n\tassert.strictEqual(type, key.type);\n\n\tif (m[4] && m[4].length > 0) {\n\t\tkey.comment = m[4];\n\n\t} else if (ret.consumed) {\n\t\t/*\n\t\t * Now the magic: trying to recover the key comment when it's\n\t\t * gotten conjoined to the key or otherwise shenanigan'd.\n\t\t *\n\t\t * Work out how much base64 we used, then drop all non-base64\n\t\t * chars from the beginning up to this point in the the string.\n\t\t * Then offset in this and try to make up for missing = chars.\n\t\t */\n\t\tvar data = m[2] + (m[3] ? m[3] : '');\n\t\tvar realOffset = Math.ceil(ret.consumed / 3) * 4;\n\t\tdata = data.slice(0, realOffset - 2). /*JSSTYLED*/\n\t\t replace(/[^a-zA-Z0-9+\\/=]/g, '') +\n\t\t data.slice(realOffset - 2);\n\n\t\tvar padding = ret.consumed % 3;\n\t\tif (padding > 0 &&\n\t\t data.slice(realOffset - 1, realOffset) !== '=')\n\t\t\trealOffset--;\n\t\twhile (data.slice(realOffset, realOffset + 1) === '=')\n\t\t\trealOffset++;\n\n\t\t/* Finally, grab what we think is the comment & clean it up. */\n\t\tvar trailer = data.slice(realOffset);\n\t\ttrailer = trailer.replace(/[\\r\\n]/g, ' ').\n\t\t replace(/^\\s+/, '');\n\t\tif (trailer.match(/^[a-zA-Z0-9]/))\n\t\t\tkey.comment = trailer;\n\t}\n\n\treturn (key);\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\tif (!Key.isKey(key))\n\t\tthrow (new Error('Must be a public key'));\n\n\tvar parts = [];\n\tvar alg = rfc4253.keyTypeToAlg(key);\n\tparts.push(alg);\n\n\tvar buf = rfc4253.write(key);\n\tparts.push(buf.toString('base64'));\n\n\tif (key.comment)\n\t\tparts.push(key.comment);\n\n\treturn (Buffer.from(parts.join(' ')));\n}\n","// Copyright 2016 Joyent, Inc.\n\nvar x509 = require('./x509');\n\nmodule.exports = {\n\tread: read,\n\tverify: x509.verify,\n\tsign: x509.sign,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\nvar Identity = require('../identity');\nvar Signature = require('../signature');\nvar Certificate = require('../certificate');\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\n\tvar lines = buf.trim().split(/[\\r\\n]+/g);\n\n\tvar m;\n\tvar si = -1;\n\twhile (!m && si < lines.length) {\n\t\tm = lines[++si].match(/*JSSTYLED*/\n\t\t /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/);\n\t}\n\tassert.ok(m, 'invalid PEM header');\n\n\tvar m2;\n\tvar ei = lines.length;\n\twhile (!m2 && ei > 0) {\n\t\tm2 = lines[--ei].match(/*JSSTYLED*/\n\t\t /[-]+[ ]*END CERTIFICATE[ ]*[-]+/);\n\t}\n\tassert.ok(m2, 'invalid PEM footer');\n\n\tlines = lines.slice(si, ei + 1);\n\n\tvar headers = {};\n\twhile (true) {\n\t\tlines = lines.slice(1);\n\t\tm = lines[0].match(/*JSSTYLED*/\n\t\t /^([A-Za-z0-9-]+): (.+)$/);\n\t\tif (!m)\n\t\t\tbreak;\n\t\theaders[m[1].toLowerCase()] = m[2];\n\t}\n\n\t/* Chop off the first and last lines */\n\tlines = lines.slice(0, -1).join('');\n\tbuf = Buffer.from(lines, 'base64');\n\n\treturn (x509.read(buf, options));\n}\n\nfunction write(cert, options) {\n\tvar dbuf = x509.write(cert, options);\n\n\tvar header = 'CERTIFICATE';\n\tvar tmp = dbuf.toString('base64');\n\tvar len = tmp.length + (tmp.length / 64) +\n\t 18 + 16 + header.length*2 + 10;\n\tvar buf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write('-----BEGIN ' + header + '-----\\n', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 64;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write('-----END ' + header + '-----\\n', o);\n\n\treturn (buf.slice(0, o));\n}\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\tverify: verify,\n\tsign: sign,\n\tsignAsync: signAsync,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\nvar Identity = require('../identity');\nvar Signature = require('../signature');\nvar Certificate = require('../certificate');\nvar pkcs8 = require('./pkcs8');\n\n/*\n * This file is based on RFC5280 (X.509).\n */\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t nm + ' is not an Integer');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction verify(cert, key) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, 'x509 signature');\n\n\tvar algParts = sig.algo.split('-');\n\tif (algParts[0] !== key.type)\n\t\treturn (false);\n\n\tvar blob = sig.cache;\n\tif (blob === undefined) {\n\t\tvar der = new asn1.BerWriter();\n\t\twriteTBSCert(cert, der);\n\t\tblob = der.buffer;\n\t}\n\n\tvar verifier = key.createVerify(algParts[1]);\n\tverifier.write(blob);\n\treturn (verifier.verify(sig.signature));\n}\n\nfunction Local(i) {\n\treturn (asn1.Ber.Context | asn1.Ber.Constructor | i);\n}\n\nfunction Context(i) {\n\treturn (asn1.Ber.Context | i);\n}\n\nvar SIGN_ALGS = {\n\t'rsa-md5': '1.2.840.113549.1.1.4',\n\t'rsa-sha1': '1.2.840.113549.1.1.5',\n\t'rsa-sha256': '1.2.840.113549.1.1.11',\n\t'rsa-sha384': '1.2.840.113549.1.1.12',\n\t'rsa-sha512': '1.2.840.113549.1.1.13',\n\t'dsa-sha1': '1.2.840.10040.4.3',\n\t'dsa-sha256': '2.16.840.1.101.3.4.3.2',\n\t'ecdsa-sha1': '1.2.840.10045.4.1',\n\t'ecdsa-sha256': '1.2.840.10045.4.3.2',\n\t'ecdsa-sha384': '1.2.840.10045.4.3.3',\n\t'ecdsa-sha512': '1.2.840.10045.4.3.4',\n\t'ed25519-sha512': '1.3.101.112'\n};\nObject.keys(SIGN_ALGS).forEach(function (k) {\n\tSIGN_ALGS[SIGN_ALGS[k]] = k;\n});\nSIGN_ALGS['1.3.14.3.2.3'] = 'rsa-md5';\nSIGN_ALGS['1.3.14.3.2.29'] = 'rsa-sha1';\n\nvar EXTS = {\n\t'issuerKeyId': '2.5.29.35',\n\t'altName': '2.5.29.17',\n\t'basicConstraints': '2.5.29.19',\n\t'keyUsage': '2.5.29.15',\n\t'extKeyUsage': '2.5.29.37'\n};\n\nfunction read(buf, options) {\n\tif (typeof (buf) === 'string') {\n\t\tbuf = Buffer.from(buf, 'binary');\n\t}\n\tassert.buffer(buf, 'buf');\n\n\tvar der = new asn1.BerReader(buf);\n\n\tder.readSequence();\n\tif (Math.abs(der.length - der.remain) > 1) {\n\t\tthrow (new Error('DER sequence does not contain whole byte ' +\n\t\t 'stream'));\n\t}\n\n\tvar tbsStart = der.offset;\n\tder.readSequence();\n\tvar sigOffset = der.offset + der.length;\n\tvar tbsEnd = sigOffset;\n\n\tif (der.peek() === Local(0)) {\n\t\tder.readSequence(Local(0));\n\t\tvar version = der.readInt();\n\t\tassert.ok(version <= 3,\n\t\t 'only x.509 versions up to v3 supported');\n\t}\n\n\tvar cert = {};\n\tcert.signatures = {};\n\tvar sig = (cert.signatures.x509 = {});\n\tsig.extras = {};\n\n\tcert.serial = readMPInt(der, 'serial');\n\n\tder.readSequence();\n\tvar after = der.offset + der.length;\n\tvar certAlgOid = der.readOID();\n\tvar certAlg = SIGN_ALGS[certAlgOid];\n\tif (certAlg === undefined)\n\t\tthrow (new Error('unknown signature algorithm ' + certAlgOid));\n\n\tder._offset = after;\n\tcert.issuer = Identity.parseAsn1(der);\n\n\tder.readSequence();\n\tcert.validFrom = readDate(der);\n\tcert.validUntil = readDate(der);\n\n\tcert.subjects = [Identity.parseAsn1(der)];\n\n\tder.readSequence();\n\tafter = der.offset + der.length;\n\tcert.subjectKey = pkcs8.readPkcs8(undefined, 'public', der);\n\tder._offset = after;\n\n\t/* issuerUniqueID */\n\tif (der.peek() === Local(1)) {\n\t\tder.readSequence(Local(1));\n\t\tsig.extras.issuerUniqueID =\n\t\t buf.slice(der.offset, der.offset + der.length);\n\t\tder._offset += der.length;\n\t}\n\n\t/* subjectUniqueID */\n\tif (der.peek() === Local(2)) {\n\t\tder.readSequence(Local(2));\n\t\tsig.extras.subjectUniqueID =\n\t\t buf.slice(der.offset, der.offset + der.length);\n\t\tder._offset += der.length;\n\t}\n\n\t/* extensions */\n\tif (der.peek() === Local(3)) {\n\t\tder.readSequence(Local(3));\n\t\tvar extEnd = der.offset + der.length;\n\t\tder.readSequence();\n\n\t\twhile (der.offset < extEnd)\n\t\t\treadExtension(cert, buf, der);\n\n\t\tassert.strictEqual(der.offset, extEnd);\n\t}\n\n\tassert.strictEqual(der.offset, sigOffset);\n\n\tder.readSequence();\n\tafter = der.offset + der.length;\n\tvar sigAlgOid = der.readOID();\n\tvar sigAlg = SIGN_ALGS[sigAlgOid];\n\tif (sigAlg === undefined)\n\t\tthrow (new Error('unknown signature algorithm ' + sigAlgOid));\n\tder._offset = after;\n\n\tvar sigData = der.readString(asn1.Ber.BitString, true);\n\tif (sigData[0] === 0)\n\t\tsigData = sigData.slice(1);\n\tvar algParts = sigAlg.split('-');\n\n\tsig.signature = Signature.parse(sigData, algParts[0], 'asn1');\n\tsig.signature.hashAlgorithm = algParts[1];\n\tsig.algo = sigAlg;\n\tsig.cache = buf.slice(tbsStart, tbsEnd);\n\n\treturn (new Certificate(cert));\n}\n\nfunction readDate(der) {\n\tif (der.peek() === asn1.Ber.UTCTime) {\n\t\treturn (utcTimeToDate(der.readString(asn1.Ber.UTCTime)));\n\t} else if (der.peek() === asn1.Ber.GeneralizedTime) {\n\t\treturn (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime)));\n\t} else {\n\t\tthrow (new Error('Unsupported date format'));\n\t}\n}\n\nfunction writeDate(der, date) {\n\tif (date.getUTCFullYear() >= 2050 || date.getUTCFullYear() < 1950) {\n\t\tder.writeString(dateToGTime(date), asn1.Ber.GeneralizedTime);\n\t} else {\n\t\tder.writeString(dateToUTCTime(date), asn1.Ber.UTCTime);\n\t}\n}\n\n/* RFC5280, section 4.2.1.6 (GeneralName type) */\nvar ALTNAME = {\n\tOtherName: Local(0),\n\tRFC822Name: Context(1),\n\tDNSName: Context(2),\n\tX400Address: Local(3),\n\tDirectoryName: Local(4),\n\tEDIPartyName: Local(5),\n\tURI: Context(6),\n\tIPAddress: Context(7),\n\tOID: Context(8)\n};\n\n/* RFC5280, section 4.2.1.12 (KeyPurposeId) */\nvar EXTPURPOSE = {\n\t'serverAuth': '1.3.6.1.5.5.7.3.1',\n\t'clientAuth': '1.3.6.1.5.5.7.3.2',\n\t'codeSigning': '1.3.6.1.5.5.7.3.3',\n\n\t/* See https://github.com/joyent/oid-docs/blob/master/root.md */\n\t'joyentDocker': '1.3.6.1.4.1.38678.1.4.1',\n\t'joyentCmon': '1.3.6.1.4.1.38678.1.4.2'\n};\nvar EXTPURPOSE_REV = {};\nObject.keys(EXTPURPOSE).forEach(function (k) {\n\tEXTPURPOSE_REV[EXTPURPOSE[k]] = k;\n});\n\nvar KEYUSEBITS = [\n\t'signature', 'identity', 'keyEncryption',\n\t'encryption', 'keyAgreement', 'ca', 'crl'\n];\n\nfunction readExtension(cert, buf, der) {\n\tder.readSequence();\n\tvar after = der.offset + der.length;\n\tvar extId = der.readOID();\n\tvar id;\n\tvar sig = cert.signatures.x509;\n\tif (!sig.extras.exts)\n\t\tsig.extras.exts = [];\n\n\tvar critical;\n\tif (der.peek() === asn1.Ber.Boolean)\n\t\tcritical = der.readBoolean();\n\n\tswitch (extId) {\n\tcase (EXTS.basicConstraints):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tvar bcEnd = der.offset + der.length;\n\t\tvar ca = false;\n\t\tif (der.peek() === asn1.Ber.Boolean)\n\t\t\tca = der.readBoolean();\n\t\tif (cert.purposes === undefined)\n\t\t\tcert.purposes = [];\n\t\tif (ca === true)\n\t\t\tcert.purposes.push('ca');\n\t\tvar bc = { oid: extId, critical: critical };\n\t\tif (der.offset < bcEnd && der.peek() === asn1.Ber.Integer)\n\t\t\tbc.pathLen = der.readInt();\n\t\tsig.extras.exts.push(bc);\n\t\tbreak;\n\tcase (EXTS.extKeyUsage):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tif (cert.purposes === undefined)\n\t\t\tcert.purposes = [];\n\t\tvar ekEnd = der.offset + der.length;\n\t\twhile (der.offset < ekEnd) {\n\t\t\tvar oid = der.readOID();\n\t\t\tcert.purposes.push(EXTPURPOSE_REV[oid] || oid);\n\t\t}\n\t\t/*\n\t\t * This is a bit of a hack: in the case where we have a cert\n\t\t * that's only allowed to do serverAuth or clientAuth (and not\n\t\t * the other), we want to make sure all our Subjects are of\n\t\t * the right type. But we already parsed our Subjects and\n\t\t * decided if they were hosts or users earlier (since it appears\n\t\t * first in the cert).\n\t\t *\n\t\t * So we go through and mutate them into the right kind here if\n\t\t * it doesn't match. This might not be hugely beneficial, as it\n\t\t * seems that single-purpose certs are not often seen in the\n\t\t * wild.\n\t\t */\n\t\tif (cert.purposes.indexOf('serverAuth') !== -1 &&\n\t\t cert.purposes.indexOf('clientAuth') === -1) {\n\t\t\tcert.subjects.forEach(function (ide) {\n\t\t\t\tif (ide.type !== 'host') {\n\t\t\t\t\tide.type = 'host';\n\t\t\t\t\tide.hostname = ide.uid ||\n\t\t\t\t\t ide.email ||\n\t\t\t\t\t ide.components[0].value;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (cert.purposes.indexOf('clientAuth') !== -1 &&\n\t\t cert.purposes.indexOf('serverAuth') === -1) {\n\t\t\tcert.subjects.forEach(function (ide) {\n\t\t\t\tif (ide.type !== 'user') {\n\t\t\t\t\tide.type = 'user';\n\t\t\t\t\tide.uid = ide.hostname ||\n\t\t\t\t\t ide.email ||\n\t\t\t\t\t ide.components[0].value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tsig.extras.exts.push({ oid: extId, critical: critical });\n\t\tbreak;\n\tcase (EXTS.keyUsage):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tvar bits = der.readString(asn1.Ber.BitString, true);\n\t\tvar setBits = readBitField(bits, KEYUSEBITS);\n\t\tsetBits.forEach(function (bit) {\n\t\t\tif (cert.purposes === undefined)\n\t\t\t\tcert.purposes = [];\n\t\t\tif (cert.purposes.indexOf(bit) === -1)\n\t\t\t\tcert.purposes.push(bit);\n\t\t});\n\t\tsig.extras.exts.push({ oid: extId, critical: critical,\n\t\t bits: bits });\n\t\tbreak;\n\tcase (EXTS.altName):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tvar aeEnd = der.offset + der.length;\n\t\twhile (der.offset < aeEnd) {\n\t\t\tswitch (der.peek()) {\n\t\t\tcase ALTNAME.OtherName:\n\t\t\tcase ALTNAME.EDIPartyName:\n\t\t\t\tder.readSequence();\n\t\t\t\tder._offset += der.length;\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.OID:\n\t\t\t\tder.readOID(ALTNAME.OID);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.RFC822Name:\n\t\t\t\t/* RFC822 specifies email addresses */\n\t\t\t\tvar email = der.readString(ALTNAME.RFC822Name);\n\t\t\t\tid = Identity.forEmail(email);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.DirectoryName:\n\t\t\t\tder.readSequence(ALTNAME.DirectoryName);\n\t\t\t\tid = Identity.parseAsn1(der);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.DNSName:\n\t\t\t\tvar host = der.readString(\n\t\t\t\t ALTNAME.DNSName);\n\t\t\t\tid = Identity.forHost(host);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tder.readString(der.peek());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tsig.extras.exts.push({ oid: extId, critical: critical });\n\t\tbreak;\n\tdefault:\n\t\tsig.extras.exts.push({\n\t\t\toid: extId,\n\t\t\tcritical: critical,\n\t\t\tdata: der.readString(asn1.Ber.OctetString, true)\n\t\t});\n\t\tbreak;\n\t}\n\n\tder._offset = after;\n}\n\nvar UTCTIME_RE =\n /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;\nfunction utcTimeToDate(t) {\n\tvar m = t.match(UTCTIME_RE);\n\tassert.ok(m, 'timestamps must be in UTC');\n\tvar d = new Date();\n\n\tvar thisYear = d.getUTCFullYear();\n\tvar century = Math.floor(thisYear / 100) * 100;\n\n\tvar year = parseInt(m[1], 10);\n\tif (thisYear % 100 < 50 && year >= 60)\n\t\tyear += (century - 1);\n\telse\n\t\tyear += century;\n\td.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10));\n\td.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));\n\tif (m[6] && m[6].length > 0)\n\t\td.setUTCSeconds(parseInt(m[6], 10));\n\treturn (d);\n}\n\nvar GTIME_RE =\n /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;\nfunction gTimeToDate(t) {\n\tvar m = t.match(GTIME_RE);\n\tassert.ok(m);\n\tvar d = new Date();\n\n\td.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1,\n\t parseInt(m[3], 10));\n\td.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));\n\tif (m[6] && m[6].length > 0)\n\t\td.setUTCSeconds(parseInt(m[6], 10));\n\treturn (d);\n}\n\nfunction zeroPad(n, m) {\n\tif (m === undefined)\n\t\tm = 2;\n\tvar s = '' + n;\n\twhile (s.length < m)\n\t\ts = '0' + s;\n\treturn (s);\n}\n\nfunction dateToUTCTime(d) {\n\tvar s = '';\n\ts += zeroPad(d.getUTCFullYear() % 100);\n\ts += zeroPad(d.getUTCMonth() + 1);\n\ts += zeroPad(d.getUTCDate());\n\ts += zeroPad(d.getUTCHours());\n\ts += zeroPad(d.getUTCMinutes());\n\ts += zeroPad(d.getUTCSeconds());\n\ts += 'Z';\n\treturn (s);\n}\n\nfunction dateToGTime(d) {\n\tvar s = '';\n\ts += zeroPad(d.getUTCFullYear(), 4);\n\ts += zeroPad(d.getUTCMonth() + 1);\n\ts += zeroPad(d.getUTCDate());\n\ts += zeroPad(d.getUTCHours());\n\ts += zeroPad(d.getUTCMinutes());\n\ts += zeroPad(d.getUTCSeconds());\n\ts += 'Z';\n\treturn (s);\n}\n\nfunction sign(cert, key) {\n\tif (cert.signatures.x509 === undefined)\n\t\tcert.signatures.x509 = {};\n\tvar sig = cert.signatures.x509;\n\n\tsig.algo = key.type + '-' + key.defaultHashAlgorithm();\n\tif (SIGN_ALGS[sig.algo] === undefined)\n\t\treturn (false);\n\n\tvar der = new asn1.BerWriter();\n\twriteTBSCert(cert, der);\n\tvar blob = der.buffer;\n\tsig.cache = blob;\n\n\tvar signer = key.createSign();\n\tsigner.write(blob);\n\tcert.signatures.x509.signature = signer.sign();\n\n\treturn (true);\n}\n\nfunction signAsync(cert, signer, done) {\n\tif (cert.signatures.x509 === undefined)\n\t\tcert.signatures.x509 = {};\n\tvar sig = cert.signatures.x509;\n\n\tvar der = new asn1.BerWriter();\n\twriteTBSCert(cert, der);\n\tvar blob = der.buffer;\n\tsig.cache = blob;\n\n\tsigner(blob, function (err, signature) {\n\t\tif (err) {\n\t\t\tdone(err);\n\t\t\treturn;\n\t\t}\n\t\tsig.algo = signature.type + '-' + signature.hashAlgorithm;\n\t\tif (SIGN_ALGS[sig.algo] === undefined) {\n\t\t\tdone(new Error('Invalid signing algorithm \"' +\n\t\t\t sig.algo + '\"'));\n\t\t\treturn;\n\t\t}\n\t\tsig.signature = signature;\n\t\tdone();\n\t});\n}\n\nfunction write(cert, options) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, 'x509 signature');\n\n\tvar der = new asn1.BerWriter();\n\tder.startSequence();\n\tif (sig.cache) {\n\t\tder._ensure(sig.cache.length);\n\t\tsig.cache.copy(der._buf, der._offset);\n\t\tder._offset += sig.cache.length;\n\t} else {\n\t\twriteTBSCert(cert, der);\n\t}\n\n\tder.startSequence();\n\tder.writeOID(SIGN_ALGS[sig.algo]);\n\tif (sig.algo.match(/^rsa-/))\n\t\tder.writeNull();\n\tder.endSequence();\n\n\tvar sigData = sig.signature.toBuffer('asn1');\n\tvar data = Buffer.alloc(sigData.length + 1);\n\tdata[0] = 0;\n\tsigData.copy(data, 1);\n\tder.writeBuffer(data, asn1.Ber.BitString);\n\tder.endSequence();\n\n\treturn (der.buffer);\n}\n\nfunction writeTBSCert(cert, der) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, 'x509 signature');\n\n\tder.startSequence();\n\n\tder.startSequence(Local(0));\n\tder.writeInt(2);\n\tder.endSequence();\n\n\tder.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer);\n\n\tder.startSequence();\n\tder.writeOID(SIGN_ALGS[sig.algo]);\n\tif (sig.algo.match(/^rsa-/))\n\t\tder.writeNull();\n\tder.endSequence();\n\n\tcert.issuer.toAsn1(der);\n\n\tder.startSequence();\n\twriteDate(der, cert.validFrom);\n\twriteDate(der, cert.validUntil);\n\tder.endSequence();\n\n\tvar subject = cert.subjects[0];\n\tvar altNames = cert.subjects.slice(1);\n\tsubject.toAsn1(der);\n\n\tpkcs8.writePkcs8(der, cert.subjectKey);\n\n\tif (sig.extras && sig.extras.issuerUniqueID) {\n\t\tder.writeBuffer(sig.extras.issuerUniqueID, Local(1));\n\t}\n\n\tif (sig.extras && sig.extras.subjectUniqueID) {\n\t\tder.writeBuffer(sig.extras.subjectUniqueID, Local(2));\n\t}\n\n\tif (altNames.length > 0 || subject.type === 'host' ||\n\t (cert.purposes !== undefined && cert.purposes.length > 0) ||\n\t (sig.extras && sig.extras.exts)) {\n\t\tder.startSequence(Local(3));\n\t\tder.startSequence();\n\n\t\tvar exts = [];\n\t\tif (cert.purposes !== undefined && cert.purposes.length > 0) {\n\t\t\texts.push({\n\t\t\t\toid: EXTS.basicConstraints,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t\texts.push({\n\t\t\t\toid: EXTS.keyUsage,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t\texts.push({\n\t\t\t\toid: EXTS.extKeyUsage,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t}\n\t\texts.push({ oid: EXTS.altName });\n\t\tif (sig.extras && sig.extras.exts)\n\t\t\texts = sig.extras.exts;\n\n\t\tfor (var i = 0; i < exts.length; ++i) {\n\t\t\tder.startSequence();\n\t\t\tder.writeOID(exts[i].oid);\n\n\t\t\tif (exts[i].critical !== undefined)\n\t\t\t\tder.writeBoolean(exts[i].critical);\n\n\t\t\tif (exts[i].oid === EXTS.altName) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tif (subject.type === 'host') {\n\t\t\t\t\tder.writeString(subject.hostname,\n\t\t\t\t\t Context(2));\n\t\t\t\t}\n\t\t\t\tfor (var j = 0; j < altNames.length; ++j) {\n\t\t\t\t\tif (altNames[j].type === 'host') {\n\t\t\t\t\t\tder.writeString(\n\t\t\t\t\t\t altNames[j].hostname,\n\t\t\t\t\t\t ALTNAME.DNSName);\n\t\t\t\t\t} else if (altNames[j].type ===\n\t\t\t\t\t 'email') {\n\t\t\t\t\t\tder.writeString(\n\t\t\t\t\t\t altNames[j].email,\n\t\t\t\t\t\t ALTNAME.RFC822Name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Encode anything else as a\n\t\t\t\t\t\t * DN style name for now.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tder.startSequence(\n\t\t\t\t\t\t ALTNAME.DirectoryName);\n\t\t\t\t\t\taltNames[j].toAsn1(der);\n\t\t\t\t\t\tder.endSequence();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.basicConstraints) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tvar ca = (cert.purposes.indexOf('ca') !== -1);\n\t\t\t\tvar pathLen = exts[i].pathLen;\n\t\t\t\tder.writeBoolean(ca);\n\t\t\t\tif (pathLen !== undefined)\n\t\t\t\t\tder.writeInt(pathLen);\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.extKeyUsage) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tcert.purposes.forEach(function (purpose) {\n\t\t\t\t\tif (purpose === 'ca')\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (KEYUSEBITS.indexOf(purpose) !== -1)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tvar oid = purpose;\n\t\t\t\t\tif (EXTPURPOSE[purpose] !== undefined)\n\t\t\t\t\t\toid = EXTPURPOSE[purpose];\n\t\t\t\t\tder.writeOID(oid);\n\t\t\t\t});\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.keyUsage) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\t/*\n\t\t\t\t * If we parsed this certificate from a byte\n\t\t\t\t * stream (i.e. we didn't generate it in sshpk)\n\t\t\t\t * then we'll have a \".bits\" property on the\n\t\t\t\t * ext with the original raw byte contents.\n\t\t\t\t *\n\t\t\t\t * If we have this, use it here instead of\n\t\t\t\t * regenerating it. This guarantees we output\n\t\t\t\t * the same data we parsed, so signatures still\n\t\t\t\t * validate.\n\t\t\t\t */\n\t\t\t\tif (exts[i].bits !== undefined) {\n\t\t\t\t\tder.writeBuffer(exts[i].bits,\n\t\t\t\t\t asn1.Ber.BitString);\n\t\t\t\t} else {\n\t\t\t\t\tvar bits = writeBitField(cert.purposes,\n\t\t\t\t\t KEYUSEBITS);\n\t\t\t\t\tder.writeBuffer(bits,\n\t\t\t\t\t asn1.Ber.BitString);\n\t\t\t\t}\n\t\t\t\tder.endSequence();\n\t\t\t} else {\n\t\t\t\tder.writeBuffer(exts[i].data,\n\t\t\t\t asn1.Ber.OctetString);\n\t\t\t}\n\n\t\t\tder.endSequence();\n\t\t}\n\n\t\tder.endSequence();\n\t\tder.endSequence();\n\t}\n\n\tder.endSequence();\n}\n\n/*\n * Reads an ASN.1 BER bitfield out of the Buffer produced by doing\n * `BerReader#readString(asn1.Ber.BitString)`. That function gives us the raw\n * contents of the BitString tag, which is a count of unused bits followed by\n * the bits as a right-padded byte string.\n *\n * `bits` is the Buffer, `bitIndex` should contain an array of string names\n * for the bits in the string, ordered starting with bit #0 in the ASN.1 spec.\n *\n * Returns an array of Strings, the names of the bits that were set to 1.\n */\nfunction readBitField(bits, bitIndex) {\n\tvar bitLen = 8 * (bits.length - 1) - bits[0];\n\tvar setBits = {};\n\tfor (var i = 0; i < bitLen; ++i) {\n\t\tvar byteN = 1 + Math.floor(i / 8);\n\t\tvar bit = 7 - (i % 8);\n\t\tvar mask = 1 << bit;\n\t\tvar bitVal = ((bits[byteN] & mask) !== 0);\n\t\tvar name = bitIndex[i];\n\t\tif (bitVal && typeof (name) === 'string') {\n\t\t\tsetBits[name] = true;\n\t\t}\n\t}\n\treturn (Object.keys(setBits));\n}\n\n/*\n * `setBits` is an array of strings, containing the names for each bit that\n * sould be set to 1. `bitIndex` is same as in `readBitField()`.\n *\n * Returns a Buffer, ready to be written out with `BerWriter#writeString()`.\n */\nfunction writeBitField(setBits, bitIndex) {\n\tvar bitLen = bitIndex.length;\n\tvar blen = Math.ceil(bitLen / 8);\n\tvar unused = blen * 8 - bitLen;\n\tvar bits = Buffer.alloc(1 + blen); // zero-filled\n\tbits[0] = unused;\n\tfor (var i = 0; i < bitLen; ++i) {\n\t\tvar byteN = 1 + Math.floor(i / 8);\n\t\tvar bit = 7 - (i % 8);\n\t\tvar mask = 1 << bit;\n\t\tvar name = bitIndex[i];\n\t\tif (name === undefined)\n\t\t\tcontinue;\n\t\tvar bitVal = (setBits.indexOf(name) !== -1);\n\t\tif (bitVal) {\n\t\t\tbits[byteN] |= mask;\n\t\t}\n\t}\n\treturn (bits);\n}\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = Identity;\n\nvar assert = require('assert-plus');\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar errs = require('./errors');\nvar util = require('util');\nvar utils = require('./utils');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\n\n/*JSSTYLED*/\nvar DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\\-]{0,62})(?:\\.([*]|[a-z0-9][a-z0-9\\-]{0,62}))*$/i;\n\nvar oids = {};\noids.cn = '2.5.4.3';\noids.o = '2.5.4.10';\noids.ou = '2.5.4.11';\noids.l = '2.5.4.7';\noids.s = '2.5.4.8';\noids.c = '2.5.4.6';\noids.sn = '2.5.4.4';\noids.postalCode = '2.5.4.17';\noids.serialNumber = '2.5.4.5';\noids.street = '2.5.4.9';\noids.x500UniqueIdentifier = '2.5.4.45';\noids.role = '2.5.4.72';\noids.telephoneNumber = '2.5.4.20';\noids.description = '2.5.4.13';\noids.dc = '0.9.2342.19200300.100.1.25';\noids.uid = '0.9.2342.19200300.100.1.1';\noids.mail = '0.9.2342.19200300.100.1.3';\noids.title = '2.5.4.12';\noids.gn = '2.5.4.42';\noids.initials = '2.5.4.43';\noids.pseudonym = '2.5.4.65';\noids.emailAddress = '1.2.840.113549.1.9.1';\n\nvar unoids = {};\nObject.keys(oids).forEach(function (k) {\n\tunoids[oids[k]] = k;\n});\n\nfunction Identity(opts) {\n\tvar self = this;\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.components, 'options.components');\n\tthis.components = opts.components;\n\tthis.componentLookup = {};\n\tthis.components.forEach(function (c) {\n\t\tif (c.name && !c.oid)\n\t\t\tc.oid = oids[c.name];\n\t\tif (c.oid && !c.name)\n\t\t\tc.name = unoids[c.oid];\n\t\tif (self.componentLookup[c.name] === undefined)\n\t\t\tself.componentLookup[c.name] = [];\n\t\tself.componentLookup[c.name].push(c);\n\t});\n\tif (this.componentLookup.cn && this.componentLookup.cn.length > 0) {\n\t\tthis.cn = this.componentLookup.cn[0].value;\n\t}\n\tassert.optionalString(opts.type, 'options.type');\n\tif (opts.type === undefined) {\n\t\tif (this.components.length === 1 &&\n\t\t this.componentLookup.cn &&\n\t\t this.componentLookup.cn.length === 1 &&\n\t\t this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {\n\t\t\tthis.type = 'host';\n\t\t\tthis.hostname = this.componentLookup.cn[0].value;\n\n\t\t} else if (this.componentLookup.dc &&\n\t\t this.components.length === this.componentLookup.dc.length) {\n\t\t\tthis.type = 'host';\n\t\t\tthis.hostname = this.componentLookup.dc.map(\n\t\t\t function (c) {\n\t\t\t\treturn (c.value);\n\t\t\t}).join('.');\n\n\t\t} else if (this.componentLookup.uid &&\n\t\t this.components.length ===\n\t\t this.componentLookup.uid.length) {\n\t\t\tthis.type = 'user';\n\t\t\tthis.uid = this.componentLookup.uid[0].value;\n\n\t\t} else if (this.componentLookup.cn &&\n\t\t this.componentLookup.cn.length === 1 &&\n\t\t this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {\n\t\t\tthis.type = 'host';\n\t\t\tthis.hostname = this.componentLookup.cn[0].value;\n\n\t\t} else if (this.componentLookup.uid &&\n\t\t this.componentLookup.uid.length === 1) {\n\t\t\tthis.type = 'user';\n\t\t\tthis.uid = this.componentLookup.uid[0].value;\n\n\t\t} else if (this.componentLookup.mail &&\n\t\t this.componentLookup.mail.length === 1) {\n\t\t\tthis.type = 'email';\n\t\t\tthis.email = this.componentLookup.mail[0].value;\n\n\t\t} else if (this.componentLookup.cn &&\n\t\t this.componentLookup.cn.length === 1) {\n\t\t\tthis.type = 'user';\n\t\t\tthis.uid = this.componentLookup.cn[0].value;\n\n\t\t} else {\n\t\t\tthis.type = 'unknown';\n\t\t}\n\t} else {\n\t\tthis.type = opts.type;\n\t\tif (this.type === 'host')\n\t\t\tthis.hostname = opts.hostname;\n\t\telse if (this.type === 'user')\n\t\t\tthis.uid = opts.uid;\n\t\telse if (this.type === 'email')\n\t\t\tthis.email = opts.email;\n\t\telse\n\t\t\tthrow (new Error('Unknown type ' + this.type));\n\t}\n}\n\nIdentity.prototype.toString = function () {\n\treturn (this.components.map(function (c) {\n\t\tvar n = c.name.toUpperCase();\n\t\t/*JSSTYLED*/\n\t\tn = n.replace(/=/g, '\\\\=');\n\t\tvar v = c.value;\n\t\t/*JSSTYLED*/\n\t\tv = v.replace(/,/g, '\\\\,');\n\t\treturn (n + '=' + v);\n\t}).join(', '));\n};\n\nIdentity.prototype.get = function (name, asArray) {\n\tassert.string(name, 'name');\n\tvar arr = this.componentLookup[name];\n\tif (arr === undefined || arr.length === 0)\n\t\treturn (undefined);\n\tif (!asArray && arr.length > 1)\n\t\tthrow (new Error('Multiple values for attribute ' + name));\n\tif (!asArray)\n\t\treturn (arr[0].value);\n\treturn (arr.map(function (c) {\n\t\treturn (c.value);\n\t}));\n};\n\nIdentity.prototype.toArray = function (idx) {\n\treturn (this.components.map(function (c) {\n\t\treturn ({\n\t\t\tname: c.name,\n\t\t\tvalue: c.value\n\t\t});\n\t}));\n};\n\n/*\n * These are from X.680 -- PrintableString allowed chars are in section 37.4\n * table 8. Spec for IA5Strings is \"1,6 + SPACE + DEL\" where 1 refers to\n * ISO IR #001 (standard ASCII control characters) and 6 refers to ISO IR #006\n * (the basic ASCII character set).\n */\n/* JSSTYLED */\nvar NOT_PRINTABLE = /[^a-zA-Z0-9 '(),+.\\/:=?-]/;\n/* JSSTYLED */\nvar NOT_IA5 = /[^\\x00-\\x7f]/;\n\nIdentity.prototype.toAsn1 = function (der, tag) {\n\tder.startSequence(tag);\n\tthis.components.forEach(function (c) {\n\t\tder.startSequence(asn1.Ber.Constructor | asn1.Ber.Set);\n\t\tder.startSequence();\n\t\tder.writeOID(c.oid);\n\t\t/*\n\t\t * If we fit in a PrintableString, use that. Otherwise use an\n\t\t * IA5String or UTF8String.\n\t\t *\n\t\t * If this identity was parsed from a DN, use the ASN.1 types\n\t\t * from the original representation (otherwise this might not\n\t\t * be a full match for the original in some validators).\n\t\t */\n\t\tif (c.asn1type === asn1.Ber.Utf8String ||\n\t\t c.value.match(NOT_IA5)) {\n\t\t\tvar v = Buffer.from(c.value, 'utf8');\n\t\t\tder.writeBuffer(v, asn1.Ber.Utf8String);\n\n\t\t} else if (c.asn1type === asn1.Ber.IA5String ||\n\t\t c.value.match(NOT_PRINTABLE)) {\n\t\t\tder.writeString(c.value, asn1.Ber.IA5String);\n\n\t\t} else {\n\t\t\tvar type = asn1.Ber.PrintableString;\n\t\t\tif (c.asn1type !== undefined)\n\t\t\t\ttype = c.asn1type;\n\t\t\tder.writeString(c.value, type);\n\t\t}\n\t\tder.endSequence();\n\t\tder.endSequence();\n\t});\n\tder.endSequence();\n};\n\nfunction globMatch(a, b) {\n\tif (a === '**' || b === '**')\n\t\treturn (true);\n\tvar aParts = a.split('.');\n\tvar bParts = b.split('.');\n\tif (aParts.length !== bParts.length)\n\t\treturn (false);\n\tfor (var i = 0; i < aParts.length; ++i) {\n\t\tif (aParts[i] === '*' || bParts[i] === '*')\n\t\t\tcontinue;\n\t\tif (aParts[i] !== bParts[i])\n\t\t\treturn (false);\n\t}\n\treturn (true);\n}\n\nIdentity.prototype.equals = function (other) {\n\tif (!Identity.isIdentity(other, [1, 0]))\n\t\treturn (false);\n\tif (other.components.length !== this.components.length)\n\t\treturn (false);\n\tfor (var i = 0; i < this.components.length; ++i) {\n\t\tif (this.components[i].oid !== other.components[i].oid)\n\t\t\treturn (false);\n\t\tif (!globMatch(this.components[i].value,\n\t\t other.components[i].value)) {\n\t\t\treturn (false);\n\t\t}\n\t}\n\treturn (true);\n};\n\nIdentity.forHost = function (hostname) {\n\tassert.string(hostname, 'hostname');\n\treturn (new Identity({\n\t\ttype: 'host',\n\t\thostname: hostname,\n\t\tcomponents: [ { name: 'cn', value: hostname } ]\n\t}));\n};\n\nIdentity.forUser = function (uid) {\n\tassert.string(uid, 'uid');\n\treturn (new Identity({\n\t\ttype: 'user',\n\t\tuid: uid,\n\t\tcomponents: [ { name: 'uid', value: uid } ]\n\t}));\n};\n\nIdentity.forEmail = function (email) {\n\tassert.string(email, 'email');\n\treturn (new Identity({\n\t\ttype: 'email',\n\t\temail: email,\n\t\tcomponents: [ { name: 'mail', value: email } ]\n\t}));\n};\n\nIdentity.parseDN = function (dn) {\n\tassert.string(dn, 'dn');\n\tvar parts = [''];\n\tvar idx = 0;\n\tvar rem = dn;\n\twhile (rem.length > 0) {\n\t\tvar m;\n\t\t/*JSSTYLED*/\n\t\tif ((m = /^,/.exec(rem)) !== null) {\n\t\t\tparts[++idx] = '';\n\t\t\trem = rem.slice(m[0].length);\n\t\t/*JSSTYLED*/\n\t\t} else if ((m = /^\\\\,/.exec(rem)) !== null) {\n\t\t\tparts[idx] += ',';\n\t\t\trem = rem.slice(m[0].length);\n\t\t/*JSSTYLED*/\n\t\t} else if ((m = /^\\\\./.exec(rem)) !== null) {\n\t\t\tparts[idx] += m[0];\n\t\t\trem = rem.slice(m[0].length);\n\t\t/*JSSTYLED*/\n\t\t} else if ((m = /^[^\\\\,]+/.exec(rem)) !== null) {\n\t\t\tparts[idx] += m[0];\n\t\t\trem = rem.slice(m[0].length);\n\t\t} else {\n\t\t\tthrow (new Error('Failed to parse DN'));\n\t\t}\n\t}\n\tvar cmps = parts.map(function (c) {\n\t\tc = c.trim();\n\t\tvar eqPos = c.indexOf('=');\n\t\twhile (eqPos > 0 && c.charAt(eqPos - 1) === '\\\\')\n\t\t\teqPos = c.indexOf('=', eqPos + 1);\n\t\tif (eqPos === -1) {\n\t\t\tthrow (new Error('Failed to parse DN'));\n\t\t}\n\t\t/*JSSTYLED*/\n\t\tvar name = c.slice(0, eqPos).toLowerCase().replace(/\\\\=/g, '=');\n\t\tvar value = c.slice(eqPos + 1);\n\t\treturn ({ name: name, value: value });\n\t});\n\treturn (new Identity({ components: cmps }));\n};\n\nIdentity.fromArray = function (components) {\n\tassert.arrayOfObject(components, 'components');\n\tcomponents.forEach(function (cmp) {\n\t\tassert.object(cmp, 'component');\n\t\tassert.string(cmp.name, 'component.name');\n\t\tif (!Buffer.isBuffer(cmp.value) &&\n\t\t !(typeof (cmp.value) === 'string')) {\n\t\t\tthrow (new Error('Invalid component value'));\n\t\t}\n\t});\n\treturn (new Identity({ components: components }));\n};\n\nIdentity.parseAsn1 = function (der, top) {\n\tvar components = [];\n\tder.readSequence(top);\n\tvar end = der.offset + der.length;\n\twhile (der.offset < end) {\n\t\tder.readSequence(asn1.Ber.Constructor | asn1.Ber.Set);\n\t\tvar after = der.offset + der.length;\n\t\tder.readSequence();\n\t\tvar oid = der.readOID();\n\t\tvar type = der.peek();\n\t\tvar value;\n\t\tswitch (type) {\n\t\tcase asn1.Ber.PrintableString:\n\t\tcase asn1.Ber.IA5String:\n\t\tcase asn1.Ber.OctetString:\n\t\tcase asn1.Ber.T61String:\n\t\t\tvalue = der.readString(type);\n\t\t\tbreak;\n\t\tcase asn1.Ber.Utf8String:\n\t\t\tvalue = der.readString(type, true);\n\t\t\tvalue = value.toString('utf8');\n\t\t\tbreak;\n\t\tcase asn1.Ber.CharacterString:\n\t\tcase asn1.Ber.BMPString:\n\t\t\tvalue = der.readString(type, true);\n\t\t\tvalue = value.toString('utf16le');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error('Unknown asn1 type ' + type));\n\t\t}\n\t\tcomponents.push({ oid: oid, asn1type: type, value: value });\n\t\tder._offset = after;\n\t}\n\tder._offset = end;\n\treturn (new Identity({\n\t\tcomponents: components\n\t}));\n};\n\nIdentity.isIdentity = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Identity, ver));\n};\n\n/*\n * API versions for Identity:\n * [1,0] -- initial ver\n */\nIdentity.prototype._sshpkApiVersion = [1, 0];\n\nIdentity._oldVersionDetect = function (obj) {\n\treturn ([1, 0]);\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar Key = require('./key');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar PrivateKey = require('./private-key');\nvar Certificate = require('./certificate');\nvar Identity = require('./identity');\nvar errs = require('./errors');\n\nmodule.exports = {\n\t/* top-level classes */\n\tKey: Key,\n\tparseKey: Key.parse,\n\tFingerprint: Fingerprint,\n\tparseFingerprint: Fingerprint.parse,\n\tSignature: Signature,\n\tparseSignature: Signature.parse,\n\tPrivateKey: PrivateKey,\n\tparsePrivateKey: PrivateKey.parse,\n\tgeneratePrivateKey: PrivateKey.generate,\n\tCertificate: Certificate,\n\tparseCertificate: Certificate.parse,\n\tcreateSelfSignedCertificate: Certificate.createSelfSigned,\n\tcreateCertificate: Certificate.create,\n\tIdentity: Identity,\n\tidentityFromDN: Identity.parseDN,\n\tidentityForHost: Identity.forHost,\n\tidentityForUser: Identity.forUser,\n\tidentityForEmail: Identity.forEmail,\n\tidentityFromArray: Identity.fromArray,\n\n\t/* errors */\n\tFingerprintFormatError: errs.FingerprintFormatError,\n\tInvalidAlgorithmError: errs.InvalidAlgorithmError,\n\tKeyParseError: errs.KeyParseError,\n\tSignatureParseError: errs.SignatureParseError,\n\tKeyEncryptedError: errs.KeyEncryptedError,\n\tCertificateParseError: errs.CertificateParseError\n};\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = Key;\n\nvar assert = require('assert-plus');\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar DiffieHellman = require('./dhe').DiffieHellman;\nvar errs = require('./errors');\nvar utils = require('./utils');\nvar PrivateKey = require('./private-key');\nvar edCompat;\n\ntry {\n\tedCompat = require('./ed-compat');\n} catch (e) {\n\t/* Just continue through, and bail out if we try to use it. */\n}\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar KeyParseError = errs.KeyParseError;\n\nvar formats = {};\nformats['auto'] = require('./formats/auto');\nformats['pem'] = require('./formats/pem');\nformats['pkcs1'] = require('./formats/pkcs1');\nformats['pkcs8'] = require('./formats/pkcs8');\nformats['rfc4253'] = require('./formats/rfc4253');\nformats['ssh'] = require('./formats/ssh');\nformats['ssh-private'] = require('./formats/ssh-private');\nformats['openssh'] = formats['ssh-private'];\nformats['dnssec'] = require('./formats/dnssec');\nformats['putty'] = require('./formats/putty');\nformats['ppk'] = formats['putty'];\n\nfunction Key(opts) {\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.parts, 'options.parts');\n\tassert.string(opts.type, 'options.type');\n\tassert.optionalString(opts.comment, 'options.comment');\n\n\tvar algInfo = algs.info[opts.type];\n\tif (typeof (algInfo) !== 'object')\n\t\tthrow (new InvalidAlgorithmError(opts.type));\n\n\tvar partLookup = {};\n\tfor (var i = 0; i < opts.parts.length; ++i) {\n\t\tvar part = opts.parts[i];\n\t\tpartLookup[part.name] = part;\n\t}\n\n\tthis.type = opts.type;\n\tthis.parts = opts.parts;\n\tthis.part = partLookup;\n\tthis.comment = undefined;\n\tthis.source = opts.source;\n\n\t/* for speeding up hashing/fingerprint operations */\n\tthis._rfc4253Cache = opts._rfc4253Cache;\n\tthis._hashCache = {};\n\n\tvar sz;\n\tthis.curve = undefined;\n\tif (this.type === 'ecdsa') {\n\t\tvar curve = this.part.curve.data.toString();\n\t\tthis.curve = curve;\n\t\tsz = algs.curves[curve].size;\n\t} else if (this.type === 'ed25519' || this.type === 'curve25519') {\n\t\tsz = 256;\n\t\tthis.curve = 'curve25519';\n\t} else {\n\t\tvar szPart = this.part[algInfo.sizePart];\n\t\tsz = szPart.data.length;\n\t\tsz = sz * 8 - utils.countZeros(szPart.data);\n\t}\n\tthis.size = sz;\n}\n\nKey.formats = formats;\n\nKey.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'ssh';\n\tassert.string(format, 'format');\n\tassert.object(formats[format], 'formats[format]');\n\tassert.optionalObject(options, 'options');\n\n\tif (format === 'rfc4253') {\n\t\tif (this._rfc4253Cache === undefined)\n\t\t\tthis._rfc4253Cache = formats['rfc4253'].write(this);\n\t\treturn (this._rfc4253Cache);\n\t}\n\n\treturn (formats[format].write(this, options));\n};\n\nKey.prototype.toString = function (format, options) {\n\treturn (this.toBuffer(format, options).toString());\n};\n\nKey.prototype.hash = function (algo, type) {\n\tassert.string(algo, 'algorithm');\n\tassert.optionalString(type, 'type');\n\tif (type === undefined)\n\t\ttype = 'ssh';\n\talgo = algo.toLowerCase();\n\tif (algs.hashAlgs[algo] === undefined)\n\t\tthrow (new InvalidAlgorithmError(algo));\n\n\tvar cacheKey = algo + '||' + type;\n\tif (this._hashCache[cacheKey])\n\t\treturn (this._hashCache[cacheKey]);\n\n\tvar buf;\n\tif (type === 'ssh') {\n\t\tbuf = this.toBuffer('rfc4253');\n\t} else if (type === 'spki') {\n\t\tbuf = formats.pkcs8.pkcs8ToBuffer(this);\n\t} else {\n\t\tthrow (new Error('Hash type ' + type + ' not supported'));\n\t}\n\tvar hash = crypto.createHash(algo).update(buf).digest();\n\tthis._hashCache[cacheKey] = hash;\n\treturn (hash);\n};\n\nKey.prototype.fingerprint = function (algo, type) {\n\tif (algo === undefined)\n\t\talgo = 'sha256';\n\tif (type === undefined)\n\t\ttype = 'ssh';\n\tassert.string(algo, 'algorithm');\n\tassert.string(type, 'type');\n\tvar opts = {\n\t\ttype: 'key',\n\t\thash: this.hash(algo, type),\n\t\talgorithm: algo,\n\t\thashType: type\n\t};\n\treturn (new Fingerprint(opts));\n};\n\nKey.prototype.defaultHashAlgorithm = function () {\n\tvar hashAlgo = 'sha1';\n\tif (this.type === 'rsa')\n\t\thashAlgo = 'sha256';\n\tif (this.type === 'dsa' && this.size > 1024)\n\t\thashAlgo = 'sha256';\n\tif (this.type === 'ed25519')\n\t\thashAlgo = 'sha512';\n\tif (this.type === 'ecdsa') {\n\t\tif (this.size <= 256)\n\t\t\thashAlgo = 'sha256';\n\t\telse if (this.size <= 384)\n\t\t\thashAlgo = 'sha384';\n\t\telse\n\t\t\thashAlgo = 'sha512';\n\t}\n\treturn (hashAlgo);\n};\n\nKey.prototype.createVerify = function (hashAlgo) {\n\tif (hashAlgo === undefined)\n\t\thashAlgo = this.defaultHashAlgorithm();\n\tassert.string(hashAlgo, 'hash algorithm');\n\n\t/* ED25519 is not supported by OpenSSL, use a javascript impl. */\n\tif (this.type === 'ed25519' && edCompat !== undefined)\n\t\treturn (new edCompat.Verifier(this, hashAlgo));\n\tif (this.type === 'curve25519')\n\t\tthrow (new Error('Curve25519 keys are not suitable for ' +\n\t\t 'signing or verification'));\n\n\tvar v, nm, err;\n\ttry {\n\t\tnm = hashAlgo.toUpperCase();\n\t\tv = crypto.createVerify(nm);\n\t} catch (e) {\n\t\terr = e;\n\t}\n\tif (v === undefined || (err instanceof Error &&\n\t err.message.match(/Unknown message digest/))) {\n\t\tnm = 'RSA-';\n\t\tnm += hashAlgo.toUpperCase();\n\t\tv = crypto.createVerify(nm);\n\t}\n\tassert.ok(v, 'failed to create verifier');\n\tvar oldVerify = v.verify.bind(v);\n\tvar key = this.toBuffer('pkcs8');\n\tvar curve = this.curve;\n\tvar self = this;\n\tv.verify = function (signature, fmt) {\n\t\tif (Signature.isSignature(signature, [2, 0])) {\n\t\t\tif (signature.type !== self.type)\n\t\t\t\treturn (false);\n\t\t\tif (signature.hashAlgorithm &&\n\t\t\t signature.hashAlgorithm !== hashAlgo)\n\t\t\t\treturn (false);\n\t\t\tif (signature.curve && self.type === 'ecdsa' &&\n\t\t\t signature.curve !== curve)\n\t\t\t\treturn (false);\n\t\t\treturn (oldVerify(key, signature.toBuffer('asn1')));\n\n\t\t} else if (typeof (signature) === 'string' ||\n\t\t Buffer.isBuffer(signature)) {\n\t\t\treturn (oldVerify(key, signature, fmt));\n\n\t\t/*\n\t\t * Avoid doing this on valid arguments, walking the prototype\n\t\t * chain can be quite slow.\n\t\t */\n\t\t} else if (Signature.isSignature(signature, [1, 0])) {\n\t\t\tthrow (new Error('signature was created by too old ' +\n\t\t\t 'a version of sshpk and cannot be verified'));\n\n\t\t} else {\n\t\t\tthrow (new TypeError('signature must be a string, ' +\n\t\t\t 'Buffer, or Signature object'));\n\t\t}\n\t};\n\treturn (v);\n};\n\nKey.prototype.createDiffieHellman = function () {\n\tif (this.type === 'rsa')\n\t\tthrow (new Error('RSA keys do not support Diffie-Hellman'));\n\n\treturn (new DiffieHellman(this));\n};\nKey.prototype.createDH = Key.prototype.createDiffieHellman;\n\nKey.parse = function (data, format, options) {\n\tif (typeof (data) !== 'string')\n\t\tassert.buffer(data, 'data');\n\tif (format === undefined)\n\t\tformat = 'auto';\n\tassert.string(format, 'format');\n\tif (typeof (options) === 'string')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, 'options.filename');\n\tif (options.filename === undefined)\n\t\toptions.filename = '(unnamed)';\n\n\tassert.object(formats[format], 'formats[format]');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\tif (k instanceof PrivateKey)\n\t\t\tk = k.toPublic();\n\t\tif (!k.comment)\n\t\t\tk.comment = options.filename;\n\t\treturn (k);\n\t} catch (e) {\n\t\tif (e.name === 'KeyEncryptedError')\n\t\t\tthrow (e);\n\t\tthrow (new KeyParseError(options.filename, format, e));\n\t}\n};\n\nKey.isKey = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Key, ver));\n};\n\n/*\n * API versions for Key:\n * [1,0] -- initial ver, may take Signature for createVerify or may not\n * [1,1] -- added pkcs1, pkcs8 formats\n * [1,2] -- added auto, ssh-private, openssh formats\n * [1,3] -- added defaultHashAlgorithm\n * [1,4] -- added ed support, createDH\n * [1,5] -- first explicitly tagged version\n * [1,6] -- changed ed25519 part names\n * [1,7] -- spki hash types\n */\nKey.prototype._sshpkApiVersion = [1, 7];\n\nKey._oldVersionDetect = function (obj) {\n\tassert.func(obj.toBuffer);\n\tassert.func(obj.fingerprint);\n\tif (obj.createDH)\n\t\treturn ([1, 4]);\n\tif (obj.defaultHashAlgorithm)\n\t\treturn ([1, 3]);\n\tif (obj.formats['auto'])\n\t\treturn ([1, 2]);\n\tif (obj.formats['pkcs1'])\n\t\treturn ([1, 1]);\n\treturn ([1, 0]);\n};\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = PrivateKey;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar errs = require('./errors');\nvar util = require('util');\nvar utils = require('./utils');\nvar dhe = require('./dhe');\nvar generateECDSA = dhe.generateECDSA;\nvar generateED25519 = dhe.generateED25519;\nvar edCompat = require('./ed-compat');\nvar nacl = require('tweetnacl');\n\nvar Key = require('./key');\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar KeyParseError = errs.KeyParseError;\nvar KeyEncryptedError = errs.KeyEncryptedError;\n\nvar formats = {};\nformats['auto'] = require('./formats/auto');\nformats['pem'] = require('./formats/pem');\nformats['pkcs1'] = require('./formats/pkcs1');\nformats['pkcs8'] = require('./formats/pkcs8');\nformats['rfc4253'] = require('./formats/rfc4253');\nformats['ssh-private'] = require('./formats/ssh-private');\nformats['openssh'] = formats['ssh-private'];\nformats['ssh'] = formats['ssh-private'];\nformats['dnssec'] = require('./formats/dnssec');\nformats['putty'] = require('./formats/putty');\n\nfunction PrivateKey(opts) {\n\tassert.object(opts, 'options');\n\tKey.call(this, opts);\n\n\tthis._pubCache = undefined;\n}\nutil.inherits(PrivateKey, Key);\n\nPrivateKey.formats = formats;\n\nPrivateKey.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'pkcs1';\n\tassert.string(format, 'format');\n\tassert.object(formats[format], 'formats[format]');\n\tassert.optionalObject(options, 'options');\n\n\treturn (formats[format].write(this, options));\n};\n\nPrivateKey.prototype.hash = function (algo, type) {\n\treturn (this.toPublic().hash(algo, type));\n};\n\nPrivateKey.prototype.fingerprint = function (algo, type) {\n\treturn (this.toPublic().fingerprint(algo, type));\n};\n\nPrivateKey.prototype.toPublic = function () {\n\tif (this._pubCache)\n\t\treturn (this._pubCache);\n\n\tvar algInfo = algs.info[this.type];\n\tvar pubParts = [];\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tvar p = algInfo.parts[i];\n\t\tpubParts.push(this.part[p]);\n\t}\n\n\tthis._pubCache = new Key({\n\t\ttype: this.type,\n\t\tsource: this,\n\t\tparts: pubParts\n\t});\n\tif (this.comment)\n\t\tthis._pubCache.comment = this.comment;\n\treturn (this._pubCache);\n};\n\nPrivateKey.prototype.derive = function (newType) {\n\tassert.string(newType, 'type');\n\tvar priv, pub, pair;\n\n\tif (this.type === 'ed25519' && newType === 'curve25519') {\n\t\tpriv = this.part.k.data;\n\t\tif (priv[0] === 0x00)\n\t\t\tpriv = priv.slice(1);\n\n\t\tpair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv));\n\t\tpub = Buffer.from(pair.publicKey);\n\n\t\treturn (new PrivateKey({\n\t\t\ttype: 'curve25519',\n\t\t\tparts: [\n\t\t\t\t{ name: 'A', data: utils.mpNormalize(pub) },\n\t\t\t\t{ name: 'k', data: utils.mpNormalize(priv) }\n\t\t\t]\n\t\t}));\n\t} else if (this.type === 'curve25519' && newType === 'ed25519') {\n\t\tpriv = this.part.k.data;\n\t\tif (priv[0] === 0x00)\n\t\t\tpriv = priv.slice(1);\n\n\t\tpair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv));\n\t\tpub = Buffer.from(pair.publicKey);\n\n\t\treturn (new PrivateKey({\n\t\t\ttype: 'ed25519',\n\t\t\tparts: [\n\t\t\t\t{ name: 'A', data: utils.mpNormalize(pub) },\n\t\t\t\t{ name: 'k', data: utils.mpNormalize(priv) }\n\t\t\t]\n\t\t}));\n\t}\n\tthrow (new Error('Key derivation not supported from ' + this.type +\n\t ' to ' + newType));\n};\n\nPrivateKey.prototype.createVerify = function (hashAlgo) {\n\treturn (this.toPublic().createVerify(hashAlgo));\n};\n\nPrivateKey.prototype.createSign = function (hashAlgo) {\n\tif (hashAlgo === undefined)\n\t\thashAlgo = this.defaultHashAlgorithm();\n\tassert.string(hashAlgo, 'hash algorithm');\n\n\t/* ED25519 is not supported by OpenSSL, use a javascript impl. */\n\tif (this.type === 'ed25519' && edCompat !== undefined)\n\t\treturn (new edCompat.Signer(this, hashAlgo));\n\tif (this.type === 'curve25519')\n\t\tthrow (new Error('Curve25519 keys are not suitable for ' +\n\t\t 'signing or verification'));\n\n\tvar v, nm, err;\n\ttry {\n\t\tnm = hashAlgo.toUpperCase();\n\t\tv = crypto.createSign(nm);\n\t} catch (e) {\n\t\terr = e;\n\t}\n\tif (v === undefined || (err instanceof Error &&\n\t err.message.match(/Unknown message digest/))) {\n\t\tnm = 'RSA-';\n\t\tnm += hashAlgo.toUpperCase();\n\t\tv = crypto.createSign(nm);\n\t}\n\tassert.ok(v, 'failed to create verifier');\n\tvar oldSign = v.sign.bind(v);\n\tvar key = this.toBuffer('pkcs1');\n\tvar type = this.type;\n\tvar curve = this.curve;\n\tv.sign = function () {\n\t\tvar sig = oldSign(key);\n\t\tif (typeof (sig) === 'string')\n\t\t\tsig = Buffer.from(sig, 'binary');\n\t\tsig = Signature.parse(sig, type, 'asn1');\n\t\tsig.hashAlgorithm = hashAlgo;\n\t\tsig.curve = curve;\n\t\treturn (sig);\n\t};\n\treturn (v);\n};\n\nPrivateKey.parse = function (data, format, options) {\n\tif (typeof (data) !== 'string')\n\t\tassert.buffer(data, 'data');\n\tif (format === undefined)\n\t\tformat = 'auto';\n\tassert.string(format, 'format');\n\tif (typeof (options) === 'string')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, 'options.filename');\n\tif (options.filename === undefined)\n\t\toptions.filename = '(unnamed)';\n\n\tassert.object(formats[format], 'formats[format]');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\tassert.ok(k instanceof PrivateKey, 'key is not a private key');\n\t\tif (!k.comment)\n\t\t\tk.comment = options.filename;\n\t\treturn (k);\n\t} catch (e) {\n\t\tif (e.name === 'KeyEncryptedError')\n\t\t\tthrow (e);\n\t\tthrow (new KeyParseError(options.filename, format, e));\n\t}\n};\n\nPrivateKey.isPrivateKey = function (obj, ver) {\n\treturn (utils.isCompatible(obj, PrivateKey, ver));\n};\n\nPrivateKey.generate = function (type, options) {\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.object(options, 'options');\n\n\tswitch (type) {\n\tcase 'ecdsa':\n\t\tif (options.curve === undefined)\n\t\t\toptions.curve = 'nistp256';\n\t\tassert.string(options.curve, 'options.curve');\n\t\treturn (generateECDSA(options.curve));\n\tcase 'ed25519':\n\t\treturn (generateED25519());\n\tdefault:\n\t\tthrow (new Error('Key generation not supported with key ' +\n\t\t 'type \"' + type + '\"'));\n\t}\n};\n\n/*\n * API versions for PrivateKey:\n * [1,0] -- initial ver\n * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats\n * [1,2] -- added defaultHashAlgorithm\n * [1,3] -- added derive, ed, createDH\n * [1,4] -- first tagged version\n * [1,5] -- changed ed25519 part names and format\n * [1,6] -- type arguments for hash() and fingerprint()\n */\nPrivateKey.prototype._sshpkApiVersion = [1, 6];\n\nPrivateKey._oldVersionDetect = function (obj) {\n\tassert.func(obj.toPublic);\n\tassert.func(obj.createSign);\n\tif (obj.derive)\n\t\treturn ([1, 3]);\n\tif (obj.defaultHashAlgorithm)\n\t\treturn ([1, 2]);\n\tif (obj.formats['auto'])\n\t\treturn ([1, 1]);\n\treturn ([1, 0]);\n};\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = Signature;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar errs = require('./errors');\nvar utils = require('./utils');\nvar asn1 = require('asn1');\nvar SSHBuffer = require('./ssh-buffer');\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar SignatureParseError = errs.SignatureParseError;\n\nfunction Signature(opts) {\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.parts, 'options.parts');\n\tassert.string(opts.type, 'options.type');\n\n\tvar partLookup = {};\n\tfor (var i = 0; i < opts.parts.length; ++i) {\n\t\tvar part = opts.parts[i];\n\t\tpartLookup[part.name] = part;\n\t}\n\n\tthis.type = opts.type;\n\tthis.hashAlgorithm = opts.hashAlgo;\n\tthis.curve = opts.curve;\n\tthis.parts = opts.parts;\n\tthis.part = partLookup;\n}\n\nSignature.prototype.toBuffer = function (format) {\n\tif (format === undefined)\n\t\tformat = 'asn1';\n\tassert.string(format, 'format');\n\n\tvar buf;\n\tvar stype = 'ssh-' + this.type;\n\n\tswitch (this.type) {\n\tcase 'rsa':\n\t\tswitch (this.hashAlgorithm) {\n\t\tcase 'sha256':\n\t\t\tstype = 'rsa-sha2-256';\n\t\t\tbreak;\n\t\tcase 'sha512':\n\t\t\tstype = 'rsa-sha2-512';\n\t\t\tbreak;\n\t\tcase 'sha1':\n\t\tcase undefined:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error('SSH signature ' +\n\t\t\t 'format does not support hash ' +\n\t\t\t 'algorithm ' + this.hashAlgorithm));\n\t\t}\n\t\tif (format === 'ssh') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString(stype);\n\t\t\tbuf.writePart(this.part.sig);\n\t\t\treturn (buf.toBuffer());\n\t\t} else {\n\t\t\treturn (this.part.sig.data);\n\t\t}\n\t\tbreak;\n\n\tcase 'ed25519':\n\t\tif (format === 'ssh') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString(stype);\n\t\t\tbuf.writePart(this.part.sig);\n\t\t\treturn (buf.toBuffer());\n\t\t} else {\n\t\t\treturn (this.part.sig.data);\n\t\t}\n\t\tbreak;\n\n\tcase 'dsa':\n\tcase 'ecdsa':\n\t\tvar r, s;\n\t\tif (format === 'asn1') {\n\t\t\tvar der = new asn1.BerWriter();\n\t\t\tder.startSequence();\n\t\t\tr = utils.mpNormalize(this.part.r.data);\n\t\t\ts = utils.mpNormalize(this.part.s.data);\n\t\t\tder.writeBuffer(r, asn1.Ber.Integer);\n\t\t\tder.writeBuffer(s, asn1.Ber.Integer);\n\t\t\tder.endSequence();\n\t\t\treturn (der.buffer);\n\t\t} else if (format === 'ssh' && this.type === 'dsa') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString('ssh-dss');\n\t\t\tr = this.part.r.data;\n\t\t\tif (r.length > 20 && r[0] === 0x00)\n\t\t\t\tr = r.slice(1);\n\t\t\ts = this.part.s.data;\n\t\t\tif (s.length > 20 && s[0] === 0x00)\n\t\t\t\ts = s.slice(1);\n\t\t\tif ((this.hashAlgorithm &&\n\t\t\t this.hashAlgorithm !== 'sha1') ||\n\t\t\t r.length + s.length !== 40) {\n\t\t\t\tthrow (new Error('OpenSSH only supports ' +\n\t\t\t\t 'DSA signatures with SHA1 hash'));\n\t\t\t}\n\t\t\tbuf.writeBuffer(Buffer.concat([r, s]));\n\t\t\treturn (buf.toBuffer());\n\t\t} else if (format === 'ssh' && this.type === 'ecdsa') {\n\t\t\tvar inner = new SSHBuffer({});\n\t\t\tr = this.part.r.data;\n\t\t\tinner.writeBuffer(r);\n\t\t\tinner.writePart(this.part.s);\n\n\t\t\tbuf = new SSHBuffer({});\n\t\t\t/* XXX: find a more proper way to do this? */\n\t\t\tvar curve;\n\t\t\tif (r[0] === 0x00)\n\t\t\t\tr = r.slice(1);\n\t\t\tvar sz = r.length * 8;\n\t\t\tif (sz === 256)\n\t\t\t\tcurve = 'nistp256';\n\t\t\telse if (sz === 384)\n\t\t\t\tcurve = 'nistp384';\n\t\t\telse if (sz === 528)\n\t\t\t\tcurve = 'nistp521';\n\t\t\tbuf.writeString('ecdsa-sha2-' + curve);\n\t\t\tbuf.writeBuffer(inner.toBuffer());\n\t\t\treturn (buf.toBuffer());\n\t\t}\n\t\tthrow (new Error('Invalid signature format'));\n\tdefault:\n\t\tthrow (new Error('Invalid signature data'));\n\t}\n};\n\nSignature.prototype.toString = function (format) {\n\tassert.optionalString(format, 'format');\n\treturn (this.toBuffer(format).toString('base64'));\n};\n\nSignature.parse = function (data, type, format) {\n\tif (typeof (data) === 'string')\n\t\tdata = Buffer.from(data, 'base64');\n\tassert.buffer(data, 'data');\n\tassert.string(format, 'format');\n\tassert.string(type, 'type');\n\n\tvar opts = {};\n\topts.type = type.toLowerCase();\n\topts.parts = [];\n\n\ttry {\n\t\tassert.ok(data.length > 0, 'signature must not be empty');\n\t\tswitch (opts.type) {\n\t\tcase 'rsa':\n\t\t\treturn (parseOneNum(data, type, format, opts));\n\t\tcase 'ed25519':\n\t\t\treturn (parseOneNum(data, type, format, opts));\n\n\t\tcase 'dsa':\n\t\tcase 'ecdsa':\n\t\t\tif (format === 'asn1')\n\t\t\t\treturn (parseDSAasn1(data, type, format, opts));\n\t\t\telse if (opts.type === 'dsa')\n\t\t\t\treturn (parseDSA(data, type, format, opts));\n\t\t\telse\n\t\t\t\treturn (parseECDSA(data, type, format, opts));\n\n\t\tdefault:\n\t\t\tthrow (new InvalidAlgorithmError(type));\n\t\t}\n\n\t} catch (e) {\n\t\tif (e instanceof InvalidAlgorithmError)\n\t\t\tthrow (e);\n\t\tthrow (new SignatureParseError(type, format, e));\n\t}\n};\n\nfunction parseOneNum(data, type, format, opts) {\n\tif (format === 'ssh') {\n\t\ttry {\n\t\t\tvar buf = new SSHBuffer({buffer: data});\n\t\t\tvar head = buf.readString();\n\t\t} catch (e) {\n\t\t\t/* fall through */\n\t\t}\n\t\tif (buf !== undefined) {\n\t\t\tvar msg = 'SSH signature does not match expected ' +\n\t\t\t 'type (expected ' + type + ', got ' + head + ')';\n\t\t\tswitch (head) {\n\t\t\tcase 'ssh-rsa':\n\t\t\t\tassert.strictEqual(type, 'rsa', msg);\n\t\t\t\topts.hashAlgo = 'sha1';\n\t\t\t\tbreak;\n\t\t\tcase 'rsa-sha2-256':\n\t\t\t\tassert.strictEqual(type, 'rsa', msg);\n\t\t\t\topts.hashAlgo = 'sha256';\n\t\t\t\tbreak;\n\t\t\tcase 'rsa-sha2-512':\n\t\t\t\tassert.strictEqual(type, 'rsa', msg);\n\t\t\t\topts.hashAlgo = 'sha512';\n\t\t\t\tbreak;\n\t\t\tcase 'ssh-ed25519':\n\t\t\t\tassert.strictEqual(type, 'ed25519', msg);\n\t\t\t\topts.hashAlgo = 'sha512';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow (new Error('Unknown SSH signature ' +\n\t\t\t\t 'type: ' + head));\n\t\t\t}\n\t\t\tvar sig = buf.readPart();\n\t\t\tassert.ok(buf.atEnd(), 'extra trailing bytes');\n\t\t\tsig.name = 'sig';\n\t\t\topts.parts.push(sig);\n\t\t\treturn (new Signature(opts));\n\t\t}\n\t}\n\topts.parts.push({name: 'sig', data: data});\n\treturn (new Signature(opts));\n}\n\nfunction parseDSAasn1(data, type, format, opts) {\n\tvar der = new asn1.BerReader(data);\n\tder.readSequence();\n\tvar r = der.readString(asn1.Ber.Integer, true);\n\tvar s = der.readString(asn1.Ber.Integer, true);\n\n\topts.parts.push({name: 'r', data: utils.mpNormalize(r)});\n\topts.parts.push({name: 's', data: utils.mpNormalize(s)});\n\n\treturn (new Signature(opts));\n}\n\nfunction parseDSA(data, type, format, opts) {\n\tif (data.length != 40) {\n\t\tvar buf = new SSHBuffer({buffer: data});\n\t\tvar d = buf.readBuffer();\n\t\tif (d.toString('ascii') === 'ssh-dss')\n\t\t\td = buf.readBuffer();\n\t\tassert.ok(buf.atEnd(), 'extra trailing bytes');\n\t\tassert.strictEqual(d.length, 40, 'invalid inner length');\n\t\tdata = d;\n\t}\n\topts.parts.push({name: 'r', data: data.slice(0, 20)});\n\topts.parts.push({name: 's', data: data.slice(20, 40)});\n\treturn (new Signature(opts));\n}\n\nfunction parseECDSA(data, type, format, opts) {\n\tvar buf = new SSHBuffer({buffer: data});\n\n\tvar r, s;\n\tvar inner = buf.readBuffer();\n\tvar stype = inner.toString('ascii');\n\tif (stype.slice(0, 6) === 'ecdsa-') {\n\t\tvar parts = stype.split('-');\n\t\tassert.strictEqual(parts[0], 'ecdsa');\n\t\tassert.strictEqual(parts[1], 'sha2');\n\t\topts.curve = parts[2];\n\t\tswitch (opts.curve) {\n\t\tcase 'nistp256':\n\t\t\topts.hashAlgo = 'sha256';\n\t\t\tbreak;\n\t\tcase 'nistp384':\n\t\t\topts.hashAlgo = 'sha384';\n\t\t\tbreak;\n\t\tcase 'nistp521':\n\t\t\topts.hashAlgo = 'sha512';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error('Unsupported ECDSA curve: ' +\n\t\t\t opts.curve));\n\t\t}\n\t\tinner = buf.readBuffer();\n\t\tassert.ok(buf.atEnd(), 'extra trailing bytes on outer');\n\t\tbuf = new SSHBuffer({buffer: inner});\n\t\tr = buf.readPart();\n\t} else {\n\t\tr = {data: inner};\n\t}\n\n\ts = buf.readPart();\n\tassert.ok(buf.atEnd(), 'extra trailing bytes');\n\n\tr.name = 'r';\n\ts.name = 's';\n\n\topts.parts.push(r);\n\topts.parts.push(s);\n\treturn (new Signature(opts));\n}\n\nSignature.isSignature = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Signature, ver));\n};\n\n/*\n * API versions for Signature:\n * [1,0] -- initial ver\n * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent\n * hashAlgorithm property\n * [2,1] -- first tagged version\n */\nSignature.prototype._sshpkApiVersion = [2, 1];\n\nSignature._oldVersionDetect = function (obj) {\n\tassert.func(obj.toBuffer);\n\tif (obj.hasOwnProperty('hashAlgorithm'))\n\t\treturn ([2, 0]);\n\treturn ([1, 0]);\n};\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = SSHBuffer;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\n\nfunction SSHBuffer(opts) {\n\tassert.object(opts, 'options');\n\tif (opts.buffer !== undefined)\n\t\tassert.buffer(opts.buffer, 'options.buffer');\n\n\tthis._size = opts.buffer ? opts.buffer.length : 1024;\n\tthis._buffer = opts.buffer || Buffer.alloc(this._size);\n\tthis._offset = 0;\n}\n\nSSHBuffer.prototype.toBuffer = function () {\n\treturn (this._buffer.slice(0, this._offset));\n};\n\nSSHBuffer.prototype.atEnd = function () {\n\treturn (this._offset >= this._buffer.length);\n};\n\nSSHBuffer.prototype.remainder = function () {\n\treturn (this._buffer.slice(this._offset));\n};\n\nSSHBuffer.prototype.skip = function (n) {\n\tthis._offset += n;\n};\n\nSSHBuffer.prototype.expand = function () {\n\tthis._size *= 2;\n\tvar buf = Buffer.alloc(this._size);\n\tthis._buffer.copy(buf, 0);\n\tthis._buffer = buf;\n};\n\nSSHBuffer.prototype.readPart = function () {\n\treturn ({data: this.readBuffer()});\n};\n\nSSHBuffer.prototype.readBuffer = function () {\n\tvar len = this._buffer.readUInt32BE(this._offset);\n\tthis._offset += 4;\n\tassert.ok(this._offset + len <= this._buffer.length,\n\t 'length out of bounds at +0x' + this._offset.toString(16) +\n\t ' (data truncated?)');\n\tvar buf = this._buffer.slice(this._offset, this._offset + len);\n\tthis._offset += len;\n\treturn (buf);\n};\n\nSSHBuffer.prototype.readString = function () {\n\treturn (this.readBuffer().toString());\n};\n\nSSHBuffer.prototype.readCString = function () {\n\tvar offset = this._offset;\n\twhile (offset < this._buffer.length &&\n\t this._buffer[offset] !== 0x00)\n\t\toffset++;\n\tassert.ok(offset < this._buffer.length, 'c string does not terminate');\n\tvar str = this._buffer.slice(this._offset, offset).toString();\n\tthis._offset = offset + 1;\n\treturn (str);\n};\n\nSSHBuffer.prototype.readInt = function () {\n\tvar v = this._buffer.readUInt32BE(this._offset);\n\tthis._offset += 4;\n\treturn (v);\n};\n\nSSHBuffer.prototype.readInt64 = function () {\n\tassert.ok(this._offset + 8 < this._buffer.length,\n\t 'buffer not long enough to read Int64');\n\tvar v = this._buffer.slice(this._offset, this._offset + 8);\n\tthis._offset += 8;\n\treturn (v);\n};\n\nSSHBuffer.prototype.readChar = function () {\n\tvar v = this._buffer[this._offset++];\n\treturn (v);\n};\n\nSSHBuffer.prototype.writeBuffer = function (buf) {\n\twhile (this._offset + 4 + buf.length > this._size)\n\t\tthis.expand();\n\tthis._buffer.writeUInt32BE(buf.length, this._offset);\n\tthis._offset += 4;\n\tbuf.copy(this._buffer, this._offset);\n\tthis._offset += buf.length;\n};\n\nSSHBuffer.prototype.writeString = function (str) {\n\tthis.writeBuffer(Buffer.from(str, 'utf8'));\n};\n\nSSHBuffer.prototype.writeCString = function (str) {\n\twhile (this._offset + 1 + str.length > this._size)\n\t\tthis.expand();\n\tthis._buffer.write(str, this._offset);\n\tthis._offset += str.length;\n\tthis._buffer[this._offset++] = 0;\n};\n\nSSHBuffer.prototype.writeInt = function (v) {\n\twhile (this._offset + 4 > this._size)\n\t\tthis.expand();\n\tthis._buffer.writeUInt32BE(v, this._offset);\n\tthis._offset += 4;\n};\n\nSSHBuffer.prototype.writeInt64 = function (v) {\n\tassert.buffer(v, 'value');\n\tif (v.length > 8) {\n\t\tvar lead = v.slice(0, v.length - 8);\n\t\tfor (var i = 0; i < lead.length; ++i) {\n\t\t\tassert.strictEqual(lead[i], 0,\n\t\t\t 'must fit in 64 bits of precision');\n\t\t}\n\t\tv = v.slice(v.length - 8, v.length);\n\t}\n\twhile (this._offset + 8 > this._size)\n\t\tthis.expand();\n\tv.copy(this._buffer, this._offset);\n\tthis._offset += 8;\n};\n\nSSHBuffer.prototype.writeChar = function (v) {\n\twhile (this._offset + 1 > this._size)\n\t\tthis.expand();\n\tthis._buffer[this._offset++] = v;\n};\n\nSSHBuffer.prototype.writePart = function (p) {\n\tthis.writeBuffer(p.data);\n};\n\nSSHBuffer.prototype.write = function (buf) {\n\twhile (this._offset + buf.length > this._size)\n\t\tthis.expand();\n\tbuf.copy(this._buffer, this._offset);\n\tthis._offset += buf.length;\n};\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tbufferSplit: bufferSplit,\n\taddRSAMissing: addRSAMissing,\n\tcalculateDSAPublic: calculateDSAPublic,\n\tcalculateED25519Public: calculateED25519Public,\n\tcalculateX25519Public: calculateX25519Public,\n\tmpNormalize: mpNormalize,\n\tmpDenormalize: mpDenormalize,\n\tecNormalize: ecNormalize,\n\tcountZeros: countZeros,\n\tassertCompatible: assertCompatible,\n\tisCompatible: isCompatible,\n\topensslKeyDeriv: opensslKeyDeriv,\n\topensshCipherInfo: opensshCipherInfo,\n\tpublicFromPrivateECDSA: publicFromPrivateECDSA,\n\tzeroPadToLength: zeroPadToLength,\n\twriteBitString: writeBitString,\n\treadBitString: readBitString,\n\tpbkdf2: pbkdf2\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar PrivateKey = require('./private-key');\nvar Key = require('./key');\nvar crypto = require('crypto');\nvar algs = require('./algs');\nvar asn1 = require('asn1');\n\nvar ec = require('ecc-jsbn/lib/ec');\nvar jsbn = require('jsbn').BigInteger;\nvar nacl = require('tweetnacl');\n\nvar MAX_CLASS_DEPTH = 3;\n\nfunction isCompatible(obj, klass, needVer) {\n\tif (obj === null || typeof (obj) !== 'object')\n\t\treturn (false);\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn (true);\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tif (!proto || ++depth > MAX_CLASS_DEPTH)\n\t\t\treturn (false);\n\t}\n\tif (proto.constructor.name !== klass.name)\n\t\treturn (false);\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tif (ver[0] != needVer[0] || ver[1] < needVer[1])\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction assertCompatible(obj, klass, needVer, name) {\n\tif (name === undefined)\n\t\tname = 'object';\n\tassert.ok(obj, name + ' must not be null');\n\tassert.object(obj, name + ' must be an object');\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn;\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tassert.ok(proto && ++depth <= MAX_CLASS_DEPTH,\n\t\t name + ' must be a ' + klass.name + ' instance');\n\t}\n\tassert.strictEqual(proto.constructor.name, klass.name,\n\t name + ' must be a ' + klass.name + ' instance');\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tassert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1],\n\t name + ' must be compatible with ' + klass.name + ' klass ' +\n\t 'version ' + needVer[0] + '.' + needVer[1]);\n}\n\nvar CIPHER_LEN = {\n\t'des-ede3-cbc': { key: 24, iv: 8 },\n\t'aes-128-cbc': { key: 16, iv: 16 },\n\t'aes-256-cbc': { key: 32, iv: 16 }\n};\nvar PKCS5_SALT_LEN = 8;\n\nfunction opensslKeyDeriv(cipher, salt, passphrase, count) {\n\tassert.buffer(salt, 'salt');\n\tassert.buffer(passphrase, 'passphrase');\n\tassert.number(count, 'iteration count');\n\n\tvar clen = CIPHER_LEN[cipher];\n\tassert.object(clen, 'supported cipher');\n\n\tsalt = salt.slice(0, PKCS5_SALT_LEN);\n\n\tvar D, D_prev, bufs;\n\tvar material = Buffer.alloc(0);\n\twhile (material.length < clen.key + clen.iv) {\n\t\tbufs = [];\n\t\tif (D_prev)\n\t\t\tbufs.push(D_prev);\n\t\tbufs.push(passphrase);\n\t\tbufs.push(salt);\n\t\tD = Buffer.concat(bufs);\n\t\tfor (var j = 0; j < count; ++j)\n\t\t\tD = crypto.createHash('md5').update(D).digest();\n\t\tmaterial = Buffer.concat([material, D]);\n\t\tD_prev = D;\n\t}\n\n\treturn ({\n\t key: material.slice(0, clen.key),\n\t iv: material.slice(clen.key, clen.key + clen.iv)\n\t});\n}\n\n/* See: RFC2898 */\nfunction pbkdf2(hashAlg, salt, iterations, size, passphrase) {\n\tvar hkey = Buffer.alloc(salt.length + 4);\n\tsalt.copy(hkey);\n\n\tvar gen = 0, ts = [];\n\tvar i = 1;\n\twhile (gen < size) {\n\t\tvar t = T(i++);\n\t\tgen += t.length;\n\t\tts.push(t);\n\t}\n\treturn (Buffer.concat(ts).slice(0, size));\n\n\tfunction T(I) {\n\t\thkey.writeUInt32BE(I, hkey.length - 4);\n\n\t\tvar hmac = crypto.createHmac(hashAlg, passphrase);\n\t\thmac.update(hkey);\n\n\t\tvar Ti = hmac.digest();\n\t\tvar Uc = Ti;\n\t\tvar c = 1;\n\t\twhile (c++ < iterations) {\n\t\t\thmac = crypto.createHmac(hashAlg, passphrase);\n\t\t\thmac.update(Uc);\n\t\t\tUc = hmac.digest();\n\t\t\tfor (var x = 0; x < Ti.length; ++x)\n\t\t\t\tTi[x] ^= Uc[x];\n\t\t}\n\t\treturn (Ti);\n\t}\n}\n\n/* Count leading zero bits on a buffer */\nfunction countZeros(buf) {\n\tvar o = 0, obit = 8;\n\twhile (o < buf.length) {\n\t\tvar mask = (1 << obit);\n\t\tif ((buf[o] & mask) === mask)\n\t\t\tbreak;\n\t\tobit--;\n\t\tif (obit < 0) {\n\t\t\to++;\n\t\t\tobit = 8;\n\t\t}\n\t}\n\treturn (o*8 + (8 - obit) - 1);\n}\n\nfunction bufferSplit(buf, chr) {\n\tassert.buffer(buf);\n\tassert.string(chr);\n\n\tvar parts = [];\n\tvar lastPart = 0;\n\tvar matches = 0;\n\tfor (var i = 0; i < buf.length; ++i) {\n\t\tif (buf[i] === chr.charCodeAt(matches))\n\t\t\t++matches;\n\t\telse if (buf[i] === chr.charCodeAt(0))\n\t\t\tmatches = 1;\n\t\telse\n\t\t\tmatches = 0;\n\n\t\tif (matches >= chr.length) {\n\t\t\tvar newPart = i + 1;\n\t\t\tparts.push(buf.slice(lastPart, newPart - matches));\n\t\t\tlastPart = newPart;\n\t\t\tmatches = 0;\n\t\t}\n\t}\n\tif (lastPart <= buf.length)\n\t\tparts.push(buf.slice(lastPart, buf.length));\n\n\treturn (parts);\n}\n\nfunction ecNormalize(buf, addZero) {\n\tassert.buffer(buf);\n\tif (buf[0] === 0x00 && buf[1] === 0x04) {\n\t\tif (addZero)\n\t\t\treturn (buf);\n\t\treturn (buf.slice(1));\n\t} else if (buf[0] === 0x04) {\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t} else {\n\t\twhile (buf[0] === 0x00)\n\t\t\tbuf = buf.slice(1);\n\t\tif (buf[0] === 0x02 || buf[0] === 0x03)\n\t\t\tthrow (new Error('Compressed elliptic curve points ' +\n\t\t\t 'are not supported'));\n\t\tif (buf[0] !== 0x04)\n\t\t\tthrow (new Error('Not a valid elliptic curve point'));\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t}\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x0;\n\tbuf.copy(b, 1);\n\treturn (b);\n}\n\nfunction readBitString(der, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar buf = der.readString(tag, true);\n\tassert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' +\n\t 'not supported (0x' + buf[0].toString(16) + ')');\n\treturn (buf.slice(1));\n}\n\nfunction writeBitString(der, buf, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x00;\n\tbuf.copy(b, 1);\n\tder.writeBuffer(b, tag);\n}\n\nfunction mpNormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00)\n\t\tbuf = buf.slice(1);\n\tif ((buf[0] & 0x80) === 0x80) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction mpDenormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00)\n\t\tbuf = buf.slice(1);\n\treturn (buf);\n}\n\nfunction zeroPadToLength(buf, len) {\n\tassert.buffer(buf);\n\tassert.number(len);\n\twhile (buf.length > len) {\n\t\tassert.equal(buf[0], 0x00);\n\t\tbuf = buf.slice(1);\n\t}\n\twhile (buf.length < len) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction bigintToMpBuf(bigint) {\n\tvar buf = Buffer.from(bigint.toByteArray());\n\tbuf = mpNormalize(buf);\n\treturn (buf);\n}\n\nfunction calculateDSAPublic(g, p, x) {\n\tassert.buffer(g);\n\tassert.buffer(p);\n\tassert.buffer(x);\n\tg = new jsbn(g);\n\tp = new jsbn(p);\n\tx = new jsbn(x);\n\tvar y = g.modPow(x, p);\n\tvar ybuf = bigintToMpBuf(y);\n\treturn (ybuf);\n}\n\nfunction calculateED25519Public(k) {\n\tassert.buffer(k);\n\n\tvar kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction calculateX25519Public(k) {\n\tassert.buffer(k);\n\n\tvar kp = nacl.box.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction addRSAMissing(key) {\n\tassert.object(key);\n\tassertCompatible(key, PrivateKey, [1, 1]);\n\n\tvar d = new jsbn(key.part.d.data);\n\tvar buf;\n\n\tif (!key.part.dmodp) {\n\t\tvar p = new jsbn(key.part.p.data);\n\t\tvar dmodp = d.mod(p.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodp);\n\t\tkey.part.dmodp = {name: 'dmodp', data: buf};\n\t\tkey.parts.push(key.part.dmodp);\n\t}\n\tif (!key.part.dmodq) {\n\t\tvar q = new jsbn(key.part.q.data);\n\t\tvar dmodq = d.mod(q.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodq);\n\t\tkey.part.dmodq = {name: 'dmodq', data: buf};\n\t\tkey.parts.push(key.part.dmodq);\n\t}\n}\n\nfunction publicFromPrivateECDSA(curveName, priv) {\n\tassert.string(curveName, 'curveName');\n\tassert.buffer(priv);\n\tvar params = algs.curves[curveName];\n\tvar p = new jsbn(params.p);\n\tvar a = new jsbn(params.a);\n\tvar b = new jsbn(params.b);\n\tvar curve = new ec.ECCurveFp(p, a, b);\n\tvar G = curve.decodePointHex(params.G.toString('hex'));\n\n\tvar d = new jsbn(mpNormalize(priv));\n\tvar pub = G.multiply(d);\n\tpub = Buffer.from(curve.encodePointHex(pub), 'hex');\n\n\tvar parts = [];\n\tparts.push({name: 'curve', data: Buffer.from(curveName)});\n\tparts.push({name: 'Q', data: pub});\n\n\tvar key = new Key({type: 'ecdsa', curve: curve, parts: parts});\n\treturn (key);\n}\n\nfunction opensshCipherInfo(cipher) {\n\tvar inf = {};\n\tswitch (cipher) {\n\tcase '3des-cbc':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = 'des-ede3-cbc';\n\t\tbreak;\n\tcase 'blowfish-cbc':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = 'bf-cbc';\n\t\tbreak;\n\tcase 'aes128-cbc':\n\tcase 'aes128-ctr':\n\tcase 'aes128-gcm@openssh.com':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-128-' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase 'aes192-cbc':\n\tcase 'aes192-ctr':\n\tcase 'aes192-gcm@openssh.com':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-192-' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase 'aes256-cbc':\n\tcase 'aes256-ctr':\n\tcase 'aes256-gcm@openssh.com':\n\t\tinf.keySize = 32;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-256-' + cipher.slice(7, 10);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\n\t\t 'Unsupported openssl cipher \"' + cipher + '\"'));\n\t}\n\treturn (inf);\n}\n","'use strict';\n\nvar isNative = /\\.node$/;\n\nfunction forEach(obj, callback) {\n for ( var key in obj ) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n continue;\n }\n callback(key);\n }\n}\n\nfunction assign(target, source) {\n forEach(source, function (key) {\n target[key] = source[key];\n });\n return target;\n}\n\nfunction clearCache(requireCache) {\n forEach(requireCache, function (resolvedPath) {\n if (!isNative.test(resolvedPath)) {\n delete requireCache[resolvedPath];\n }\n });\n}\n\nmodule.exports = function (requireCache, callback, callbackForModulesToKeep, module) {\n\n var originalCache = assign({}, requireCache);\n clearCache(requireCache);\n\n if (callbackForModulesToKeep) {\n\n var originalModuleChildren = module.children ? module.children.slice() : false; // Creates a shallow copy of module.children\n\n callbackForModulesToKeep();\n\n // Lists the cache entries made by callbackForModulesToKeep()\n var modulesToKeep = [];\n forEach(requireCache, function (key) {\n modulesToKeep.push(key);\n });\n\n // Discards the modules required in callbackForModulesToKeep()\n clearCache(requireCache);\n\n if (module.children) { // Only true for node.js\n module.children = originalModuleChildren; // Removes last references to modules required in callbackForModulesToKeep() -> No memory leak\n }\n\n // Takes the cache entries of the original cache in case the modules where required before\n for ( var i = 0; i < modulesToKeep.length; i+=1 ) {\n if (originalCache[modulesToKeep[i]]) {\n requireCache[modulesToKeep[i]] = originalCache[modulesToKeep[i]];\n }\n }\n\n }\n\n var freshModule = callback();\n\n var stealthCache = callbackForModulesToKeep ? assign({}, requireCache) : false;\n\n clearCache(requireCache);\n\n if (callbackForModulesToKeep) {\n // In case modules to keep were required inside the stealthy require for the first time, copy them to the restored cache\n for ( var k = 0; k < modulesToKeep.length; k+=1 ) {\n if (stealthCache[modulesToKeep[k]]) {\n requireCache[modulesToKeep[k]] = stealthCache[modulesToKeep[k]];\n }\n }\n }\n\n assign(requireCache, originalCache);\n\n return freshModule;\n\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || checkTypeSupport('arraybuffer')\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && checkTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary, useFetch) {\n\tif (capability.fetch && useFetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + Buffer.from(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tvar useFetch = true\n\tif (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {\n\t\t// If the use of XHR should be preferred. Not typically needed.\n\t\tuseFetch = false\n\t\tpreferBinary = true\n\t} else if (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary, useFetch)\n\tself._fetchTimer = null\n\tself._socketTimeout = null\n\tself._socketTimer = null\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar header = this._headers[name.toLowerCase()]\n\tif (header)\n\t\treturn header.value\n\treturn null\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tif ('timeout' in opts && opts.timeout !== 0) {\n\t\tself.setTimeout(opts.timeout)\n\t}\n\n\tvar headersObj = self._headers\n\tvar body = null\n\tif (opts.method !== 'GET' && opts.method !== 'HEAD') {\n body = new Blob(self._body, {\n type: (headersObj['content-type'] || {}).value || ''\n });\n }\n\n\t// create flattened list of headers\n\tvar headersList = []\n\tObject.keys(headersObj).forEach(function (keyName) {\n\t\tvar name = headersObj[keyName].name\n\t\tvar value = headersObj[keyName].value\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(function (v) {\n\t\t\t\theadersList.push([name, v])\n\t\t\t})\n\t\t} else {\n\t\t\theadersList.push([name, value])\n\t\t}\n\t})\n\n\tif (self._mode === 'fetch') {\n\t\tvar signal = null\n\t\tif (capability.abortController) {\n\t\t\tvar controller = new AbortController()\n\t\t\tsignal = controller.signal\n\t\t\tself._fetchAbortController = controller\n\n\t\t\tif ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n\t\t\t\tself._fetchTimer = global.setTimeout(function () {\n\t\t\t\t\tself.emit('requestTimeout')\n\t\t\t\t\tif (self._fetchAbortController)\n\t\t\t\t\t\tself._fetchAbortController.abort()\n\t\t\t\t}, opts.requestTimeout)\n\t\t\t}\n\t\t}\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headersList,\n\t\t\tbody: body || undefined,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: signal\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._resetTimers(false)\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tself._resetTimers(true)\n\t\t\tif (!self._destroyed)\n\t\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tif ('requestTimeout' in opts) {\n\t\t\txhr.timeout = opts.requestTimeout\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tself.emit('requestTimeout')\n\t\t\t}\n\t\t}\n\n\t\theadersList.forEach(function (header) {\n\t\t\txhr.setRequestHeader(header[0], header[1])\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself._resetTimers(true)\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tself._resetTimers(false)\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress(self._resetTimers.bind(self))\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._resetTimers.bind(self))\n\tself._response.on('error', function(err) {\n\t\tself.emit('error', err)\n\t})\n\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype._resetTimers = function (done) {\n\tvar self = this\n\n\tglobal.clearTimeout(self._socketTimer)\n\tself._socketTimer = null\n\n\tif (done) {\n\t\tglobal.clearTimeout(self._fetchTimer)\n\t\tself._fetchTimer = null\n\t} else if (self._socketTimeout) {\n\t\tself._socketTimer = global.setTimeout(function () {\n\t\t\tself.emit('timeout')\n\t\t}, self._socketTimeout)\n\t}\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function (err) {\n\tvar self = this\n\tself._destroyed = true\n\tself._resetTimers(true)\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\telse if (self._fetchAbortController)\n\t\tself._fetchAbortController.abort()\n\n\tif (err)\n\t\tself.emit('error', err)\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.setTimeout = function (timeout, cb) {\n\tvar self = this\n\n\tif (cb)\n\t\tself.once('timeout', cb)\n\n\tself._socketTimeout = timeout\n\tself._resetTimers(false)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'via'\n]\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, resetTimers) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\tresetTimers(false)\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(Buffer.from(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tresetTimers(true)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tresetTimers(true)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tresetTimers(true)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tresetTimers(result.done)\n\t\t\t\tif (result.done) {\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(Buffer.from(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tresetTimers(true)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function (resetTimers) {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text':\n\t\t\tresponse = xhr.responseText\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = Buffer.alloc(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(Buffer.from(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(Buffer.from(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(Buffer.from(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tresetTimers(true)\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tresetTimers(true)\n\t\tself.push(null)\n\t}\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar Buffer = require('buffer').Buffer;\n\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n }\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nvar StringDecoder = exports.StringDecoder = function(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n};\n\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n","var isHexPrefixed = require('is-hex-prefixed');\n\n/**\n * Removes '0x' from a given `String` is present\n * @param {String} str the string value\n * @return {String|Optional} a string by pass if necessary\n */\nmodule.exports = function stripHexPrefix(str) {\n if (typeof str !== 'string') {\n return str;\n }\n\n return isHexPrefixed(str) ? str.slice(2) : str;\n}\n","var bind = Function.prototype.bind,\n slice = Array.prototype.slice,\n toString = Object.prototype.toString;\n\nexports.bind = function (func, that) {\n\tvar args = slice.call(arguments, 2);\n\n\tif (bind) {\n\t\targs.unshift(that);\n\n\t\treturn bind.apply(func, args);\n\t}\n\n\treturn function () {\n\t\treturn func.apply(that, args.concat(slice.call(arguments)));\n\t};\n}\n\nexports.slice = function (object, begin, end) {\n\treturn slice.call(object, begin, end);\n};\n\nexports.toString = function (object) {\n\treturn toString.call(object);\n};\n\n\nexports.isNull = nativeTypeChecker('Null');\nexports.isDate = nativeTypeChecker('Date');\nexports.isMath = nativeTypeChecker('Math');\nexports.isJSON = nativeTypeChecker('JSON');\nexports.isError = nativeTypeChecker('Error');\nexports.isArray = Array.isArray || nativeTypeChecker('Array');\nexports.isObject = nativeTypeChecker('Object');\nexports.isRegExp = nativeTypeChecker('RegExp');\nexports.isNumber = nativeTypeChecker('Number');\nexports.isString = nativeTypeChecker('String');\nexports.isBoolean = nativeTypeChecker('Boolean');\nexports.isFunction = nativeTypeChecker('Function');\nexports.isArguments = nativeTypeChecker('Arguments');\nexports.isUndefined = nativeTypeChecker('Undefined');\n\nfunction nativeTypeChecker (type) {\n\ttype = '[object ' + type + ']';\n\n\treturn function (object) {return toString.call(object) === type;};\n}\n\n\nexports.isValid = function (object) {\n\treturn !exports.isInvalid(object);\n}\n\nexports.isInvalid = function (object) {\n\treturn exports.isNull(object) || exports.isUndefined(object);\n}\n\n\nexports.isImmutable = function (object) {\n\treturn !exports.isMutable(object);\n};\n\nexports.isMutable = function (object) {\n\treturn object &&\n\t\t!exports.isNumber(object) &&\n\t\t!exports.isString(object) &&\n\t\t!exports.isBoolean(object);\n};\n\n\nexports.isEnumerable = function (object) {\n\tif (!object) return false;\n\n\tif (exports.isNumber(object)) return exports.isInteger(object);\n\n\tif (exports.isInteger(object.length)) return object.length >= 0;\n\n\treturn exports.isEnumerableObject(object);\n};\n\nexports.isEnumerableObject = function (object) {\n\tfor (var _ in object) return true;\n\n\treturn false;\n};\n\nexports.isEmpty = function (object) {\n\treturn exports.isObject(object) ?\n\t\t!exports.isEnumerableObject(object) :\n\t\t!exports.isEnumerable(object);\n}\n\n\nexports.isFiniteNumber = function (number) {\n\treturn exports.isNumber(number) && isFinite(number);\n};\n\nexports.isInteger = function (number) {\n\treturn exports.isFiniteNumber(number) && Math.floor(number) === number;\n};\n\nexports.isVague = function (object) {\n\treturn object && typeof object === 'object';\n};\n\nexports.isList = function (list) {\n\treturn (\n\t\texports.isVague(list) &&\n\t\texports.isInteger(list.length) && list.length >= 0);\n};\n\n\nexports.isNaN = isNaN;\n\n\nexports.nativeTypeOf = function (object) {\n\tvar nativeType = object.toString(object);\n\n\treturn nativeType.substring(8, nativeType.length - 1);\n};\n\nexports.typeOf = function (object) {\n\treturn exports.isObject(object) ?\n\t\tobject.constructor.name || 'Object' :\n\t\texports.nativeTypeOf(object);\n};\n\n\nexports.safeApply = function (func, args, that) {\n\treturn exports.isFunction(func) ?\n\t\tfunc.apply(that || this, args) :\n\t\tundefined;\n};\n\n\nexports.enumerate = function (object, iterator, that, _ignoreForEach) {\n\tif (!object) return object;\n\n\tthat = that || this;\n\n\tif (!_ignoreForEach && exports.isFunction(object.forEach))\n\t\treturn object.forEach(iterator, that);\n\n\tvar key = 0, end = object.length;\n\n\tif (exports.isString(object)) {\n\t\tfor (; key < end; key += 1) iterator.call(that, object.charAt(key), key, object);\n\n\t} if (exports.isList(object)) {\n\t\tfor (; key < end; key += 1) iterator.call(that, object[key], key, object);\n\n\t} else if (exports.isInteger(object)) {\n\t\tif (object < 0) {\n\t\t\tend = 0;\n\t\t\tkey = object;\n\n\t\t} else end = object;\n\n\t\tfor (; key < end; key += 1) iterator.call(that, key, Math.abs(key), object);\n\n\t} else exports.enumerateObject(object, iterator, that);\n\n\treturn object;\n};\n\nexports.enumerateObject = function (object, iterator, that) {\n\tvar key;\n\n\tfor (key in object) iterator.call(that, object[key], key, object);\n\n\treturn object;\n}\n\n\nexports.assignAll = function (target, giver, filter, that, _method) {\n\tif (!exports.isMutable(target)) return target;\n\n\t_method = _method === 'enumerate' ? _method : 'enumerateObject';\n\n\texports[_method](giver, function (value, key) {\n\t\tif (!exports.safeApply(filter, arguments, that || target)) {\n\t\t\ttarget[key] = value;\n\t\t}\n\t});\n\n\treturn target;\n};\n\nexports.assignList = function (target, giver, filter, that) {\n\treturn exports.assignAll(target, giver, filter, that, 'enumerate');\n};\n\nexports.assign = function (target, giver, filter, that) {\n\treturn exports.assignAll(target, giver, function (_, key) {\n\t\tif (!giver.hasOwnProperty(key)) return true;\n\n\t\treturn exports.safeApply(filter, arguments, that || this);\n\t}, that);\n};\n\n\nexports.toArray = function (object, begin, end) {\n\tif (exports.isArray()) return exports.isInteger(begin) ?\n\t\texports.slice(object, begin, end) :\n\t\tobject;\n\n\tif (exports.isArguments(object) || exports.isString(object))\n\t\treturn exports.slice(object, begin, end);\n\n\tif (!exports.isList(object)) return undefined;\n\n\tif (!exports.isInteger(end)) end = object.length;\n\n\tbegin = begin || 0;\n\n\treturn exports.assignList([], object, function (_, i) {\n\t\treturn begin > i || i >= end;\n\t});\n};\n","'use strict'\n\nvar net = require('net')\n , tls = require('tls')\n , http = require('http')\n , https = require('https')\n , events = require('events')\n , assert = require('assert')\n , util = require('util')\n , Buffer = require('safe-buffer').Buffer\n ;\n\nexports.httpOverHttp = httpOverHttp\nexports.httpsOverHttp = httpsOverHttp\nexports.httpOverHttps = httpOverHttps\nexports.httpsOverHttps = httpsOverHttps\n\n\nfunction httpOverHttp(options) {\n var agent = new TunnelingAgent(options)\n agent.request = http.request\n return agent\n}\n\nfunction httpsOverHttp(options) {\n var agent = new TunnelingAgent(options)\n agent.request = http.request\n agent.createSocket = createSecureSocket\n agent.defaultPort = 443\n return agent\n}\n\nfunction httpOverHttps(options) {\n var agent = new TunnelingAgent(options)\n agent.request = https.request\n return agent\n}\n\nfunction httpsOverHttps(options) {\n var agent = new TunnelingAgent(options)\n agent.request = https.request\n agent.createSocket = createSecureSocket\n agent.defaultPort = 443\n return agent\n}\n\n\nfunction TunnelingAgent(options) {\n var self = this\n self.options = options || {}\n self.proxyOptions = self.options.proxy || {}\n self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets\n self.requests = []\n self.sockets = []\n\n self.on('free', function onFree(socket, host, port) {\n for (var i = 0, len = self.requests.length; i < len; ++i) {\n var pending = self.requests[i]\n if (pending.host === host && pending.port === port) {\n // Detect the request to connect same origin server,\n // reuse the connection.\n self.requests.splice(i, 1)\n pending.request.onSocket(socket)\n return\n }\n }\n socket.destroy()\n self.removeSocket(socket)\n })\n}\nutil.inherits(TunnelingAgent, events.EventEmitter)\n\nTunnelingAgent.prototype.addRequest = function addRequest(req, options) {\n var self = this\n\n // Legacy API: addRequest(req, host, port, path)\n if (typeof options === 'string') {\n options = {\n host: options,\n port: arguments[2],\n path: arguments[3]\n };\n }\n\n if (self.sockets.length >= this.maxSockets) {\n // We are over limit so we'll add it to the queue.\n self.requests.push({host: options.host, port: options.port, request: req})\n return\n }\n\n // If we are under maxSockets create a new one.\n self.createConnection({host: options.host, port: options.port, request: req})\n}\n\nTunnelingAgent.prototype.createConnection = function createConnection(pending) {\n var self = this\n\n self.createSocket(pending, function(socket) {\n socket.on('free', onFree)\n socket.on('close', onCloseOrRemove)\n socket.on('agentRemove', onCloseOrRemove)\n pending.request.onSocket(socket)\n\n function onFree() {\n self.emit('free', socket, pending.host, pending.port)\n }\n\n function onCloseOrRemove(err) {\n self.removeSocket(socket)\n socket.removeListener('free', onFree)\n socket.removeListener('close', onCloseOrRemove)\n socket.removeListener('agentRemove', onCloseOrRemove)\n }\n })\n}\n\nTunnelingAgent.prototype.createSocket = function createSocket(options, cb) {\n var self = this\n var placeholder = {}\n self.sockets.push(placeholder)\n\n var connectOptions = mergeOptions({}, self.proxyOptions,\n { method: 'CONNECT'\n , path: options.host + ':' + options.port\n , agent: false\n }\n )\n if (connectOptions.proxyAuth) {\n connectOptions.headers = connectOptions.headers || {}\n connectOptions.headers['Proxy-Authorization'] = 'Basic ' +\n Buffer.from(connectOptions.proxyAuth).toString('base64')\n }\n\n debug('making CONNECT request')\n var connectReq = self.request(connectOptions)\n connectReq.useChunkedEncodingByDefault = false // for v0.6\n connectReq.once('response', onResponse) // for v0.6\n connectReq.once('upgrade', onUpgrade) // for v0.6\n connectReq.once('connect', onConnect) // for v0.7 or later\n connectReq.once('error', onError)\n connectReq.end()\n\n function onResponse(res) {\n // Very hacky. This is necessary to avoid http-parser leaks.\n res.upgrade = true\n }\n\n function onUpgrade(res, socket, head) {\n // Hacky.\n process.nextTick(function() {\n onConnect(res, socket, head)\n })\n }\n\n function onConnect(res, socket, head) {\n connectReq.removeAllListeners()\n socket.removeAllListeners()\n\n if (res.statusCode === 200) {\n assert.equal(head.length, 0)\n debug('tunneling connection has established')\n self.sockets[self.sockets.indexOf(placeholder)] = socket\n cb(socket)\n } else {\n debug('tunneling socket could not be established, statusCode=%d', res.statusCode)\n var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode)\n error.code = 'ECONNRESET'\n options.request.emit('error', error)\n self.removeSocket(placeholder)\n }\n }\n\n function onError(cause) {\n connectReq.removeAllListeners()\n\n debug('tunneling socket could not be established, cause=%s\\n', cause.message, cause.stack)\n var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message)\n error.code = 'ECONNRESET'\n options.request.emit('error', error)\n self.removeSocket(placeholder)\n }\n}\n\nTunnelingAgent.prototype.removeSocket = function removeSocket(socket) {\n var pos = this.sockets.indexOf(socket)\n if (pos === -1) return\n\n this.sockets.splice(pos, 1)\n\n var pending = this.requests.shift()\n if (pending) {\n // If we have pending requests and a socket gets closed a new one\n // needs to be created to take over in the pool for the one that closed.\n this.createConnection(pending)\n }\n}\n\nfunction createSecureSocket(options, cb) {\n var self = this\n TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {\n // 0 is dummy port for v0.6\n var secureSocket = tls.connect(0, mergeOptions({}, self.options,\n { servername: options.host\n , socket: socket\n }\n ))\n self.sockets[self.sockets.indexOf(socket)] = secureSocket\n cb(secureSocket)\n })\n}\n\n\nfunction mergeOptions(target) {\n for (var i = 1, len = arguments.length; i < len; ++i) {\n var overrides = arguments[i]\n if (typeof overrides === 'object') {\n var keys = Object.keys(overrides)\n for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {\n var k = keys[j]\n if (overrides[k] !== undefined) {\n target[k] = overrides[k]\n }\n }\n }\n }\n return target\n}\n\n\nvar debug\nif (process.env.NODE_DEBUG && /\\btunnel\\b/.test(process.env.NODE_DEBUG)) {\n debug = function() {\n var args = Array.prototype.slice.call(arguments)\n if (typeof args[0] === 'string') {\n args[0] = 'TUNNEL: ' + args[0]\n } else {\n args.unshift('TUNNEL:')\n }\n console.error.apply(console, args)\n }\n} else {\n debug = function() {}\n}\nexports.debug = debug // for test\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = (x[j] + 128) >> 8;\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i, mlen;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n mlen = -1;\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n mlen = n;\n return mlen;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n var t, i;\n for (i = 0; i < arguments.length; i++) {\n if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]')\n throw new TypeError('unexpected type ' + t + ', use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\n// TODO: Completely remove this in v0.15.\nif (!nacl.util) {\n nacl.util = {};\n nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {\n throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js');\n };\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return false;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n if (arguments.length !== 2)\n throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?');\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","/*!\n * \n * typed.js - A JavaScript Typing Animation Library\n * Author: Matt Boldt \n * Version: v2.0.12\n * Url: https://github.com/mattboldt/typed.js\n * License(s): MIT\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Typed\"] = factory();\n\telse\n\t\troot[\"Typed\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tvar _initializerJs = __webpack_require__(1);\n\t\n\tvar _htmlParserJs = __webpack_require__(3);\n\t\n\t/**\n\t * Welcome to Typed.js!\n\t * @param {string} elementId HTML element ID _OR_ HTML element\n\t * @param {object} options options object\n\t * @returns {object} a new Typed object\n\t */\n\t\n\tvar Typed = (function () {\n\t function Typed(elementId, options) {\n\t _classCallCheck(this, Typed);\n\t\n\t // Initialize it up\n\t _initializerJs.initializer.load(this, options, elementId);\n\t // All systems go!\n\t this.begin();\n\t }\n\t\n\t /**\n\t * Toggle start() and stop() of the Typed instance\n\t * @public\n\t */\n\t\n\t _createClass(Typed, [{\n\t key: 'toggle',\n\t value: function toggle() {\n\t this.pause.status ? this.start() : this.stop();\n\t }\n\t\n\t /**\n\t * Stop typing / backspacing and enable cursor blinking\n\t * @public\n\t */\n\t }, {\n\t key: 'stop',\n\t value: function stop() {\n\t if (this.typingComplete) return;\n\t if (this.pause.status) return;\n\t this.toggleBlinking(true);\n\t this.pause.status = true;\n\t this.options.onStop(this.arrayPos, this);\n\t }\n\t\n\t /**\n\t * Start typing / backspacing after being stopped\n\t * @public\n\t */\n\t }, {\n\t key: 'start',\n\t value: function start() {\n\t if (this.typingComplete) return;\n\t if (!this.pause.status) return;\n\t this.pause.status = false;\n\t if (this.pause.typewrite) {\n\t this.typewrite(this.pause.curString, this.pause.curStrPos);\n\t } else {\n\t this.backspace(this.pause.curString, this.pause.curStrPos);\n\t }\n\t this.options.onStart(this.arrayPos, this);\n\t }\n\t\n\t /**\n\t * Destroy this instance of Typed\n\t * @public\n\t */\n\t }, {\n\t key: 'destroy',\n\t value: function destroy() {\n\t this.reset(false);\n\t this.options.onDestroy(this);\n\t }\n\t\n\t /**\n\t * Reset Typed and optionally restarts\n\t * @param {boolean} restart\n\t * @public\n\t */\n\t }, {\n\t key: 'reset',\n\t value: function reset() {\n\t var restart = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\t\n\t clearInterval(this.timeout);\n\t this.replaceText('');\n\t if (this.cursor && this.cursor.parentNode) {\n\t this.cursor.parentNode.removeChild(this.cursor);\n\t this.cursor = null;\n\t }\n\t this.strPos = 0;\n\t this.arrayPos = 0;\n\t this.curLoop = 0;\n\t if (restart) {\n\t this.insertCursor();\n\t this.options.onReset(this);\n\t this.begin();\n\t }\n\t }\n\t\n\t /**\n\t * Begins the typing animation\n\t * @private\n\t */\n\t }, {\n\t key: 'begin',\n\t value: function begin() {\n\t var _this = this;\n\t\n\t this.options.onBegin(this);\n\t this.typingComplete = false;\n\t this.shuffleStringsIfNeeded(this);\n\t this.insertCursor();\n\t if (this.bindInputFocusEvents) this.bindFocusEvents();\n\t this.timeout = setTimeout(function () {\n\t // Check if there is some text in the element, if yes start by backspacing the default message\n\t if (!_this.currentElContent || _this.currentElContent.length === 0) {\n\t _this.typewrite(_this.strings[_this.sequence[_this.arrayPos]], _this.strPos);\n\t } else {\n\t // Start typing\n\t _this.backspace(_this.currentElContent, _this.currentElContent.length);\n\t }\n\t }, this.startDelay);\n\t }\n\t\n\t /**\n\t * Called for each character typed\n\t * @param {string} curString the current string in the strings array\n\t * @param {number} curStrPos the current position in the curString\n\t * @private\n\t */\n\t }, {\n\t key: 'typewrite',\n\t value: function typewrite(curString, curStrPos) {\n\t var _this2 = this;\n\t\n\t if (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) {\n\t this.el.classList.remove(this.fadeOutClass);\n\t if (this.cursor) this.cursor.classList.remove(this.fadeOutClass);\n\t }\n\t\n\t var humanize = this.humanizer(this.typeSpeed);\n\t var numChars = 1;\n\t\n\t if (this.pause.status === true) {\n\t this.setPauseStatus(curString, curStrPos, true);\n\t return;\n\t }\n\t\n\t // contain typing function in a timeout humanize'd delay\n\t this.timeout = setTimeout(function () {\n\t // skip over any HTML chars\n\t curStrPos = _htmlParserJs.htmlParser.typeHtmlChars(curString, curStrPos, _this2);\n\t\n\t var pauseTime = 0;\n\t var substr = curString.substr(curStrPos);\n\t // check for an escape character before a pause value\n\t // format: \\^\\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^\n\t // single ^ are removed from string\n\t if (substr.charAt(0) === '^') {\n\t if (/^\\^\\d+/.test(substr)) {\n\t var skip = 1; // skip at least 1\n\t substr = /\\d+/.exec(substr)[0];\n\t skip += substr.length;\n\t pauseTime = parseInt(substr);\n\t _this2.temporaryPause = true;\n\t _this2.options.onTypingPaused(_this2.arrayPos, _this2);\n\t // strip out the escape character and pause value so they're not printed\n\t curString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip);\n\t _this2.toggleBlinking(true);\n\t }\n\t }\n\t\n\t // check for skip characters formatted as\n\t // \"this is a `string to print NOW` ...\"\n\t if (substr.charAt(0) === '`') {\n\t while (curString.substr(curStrPos + numChars).charAt(0) !== '`') {\n\t numChars++;\n\t if (curStrPos + numChars > curString.length) break;\n\t }\n\t // strip out the escape characters and append all the string in between\n\t var stringBeforeSkip = curString.substring(0, curStrPos);\n\t var stringSkipped = curString.substring(stringBeforeSkip.length + 1, curStrPos + numChars);\n\t var stringAfterSkip = curString.substring(curStrPos + numChars + 1);\n\t curString = stringBeforeSkip + stringSkipped + stringAfterSkip;\n\t numChars--;\n\t }\n\t\n\t // timeout for any pause after a character\n\t _this2.timeout = setTimeout(function () {\n\t // Accounts for blinking while paused\n\t _this2.toggleBlinking(false);\n\t\n\t // We're done with this sentence!\n\t if (curStrPos >= curString.length) {\n\t _this2.doneTyping(curString, curStrPos);\n\t } else {\n\t _this2.keepTyping(curString, curStrPos, numChars);\n\t }\n\t // end of character pause\n\t if (_this2.temporaryPause) {\n\t _this2.temporaryPause = false;\n\t _this2.options.onTypingResumed(_this2.arrayPos, _this2);\n\t }\n\t }, pauseTime);\n\t\n\t // humanized value for typing\n\t }, humanize);\n\t }\n\t\n\t /**\n\t * Continue to the next string & begin typing\n\t * @param {string} curString the current string in the strings array\n\t * @param {number} curStrPos the current position in the curString\n\t * @private\n\t */\n\t }, {\n\t key: 'keepTyping',\n\t value: function keepTyping(curString, curStrPos, numChars) {\n\t // call before functions if applicable\n\t if (curStrPos === 0) {\n\t this.toggleBlinking(false);\n\t this.options.preStringTyped(this.arrayPos, this);\n\t }\n\t // start typing each new char into existing string\n\t // curString: arg, this.el.html: original text inside element\n\t curStrPos += numChars;\n\t var nextString = curString.substr(0, curStrPos);\n\t this.replaceText(nextString);\n\t // loop the function\n\t this.typewrite(curString, curStrPos);\n\t }\n\t\n\t /**\n\t * We're done typing the current string\n\t * @param {string} curString the current string in the strings array\n\t * @param {number} curStrPos the current position in the curString\n\t * @private\n\t */\n\t }, {\n\t key: 'doneTyping',\n\t value: function doneTyping(curString, curStrPos) {\n\t var _this3 = this;\n\t\n\t // fires callback function\n\t this.options.onStringTyped(this.arrayPos, this);\n\t this.toggleBlinking(true);\n\t // is this the final string\n\t if (this.arrayPos === this.strings.length - 1) {\n\t // callback that occurs on the last typed string\n\t this.complete();\n\t // quit if we wont loop back\n\t if (this.loop === false || this.curLoop === this.loopCount) {\n\t return;\n\t }\n\t }\n\t this.timeout = setTimeout(function () {\n\t _this3.backspace(curString, curStrPos);\n\t }, this.backDelay);\n\t }\n\t\n\t /**\n\t * Backspaces 1 character at a time\n\t * @param {string} curString the current string in the strings array\n\t * @param {number} curStrPos the current position in the curString\n\t * @private\n\t */\n\t }, {\n\t key: 'backspace',\n\t value: function backspace(curString, curStrPos) {\n\t var _this4 = this;\n\t\n\t if (this.pause.status === true) {\n\t this.setPauseStatus(curString, curStrPos, false);\n\t return;\n\t }\n\t if (this.fadeOut) return this.initFadeOut();\n\t\n\t this.toggleBlinking(false);\n\t var humanize = this.humanizer(this.backSpeed);\n\t\n\t this.timeout = setTimeout(function () {\n\t curStrPos = _htmlParserJs.htmlParser.backSpaceHtmlChars(curString, curStrPos, _this4);\n\t // replace text with base text + typed characters\n\t var curStringAtPosition = curString.substr(0, curStrPos);\n\t _this4.replaceText(curStringAtPosition);\n\t\n\t // if smartBack is enabled\n\t if (_this4.smartBackspace) {\n\t // the remaining part of the current string is equal of the same part of the new string\n\t var nextString = _this4.strings[_this4.arrayPos + 1];\n\t if (nextString && curStringAtPosition === nextString.substr(0, curStrPos)) {\n\t _this4.stopNum = curStrPos;\n\t } else {\n\t _this4.stopNum = 0;\n\t }\n\t }\n\t\n\t // if the number (id of character in current string) is\n\t // less than the stop number, keep going\n\t if (curStrPos > _this4.stopNum) {\n\t // subtract characters one by one\n\t curStrPos--;\n\t // loop the function\n\t _this4.backspace(curString, curStrPos);\n\t } else if (curStrPos <= _this4.stopNum) {\n\t // if the stop number has been reached, increase\n\t // array position to next string\n\t _this4.arrayPos++;\n\t // When looping, begin at the beginning after backspace complete\n\t if (_this4.arrayPos === _this4.strings.length) {\n\t _this4.arrayPos = 0;\n\t _this4.options.onLastStringBackspaced();\n\t _this4.shuffleStringsIfNeeded();\n\t _this4.begin();\n\t } else {\n\t _this4.typewrite(_this4.strings[_this4.sequence[_this4.arrayPos]], curStrPos);\n\t }\n\t }\n\t // humanized value for typing\n\t }, humanize);\n\t }\n\t\n\t /**\n\t * Full animation is complete\n\t * @private\n\t */\n\t }, {\n\t key: 'complete',\n\t value: function complete() {\n\t this.options.onComplete(this);\n\t if (this.loop) {\n\t this.curLoop++;\n\t } else {\n\t this.typingComplete = true;\n\t }\n\t }\n\t\n\t /**\n\t * Has the typing been stopped\n\t * @param {string} curString the current string in the strings array\n\t * @param {number} curStrPos the current position in the curString\n\t * @param {boolean} isTyping\n\t * @private\n\t */\n\t }, {\n\t key: 'setPauseStatus',\n\t value: function setPauseStatus(curString, curStrPos, isTyping) {\n\t this.pause.typewrite = isTyping;\n\t this.pause.curString = curString;\n\t this.pause.curStrPos = curStrPos;\n\t }\n\t\n\t /**\n\t * Toggle the blinking cursor\n\t * @param {boolean} isBlinking\n\t * @private\n\t */\n\t }, {\n\t key: 'toggleBlinking',\n\t value: function toggleBlinking(isBlinking) {\n\t if (!this.cursor) return;\n\t // if in paused state, don't toggle blinking a 2nd time\n\t if (this.pause.status) return;\n\t if (this.cursorBlinking === isBlinking) return;\n\t this.cursorBlinking = isBlinking;\n\t if (isBlinking) {\n\t this.cursor.classList.add('typed-cursor--blink');\n\t } else {\n\t this.cursor.classList.remove('typed-cursor--blink');\n\t }\n\t }\n\t\n\t /**\n\t * Speed in MS to type\n\t * @param {number} speed\n\t * @private\n\t */\n\t }, {\n\t key: 'humanizer',\n\t value: function humanizer(speed) {\n\t return Math.round(Math.random() * speed / 2) + speed;\n\t }\n\t\n\t /**\n\t * Shuffle the sequence of the strings array\n\t * @private\n\t */\n\t }, {\n\t key: 'shuffleStringsIfNeeded',\n\t value: function shuffleStringsIfNeeded() {\n\t if (!this.shuffle) return;\n\t this.sequence = this.sequence.sort(function () {\n\t return Math.random() - 0.5;\n\t });\n\t }\n\t\n\t /**\n\t * Adds a CSS class to fade out current string\n\t * @private\n\t */\n\t }, {\n\t key: 'initFadeOut',\n\t value: function initFadeOut() {\n\t var _this5 = this;\n\t\n\t this.el.className += ' ' + this.fadeOutClass;\n\t if (this.cursor) this.cursor.className += ' ' + this.fadeOutClass;\n\t return setTimeout(function () {\n\t _this5.arrayPos++;\n\t _this5.replaceText('');\n\t\n\t // Resets current string if end of loop reached\n\t if (_this5.strings.length > _this5.arrayPos) {\n\t _this5.typewrite(_this5.strings[_this5.sequence[_this5.arrayPos]], 0);\n\t } else {\n\t _this5.typewrite(_this5.strings[0], 0);\n\t _this5.arrayPos = 0;\n\t }\n\t }, this.fadeOutDelay);\n\t }\n\t\n\t /**\n\t * Replaces current text in the HTML element\n\t * depending on element type\n\t * @param {string} str\n\t * @private\n\t */\n\t }, {\n\t key: 'replaceText',\n\t value: function replaceText(str) {\n\t if (this.attr) {\n\t this.el.setAttribute(this.attr, str);\n\t } else {\n\t if (this.isInput) {\n\t this.el.value = str;\n\t } else if (this.contentType === 'html') {\n\t this.el.innerHTML = str;\n\t } else {\n\t this.el.textContent = str;\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * If using input elements, bind focus in order to\n\t * start and stop the animation\n\t * @private\n\t */\n\t }, {\n\t key: 'bindFocusEvents',\n\t value: function bindFocusEvents() {\n\t var _this6 = this;\n\t\n\t if (!this.isInput) return;\n\t this.el.addEventListener('focus', function (e) {\n\t _this6.stop();\n\t });\n\t this.el.addEventListener('blur', function (e) {\n\t if (_this6.el.value && _this6.el.value.length !== 0) {\n\t return;\n\t }\n\t _this6.start();\n\t });\n\t }\n\t\n\t /**\n\t * On init, insert the cursor element\n\t * @private\n\t */\n\t }, {\n\t key: 'insertCursor',\n\t value: function insertCursor() {\n\t if (!this.showCursor) return;\n\t if (this.cursor) return;\n\t this.cursor = document.createElement('span');\n\t this.cursor.className = 'typed-cursor';\n\t this.cursor.setAttribute('aria-hidden', true);\n\t this.cursor.innerHTML = this.cursorChar;\n\t this.el.parentNode && this.el.parentNode.insertBefore(this.cursor, this.el.nextSibling);\n\t }\n\t }]);\n\t\n\t return Typed;\n\t})();\n\t\n\texports['default'] = Typed;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tvar _defaultsJs = __webpack_require__(2);\n\t\n\tvar _defaultsJs2 = _interopRequireDefault(_defaultsJs);\n\t\n\t/**\n\t * Initialize the Typed object\n\t */\n\t\n\tvar Initializer = (function () {\n\t function Initializer() {\n\t _classCallCheck(this, Initializer);\n\t }\n\t\n\t _createClass(Initializer, [{\n\t key: 'load',\n\t\n\t /**\n\t * Load up defaults & options on the Typed instance\n\t * @param {Typed} self instance of Typed\n\t * @param {object} options options object\n\t * @param {string} elementId HTML element ID _OR_ instance of HTML element\n\t * @private\n\t */\n\t\n\t value: function load(self, options, elementId) {\n\t // chosen element to manipulate text\n\t if (typeof elementId === 'string') {\n\t self.el = document.querySelector(elementId);\n\t } else {\n\t self.el = elementId;\n\t }\n\t\n\t self.options = _extends({}, _defaultsJs2['default'], options);\n\t\n\t // attribute to type into\n\t self.isInput = self.el.tagName.toLowerCase() === 'input';\n\t self.attr = self.options.attr;\n\t self.bindInputFocusEvents = self.options.bindInputFocusEvents;\n\t\n\t // show cursor\n\t self.showCursor = self.isInput ? false : self.options.showCursor;\n\t\n\t // custom cursor\n\t self.cursorChar = self.options.cursorChar;\n\t\n\t // Is the cursor blinking\n\t self.cursorBlinking = true;\n\t\n\t // text content of element\n\t self.elContent = self.attr ? self.el.getAttribute(self.attr) : self.el.textContent;\n\t\n\t // html or plain text\n\t self.contentType = self.options.contentType;\n\t\n\t // typing speed\n\t self.typeSpeed = self.options.typeSpeed;\n\t\n\t // add a delay before typing starts\n\t self.startDelay = self.options.startDelay;\n\t\n\t // backspacing speed\n\t self.backSpeed = self.options.backSpeed;\n\t\n\t // only backspace what doesn't match the previous string\n\t self.smartBackspace = self.options.smartBackspace;\n\t\n\t // amount of time to wait before backspacing\n\t self.backDelay = self.options.backDelay;\n\t\n\t // Fade out instead of backspace\n\t self.fadeOut = self.options.fadeOut;\n\t self.fadeOutClass = self.options.fadeOutClass;\n\t self.fadeOutDelay = self.options.fadeOutDelay;\n\t\n\t // variable to check whether typing is currently paused\n\t self.isPaused = false;\n\t\n\t // input strings of text\n\t self.strings = self.options.strings.map(function (s) {\n\t return s.trim();\n\t });\n\t\n\t // div containing strings\n\t if (typeof self.options.stringsElement === 'string') {\n\t self.stringsElement = document.querySelector(self.options.stringsElement);\n\t } else {\n\t self.stringsElement = self.options.stringsElement;\n\t }\n\t\n\t if (self.stringsElement) {\n\t self.strings = [];\n\t self.stringsElement.style.display = 'none';\n\t var strings = Array.prototype.slice.apply(self.stringsElement.children);\n\t var stringsLength = strings.length;\n\t\n\t if (stringsLength) {\n\t for (var i = 0; i < stringsLength; i += 1) {\n\t var stringEl = strings[i];\n\t self.strings.push(stringEl.innerHTML.trim());\n\t }\n\t }\n\t }\n\t\n\t // character number position of current string\n\t self.strPos = 0;\n\t\n\t // current array position\n\t self.arrayPos = 0;\n\t\n\t // index of string to stop backspacing on\n\t self.stopNum = 0;\n\t\n\t // Looping logic\n\t self.loop = self.options.loop;\n\t self.loopCount = self.options.loopCount;\n\t self.curLoop = 0;\n\t\n\t // shuffle the strings\n\t self.shuffle = self.options.shuffle;\n\t // the order of strings\n\t self.sequence = [];\n\t\n\t self.pause = {\n\t status: false,\n\t typewrite: true,\n\t curString: '',\n\t curStrPos: 0\n\t };\n\t\n\t // When the typing is complete (when not looped)\n\t self.typingComplete = false;\n\t\n\t // Set the order in which the strings are typed\n\t for (var i in self.strings) {\n\t self.sequence[i] = i;\n\t }\n\t\n\t // If there is some text in the element\n\t self.currentElContent = this.getCurrentElContent(self);\n\t\n\t self.autoInsertCss = self.options.autoInsertCss;\n\t\n\t this.appendAnimationCss(self);\n\t }\n\t }, {\n\t key: 'getCurrentElContent',\n\t value: function getCurrentElContent(self) {\n\t var elContent = '';\n\t if (self.attr) {\n\t elContent = self.el.getAttribute(self.attr);\n\t } else if (self.isInput) {\n\t elContent = self.el.value;\n\t } else if (self.contentType === 'html') {\n\t elContent = self.el.innerHTML;\n\t } else {\n\t elContent = self.el.textContent;\n\t }\n\t return elContent;\n\t }\n\t }, {\n\t key: 'appendAnimationCss',\n\t value: function appendAnimationCss(self) {\n\t var cssDataName = 'data-typed-js-css';\n\t if (!self.autoInsertCss) {\n\t return;\n\t }\n\t if (!self.showCursor && !self.fadeOut) {\n\t return;\n\t }\n\t if (document.querySelector('[' + cssDataName + ']')) {\n\t return;\n\t }\n\t\n\t var css = document.createElement('style');\n\t css.type = 'text/css';\n\t css.setAttribute(cssDataName, true);\n\t\n\t var innerCss = '';\n\t if (self.showCursor) {\n\t innerCss += '\\n .typed-cursor{\\n opacity: 1;\\n }\\n .typed-cursor.typed-cursor--blink{\\n animation: typedjsBlink 0.7s infinite;\\n -webkit-animation: typedjsBlink 0.7s infinite;\\n animation: typedjsBlink 0.7s infinite;\\n }\\n @keyframes typedjsBlink{\\n 50% { opacity: 0.0; }\\n }\\n @-webkit-keyframes typedjsBlink{\\n 0% { opacity: 1; }\\n 50% { opacity: 0.0; }\\n 100% { opacity: 1; }\\n }\\n ';\n\t }\n\t if (self.fadeOut) {\n\t innerCss += '\\n .typed-fade-out{\\n opacity: 0;\\n transition: opacity .25s;\\n }\\n .typed-cursor.typed-cursor--blink.typed-fade-out{\\n -webkit-animation: 0;\\n animation: 0;\\n }\\n ';\n\t }\n\t if (css.length === 0) {\n\t return;\n\t }\n\t css.innerHTML = innerCss;\n\t document.body.appendChild(css);\n\t }\n\t }]);\n\t\n\t return Initializer;\n\t})();\n\t\n\texports['default'] = Initializer;\n\tvar initializer = new Initializer();\n\texports.initializer = initializer;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Defaults & options\n\t * @returns {object} Typed defaults & options\n\t * @public\n\t */\n\t\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\tvar defaults = {\n\t /**\n\t * @property {array} strings strings to be typed\n\t * @property {string} stringsElement ID of element containing string children\n\t */\n\t strings: ['These are the default values...', 'You know what you should do?', 'Use your own!', 'Have a great day!'],\n\t stringsElement: null,\n\t\n\t /**\n\t * @property {number} typeSpeed type speed in milliseconds\n\t */\n\t typeSpeed: 0,\n\t\n\t /**\n\t * @property {number} startDelay time before typing starts in milliseconds\n\t */\n\t startDelay: 0,\n\t\n\t /**\n\t * @property {number} backSpeed backspacing speed in milliseconds\n\t */\n\t backSpeed: 0,\n\t\n\t /**\n\t * @property {boolean} smartBackspace only backspace what doesn't match the previous string\n\t */\n\t smartBackspace: true,\n\t\n\t /**\n\t * @property {boolean} shuffle shuffle the strings\n\t */\n\t shuffle: false,\n\t\n\t /**\n\t * @property {number} backDelay time before backspacing in milliseconds\n\t */\n\t backDelay: 700,\n\t\n\t /**\n\t * @property {boolean} fadeOut Fade out instead of backspace\n\t * @property {string} fadeOutClass css class for fade animation\n\t * @property {boolean} fadeOutDelay Fade out delay in milliseconds\n\t */\n\t fadeOut: false,\n\t fadeOutClass: 'typed-fade-out',\n\t fadeOutDelay: 500,\n\t\n\t /**\n\t * @property {boolean} loop loop strings\n\t * @property {number} loopCount amount of loops\n\t */\n\t loop: false,\n\t loopCount: Infinity,\n\t\n\t /**\n\t * @property {boolean} showCursor show cursor\n\t * @property {string} cursorChar character for cursor\n\t * @property {boolean} autoInsertCss insert CSS for cursor and fadeOut into HTML \n\t */\n\t showCursor: true,\n\t cursorChar: '|',\n\t autoInsertCss: true,\n\t\n\t /**\n\t * @property {string} attr attribute for typing\n\t * Ex: input placeholder, value, or just HTML text\n\t */\n\t attr: null,\n\t\n\t /**\n\t * @property {boolean} bindInputFocusEvents bind to focus and blur if el is text input\n\t */\n\t bindInputFocusEvents: false,\n\t\n\t /**\n\t * @property {string} contentType 'html' or 'null' for plaintext\n\t */\n\t contentType: 'html',\n\t\n\t /**\n\t * Before it begins typing\n\t * @param {Typed} self\n\t */\n\t onBegin: function onBegin(self) {},\n\t\n\t /**\n\t * All typing is complete\n\t * @param {Typed} self\n\t */\n\t onComplete: function onComplete(self) {},\n\t\n\t /**\n\t * Before each string is typed\n\t * @param {number} arrayPos\n\t * @param {Typed} self\n\t */\n\t preStringTyped: function preStringTyped(arrayPos, self) {},\n\t\n\t /**\n\t * After each string is typed\n\t * @param {number} arrayPos\n\t * @param {Typed} self\n\t */\n\t onStringTyped: function onStringTyped(arrayPos, self) {},\n\t\n\t /**\n\t * During looping, after last string is typed\n\t * @param {Typed} self\n\t */\n\t onLastStringBackspaced: function onLastStringBackspaced(self) {},\n\t\n\t /**\n\t * Typing has been stopped\n\t * @param {number} arrayPos\n\t * @param {Typed} self\n\t */\n\t onTypingPaused: function onTypingPaused(arrayPos, self) {},\n\t\n\t /**\n\t * Typing has been started after being stopped\n\t * @param {number} arrayPos\n\t * @param {Typed} self\n\t */\n\t onTypingResumed: function onTypingResumed(arrayPos, self) {},\n\t\n\t /**\n\t * After reset\n\t * @param {Typed} self\n\t */\n\t onReset: function onReset(self) {},\n\t\n\t /**\n\t * After stop\n\t * @param {number} arrayPos\n\t * @param {Typed} self\n\t */\n\t onStop: function onStop(arrayPos, self) {},\n\t\n\t /**\n\t * After start\n\t * @param {number} arrayPos\n\t * @param {Typed} self\n\t */\n\t onStart: function onStart(arrayPos, self) {},\n\t\n\t /**\n\t * After destroy\n\t * @param {Typed} self\n\t */\n\t onDestroy: function onDestroy(self) {}\n\t};\n\t\n\texports['default'] = defaults;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * TODO: These methods can probably be combined somehow\n\t * Parse HTML tags & HTML Characters\n\t */\n\t\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tvar HTMLParser = (function () {\n\t function HTMLParser() {\n\t _classCallCheck(this, HTMLParser);\n\t }\n\t\n\t _createClass(HTMLParser, [{\n\t key: 'typeHtmlChars',\n\t\n\t /**\n\t * Type HTML tags & HTML Characters\n\t * @param {string} curString Current string\n\t * @param {number} curStrPos Position in current string\n\t * @param {Typed} self instance of Typed\n\t * @returns {number} a new string position\n\t * @private\n\t */\n\t\n\t value: function typeHtmlChars(curString, curStrPos, self) {\n\t if (self.contentType !== 'html') return curStrPos;\n\t var curChar = curString.substr(curStrPos).charAt(0);\n\t if (curChar === '<' || curChar === '&') {\n\t var endTag = '';\n\t if (curChar === '<') {\n\t endTag = '>';\n\t } else {\n\t endTag = ';';\n\t }\n\t while (curString.substr(curStrPos + 1).charAt(0) !== endTag) {\n\t curStrPos++;\n\t if (curStrPos + 1 > curString.length) {\n\t break;\n\t }\n\t }\n\t curStrPos++;\n\t }\n\t return curStrPos;\n\t }\n\t\n\t /**\n\t * Backspace HTML tags and HTML Characters\n\t * @param {string} curString Current string\n\t * @param {number} curStrPos Position in current string\n\t * @param {Typed} self instance of Typed\n\t * @returns {number} a new string position\n\t * @private\n\t */\n\t }, {\n\t key: 'backSpaceHtmlChars',\n\t value: function backSpaceHtmlChars(curString, curStrPos, self) {\n\t if (self.contentType !== 'html') return curStrPos;\n\t var curChar = curString.substr(curStrPos).charAt(0);\n\t if (curChar === '>' || curChar === ';') {\n\t var endTag = '';\n\t if (curChar === '>') {\n\t endTag = '<';\n\t } else {\n\t endTag = '&';\n\t }\n\t while (curString.substr(curStrPos - 1).charAt(0) !== endTag) {\n\t curStrPos--;\n\t if (curStrPos < 0) {\n\t break;\n\t }\n\t }\n\t curStrPos--;\n\t }\n\t return curStrPos;\n\t }\n\t }]);\n\t\n\t return HTMLParser;\n\t})();\n\t\n\texports['default'] = HTMLParser;\n\tvar htmlParser = new HTMLParser();\n\texports.htmlParser = htmlParser;\n\n/***/ })\n/******/ ])\n});\n;","export function merge(...sets:Array):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","/*\n * verror.js: richer JavaScript errors\n */\n\nvar mod_assertplus = require('assert-plus');\nvar mod_util = require('util');\n\nvar mod_extsprintf = require('extsprintf');\nvar mod_isError = require('core-util-is').isError;\nvar sprintf = mod_extsprintf.sprintf;\n\n/*\n * Public interface\n */\n\n/* So you can 'var VError = require('verror')' */\nmodule.exports = VError;\n/* For compatibility */\nVError.VError = VError;\n/* Other exported classes */\nVError.SError = SError;\nVError.WError = WError;\nVError.MultiError = MultiError;\n\n/*\n * Common function used to parse constructor arguments for VError, WError, and\n * SError. Named arguments to this function:\n *\n * strict\t\tforce strict interpretation of sprintf arguments, even\n * \t\t\tif the options in \"argv\" don't say so\n *\n * argv\t\terror's constructor arguments, which are to be\n * \t\t\tinterpreted as described in README.md. For quick\n * \t\t\treference, \"argv\" has one of the following forms:\n *\n * [ sprintf_args... ] (argv[0] is a string)\n * [ cause, sprintf_args... ] (argv[0] is an Error)\n * [ options, sprintf_args... ] (argv[0] is an object)\n *\n * This function normalizes these forms, producing an object with the following\n * properties:\n *\n * options equivalent to \"options\" in third form. This will never\n * \t\t\tbe a direct reference to what the caller passed in\n * \t\t\t(i.e., it may be a shallow copy), so it can be freely\n * \t\t\tmodified.\n *\n * shortmessage result of sprintf(sprintf_args), taking options.strict\n * \t\t\tinto account as described in README.md.\n */\nfunction parseConstructorArguments(args)\n{\n\tvar argv, options, sprintf_args, shortmessage, k;\n\n\tmod_assertplus.object(args, 'args');\n\tmod_assertplus.bool(args.strict, 'args.strict');\n\tmod_assertplus.array(args.argv, 'args.argv');\n\targv = args.argv;\n\n\t/*\n\t * First, figure out which form of invocation we've been given.\n\t */\n\tif (argv.length === 0) {\n\t\toptions = {};\n\t\tsprintf_args = [];\n\t} else if (mod_isError(argv[0])) {\n\t\toptions = { 'cause': argv[0] };\n\t\tsprintf_args = argv.slice(1);\n\t} else if (typeof (argv[0]) === 'object') {\n\t\toptions = {};\n\t\tfor (k in argv[0]) {\n\t\t\toptions[k] = argv[0][k];\n\t\t}\n\t\tsprintf_args = argv.slice(1);\n\t} else {\n\t\tmod_assertplus.string(argv[0],\n\t\t 'first argument to VError, SError, or WError ' +\n\t\t 'constructor must be a string, object, or Error');\n\t\toptions = {};\n\t\tsprintf_args = argv;\n\t}\n\n\t/*\n\t * Now construct the error's message.\n\t *\n\t * extsprintf (which we invoke here with our caller's arguments in order\n\t * to construct this Error's message) is strict in its interpretation of\n\t * values to be processed by the \"%s\" specifier. The value passed to\n\t * extsprintf must actually be a string or something convertible to a\n\t * String using .toString(). Passing other values (notably \"null\" and\n\t * \"undefined\") is considered a programmer error. The assumption is\n\t * that if you actually want to print the string \"null\" or \"undefined\",\n\t * then that's easy to do that when you're calling extsprintf; on the\n\t * other hand, if you did NOT want that (i.e., there's actually a bug\n\t * where the program assumes some variable is non-null and tries to\n\t * print it, which might happen when constructing a packet or file in\n\t * some specific format), then it's better to stop immediately than\n\t * produce bogus output.\n\t *\n\t * However, sometimes the bug is only in the code calling VError, and a\n\t * programmer might prefer to have the error message contain \"null\" or\n\t * \"undefined\" rather than have the bug in the error path crash the\n\t * program (making the first bug harder to identify). For that reason,\n\t * by default VError converts \"null\" or \"undefined\" arguments to their\n\t * string representations and passes those to extsprintf. Programmers\n\t * desiring the strict behavior can use the SError class or pass the\n\t * \"strict\" option to the VError constructor.\n\t */\n\tmod_assertplus.object(options);\n\tif (!options.strict && !args.strict) {\n\t\tsprintf_args = sprintf_args.map(function (a) {\n\t\t\treturn (a === null ? 'null' :\n\t\t\t a === undefined ? 'undefined' : a);\n\t\t});\n\t}\n\n\tif (sprintf_args.length === 0) {\n\t\tshortmessage = '';\n\t} else {\n\t\tshortmessage = sprintf.apply(null, sprintf_args);\n\t}\n\n\treturn ({\n\t 'options': options,\n\t 'shortmessage': shortmessage\n\t});\n}\n\n/*\n * See README.md for reference documentation.\n */\nfunction VError()\n{\n\tvar args, obj, parsed, cause, ctor, message, k;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\n\t/*\n\t * This is a regrettable pattern, but JavaScript's built-in Error class\n\t * is defined to work this way, so we allow the constructor to be called\n\t * without \"new\".\n\t */\n\tif (!(this instanceof VError)) {\n\t\tobj = Object.create(VError.prototype);\n\t\tVError.apply(obj, arguments);\n\t\treturn (obj);\n\t}\n\n\t/*\n\t * For convenience and backwards compatibility, we support several\n\t * different calling forms. Normalize them here.\n\t */\n\tparsed = parseConstructorArguments({\n\t 'argv': args,\n\t 'strict': false\n\t});\n\n\t/*\n\t * If we've been given a name, apply it now.\n\t */\n\tif (parsed.options.name) {\n\t\tmod_assertplus.string(parsed.options.name,\n\t\t 'error\\'s \"name\" must be a string');\n\t\tthis.name = parsed.options.name;\n\t}\n\n\t/*\n\t * For debugging, we keep track of the original short message (attached\n\t * this Error particularly) separately from the complete message (which\n\t * includes the messages of our cause chain).\n\t */\n\tthis.jse_shortmsg = parsed.shortmessage;\n\tmessage = parsed.shortmessage;\n\n\t/*\n\t * If we've been given a cause, record a reference to it and update our\n\t * message appropriately.\n\t */\n\tcause = parsed.options.cause;\n\tif (cause) {\n\t\tmod_assertplus.ok(mod_isError(cause), 'cause is not an Error');\n\t\tthis.jse_cause = cause;\n\n\t\tif (!parsed.options.skipCauseMessage) {\n\t\t\tmessage += ': ' + cause.message;\n\t\t}\n\t}\n\n\t/*\n\t * If we've been given an object with properties, shallow-copy that\n\t * here. We don't want to use a deep copy in case there are non-plain\n\t * objects here, but we don't want to use the original object in case\n\t * the caller modifies it later.\n\t */\n\tthis.jse_info = {};\n\tif (parsed.options.info) {\n\t\tfor (k in parsed.options.info) {\n\t\t\tthis.jse_info[k] = parsed.options.info[k];\n\t\t}\n\t}\n\n\tthis.message = message;\n\tError.call(this, message);\n\n\tif (Error.captureStackTrace) {\n\t\tctor = parsed.options.constructorOpt || this.constructor;\n\t\tError.captureStackTrace(this, ctor);\n\t}\n\n\treturn (this);\n}\n\nmod_util.inherits(VError, Error);\nVError.prototype.name = 'VError';\n\nVError.prototype.toString = function ve_toString()\n{\n\tvar str = (this.hasOwnProperty('name') && this.name ||\n\t\tthis.constructor.name || this.constructor.prototype.name);\n\tif (this.message)\n\t\tstr += ': ' + this.message;\n\n\treturn (str);\n};\n\n/*\n * This method is provided for compatibility. New callers should use\n * VError.cause() instead. That method also uses the saner `null` return value\n * when there is no cause.\n */\nVError.prototype.cause = function ve_cause()\n{\n\tvar cause = VError.cause(this);\n\treturn (cause === null ? undefined : cause);\n};\n\n/*\n * Static methods\n *\n * These class-level methods are provided so that callers can use them on\n * instances of Errors that are not VErrors. New interfaces should be provided\n * only using static methods to eliminate the class of programming mistake where\n * people fail to check whether the Error object has the corresponding methods.\n */\n\nVError.cause = function (err)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\treturn (mod_isError(err.jse_cause) ? err.jse_cause : null);\n};\n\nVError.info = function (err)\n{\n\tvar rv, cause, k;\n\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tcause = VError.cause(err);\n\tif (cause !== null) {\n\t\trv = VError.info(cause);\n\t} else {\n\t\trv = {};\n\t}\n\n\tif (typeof (err.jse_info) == 'object' && err.jse_info !== null) {\n\t\tfor (k in err.jse_info) {\n\t\t\trv[k] = err.jse_info[k];\n\t\t}\n\t}\n\n\treturn (rv);\n};\n\nVError.findCauseByName = function (err, name)\n{\n\tvar cause;\n\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tmod_assertplus.string(name, 'name');\n\tmod_assertplus.ok(name.length > 0, 'name cannot be empty');\n\n\tfor (cause = err; cause !== null; cause = VError.cause(cause)) {\n\t\tmod_assertplus.ok(mod_isError(cause));\n\t\tif (cause.name == name) {\n\t\t\treturn (cause);\n\t\t}\n\t}\n\n\treturn (null);\n};\n\nVError.hasCauseWithName = function (err, name)\n{\n\treturn (VError.findCauseByName(err, name) !== null);\n};\n\nVError.fullStack = function (err)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\n\tvar cause = VError.cause(err);\n\n\tif (cause) {\n\t\treturn (err.stack + '\\ncaused by: ' + VError.fullStack(cause));\n\t}\n\n\treturn (err.stack);\n};\n\nVError.errorFromList = function (errors)\n{\n\tmod_assertplus.arrayOfObject(errors, 'errors');\n\n\tif (errors.length === 0) {\n\t\treturn (null);\n\t}\n\n\terrors.forEach(function (e) {\n\t\tmod_assertplus.ok(mod_isError(e));\n\t});\n\n\tif (errors.length == 1) {\n\t\treturn (errors[0]);\n\t}\n\n\treturn (new MultiError(errors));\n};\n\nVError.errorForEach = function (err, func)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tmod_assertplus.func(func, 'func');\n\n\tif (err instanceof MultiError) {\n\t\terr.errors().forEach(function iterError(e) { func(e); });\n\t} else {\n\t\tfunc(err);\n\t}\n};\n\n\n/*\n * SError is like VError, but stricter about types. You cannot pass \"null\" or\n * \"undefined\" as string arguments to the formatter.\n */\nfunction SError()\n{\n\tvar args, obj, parsed, options;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\tif (!(this instanceof SError)) {\n\t\tobj = Object.create(SError.prototype);\n\t\tSError.apply(obj, arguments);\n\t\treturn (obj);\n\t}\n\n\tparsed = parseConstructorArguments({\n\t 'argv': args,\n\t 'strict': true\n\t});\n\n\toptions = parsed.options;\n\tVError.call(this, options, '%s', parsed.shortmessage);\n\n\treturn (this);\n}\n\n/*\n * We don't bother setting SError.prototype.name because once constructed,\n * SErrors are just like VErrors.\n */\nmod_util.inherits(SError, VError);\n\n\n/*\n * Represents a collection of errors for the purpose of consumers that generally\n * only deal with one error. Callers can extract the individual errors\n * contained in this object, but may also just treat it as a normal single\n * error, in which case a summary message will be printed.\n */\nfunction MultiError(errors)\n{\n\tmod_assertplus.array(errors, 'list of errors');\n\tmod_assertplus.ok(errors.length > 0, 'must be at least one error');\n\tthis.ase_errors = errors;\n\n\tVError.call(this, {\n\t 'cause': errors[0]\n\t}, 'first of %d error%s', errors.length, errors.length == 1 ? '' : 's');\n}\n\nmod_util.inherits(MultiError, VError);\nMultiError.prototype.name = 'MultiError';\n\nMultiError.prototype.errors = function me_errors()\n{\n\treturn (this.ase_errors.slice(0));\n};\n\n\n/*\n * See README.md for reference details.\n */\nfunction WError()\n{\n\tvar args, obj, parsed, options;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\tif (!(this instanceof WError)) {\n\t\tobj = Object.create(WError.prototype);\n\t\tWError.apply(obj, args);\n\t\treturn (obj);\n\t}\n\n\tparsed = parseConstructorArguments({\n\t 'argv': args,\n\t 'strict': false\n\t});\n\n\toptions = parsed.options;\n\toptions['skipCauseMessage'] = true;\n\tVError.call(this, options, '%s', parsed.shortmessage);\n\n\treturn (this);\n}\n\nmod_util.inherits(WError, VError);\nWError.prototype.name = 'WError';\n\nWError.prototype.toString = function we_toString()\n{\n\tvar str = (this.hasOwnProperty('name') && this.name ||\n\t\tthis.constructor.name || this.constructor.prototype.name);\n\tif (this.message)\n\t\tstr += ': ' + this.message;\n\tif (this.jse_cause && this.jse_cause.message)\n\t\tstr += '; caused by ' + this.jse_cause.toString();\n\n\treturn (str);\n};\n\n/*\n * For purely historical reasons, WError's cause() function allows you to set\n * the cause.\n */\nWError.prototype.cause = function we_cause(c)\n{\n\tif (mod_isError(c))\n\t\tthis.jse_cause = c;\n\n\treturn (this.jse_cause);\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nconst WebSocket = require('./lib/websocket');\n\nWebSocket.createWebSocketStream = require('./lib/stream');\nWebSocket.Server = require('./lib/websocket-server');\nWebSocket.Receiver = require('./lib/receiver');\nWebSocket.Sender = require('./lib/sender');\n\nWebSocket.WebSocket = WebSocket;\nWebSocket.WebSocketServer = WebSocket.Server;\n\nmodule.exports = WebSocket;\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) return target.slice(0, offset);\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.byteLength === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = Buffer.from(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nmodule.exports = {\n BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {Function} listener The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, listener, options = {}) {\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n listener.call(this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n listener.call(this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n listener.call(this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n listener.call(this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = listener;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {Function} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed if context takeover is disabled\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) data = data.slice(0, data.length - 4);\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._state = GET_INFO;\n this._loop = false;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = buf.slice(n);\n return buf.slice(0, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = buf.slice(n);\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n let err;\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n err = this.getInfo();\n break;\n case GET_PAYLOAD_LENGTH_16:\n err = this.getPayloadLength16();\n break;\n case GET_PAYLOAD_LENGTH_64:\n err = this.getPayloadLength64();\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n err = this.getData(cb);\n break;\n default:\n // `INFLATING`\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n cb(err);\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getInfo() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (!this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n this._loop = false;\n return error(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n }\n\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (this._payloadLength > 0x7d) {\n this._loop = false;\n return error(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n }\n } else {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n }\n } else if (this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength16() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength64() {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n this._loop = false;\n return error(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n return this.haveLength();\n }\n\n /**\n * Payload length has been read.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n haveLength() {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n this._loop = false;\n return error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) return this.controlMessage(data);\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n return this.dataMessage();\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n return cb(\n error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n )\n );\n }\n\n this._fragments.push(buf);\n }\n\n const er = this.dataMessage();\n if (er) return cb(er);\n\n this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @return {(Error|undefined)} A possible error\n * @private\n */\n dataMessage() {\n if (this._fin) {\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else {\n data = fragments;\n }\n\n this.emit('message', data, true);\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n this._loop = false;\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('message', buf, false);\n }\n }\n\n this._state = GET_INFO;\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data) {\n if (this._opcode === 0x08) {\n this._loop = false;\n\n if (data.length === 0) {\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else if (data.length === 1) {\n return error(\n RangeError,\n 'invalid payload length 1',\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n return error(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n }\n\n const buf = data.slice(2);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('conclude', code, buf);\n this.end();\n }\n } else if (this._opcode === 0x09) {\n this.emit('ping', data);\n } else {\n this.emit('pong', data);\n }\n\n this._state = GET_INFO;\n }\n}\n\nmodule.exports = Receiver;\n\n/**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\nfunction error(ErrorCtor, message, prefix, statusCode, errorCode) {\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, error);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls$\" }] */\n\n'use strict';\n\nconst net = require('net');\nconst tls = require('tls');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER } = require('./constants');\nconst { isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {(net.Socket|tls.Socket)} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._deflating = false;\n this._queue = [];\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n randomFillSync(mask, 0, 4);\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) return [target, data];\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else {\n buf.set(data, 2);\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._deflating) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (this._deflating) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (this._deflating) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n if (perMessageDeflate) {\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (this._deflating) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n } else {\n this.sendFrame(\n Sender.frame(data, {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1: false\n }),\n cb\n );\n }\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._deflating = true;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < this._queue.length; i++) {\n const params = this._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._deflating = false;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (!this._deflating && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {Buffer[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n","'use strict';\n\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n","'use strict';\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = {\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls|https$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst https = require('https');\nconst net = require('net');\nconst tls = require('tls');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (req.headers.upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (!key || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 8 && version !== 13) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of \n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message);\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Readable$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst closeTimeout = 30 * 1000;\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = [];\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._isServer = true;\n }\n }\n\n /**\n * This deviates from the WHATWG interface since ws doesn't support the\n * required default \"blob\" type (instead we define a custom \"nodebuffer\"\n * type).\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n this._sender = new Sender(socket, this._extensions, options.generateMask);\n this._receiver = receiver;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n socket.setTimeout(0);\n socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n //\n // Specify a timeout for the closing handshake to complete.\n //\n this._closeTimer = setTimeout(\n this._socket.destroy.bind(this._socket),\n closeTimeout\n );\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n createConnection: undefined,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n websocket._url = address.href;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch (e) {\n throw new SyntaxError(`Invalid URL: ${address}`);\n }\n\n websocket._url = address;\n }\n\n const isSecure = parsedUrl.protocol === 'wss:';\n const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n let invalidUrlMessage;\n\n if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n invalidUrlMessage =\n 'The URL\\'s protocol must be one of \"ws:\", \"wss:\", or \"ws+unix:\"';\n } else if (isIpcUrl && !parsedUrl.pathname) {\n invalidUrlMessage = \"The URL's pathname is empty\";\n } else if (parsedUrl.hash) {\n invalidUrlMessage = 'The URL contains a fragment identifier';\n }\n\n if (invalidUrlMessage) {\n const err = new SyntaxError(invalidUrlMessage);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const request = isSecure ? https.request : http.request;\n const protocolSet = new Set();\n let perMessageDeflate;\n\n opts.createConnection = isSecure ? tlsConnect : netConnect;\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n ...opts.headers,\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket'\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols.length) {\n for (const protocol of protocols) {\n if (\n typeof protocol !== 'string' ||\n !subprotocolRegex.test(protocol) ||\n protocolSet.has(protocol)\n ) {\n throw new SyntaxError(\n 'An invalid or duplicated subprotocol was specified'\n );\n }\n\n protocolSet.add(protocol);\n }\n\n opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isIpcUrl) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req;\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalIpc = isIpcUrl;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isIpcUrl\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else if (websocket.listenerCount('redirect') === 0) {\n const isSameHost = isIpcUrl\n ? websocket._originalIpc\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalIpc\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n\n req = websocket._req = request(opts);\n\n if (websocket._redirects) {\n //\n // Unlike what is done for the `'upgrade'` event, no early exit is\n // triggered here if the user calls `websocket.close()` or\n // `websocket.terminate()` from a listener of the `'redirect'` event. This\n // is because the user can also call `request.destroy()` with an error\n // before calling `websocket.close()` or `websocket.terminate()` and this\n // would result in an error being emitted on the `request` object with no\n // `'error'` event listeners attached.\n //\n websocket.emit('redirect', websocket.url, req);\n }\n } else {\n req = websocket._req = request(opts);\n }\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req[kAborted]) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (e) {\n const err = new SyntaxError(`Invalid URL: ${location}`);\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the\n // `'upgrade'` event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n if (res.headers.upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n let protError;\n\n if (serverProt !== undefined) {\n if (!protocolSet.size) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (!protocolSet.has(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n } else if (protocolSet.size) {\n protError = 'Server sent no subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message = 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n\n websocket.setSocket(socket, head, {\n generateMask: opts.generateMask,\n maxPayload: opts.maxPayload,\n skipUTF8Validation: opts.skipUTF8Validation\n });\n });\n\n req.end();\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream[kAborted] = true;\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n process.nextTick(emitErrorAndClose, websocket, err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n cb(err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n const websocket = this[kWebSocket];\n\n if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n websocket.emit('error', err);\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n websocket.pong(data, !websocket._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The listener of the `net.Socket` `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n let chunk;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written and `readable.read()`\n // will return `null`. If instead, the socket is paused, any possible buffered\n // data will be read as a single chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n (chunk = websocket._socket.read()) !== null\n ) {\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the `net.Socket` `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the `net.Socket` `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the `net.Socket` `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nmodule.exports = _createForOfIteratorHelper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\n\nvar possibleConstructorReturn = require(\"./possibleConstructorReturn.js\");\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}\n\nmodule.exports = _createSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\n\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\n\nfunction _regeneratorRuntime() {\n \"use strict\";\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return generator._invoke = function (innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }(innerFn, self, context), generator;\n }\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n exports.wrap = wrap;\n var ContinueSentinel = {};\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {}\n\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n\n reject(record.arg);\n }\n\n var previousPromise;\n\n this._invoke = function (method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n };\n }\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n\n return next.value = undefined, next.done = !0, next;\n };\n\n return next.next = next;\n }\n }\n\n return {\n next: doneResult\n };\n }\n\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n }\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\n\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nvar isNativeFunction = require(\"./isNativeFunction.js\");\n\nvar construct = require(\"./construct.js\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","import superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get.bind();\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n \"use strict\";\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n\n _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n };\n\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return generator._invoke = function (innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }(innerFn, self, context), generator;\n }\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n exports.wrap = wrap;\n var ContinueSentinel = {};\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {}\n\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n\n reject(record.arg);\n }\n\n var previousPromise;\n\n this._invoke = function (method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n };\n }\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n\n return next.value = undefined, next.done = !0, next;\n };\n\n return next.next = next;\n }\n }\n\n return {\n next: doneResult\n };\n }\n\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n }\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"c6beb42d\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"cv_website:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcv_website\"] = self[\"webpackChunkcv_website\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\nvar __webpack_exports__ = __webpack_require__(30467);\n"],"names":["_slicedToArray","arr","i","Array","isArray","_i","Symbol","iterator","_s","_e","_arr","_n","_d","call","next","done","push","value","length","err","unsupportedIterableToArray","TypeError","useState","navClicked","setnavClicked","className","src","logo","alt","onClick","to","spy","smooth","offset","duration","Typer","options","strings","this","props","typeSpeed","backSpeed","typed","Typed","el","destroy","style","whiteSpace","ref","React","welcomeProps","id","loaded","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","apply","_objectSpread2","target","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","viewportToPixels","parts","match","q","Number","window","indexOf","positions","x","y","available","lastFloat","styles","z","scale","color","getComputedStyle","document","documentElement","getPropertyValue","position","setPosition","minX","minY","maxX","maxY","top","left","expBoxMax","setexpBoxMax","draggedItem","setDraggedItem","Date","now","time","setTime","setStyle","dotPosition","setDotPosition","dragItem","useRef","expBox","exp01","useEffect","interval","setInterval","clearInterval","current","clientWidth","marginTop","clientHeight","getBoundingClientRect","map","item","element","getElementById","offsetWidth","background","rect","Math","min","max","abs","right","transition","border","sens","floor","random","paddingLeft","paddingTop","dragStart","e","currentTarget","currZ","zIndex","pos","type","clientX","touches","clientY","addEventListener","drag","drop","removeEventListener","transform","onMouseDown","onTouchStart","img01","img02","img03","img05","ed01","ed02","ed03","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","error","Promise","then","fn","self","args","undefined","CONTRACT_ADDRESS","_construct","Parent","Class","isNativeReflectConstruct","Reflect","construct","bind","a","instance","Function","setPrototypeOf","prototype","_wrapNativeSuper","_cache","Map","toString","has","get","set","Wrapper","getPrototypeOf","constructor","create","REVISION","MOUSE","TOUCH","AddEquation","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","CubeUVReflectionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","UnsignedByteType","UnsignedShortType","UnsignedIntType","FloatType","HalfFloatType","UnsignedInt248Type","RGBAFormat","DepthFormat","DepthStencilFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC2_Format","RGBA_ETC2_EAC_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","RGBA_BPTC_Format","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","NormalAnimationBlendMode","AdditiveAnimationBlendMode","LinearEncoding","sRGBEncoding","SRGBColorSpace","LinearSRGBColorSpace","KeepStencilOp","StaticDrawUsage","GLSL3","_SRGBAFormat","EventDispatcher","listener","_listeners","listeners","listenerArray","index","splice","event","array","slice","l","_lut","_seed","DEG2RAD","PI","RAD2DEG","generateUUID","d0","d1","d2","d3","toLowerCase","clamp","euclideanModulo","n","m","lerp","t","isPowerOfTwo","ceilPowerOfTwo","pow","ceil","log","LN2","floorPowerOfTwo","denormalize","Float32Array","Uint16Array","Uint8Array","Int16Array","Int8Array","Error","normalize","round","MathUtils","freeze","__proto__","mapLinear","a1","a2","b1","b2","inverseLerp","damp","lambda","dt","exp","pingpong","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","seededRandom","s","imul","degToRad","degrees","radToDeg","radians","setQuaternionFromProperEuler","b","c","order","cos","sin","c2","s2","c13","s13","c1_3","s1_3","c3_1","s3_1","console","warn","Vector2","isVector2","scalar","v","multiplyScalar","elements","minVal","maxVal","divideScalar","sqrt","angle","atan2","distanceToSquared","dx","dy","alpha","v1","v2","attribute","getX","getY","center","Matrix3","isMatrix3","n11","n12","n13","n21","n22","n23","n31","n32","n33","te","me","xAxis","yAxis","zAxis","setFromMatrix3Column","multiplyMatrices","ae","be","a11","a12","a13","a21","a22","a23","a31","a32","a33","b11","b12","b13","b21","b22","b23","b31","b32","b33","d","f","g","h","t11","t12","t13","det","detInv","tmp","matrix4","setFromMatrix4","invert","transpose","r","tx","ty","sx","sy","rotation","cx","cy","theta","matrix","fromArray","arrayNeedsUint32","Uint8ClampedArray","Int32Array","Uint32Array","Float64Array","createElementNS","name","SRGBToLinear","LinearToSRGB","FN","ColorManagement","legacyMode","workingColorSpace","colorSpace","convert","sourceColorSpace","targetColorSpace","fromWorkingColorSpace","toWorkingColorSpace","_colorKeywords","_rgb","_hslA","_hslB","hue2rgb","p","toComponents","_canvas","Color","isColor","setRGB","copy","setHex","hex","handleAlpha","string","parseFloat","exec","components","parseInt","setHSL","size","charAt","setColorName","copySRGBToLinear","copyLinearToSRGB","getHex","hue","saturation","lightness","delta","getHSL","color1","color2","getZ","NAMES","ImageUtils","image","test","HTMLCanvasElement","canvas","width","height","context","getContext","ImageData","putImageData","drawImage","toDataURL","HTMLImageElement","ImageBitmap","imageData","getImageData","data","Source","isSource","uuid","version","meta","isRootObject","images","output","url","isDataTexture","serializeImage","getDataURL","from","textureId","Texture","DEFAULT_IMAGE","mapping","DEFAULT_MAPPING","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","isTexture","mipmaps","internalFormat","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","userData","onUpdate","isRenderTargetTexture","needsPMREMUpdate","setUvTransform","JSON","parse","stringify","needsUpdate","textures","metadata","generator","toJSON","wrap","dispatchEvent","uv","applyMatrix3","Vector4","w","isVector4","acos","epsilon","epsilon2","m11","m12","m13","m21","m22","m23","m31","m32","m33","xx","yy","zz","xy","xz","yz","getW","WebGLRenderTarget","isWebGLRenderTarget","depth","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","samples","dispose","clone","assign","DataArrayTexture","isDataArrayTexture","wrapR","Data3DTexture","isData3DTexture","Quaternion","isQuaternion","_x","_y","_z","_w","_onChangeCallback","quaternion","euler","update","_order","c1","c3","s1","s3","axis","halfAngle","trace","vFrom","vTo","dot","EPSILON","step","angleTo","slerp","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","qa","u1","sqrt1u1","sqrtu1","u2","u3","callback","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","len","tDir","Vector3","isVector3","applyQuaternion","_quaternion$4","setFromEuler","setFromAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","camera","applyMatrix4","matrixWorldInverse","projectionMatrix","projectionMatrixInverse","matrixWorld","crossVectors","ax","ay","az","bx","by","bz","denominator","lengthSq","planeNormal","_vector$c","projectOnVector","sub","normal","dz","setFromSphericalCoords","radius","phi","sinPhiRadius","setFromCylindricalCoords","setFromMatrixColumn","sz","u","Box3","Infinity","isBox3","minZ","maxZ","count","points","makeEmpty","il","expandByPoint","halfSize","_vector$b","add","precise","expandByObject","box","isEmpty","addVectors","subVectors","point","vector","addScalar","updateWorldMatrix","geometry","attributes","fromBufferAttribute","boundingBox","computeBoundingBox","_box$3","union","children","sphere","clampPoint","plane","constant","triangle","getCenter","_center","_extents","_v0$2","_v1$7","_v2$3","_f0","_f1","_f2","axes","satForAxes","_triangleNormal","getSize","_points","setFromPoints","equals","_testAxis","v0","extents","j","p0","p1","p2","_box$2","_v1$6","_toFarthestPoint","_toPoint","Sphere","optionalCenter","maxRadiusSq","distanceTo","radiusSum","intersectsSphere","distanceToPoint","deltaLengthSq","expandByScalar","getMaxScaleOnAxis","missingRadiusHalf","_vector$a","_segCenter","_segDir","_diff","_edge1","_edge2","_normal$1","Ray","origin","direction","ray","at","directionDistance","distanceSqToPoint","optionalPointOnRay","optionalPointOnSegment","s0","sqrDist","extDet","segExtent","a01","b0","invDet","tca","radius2","thc","t0","t1","distanceToPlane","distToPoint","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectBox","backfaceCulling","sign","DdN","DdQxE2","DdE1xQ","cross","QdN","transformDirection","Matrix4","isMatrix4","n14","n24","n34","n41","n42","n43","n44","scaleX","_v1$5","scaleY","scaleZ","af","bf","ce","cf","de","df","ac","ad","bc","bd","compose","_zero","_one","eye","up","a14","a24","a34","a41","a42","a43","a44","b14","b24","b34","b41","b42","b43","b44","t14","scaleXSq","scaleYSq","scaleZSq","yx","zx","zy","x2","y2","z2","wx","wy","wz","determinant","_m1$2","invSX","invSY","invSZ","setFromRotationMatrix","bottom","near","far","_matrix$1","_quaternion$3","Euler","DefaultOrder","isEuler","asin","makeRotationFromQuaternion","newOrder","setFromQuaternion","RotationOrders","Layers","mask","channel","layers","_object3DId","_v1$4","_q1","_m1$1","_target","_position$3","_scale$2","_quaternion$2","_xAxis","_yAxis","_zAxis","_addedEvent","_removedEvent","Object3D","isObject3D","parent","DefaultUp","_onChange","modelViewMatrix","normalMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","matrixWorldAutoUpdate","DefaultMatrixWorldAutoUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","animations","updateMatrix","premultiply","decompose","multiply","rotateOnAxis","distance","translateOnAxis","setFromMatrixPosition","isCamera","isLight","lookAt","extractRotation","remove","getObjectByProperty","traverse","traverseVisible","traverseAncestors","force","child","updateMatrixWorld","updateParents","updateChildren","geometries","materials","shapes","skeletons","nodes","serialize","library","toArray","isInstancedMesh","instanceMatrix","instanceColor","isScene","environment","isMesh","isLine","isPoints","parameters","shape","isSkinnedMesh","bindMode","bindMatrix","skeleton","material","uuids","animation","extractFromCache","cache","values","recursive","_v0$1","_v1$3","_v2$2","_v3$1","_vab","_vac","_vbc","_vap","_vbp","_vcp","Triangle","i0","i1","i2","getNormal","setFromCoplanarPoints","getBarycoord","uv1","uv2","uv3","getUV","containsPoint","isFrontFacing","intersectsTriangle","d4","vc","addScaledVector","d5","d6","vb","va","denom","targetLengthSq","dot00","dot01","dot02","dot11","dot12","invDenom","p3","materialId","Material","isMaterial","blending","side","vertexColors","opacity","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","stencilWriteMask","stencilFunc","stencilRef","stencilFuncMask","stencilFail","stencilZFail","stencilZPass","stencilWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","precision","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaToCoverage","premultipliedAlpha","toneMapped","_alphaTest","onBeforeCompile","newValue","currentValue","roughness","metalness","sheen","sheenColor","sheenRoughness","emissive","emissiveIntensity","specular","specularIntensity","specularColor","shininess","clearcoat","clearcoatRoughness","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","iridescence","iridescenceIOR","iridescenceThicknessRange","iridescenceMap","iridescenceThicknessMap","matcap","alphaMap","lightMap","lightMapIntensity","aoMap","aoMapIntensity","bumpMap","bumpScale","normalMap","normalMapType","normalScale","displacementMap","displacementScale","displacementBias","roughnessMap","metalnessMap","emissiveMap","specularMap","specularIntensityMap","specularColorMap","envMap","combine","envMapIntensity","reflectivity","refractionRatio","gradientMap","transmission","transmissionMap","thickness","thicknessMap","attenuationDistance","attenuationColor","sizeAttenuation","linewidth","dashSize","gapSize","alphaTest","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","flatShading","fog","srcPlanes","dstPlanes","MeshBasicMaterial","isMeshBasicMaterial","setValues","_vector$9","_vector2$1","BufferAttribute","itemSize","normalized","isBufferAttribute","usage","updateRange","index1","index2","setXY","setXYZ","applyNormalMatrix","onUploadCallback","Uint16BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","_id$1","_m1","_obj","_offset","_box$1","_boxMorphTargets","_vector$8","BufferGeometry","isBufferGeometry","morphAttributes","morphTargetsRelative","groups","boundingSphere","drawRange","start","materialIndex","getNormalMatrix","tangent","computeBoundingSphere","makeRotationX","makeRotationY","makeRotationZ","makeTranslation","makeScale","negate","translate","setAttribute","morphAttributesPosition","isGLBufferAttribute","setFromBufferAttribute","morphAttribute","isNaN","jl","indices","normals","uvs","nVertices","hasAttribute","tangents","getAttribute","tan1","tan2","vA","vB","vC","uvA","uvB","uvC","sdir","tdir","group","handleTriangle","tmp2","n2","handleVertex","isFinite","positionAttribute","normalAttribute","pA","pB","pC","nA","nB","nC","cb","ab","normalizeNormals","convertBufferAttribute","array2","isInterleavedBufferAttribute","stride","geometry2","newAttribute","morphArray","addGroup","hasMorphAttributes","attributeArray","setIndex","_inverseMatrix$2","_ray$2","_sphere$3","_vA$1","_vB$1","_vC$1","_tempA","_tempB","_tempC","_morphA","_morphB","_morphC","_uvA$1","_uvB$1","_uvC$1","_intersectionPoint","_intersectionPointWorld","Mesh","updateMorphTargets","morphTargetInfluences","morphTargetDictionary","ml","String","raycaster","intersects","intersectsBox","intersection","morphPosition","groupMaterial","checkBufferGeometryIntersection","faceIndex","face","morphInfluences","influence","boneTransform","intersectTriangle","checkIntersection","BoxGeometry","widthSegments","heightSegments","depthSegments","scope","vertices","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","cloneUniforms","property","mergeUniforms","uniforms","merged","UniformsUtils","merge","ShaderMaterial","isShaderMaterial","defines","uniformsGroups","vertexShader","fragmentShader","lights","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","glslVersion","cloneUniformsGroups","Camera","PerspectiveCamera","fov","aspect","isPerspectiveCamera","zoom","focus","view","filmGauge","filmOffset","updateProjectionMatrix","focalLength","vExtentSlope","getFilmHeight","atan","tan","fullWidth","fullHeight","enabled","offsetX","offsetY","skew","getFilmWidth","makePerspective","CubeCamera","renderTarget","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","renderer","scene","currentRenderTarget","getRenderTarget","currentToneMapping","toneMapping","currentXrEnabled","xr","setRenderTarget","render","CubeTexture","isCubeTexture","WebGLCubeRenderTarget","isWebGLCubeRenderTarget","shader","tEquirect","mesh","currentMinFilter","stencil","clear","_vector1","_vector2","_normalMatrix","Plane","isPlane","setFromNormalAndCoplanarPoint","inverseNormalLength","line","startSign","endSign","end","intersectsPlane","optionalNormalMatrix","referencePoint","coplanarPoint","_sphere$2","_vector$7","Frustum","p4","p5","planes","frustum","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","sprite","negRadius","WebGLAnimation","isAnimating","animationLoop","requestId","onAnimationFrame","frame","requestAnimationFrame","stop","cancelAnimationFrame","setAnimationLoop","setContext","WebGLAttributes","gl","capabilities","isWebGL2","buffers","WeakMap","deleteBuffer","buffer","delete","bufferType","cached","bytesPerElement","elementSize","createBuffer","bindBuffer","bufferData","isFloat16BufferAttribute","BYTES_PER_ELEMENT","bufferSubData","subarray","updateBuffer","PlaneGeometry","width_half","height_half","segment_width","segment_height","ShaderChunk","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","alphatest_pars_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","iridescence_fragment","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_common_pars_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_physical_pars_fragment","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_fragment","lights_lambert_pars_fragment","lights_pars_begin","lights_toon_fragment","lights_toon_pars_fragment","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphcolor_vertex","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normal_pars_fragment","normal_pars_vertex","normal_vertex","normalmap_pars_fragment","clearcoat_normal_fragment_begin","clearcoat_normal_fragment_maps","clearcoat_pars_fragment","iridescence_pars_fragment","output_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","transmission_fragment","transmission_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","background_vert","background_frag","cube_vert","cube_frag","depth_vert","depth_frag","distanceRGBA_vert","distanceRGBA_frag","equirect_vert","equirect_frag","linedashed_vert","linedashed_frag","meshbasic_vert","meshbasic_frag","meshlambert_vert","meshlambert_frag","meshmatcap_vert","meshmatcap_frag","meshnormal_vert","meshnormal_frag","meshphong_vert","meshphong_frag","meshphysical_vert","meshphysical_frag","meshtoon_vert","meshtoon_frag","points_vert","points_frag","shadow_vert","shadow_frag","sprite_vert","sprite_frag","UniformsLib","diffuse","uvTransform","uv2Transform","specularmap","envmap","flipEnvMap","ior","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","gradientmap","fogDensity","fogNear","fogFar","fogColor","ambientLightColor","lightProbe","directionalLights","properties","directionalLightShadows","shadowBias","shadowNormalBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotLightShadows","spotLightMap","spotShadowMap","spotLightMatrix","pointLights","pointLightShadows","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ltc_1","ltc_2","ShaderLib","basic","lambert","phong","standard","toon","dashed","totalSize","t2D","cube","equirect","distanceRGBA","referencePosition","nearDistance","farDistance","shadow","WebGLBackground","cubemaps","state","objects","planeMesh","boxMesh","clearColor","clearAlpha","currentBackground","currentBackgroundVersion","currentTonemapping","setClear","getClearColor","setClearColor","getClearAlpha","setClearAlpha","renderList","forceClear","session","getSession","environmentBlendMode","autoClear","autoClearColor","autoClearDepth","autoClearStencil","deleteAttribute","onBeforeRender","copyPosition","enableAll","unshift","WebGLBindingStates","maxVertexAttributes","getParameter","extension","vaoAvailable","bindingStates","defaultState","createBindingState","currentState","forceUpdate","bindVertexArrayObject","vao","bindVertexArray","bindVertexArrayOES","deleteVertexArrayObject","deleteVertexArray","deleteVertexArrayOES","newAttributes","enabledAttributes","attributeDivisors","program","initAttributes","enableAttribute","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","disableUnusedAttributes","disableVertexAttribArray","vertexAttribPointer","vertexAttribIPointer","reset","resetDefaultState","setup","updateBuffers","programMap","stateMap","createVertexArray","createVertexArrayOES","getBindingState","cachedAttributes","geometryAttributes","attributesNum","programAttributes","getAttributes","location","cachedAttribute","geometryAttribute","saveCache","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","isInstancedInterleavedBuffer","locationSize","_maxInstanceCount","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","geometryId","programId","releaseStatesOfGeometry","releaseStatesOfProgram","WebGLBufferRenderer","mode","setMode","drawArrays","renderInstances","primcount","methodName","WebGLCapabilities","maxAnisotropy","getMaxPrecision","getShaderPrecisionFormat","WebGL2RenderingContext","WebGL2ComputeRenderingContext","maxPrecision","logarithmicDepthBuffer","maxTextures","maxVertexTextures","maxTextureSize","maxCubemapSize","maxAttributes","maxVertexUniforms","maxVaryings","maxFragmentUniforms","vertexTextures","floatFragmentTextures","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","floatVertexTextures","maxSamples","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","viewMatrix","i4","init","enableLocalClipping","beginShadows","endShadows","setState","useCache","materialProperties","nGlobal","lGlobal","clippingState","WebGLCubeMaps","mapTextureMapping","onTextureDispose","cubemap","fromEquirectangularTexture","physical","iridescenceThicknessMinimum","iridescenceThicknessMaximum","sheenColorMap","sheenRoughnessMap","transmissionSamplerSize","transmissionSamplerMap","OrthographicCamera","isOrthographicCamera","scaleW","scaleH","makeOrthographic","EXTRA_LOD_SIGMA","MAX_SAMPLES","_flatCamera","_clearColor","_oldTarget","PHI","INV_PHI","_axisDirections","PMREMGenerator","_renderer","_pingPongRenderTarget","_lodMax","_cubeSize","_lodPlanes","_sizeLods","_sigmas","_blurMaterial","_cubemapMaterial","_equirectMaterial","_compileMaterial","sigma","_setSize","cubeUVRenderTarget","_allocateTargets","_sceneToCubeUV","_blur","_applyPMREM","_cleanup","equirectangular","_fromTexture","_getCubemapMaterial","_getEquirectMaterial","_dispose","cubeSize","log2","outputTarget","_setViewport","_textureToCubeUV","params","_createRenderTarget","lodMax","lodPlanes","sizeLods","sigmas","lod","totalLods","sizeLod","texelSize","cubeFaces","positionSize","uvSize","faceIndexSize","coordinates","fill","_createPlanes","weights","poleAxis","_getBlurShader","tmpMesh","compile","cubeCamera","upSign","forwardSign","originalAutoClear","backgroundMaterial","backgroundBox","useSolidColor","col","lodIn","lodOut","pingPongRenderTarget","_halfBlur","targetIn","targetOut","sigmaRadians","blurMaterial","blurMesh","blurUniforms","pixels","radiansPerPixel","sigmaPixels","sum","weight","outputSize","WebGLCubeUVMaps","cubeUVmaps","pmremGenerator","cubemapUV","isEquirectMap","isCubeMap","fromEquirectangular","fromCubemap","isCubeTextureComplete","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","memory","updateWireframeAttribute","geometryIndex","geometryPosition","previousAttribute","getWireframeAttribute","currentAttribute","WebGLIndexedBufferRenderer","drawElements","WebGLInfo","calls","triangles","lines","programs","autoReset","instanceCount","numericalSort","absNumericalSort","WebGLMorphtargets","influencesList","morphTextures","morph","workInfluences","objectInfluences","morphTargetsCount","entry","hasMorphPosition","hasMorphNormals","hasMorphColors","morphTargets","morphNormals","morphColors","vertexDataCount","vertexDataStride","morphTarget","morphNormal","morphColor","disposeTexture","morphInfluencesSum","morphBaseInfluence","getUniforms","setValue","influences","sort","MAX_SAFE_INTEGER","WebGLObjects","updateMap","onInstancedMeshDispose","instancedMesh","buffergeometry","hasEventListener","emptyTexture","emptyArrayTexture","empty3dTexture","emptyCubeTexture","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","copyArray","allocTexUnits","allocateTextureUnit","setValueV1f","uniform1f","addr","setValueV2f","uniform2f","uniform2fv","setValueV3f","uniform3f","uniform3fv","setValueV4f","uniform4f","uniform4fv","setValueM2","uniformMatrix2fv","setValueM3","uniformMatrix3fv","setValueM4","uniformMatrix4fv","setValueV1i","uniform1i","setValueV2i","uniform2iv","setValueV3i","uniform3iv","setValueV4i","uniform4iv","setValueV1ui","uniform1ui","setValueV2ui","uniform2uiv","setValueV3ui","uniform3uiv","setValueV4ui","uniform4uiv","setValueT1","unit","setTexture2D","setValueT3D1","setTexture3D","setValueT6","setTextureCube","setValueT2DArray1","setTexture2DArray","setValueV1fArray","uniform1fv","setValueV2fArray","setValueV3fArray","setValueV4fArray","setValueM2Array","setValueM3Array","setValueM4Array","setValueV1iArray","uniform1iv","setValueV2iArray","setValueV3iArray","setValueV4iArray","setValueV1uiArray","uniform1uiv","setValueV2uiArray","setValueV3uiArray","setValueV4uiArray","setValueT1Array","units","setValueT3DArray","setValueT6Array","setValueT2DArrayArray","SingleUniform","activeInfo","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","seq","RePathPart","addUniform","container","uniformObject","parseUniform","path","pathLength","lastIndex","matchEnd","idIsIndex","subscript","WebGLUniforms","getProgramParameter","getActiveUniform","getUniformLocation","WebGLShader","createShader","shaderSource","compileShader","programIdCount","getShaderErrors","status","getShaderParameter","errors","getShaderInfoLog","trim","errorMatches","errorLine","toUpperCase","split","lines2","join","handleSource","getShaderSource","getTexelEncodingFunction","functionName","getEncodingComponents","getToneMappingFunction","toneMappingName","filterEmptyLine","replaceLightNums","numSpotLightCoords","numSpotLightShadows","numSpotLightMaps","numSpotLightShadowsWithMaps","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","numDirLightShadows","numPointLightShadows","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","includePattern","resolveIncludes","includeReplacer","include","unrollLoopPattern","unrollLoops","loopReplacer","snippet","generatePrecision","precisionstring","WebGLProgram","cacheKey","prefixVertex","prefixFragment","shadowMapTypeDefine","shadowMapType","generateShadowMapTypeDefine","envMapTypeDefine","envMapMode","generateEnvMapTypeDefine","envMapModeDefine","generateEnvMapModeDefine","envMapBlendingDefine","generateEnvMapBlendingDefine","envMapCubeUVSize","imageHeight","envMapCubeUVHeight","maxMip","texelHeight","texelWidth","generateCubeUVSize","customExtensions","extensionDerivatives","tangentSpaceNormalMap","shaderID","extensionFragDepth","rendererExtensionFragDepth","extensionDrawBuffers","rendererExtensionDrawBuffers","extensionShaderTextureLOD","rendererExtensionShaderTextureLod","generateExtensions","customDefines","chunks","generateDefines","createProgram","versionString","isRawShaderMaterial","shaderName","instancing","instancingColor","supportsVertexTextures","useFog","fogExp2","objectSpaceNormalMap","vertexTangents","vertexAlphas","vertexUvs","uvsVertexOnly","skinning","morphTextureStride","doubleSided","flipSided","shadowMapEnabled","decodeVideoTexture","physicallyCorrectLights","opaque","outputEncoding","useDepthPacking","depthPacking","cachedUniforms","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","debug","checkShaderErrors","programLog","getProgramInfoLog","vertexLog","fragmentLog","runnable","haveDiagnostics","vertexErrors","fragmentErrors","getError","diagnostics","prefix","deleteShader","getActiveAttrib","getAttribLocation","fetchAttributeLocations","deleteProgram","usedTimes","_id","WebGLShaderCache","shaderCache","materialCache","vertexShaderStage","_getShaderStage","fragmentShaderStage","materialShaders","_getShaderCacheForMaterial","shaderStage","code","Set","stage","WebGLShaderStage","WebGLPrograms","cubeuvmaps","_programLayers","_customShaders","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshMatcapMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","SpriteMaterial","getParameters","shadows","isMeshStandardMaterial","customVertexShaderID","customFragmentShaderID","getVertexShaderID","getFragmentShaderID","useAlphaTest","useClearcoat","useIridescence","isXRRenderTarget","isVideoTexture","isFogExp2","directional","spot","rectArea","hemi","shadowMap","customProgramCacheKey","getProgramCacheKey","morphAttributeCount","getProgramCacheKeyParameters","disableAll","enable","getProgramCacheKeyBooleans","acquireProgram","pl","preexistingProgram","releaseProgram","pop","releaseShaderCache","WebGLProperties","painterSortStable","groupOrder","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","transmissive","getNextRenderItem","renderItem","finish","customOpaqueSort","customTransparentSort","WebGLRenderLists","lists","renderCallDepth","list","listArray","UniformsCache","light","halfWidth","halfHeight","nextVersion","shadowCastingAndTexturingLightsFirst","lightA","lightB","WebGLLights","shadowCache","ShadowUniformsCache","hash","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","numDirectionalShadows","numPointShadows","numSpotShadows","numSpotMaps","ambient","probe","directionalShadow","spotShadow","rectAreaLTC1","rectAreaLTC2","pointShadow","vector3","matrix42","numSpotShadowsWithMaps","scaleFactor","intensity","isAmbientLight","isLightProbe","sh","coefficients","isDirectionalLight","shadowUniforms","bias","normalBias","mapSize","isSpotLight","penumbra","updateMatrices","isRectAreaLight","isPointLight","isHemisphereLight","LTC_FLOAT_1","LTC_FLOAT_2","LTC_HALF_1","LTC_HALF_2","setupView","identity","WebGLRenderState","lightsArray","shadowsArray","setupLights","setupLightsView","pushLight","pushShadow","shadowLight","WebGLRenderStates","renderStates","renderState","renderStateArray","isMeshDepthMaterial","isMeshDistanceMaterial","WebGLShadowMap","_objects","_capabilities","_frustum","_shadowMapSize","_viewportSize","_viewport","_depthMaterial","_distanceMaterial","_materialCache","_maxTextureSize","shadowMaterialVertical","VSM_SAMPLES","shadow_pass","resolution","shadowMaterialHorizontal","HORIZONTAL_PASS","fullScreenTri","fullScreenMesh","VSMPass","blurSamples","mapPass","renderBufferDirect","getDepthMaterial","result","customMaterial","customDistanceMaterial","customDepthMaterial","keyA","keyB","materialsForVariant","cachedMaterial","renderObject","shadowCamera","intersectsObject","k","kl","depthMaterial","autoUpdate","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","_state","setBlending","setTest","setScissorTest","shadowFrameExtents","getFrameExtents","pars","viewportCount","getViewportCount","vp","getViewport","getFrustum","isPointLightShadow","WebGLState","colorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","currentDepthMask","currentDepthFunc","currentDepthClear","disable","depthMask","setFunc","clearDepth","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","stencilMask","setOp","stencilOp","clearStencil","uboBindings","uboProgamMap","enabledCapabilities","currentBoundFramebuffers","currentDrawbuffers","defaultDrawbuffers","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","scissorParam","viewportParam","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","texImage2D","emptyTextures","setFlipSided","setCullFace","equationToGL","MIN_EXT","MAX_EXT","factorToGL","blendEquationSeparate","blendFuncSeparate","blendFunc","frontFace","cullFace","setPolygonOffset","factor","activeTexture","webglSlot","bindFramebuffer","framebuffer","isWebGLMultipleRenderTargets","drawBuffersWEBGL","useProgram","setMaterial","frontFaceCW","setLineWidth","lineWidth","webglType","webglTexture","boundTexture","unbindTexture","compressedTexImage2D","texImage3D","updateUBOMapping","uniformsGroup","blockIndex","getUniformBlockIndex","uniformBlockBinding","__bindingPointIndex","texStorage2D","texStorage3D","texSubImage2D","texSubImage3D","compressedTexSubImage2D","WebGLTextures","_gl","utils","multisampledRTTExt","supportsInvalidateFramebuffer","navigator","userAgent","_videoTextures","_sources","useOffscreenCanvas","OffscreenCanvas","createCanvas","resizeImage","needsPowerOfTwo","needsNewCanvas","maxSize","isPowerOfTwo$1","textureNeedsGenerateMipmaps","supportsMips","generateMipmap","getInternalFormat","internalFormatName","glFormat","glType","getMipLevels","isFramebufferTexture","isCompressedTexture","filterFallback","textureProperties","__webglInit","webglTextures","__cacheKey","deleteTexture","deallocateTexture","onRenderTargetDispose","renderTargetProperties","__webglTexture","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","__webglMultisampledFramebuffer","__webglColorRenderbuffer","__webglDepthRenderbuffer","attachmentProperties","deallocateRenderTarget","textureUnits","slot","updateVideoTexture","__version","complete","uploadTexture","wrappingToGL","filterToGL","setTextureParameters","textureType","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","initTexture","forceUpload","textureCacheKey","getTextureCacheKey","__currentVersion","pixelStorei","mipmap","textureNeedsPowerOfTwo","verifyColorSpace","glInternalFormat","useTexStorage","allocateMemory","levels","isDepthTexture","setupFrameBufferTexture","attachment","textureTarget","__hasExternalTextures","useMultisampledRTT","framebufferTexture2DMultisampleEXT","getRenderTargetSamples","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","isMultisample","bindRenderbuffer","renderbufferStorageMultisampleEXT","renderbufferStorageMultisample","renderbufferStorage","framebufferRenderbuffer","setupDepthRenderbuffer","isCube","__autoAllocateDepthBuffer","webglDepthTexture","setupDepthTexture","createRenderbuffer","__useRenderToTexture","sRGBToLinear","textureUnit","resetTextureUnits","isCompressed","cubeImage","mipmapImage","uploadCubeTexture","rebindTextures","colorTexture","setupRenderTarget","isMultipleRenderTargets","createFramebuffer","glTextureType","isWebGL3DRenderTarget","isWebGLArrayRenderTarget","updateRenderTargetMipmap","updateMultisampleRenderTarget","invalidationArray","depthStyle","ignoreDepthValues","__ignoreDepthValues","invalidateFramebuffer","blitFramebuffer","WebGLUtils","HALF_FLOAT_OES","SRGB_ALPHA_EXT","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_ETC2","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR","COMPRESSED_RGBA_ASTC_4x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR","COMPRESSED_RGBA_ASTC_5x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR","COMPRESSED_RGBA_ASTC_5x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR","COMPRESSED_RGBA_ASTC_6x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR","COMPRESSED_RGBA_ASTC_6x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR","COMPRESSED_RGBA_ASTC_8x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR","COMPRESSED_RGBA_ASTC_8x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR","COMPRESSED_RGBA_ASTC_8x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR","COMPRESSED_RGBA_ASTC_10x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR","COMPRESSED_RGBA_ASTC_10x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR","COMPRESSED_RGBA_ASTC_10x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR","COMPRESSED_RGBA_ASTC_10x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR","COMPRESSED_RGBA_ASTC_12x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR","COMPRESSED_RGBA_ASTC_12x12_KHR","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","UNSIGNED_INT_24_8_WEBGL","ArrayCamera","isArrayCamera","cameras","Group","isGroup","_moveEvent","WebXRController","_targetRay","_grip","_hand","joints","inputState","pinching","hasLinearVelocity","linearVelocity","hasAngularVelocity","angularVelocity","inputSource","referenceSpace","inputPose","gripPose","handPose","targetRay","grip","hand","visibilityState","inputjoint","jointPose","getJointPose","jointName","joint","jointRadius","indexTip","thumbTip","distanceToPinch","handedness","gripSpace","getPose","targetRaySpace","DepthTexture","WebXRManager","framebufferScaleFactor","referenceSpaceType","customReferenceSpace","pose","glBinding","glProjLayer","glBaseLayer","xrFrame","getContextAttributes","initialRenderTarget","newRenderTarget","controllers","controllerInputSources","cameraL","cameraR","cameraVR","_currentDepthNear","_currentDepthFar","onSessionEvent","controllerIndex","controller","onSessionEnd","onInputSourcesChange","disconnect","isPresenting","removed","added","cameraAutoUpdate","getController","getTargetRaySpace","getControllerGrip","getGripSpace","getHand","getHandSpace","setFramebufferScaleFactor","setReferenceSpaceType","getReferenceSpace","setReferenceSpace","space","getBaseLayer","getBinding","getFrame","setSession","xrCompatible","makeXRCompatible","layerInit","antialias","XRWebGLLayer","updateRenderState","baseLayer","framebufferWidth","framebufferHeight","depthFormat","depthType","glDepthFormat","projectionlayerInit","colorFormat","XRWebGLBinding","createProjectionLayer","textureWidth","textureHeight","setFoveation","requestReferenceSpace","cameraLPos","cameraRPos","updateCamera","depthNear","depthFar","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","translateX","translateZ","near2","far2","left2","right2","top2","bottom2","setProjectionFromUnion","getCamera","getFoveation","fixedFoveation","foveation","onAnimationFrameCallback","getViewerPose","views","setRenderTargetFramebuffer","cameraVRNeedsUpdate","glSubImage","getViewSubImage","setRenderTargetTextures","depthStencilTexture","WebGLMaterials","refreshUniformsCommon","uvScaleMap","uv2ScaleMap","refreshFogUniforms","isFog","density","refreshMaterialUniforms","pixelRatio","transmissionRenderTarget","isMeshLambertMaterial","isMeshToonMaterial","refreshUniformsToon","isMeshPhongMaterial","refreshUniformsPhong","refreshUniformsStandard","isMeshPhysicalMaterial","refreshUniformsPhysical","isMeshMatcapMaterial","refreshUniformsMatcap","refreshUniformsDistance","isMeshNormalMaterial","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","WebGLUniformsGroups","updateList","allocatedBindingPoints","maxBindingPoints","hasUniformChanged","cachedObject","getUniformSize","boundary","storage","onUniformsGroupsDispose","webglProgram","chunkSize","chunkOffset","__data","__offset","__size","__cache","prepareUniformsGroup","bindingPointIndex","allocateBindingPointIndex","bindBufferBase","updateBufferData","createCanvasElement","display","WebGLRenderer","isWebGLRenderer","_alpha","_context","_depth","_stencil","_antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","_failIfMajorPerformanceCaveat","failIfMajorPerformanceCaveat","currentRenderList","currentRenderState","renderListStack","renderStateStack","domElement","sortObjects","toneMappingExposure","gammaFactor","_this","_isContextLost","_currentActiveCubeFace","_currentActiveMipmapLevel","_currentRenderTarget","_currentMaterialId","_currentCamera","_currentViewport","_currentScissor","_currentScissorTest","_width","_height","_pixelRatio","_opaqueSort","_transparentSort","_scissor","_scissorTest","_clippingEnabled","_localClippingEnabled","_transmissionRenderTarget","_projScreenMatrix","_vector3","_emptyScene","overrideMaterial","getTargetPixelRatio","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","contextNames","contextAttributes","contextName","onContextLost","onContextRestore","onContextCreationError","isWebGL1Renderer","shift","message","initGLContext","preventDefault","infoAutoReset","shadowMapAutoUpdate","shadowMapNeedsUpdate","statusMessage","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReferences","forceContextLoss","loseContext","forceContextRestore","restoreContext","getPixelRatio","setPixelRatio","setSize","updateStyle","setViewport","getDrawingBufferSize","setDrawingBufferSize","getCurrentViewport","getScissor","setScissor","getScissorTest","boolean","setOpaqueSort","method","setTransparentSort","bits","onXRSessionStart","onXRSessionEnd","setProgram","rangeFactor","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","prepare","getProgram","projectObject","isLOD","intersectsSprite","renderScene","opaqueObjects","transmissiveObjects","transparentObjects","renderTransmissionPass","renderObjects","onAfterRender","lightsStateVersion","programCacheKey","updateCommonMaterialProperties","onBuild","needsLights","materialNeedsLights","progUniforms","uniformsList","seqWithValue","needsProgramChange","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","setOptional","boneTexture","computeBoneTexture","boneTextureSize","isMeshGouraudMaterial","markUniformsLightsNeedsUpdate","upload","setFromProjectionMatrix","camera2","defaultFramebuffer","__useDefaultFramebuffer","useDefaultFramebuffer","isRenderTarget3D","framebufferBound","layer","framebufferTextureLayer","readRenderTargetPixels","activeCubeFaceIndex","textureFormat","halfFloatSupportedByExt","readPixels","copyFramebufferToTexture","level","levelScale","copyTexSubImage2D","copyTextureToTexture","srcTexture","dstTexture","copyTextureToTexture3D","sourceBox","glTarget","unpackRowLen","unpackImageHeight","unpackSkipPixels","unpackSkipRows","unpackSkipImages","compressedTexSubImage3D","resetState","__THREE_DEVTOOLS__","CustomEvent","detail","WebGL1Renderer","Scene","InterleavedBuffer","isInterleavedBuffer","arrayBuffers","_uuid","ib","setUsage","_vector$6","InterleavedBufferAttribute","interleavedBuffer","interleavedBuffers","_basePosition","_skinIndex","_skinWeight","_vector$5","_matrix","SkinnedMesh","bindMatrixInverse","calculateInverses","skinWeight","manhattanLength","setXYZW","skinIndex","getComponent","boneIndex","bones","boneInverses","Bone","isBone","DataTexture","_offsetMatrix","_identityMatrix","Skeleton","boneMatrices","inverse","bone","json","boneInverse","linecap","linejoin","_start$1","_end$1","_inverseMatrix$1","_ray$1","_sphere$1","Line","lineDistances","threshold","localThreshold","localThresholdSq","vStart","vEnd","interSegment","interRay","distanceSqToSegment","_start","_end","LineSegments","LineLoop","_inverseMatrix","_ray","_sphere","_position$2","Points","testPoint","rayPointDistanceSq","intersectPoint","closestPointToPoint","distanceToRay","_sheen","_clearcoat","_iridescence","_transmission","arraySlice","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","times","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","valueSize","settings","DefaultSettings_","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","copySampleValue_","t1global","mid","intervalChanged_","interpolate_","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","getSettings_","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","LinearInterpolant","offset1","offset0","weight1","weight0","DiscreteInterpolant","KeyframeTrack","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","getValueSize","factoryMethod","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","ValueTypeName","createInterpolant","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","getInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","track","TypedKeyframeTrack","trackType","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","slerpFlat","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","tracks","blendMode","resetDuration","validate","optimize","jsonTracks","frameTime","fps","parseKeyframeTrack","clip","clipTracks","morphTargetSequence","noLoop","numMorphTargets","objectOrClipArray","clipArray","o","animationToMorphTargets","pattern","animationMorphTargets","clips","CreateFromMorphTargetSequence","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","typeName","getTrackTypeForValueTypeName","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","handlers","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","addHandler","regex","loader","removeHandler","getHandler","global","DefaultLoadingManager","Loader","manager","crossOrigin","withCredentials","resourcePath","requestHeader","load","loading","HttpError","response","FileLoader","setTimeout","req","Request","headers","Headers","credentials","mimeType","responseType","fetch","ReadableStream","body","getReader","callbacks","reader","contentLength","total","lengthComputable","stream","readData","read","close","byteLength","ProgressEvent","enqueue","Response","statusText","arrayBuffer","blob","text","DOMParser","parseFromString","label","decoder","TextDecoder","decode","catch","finally","ImageLoader","onImageLoad","removeEventListeners","onImageError","TextureLoader","setCrossOrigin","setPath","Light","_projScreenMatrix$1","_lightPositionWorld$1","_lookTarget$1","LightShadow","_frameExtents","_viewportCount","_viewports","shadowMatrix","viewportIndex","SpotLightShadow","isSpotLightShadow","SpotLight","power","_lightPositionWorld","_lookTarget","PointLightShadow","_cubeDirections","_cubeUps","PointLight","DirectionalLightShadow","isDirectionalLightShadow","DirectionalLight","LoaderUtils","fromCharCode","decodeURIComponent","escape","lastIndexOf","ImageBitmapLoader","isImageBitmapLoader","createImageBitmap","fetchOptions","res","colorSpaceConversion","imageBitmap","Clock","autoStart","oldTime","elapsedTime","running","getElapsedTime","getDelta","diff","newTime","performance","PropertyMixer","binding","mixFunction","mixFunctionAdditive","setIdentity","_slerp","_slerpAdditive","_setAdditiveIdentityQuaternion","_workIndex","_select","_setAdditiveIdentityOther","_lerp","_lerpAdditive","_setAdditiveIdentityNumeric","_mixBufferRegion","_mixBufferRegionAdditive","_setIdentity","_origIndex","_addIndex","cumulativeWeight","cumulativeWeightAdditive","useCount","referenceCount","accuIndex","currentWeight","mix","weightAdditive","originalValueOffset","getValue","startIndex","endIndex","targetIndex","workOffset","multiplyQuaternionsFlat","_RESERVED_CHARS_RE","_reservedRe","RegExp","_wordChar","_wordCharOrDot","_trackRe","_supportedObjectNames","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","firstValidIndex","nCachedObjects_","bindings","unbind","rootNode","node","findNode","nodeName","_getValue_unbound","_setValue_unbound","targetObject","resolvedProperty","propertyIndex","dest","targetArray","sourceArray","objectName","_getValue_unavailable","_setValue_unavailable","objectIndex","nodeProperty","versioning","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","bindingType","BindingType","Direct","ArrayElement","HasFromToArray","EntireArray","GetterByBindingType","SetterByBindingTypeAndVersioning","root","isAnimationObjectGroup","matches","results","lastDot","substring","getBoneByName","subTreeNode","searchNodeSubtree","childNode","_getValue_direct","_getValue_array","_getValue_arrayElement","_getValue_toArray","_setValue_direct","_setValue_direct_setNeedsUpdate","_setValue_direct_setMatrixWorldNeedsUpdate","_setValue_array","_setValue_array_setNeedsUpdate","_setValue_array_setMatrixWorldNeedsUpdate","_setValue_arrayElement","_setValue_arrayElement_setNeedsUpdate","_setValue_arrayElement_setMatrixWorldNeedsUpdate","_setValue_fromArray","_setValue_fromArray_setNeedsUpdate","_setValue_fromArray_setMatrixWorldNeedsUpdate","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","interpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","loop","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_activateAction","_deactivateAction","stopFading","stopWarping","_isActiveAction","_scheduleFading","fadeOutAction","warp","fadeOut","fadeIn","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","fadeInAction","crossFadeFrom","weightInterpolant","_takeBackControlInterpolant","action","startTimeScale","endTimeScale","_lendControlInterpolant","timeScaleInterpolant","_root","deltaTime","timeDirection","timeRunning","_updateTimeScale","clipTime","_updateTime","_updateWeight","propertyMixers","evaluate","accumulateAdditive","accumulate","interpolantValue","loopCount","pingPong","_setEndings","handle_stop","loopDelta","pending","atStart","atEnd","weightNow","weightThen","_controlInterpolantsResultBuffer","AnimationMixer","_initMemoryManager","_accuIndex","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","_bindAction","knownActions","_addInactiveAction","_lendBinding","saveOriginalState","_lendAction","restoreOriginalState","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","stats","actions","inUse","controlInterpolants","actionsByClip","actionByRoot","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","firstInactiveBinding","lastActiveBinding","__cacheIndex","lastActiveInterpolant","optionalRoot","clipObject","findByName","existingAction","newAction","nActions","_update","nBindings","timeInSeconds","actionsToRemove","_removeInactiveAction","Spherical","other","EPS","setFromCartesianCoords","revision","__THREE__","_changeEvent","_startEvent","_endEvent","OrbitControls","touchAction","minDistance","maxDistance","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","LEFT","UP","RIGHT","BOTTOM","mouseButtons","MIDDLE","ONE","TWO","target0","position0","zoom0","_domElementKeyEvents","getPolarAngle","spherical","getAzimuthalAngle","getDistance","listenToKeyEvents","onKeyDown","saveState","STATE","NONE","quat","setFromUnitVectors","quatInverse","lastPosition","lastQuaternion","twoPI","setFromVector3","rotateLeft","sphericalDelta","makeSafe","panOffset","setFromSpherical","zoomChanged","onContextMenu","onPointerDown","onPointerCancel","onMouseWheel","onPointerMove","onPointerUp","ROTATE","DOLLY","PAN","TOUCH_ROTATE","TOUCH_PAN","TOUCH_DOLLY_PAN","TOUCH_DOLLY_ROTATE","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","pointers","pointerPositions","getZoomScale","rotateUp","panLeft","objectMatrix","panUp","pan","deltaX","deltaY","targetDistance","dollyOut","dollyScale","dollyIn","handleMouseDownRotate","handleMouseDownPan","handleTouchStartRotate","pageX","pageY","handleTouchStartPan","handleTouchStartDolly","handleTouchMoveRotate","getSecondPointerPosition","handleTouchMovePan","handleTouchMoveDolly","setPointerCapture","pointerId","addPointer","pointerType","trackPointer","mouseAction","button","handleMouseDownDolly","ctrlKey","metaKey","shiftKey","handleTouchMoveDollyPan","handleTouchMoveDollyRotate","onTouchMove","handleMouseMoveRotate","handleMouseMoveDolly","handleMouseMovePan","onMouseMove","removePointer","releasePointerCapture","handleMouseWheel","handleKeyDown","pointer","passive","GLTFLoader","dracoLoader","ktx2Loader","meshoptDecoder","pluginCallbacks","register","parser","GLTFMaterialsClearcoatExtension","GLTFTextureBasisUExtension","GLTFTextureWebPExtension","GLTFMaterialsSheenExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsEmissiveStrengthExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsIridescenceExtension","GLTFLightsExtension","GLTFMeshoptCompression","extractUrlBase","_onError","setResponseType","setRequestHeader","setWithCredentials","gltf","content","plugins","decodeText","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","KHR_BINARY_GLTF","GLTFBinaryExtension","asset","GLTFParser","fileLoader","plugin","extensionsUsed","extensionName","extensionsRequired","KHR_MATERIALS_UNLIT","GLTFMaterialsUnlitExtension","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","GLTFMaterialsPbrSpecularGlossinessExtension","KHR_DRACO_MESH_COMPRESSION","GLTFDracoMeshCompressionExtension","KHR_TEXTURE_TRANSFORM","GLTFTextureTransformExtension","KHR_MESH_QUANTIZATION","GLTFMeshQuantizationExtension","setExtensions","setPlugins","GLTFRegistry","removeAll","KHR_LIGHTS_PUNCTUAL","KHR_MATERIALS_CLEARCOAT","KHR_MATERIALS_IOR","KHR_MATERIALS_SHEEN","KHR_MATERIALS_SPECULAR","KHR_MATERIALS_TRANSMISSION","KHR_MATERIALS_IRIDESCENCE","KHR_MATERIALS_VOLUME","KHR_TEXTURE_BASISU","KHR_MATERIALS_EMISSIVE_STRENGTH","EXT_TEXTURE_WEBP","EXT_MESHOPT_COMPRESSION","refs","uses","nodeDefs","nodeIndex","nodeLength","nodeDef","_addNodeRef","lightIndex","dependency","lightNode","lightDef","innerConeAngle","outerConeAngle","createUniqueName","_loadLight","_getNodeRef","materialParams","materialDef","metallicRoughness","pbrMetallicRoughness","baseColorFactor","baseColorTexture","assignTexture","all","emissiveStrength","clearcoatFactor","clearcoatTexture","clearcoatRoughnessFactor","clearcoatRoughnessTexture","clearcoatNormalTexture","iridescenceFactor","iridescenceTexture","iridescenceIor","iridescenceThicknessTexture","sheenColorFactor","sheenRoughnessFactor","sheenColorTexture","sheenRoughnessTexture","transmissionFactor","transmissionTexture","thicknessFactor","thicknessTexture","colorArray","specularFactor","specularTexture","specularColorFactor","specularColorTexture","textureIndex","textureDef","loadTextureImage","isSupported","textureLoader","uri","handler","detectSupport","loadTexture","Image","onload","onerror","bufferView","bufferViews","extensionDef","getDependency","supported","byteOffset","byteStride","decodeGltfBufferAsync","ready","decodeGltfBuffer","BINARY_EXTENSION_CHUNK_TYPES","headerView","header","magic","getUint32","chunkContentsLength","chunkView","chunkIndex","chunkLength","chunkType","contentArray","preload","primitive","bufferViewIndex","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","attributeName","threeAttributeName","ATTRIBUTES","accessorDef","accessors","componentType","WEBGL_COMPONENT_TYPES","decodeDracoFile","texCoord","GLTFMeshStandardSGMaterial","isGLTFSpecularGlossinessMaterial","specularMapParsFragmentChunk","glossinessMapParsFragmentChunk","specularMapFragmentChunk","glossinessMapFragmentChunk","lightPhysicalFragmentChunk","glossiness","glossinessMap","_extraUniforms","uniformName","USE_SPECULARMAP","USE_GLOSSINESSMAP","USE_UV","specularGlossinessParams","pbrSpecularGlossiness","diffuseFactor","diffuseTexture","glossinessFactor","specularGlossinessTexture","specGlossMapDef","GLTFCubicSplineInterpolant","stride2","stride3","td","m0","m1","_q","GLTFCubicSplineQuaternionInterpolant","WEBGL_CONSTANTS","WEBGL_FILTERS","WEBGL_WRAPPINGS","WEBGL_TYPE_SIZES","POSITION","NORMAL","TANGENT","TEXCOORD_0","TEXCOORD_1","COLOR_0","WEIGHTS_0","JOINTS_0","PATH_PROPERTIES","translation","INTERPOLATION","CUBICSPLINE","LINEAR","STEP","ALPHA_MODES","addUnknownExtensionsToUserData","knownExtensions","objectDef","gltfExtensions","assignExtrasToUserData","gltfDef","extras","meshDef","targetNames","createPrimitiveKey","primitiveDef","dracoExtension","createAttributesKey","attributesKey","getNormalizedComponentScale","associations","primitiveCache","meshCache","cameraCache","lightCache","sourceCache","textureCache","nodeNamesUsed","isSafari","isFirefox","firefoxVersion","_invokeAll","ext","_markDefs","beforeRoot","getDependencies","dependencies","scenes","afterRoot","skinDefs","skins","meshDefs","meshes","skinLength","skin","updateMappings","original","mappings","entries","func","loadScene","loadNode","_invokeOne","loadMesh","loadAccessor","loadBufferView","loadBuffer","loadMaterial","loadSkin","loadAnimation","loadCamera","defs","def","bufferIndex","bufferDef","bufferViewDef","accessorIndex","sparse","pendingBufferViews","bufferAttribute","TypedArray","elementBytes","itemBytes","ibSlice","ibCacheKey","itemSizeIndices","SCALAR","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","setX","setY","setZ","setW","sourceIndex","sourceDef","sampler","promise","loadImageSource","samplers","URL","webkitURL","sourceURI","isObjectURL","Blob","createObjectURL","revokeObjectURL","search","mapName","mapDef","gltfReference","extendTexture","useDerivativeTangents","useVertexColors","useFlatShading","pointsMaterial","lineMaterial","materialType","materialExtensions","sgExtension","getMaterialType","extendParams","kmuExtension","metallicFactor","roughnessFactor","metallicRoughnessTexture","extendMaterialParams","alphaMode","alphaCutoff","normalTexture","occlusionTexture","strength","emissiveFactor","emissiveTexture","createMaterial","originalName","sanitizedName","sanitizeNodeName","primitives","createDracoPrimitive","decodePrimitive","addPrimitiveAttributes","geometryPromise","meshIndex","loadGeometries","normalizeSkinWeights","toTrianglesDrawMode","assignFinalMaterial","cameraIndex","cameraDef","yfov","aspectRatio","znear","zfar","xmag","ymag","skinDef","skinEntry","inverseBindMatrices","accessor","animationIndex","animationDef","pendingNodes","pendingInputAccessors","pendingOutputAccessors","pendingSamplers","pendingTargets","channels","input","inputAccessors","outputAccessors","targets","inputAccessor","outputAccessor","targetName","outputArray","scaled","isInterpolantFactoryMethodGLTFCubicSpline","meshPromise","createNodeMesh","createNodeAttachment","sceneIndex","sceneDef","nodeIds","buildNodeHierarchy","reducedAssociations","reduceAssociations","nodeId","parentObject","pendingJoints","jointNodes","jointNode","mat","assignAttributeAccessor","gltfAttributeName","boxScale","maxDisplacement","expandByVector","computeBounds","hasMorphNormal","hasMorphColor","pendingPositionAccessors","pendingNormalAccessors","pendingColorAccessors","pendingAccessor","morphPositions","addMorphTargets","drawMode","getIndex","numberOfTriangles","newIndices","newGeometry","mount","character","businessCard","THREE","neck","waist","cardModel","clock","devicePixelRatio","appendChild","stacy_txt","stacy_mtl","model","fileAnimations","idleAnim","clipAction","play","incrementLoaded","xhr","card_txt","businessCardNormalMap","card_alb","businessCardAlbedo","card_mtl","businessCardModel","follow","moveJoint","degreeLimit","getMouseDegrees","innerWidth","innerHeight","startAnimationLoop","contract","setContract","network","setNetwork","currentAccount","setCurrentAccount","hasNFT","setHasNFT","setLoading","chainId","biconomy","setBiconomy","setBiconomyContract","checkIfWalletIsConnected","checkIfUserHasNFT","balanceOf","txn","ethereum","Biconomy","apiKey","contractAddresses","newContract","ethers","ethersProvider","on","cardGivenEvent","updateNetwork","networkVersion","request","chainName","nativeCurrency","decimals","symbol","rpcUrls","accounts","account","connectWalletAction","alert","receiveBusinessCard","tokenId","provider","populateTransaction","txParams","signatureType","PERSONAL_SIGN","href","rel","linkedinLogo","emailLogo","phoneLogo","setLoaded","elementToLoad","overflow","renderContent","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","reportWebVitals","TransactionNotifier","transactionId","socketClient","onMined","onMinedHandler","onHashGenerated","onHashGeneratedHandler","onHashChanged","onErrorHandler","subscribe","transactionNotifierMessageHandler","messageCtx","transactionHash","receipt","exports","ClientMessenger","socketClientEndpoint","websocket","centrifuge_1","ws_1","connect","TransactionNotifier_1","getSub","unsubscribe","RelayerMessenger","relayerAddress","socketAdmin","queueName","networkId","publish","sendToQueue","Buffer","persistent","onDropped","errorMessage","active","RelayerManagerMessenger","relayerManagerId","socketAdminEndpoint","socketAdminSecret","socketApiKey","queue","token","jsonwebtoken_1","setToken","cent_js_1","amqplib_1","connection","createChannel","assertQueue","durable","RelayerMessenger_1","TransactionHandlerMessenger","TransactionMessenger","TransactionListnerMessenger","transactionListenerId","onTransactionHashChanged","onTransactionHashGenerated","TransactionMessenger_1","consume","msg","__awaiter","transactionListenerMessageHandler","ack","ClientMessenger_1","RelayerManagerMessenger_1","TransactionListenerMessenger_1","TransactionHandlerMessenger_1","inputs","internalType","stateMutability","anonymous","indexed","outputs","ContractMetaTransactionType","PACKAGE_VERSION","process","npm_package_version","SCW","metaEntryPointBaseUrl","webSocketConnectionUrl","JSON_RPC_VERSION","eip712SigVersion","eip712DomainName","eip712VerifyingContract","DEFAULT_RELAYER_PAYMENT_TOKEN_ADDRESS","DEFAULT_RELAYER_PAYMENT_AMOUNT","ZERO_ADDRESS","NONCE_BATCH_ID","EXPIRY","BASE_GAS","EIP712_WALLET_TX_TYPE","WalletTx","EIP712_SAFE_TX_TYPE","SafeTx","SMART_CONTRACT_DATA_READY","DAPP_API_DATA_READY","LOGIN_CONFIRMATION","BICONOMY_ERROR","HELPER_CLENTS_READY","ERROR_RESPONSE","API_NOT_FOUND","USER_CONTRACT_NOT_FOUND","USER_NOT_LOGGED_IN","USER_ACCOUNT_NOT_FOUND","NETWORK_ID_MISMATCH","BICONOMY_NOT_INITIALIZED","NETWORK_ID_NOT_FOUND","SMART_CONTRACT_NOT_FOUND","DAPP_NOT_FOUND","INVALID_PAYLOAD","DASHBOARD_DATA_MISMATCH","SUCCESS_RESPONSE","USER_CONTRACT_CREATION_FAILED","EVENT_NOT_SUPPORTED","INVALID_DATA","INVALID_OPERATION","WRONG_ABI","INTERFACE_MAP_UNDEFINED","DAPP_API_MAP_UNDEFINED","SMART_CONTRACT_METATRANSACTION_MAP_UNDEFINED","SMART_CONTRACT_MAP_UNDEFINED","FORWARDER_DOMAIN_DATA_UNDEFINED","FORWARDER_DOMAIN_DETAILS_UNDEFINED","BICONOMY_FORWARDER_UNDEFINED","SMART_CONTRACT_TRSUTED_FORWARDER_MAP_UNDEFINED","DAPP_ID_UNDEFINED","FORWARDER_ADDRESSES_ARRAY_UNDEFINED","FORWARDER_ADDRESS_UNDEFINED","CONTRACT_ABI_UNDEFINED","FORWARDER_DOMAIN_TYPE_UNDEFINED","FORWARDER_REQUEST_TYPE_UNDEFINED","SUCCESS","ACTION_COMPLETE","BAD_REQUEST","OK","INTERNAL_SERVER_ERROR","NOT_FOUND","CONFLICT","EXPECTATION_FAILED","DAPP_LIMIT_REACHED","USER_LIMIT_REACHED","API_LIMIT_REACHED","GAS_ESTIMATION_FAILED","INTERNAL_ERROR","INIT","BICONOMY_READY","NO_DATA","engine","transactionData","clientMessenger","createTransactionNotifier","logMessage","emit","errorResponseData","logErrorMessage","domainData","config_1","verifyingContract","providerNetworkId","axios_1","systemInfoResponse","systemInfo","forwarderDomainType","defaultMetaTransaction","types_1","DEFAULT","trustedForwarderMetaTransaction","EIP2771","forwardRequestType","forwarderDomainData","forwarderDomainDetails","forwarderAddress","biconomyForwarderAddress","forwarderAddresses","biconomyForwarderAddresses","eip712Sign","personalSign","walletFactoryAddress","baseWalletAddress","entryPointAddress","handlerAddress","gnosisSafeProxyFactoryAddress","gnosisSafeAddress","biconomyForwarder","ethers_1","Contract","abis_1","handleSendTransactionParams","interfaceMap","dappApiMap","smartContractMetaTransactionMap","smartContractTrustedForwarderMap","smartContractMap","fallback","methodInfo","decodeMethod","api","contractAddress","metaTxApproach","gasLimit","gas","BigNumber","toHexString","txGas","batchId","customBatchId","domainName","customDomainName","domainVersion","customDomainVersion","signTypedDataType","strictMode","paramArray","forwardedData","signatureFromPayload","signature","contractAbi","readOnlyProvider","estimateGas","gasLimitNum","toNumber","findTheRightForwarder","forwarderToAttach","getAddress","buildForwardTxRequest","attach","domainDataToUse","domainSeparator","getDomainSeperator","signatureEIP712","getSignatureEIP712","signaturePersonal","getSignaturePersonal","apiId","sendTransaction","findTheRightForwarderParams","forwarderToUse","supportedForwarders","trustedForwarder","forwarder","isTrustedForwarder","getNonce","batchNonce","tokenGasPrice","deadline","biconomyForwarderDomainData","keccak256","defaultAbiCoder","encode","salt","userAddress","nonce","functionSignature","dataToSign","types","EIP712Domain","MetaTransaction","domain","primaryType","send","getSignatureParameters","signatureParamtersPerContractAddress","signer","messageToSign","getPersonalCustomMessageToSign","signMessage","sendSignedTransactionParams","rawTransaction","forwardRequest","decodedTx","ethereum_tx_decoder_1","decodeTx","formatMessage","parsedTransaction","parseTransaction","contractABI","trustedForwarderMetaTransactionData","defaultMetaTransactionData","timeout","post","flag","mexaSdkClientMessenger","transcionId","getEIP712ForwardMessageToSign","ERC20ForwardRequest","getPersonalForwardMessageToSign","ethereumjs_abi_1","soliditySHA3","isHexString","concat","includes","vNum","newSignature","toBuffer","hashToSign","arrayify","getSystemInfo","get_system_info_helper_1","handleSendTransaction","handle_send_transaction_helper_1","send_transaction_helper_1","sendSignedTransaction","send_signed_transaction_helper_1","signature_helpers_1","buildSignatureCustomEIP712MetaTransaction","meta_transaction_custom_helpers_1","buildSignatureCustomPersonalSignMetaTransaction","proxyProvider","prop","handleRpcSend","handleRpcSendAsync","handleRpcRequest","validateOptions","externalProvider","proxyFactory","providers","Web3Provider","gasless_messaging_sdk_1","isomorphic_ws_1","jsonRpcUrl","JsonRpcProvider","Proxy","payload","_b","handleRpcSendType2","handleRpcSendType1","handleRpcSendType3","sendAsync","getSigner","getDappData","isConnected","getNetwork","dapp","smartContracts","metaApis","dappId","contractInterface","Interface","abi","address","metaTransactionType","metaApi","serializeError","events_1","AddressCoder","localName","writer","_throwError","writeValue","hexZeroPad","readValue","Coder","AnonymousCoder","coder","dynamic","defaultValue","logger","Logger","pack","coders","arrayValues","unique","throwError","argument","throwArgumentError","staticWriter","Writer","wordSize","dynamicWriter","updateFuncs","dynamicOffset","updateFunc","writeUpdatableValue","baseOffset","appendWriter","unpack","baseReader","subReader","offsetReader","baseType","uniqueNames","reduce","accum","ArrayCoder","defaultChild","checkArgumentCount","_data","coerce","BooleanCoder","isZero","DynamicBytesCoder","writeBytes","readBytes","BytesCoder","hexlify","FixedBytesCoder","NullCoder","NumberCoder","signed","maxUintValue","MaxUint256","bounds","gt","lt","One","mul","NegativeOne","Zero","toTwos","fromTwos","StringCoder","toUtf8Bytes","toUtf8String","TupleCoder","paramTypeBytes","paramTypeNumber","AbiCoder","coerceFunc","defineReadOnly","param","_getCoder","arrayChildren","arrayLength","component","allowLoose","Reader","_getWordSize","ParamType","_getWriter","loose","_getReader","checkResultErrors","checkErrors","childPath","_dataLength","_padding","hexConcat","_writeData","bytes","paddingOffset","_getValue","_coerceFunc","alignedLength","_peekBytes","_constructorGuard","ModifiersBytes","calldata","ModifiersNest","checkModifier","populate","FormatTypes","sighash","minimal","full","paramTypeArray","constructorGuard","operation","fromObject","_isParamType","comp","allowIndexed","fromString","isParamType","verifyType","originalParam","newNode","allowType","allowParams","allowName","allowArray","sibling","readArray","parseParamType","parseParams","allowIndex","splitNesting","Fragment","_isFragment","isFragment","FunctionFragment","EventFragment","ConstructorFragment","ErrorFragment","isEventFragment","verifyIdentifier","regexParen","modifier","parseGas","comps","parseModifiers","payable","verifyState","isConstructorFragment","parens","isFunctionFragment","returns","checkForbidden","fragment","sig","isErrorFragment","regexIdentifier","LogDescription","Description","TransactionDescription","ErrorDescription","Indexed","_isIndexed","BuiltinErrors","reason","wrapAccessError","fragments","getStatic","bucket","deploy","functions","events","nameOrSignatureOrSighash","getSighash","matching","nameOrSignatureOrTopic","topichash","getEventTopic","getFunction","_","eventFragment","getEvent","_abiCoder","_encodeParams","_decodeParams","functionFragment","errorArgs","errorName","errorSignature","selector","builtin","topics","encodeTopic","dataTypes","dataValues","topicHash","expected","nonIndexed","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","topic","decodeEventLog","hexData","errorFragment","hexDataSlice","_isInterface","ForkEvent","_isForkEvent","Provider","checkAbstract","resolveProperties","block","getBlock","gasPrice","getGasPrice","lastBaseFeePerGas","maxFeePerGas","maxPriorityFeePerGas","baseFeePerGas","eventName","off","_isProvider","allowedTransactionKeys","forwardErrors","Signer","blockTag","_checkProvider","getBalance","getTransactionCount","transaction","checkTransaction","signTransaction","signedTx","getFeeData","resolveName","shallowCopy","hasEip1559","feeData","getChainId","_isSigner","VoidSigner","_fail","getChecksumAddress","chars","expanded","charCodeAt","hashed","ibanLookup","safeDigits","log10","LN10","ibanChecksum","checksum","_base36To16","isAddress","getIcapAddress","base36","_base16To36","getContractAddress","stripZeros","getCreate2Address","initCodeHash","hexDataLength","BN","_BN","MAX_SAFE","isBigNumberish","isBigNumber","isBytes","_warnedToStringRadix","_hex","_isBigNumber","toBigNumber","toBN","throwFault","div","isNeg","umod","isNegative","and","or","xor","maskn","shln","shrn","eq","lte","gte","BigInt","toHex","anyValue","fault","isHexable","addSlice","isBytesLike","isInteger","checkSafeUint53","allowMissingPrefix","hexPad","items","zeroPad","HexCharacters","endOffset","hexValue","trimmed","hexStripZeros","splitSignature","_vs","recoveryParam","yParityAndS","compact","vs","recId","joinSignature","Two","WeiPerEther","MinInt256","MaxInt256","accessList","customData","ccipReadEnabled","resolver","nameOrPromise","resolveAddresses","paramType","makeError","overrides","override","check","resolvedAddress","resolved","interface","encodeFunctionData","ro","accessListify","intrinsic","roValue","leftovers","addContractWait","wait","confirmations","logs","deepCopy","parsed","parseLog","eventSignature","removeListener","blockHash","getTransaction","getTransactionReceipt","buildCall","collapseSimple","signerOrProvider","deployTransaction","_deployed","decodeFunctionResult","buildDefault","txRequest","buildSend","getEventTag","RunningEvent","tag","once","listenerCount","argsCopy","ErrorRunningEvent","FragmentRunningEvent","decodeError","WildcardRunningEvent","BaseContract","addressOrName","uniqueFilters","filters","encodeFilterTopics","uniqueSignatures","callStatic","buildPopulate","buildEstimate","signatures","_deployedPromise","getCode","deployed","runningEvent","_runningEvents","_normalizeRunningEvent","_wrappedEmits","_checkRunningEvents","prepareEvent","addListener","wrappedEmit","_wrapEvent","getEmit","fromBlockOrBlockhash","toBlock","_getRunningEvent","fromBlock","getLogs","_addEventListener","run","removeAllListeners","ContractFactory","bytecode","bytecodeHex","encodeDeploy","unsignedTx","getDeployTransaction","getContract","compilerOutput","evm","getInterface","sha3","_permanentCensorErrors","_censorErrors","LogLevels","warning","_logLevel","_globalLogger","LogLevel","ErrorCode","_normalizeError","missing","form","_checkNormalize","HEX","logLevel","_log","DEBUG","INFO","WARNING","UNKNOWN_ERROR","messageDetails","NUMERIC_FAULT","CALL_EXCEPTION","INSUFFICIENT_FUNDS","MISSING_NEW","NONCE_EXPIRED","REPLACEMENT_UNDERPRICED","TRANSACTION_REPLACED","UNPREDICTABLE_GAS_LIMIT","INVALID_ARGUMENT","condition","UNSUPPORTED_OPERATION","expectedCount","MISSING_ARGUMENT","UNEXPECTED_ARGUMENT","kind","censorship","permanent","globalLogger","ctor","promises","checkProperties","bigint","number","_isFrozen","isFrozen","_deepCopy","arrayifyInteger","unarrayifyInteger","_encode","_decodeChildren","childOffset","decoded","_decode","consumed","lengthLength","assert","val","equal","zero2","word","enc","hi","lo","minAssert","minUtils","getNAF","num","naf","bitLength","ws","mod","andln","isOdd","isubn","iushrn","getJSF","k1","k2","jsf","m8","cmpn","m14","m24","cachedProperty","computer","parseBytes","intFromLE","BaseCurve","conf","red","prime","zero","toRed","one","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","_fixedNafMul","doubles","_getDoubles","I","nafW","repr","jpoint","mixedAdd","neg","toP","_wnafMul","nafPoints","_getNAFPoints","wnd","acc","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","cmp","toJ","redNeg","ja","jb","decodePoint","pointFromX","encodeCompressed","isEven","precompute","beta","_getBeta","_hasDoubles","dbl","module","superCtor","super_","TempCtor","ShortCurve","Base","tinv","redInvm","zeroA","fromRed","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","inherits","Point","isRed","inf","forceRed","JPoint","zOne","modn","betas","_getEndoRoots","lambdas","redMul","basis","vec","_getEndoBasis","ntinv","redSqrt","redAdd","redSub","a0","prevR","aprxSqrt","ushrn","len1","sqr","negative","_endoSplit","divRound","q1","q2","odd","redSqr","redIAdd","rhs","redISub","_endoWnafMulAdd","npoints","ncoeffs","ineg","fromJSON","pre","endoMul","obj2point","inspect","isInfinity","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","zinv","zinv2","pz2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","t2","dny","_zeroDbl","_threeDbl","_dbl","yyyy","yyyy8","c8","gamma","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","rx","xc","iadd","base","require$$0","short","require$$1","mont","edwards","curves","PresetCurve","defineCurve","HmacDRBG","predResist","outLen","outSize","minEntropy","hmacStrength","_reseed","reseedInterval","K","V","entropy","entropyEnc","nonceEnc","pers","persEnc","_init","seed","_hmac","kmac","digest","reseed","addEnc","generate","temp","KeyPair","ec","priv","pub","_importPrivate","privEnc","_importPublic","pubEnc","fromPublic","fromPrivate","getPublic","getPrivate","derive","verify","Signature","_importDER","Position","place","getLength","buf","initial","octetLen","rmPadding","constructLength","octets","rlen","slen","toDER","backHalf","rand","EC","hasOwnProperty","nh","keyPair","keyFromPrivate","keyFromPublic","genKeyPair","drbg","ns2","iaddn","_truncateToN","truncOnly","bkey","ns1","iter","kp","kpX","invm","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","elliptic","require$$2","require$$3","eddsa","_curve","getCurve","SigningKey","privateKey","publicKey","digestBytes","otherKey","otherKeyPair","computePublicKey","_isSigningKey","recoverPublicKey","rs","compressed","signingKey","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","OVERRUN","Utf8ErrorFuncs","ignore","OVERLONG","getUtf8CodePoints","extraLength","overlongMask","nextChar","MISSING_CONTINUE","OUT_OF_RANGE","UTF16_SURROGATE","str","checkNormalize","pair","escapeChar","_toEscapedUtf8String","codePoint","_toUtf8String","codePoints","toUtf8CodePoints","TransactionTypes","handleAddress","handleNumber","transactionFields","maxLength","numeric","computeAddress","recoverAddress","formatNumber","accessSetify","storageKeys","storageKey","localeCompare","formatAccessList","_serializeEip1559","fields","RLP","_serializeEip2930","raw","fieldInfo","_serialize","transactionType","_parseEipSignature","recid","_parse","_parseEip2930","_parseEip1559","checkInt","checkInts","arrayish","coerceArray","createArray","targetStart","sourceStart","sourceEnd","convertUtf8","toBytes","encodeURI","substr","fromBytes","convertHex","Hex","numberOfRounds","rcon","S","Si","T1","T2","T3","T4","T5","T6","T7","T8","U1","U2","U3","U4","convertToInt32","AES","_prepare","rounds","_Ke","_Kd","roundKeyCount","KC","tk","tt","rconpointer","encrypt","plaintext","decrypt","ciphertext","ModeOfOperationECB","description","_aes","ModeOfOperationCBC","iv","_lastCipherblock","ModeOfOperationCFB","segmentSize","_shiftRegister","xorSegment","encrypted","ModeOfOperationOFB","_lastPrecipher","_lastPrecipherIndex","Counter","initialValue","_counter","setBytes","increment","ModeOfOperationCTR","counter","_remainingCounter","_remainingCounterIndex","aesjs","ModeOfOperation","ecb","cbc","cfb","ofb","ctr","utf8","padding","pkcs7","pad","padder","strip","_arrayTest","compileSchema","require","SchemaObject","stableStringify","formats","rules","$dataMetaSchema","util","Ajv","schemaKeyRef","getSchema","schemaObj","_addSchema","_compile","$async","schema","_meta","addSchema","_skipValidation","_getId","checkUnique","normalizeId","_schemas","addMetaSchema","skipValidation","validateSchema","throwOrLogError","$schema","_opts","defaultMeta","META_SCHEMA_ID","errorsText","keyRef","_getSchemaObj","baseId","_fragments","_getSchemaFragment","removeSchema","_removeAllSchemas","_refs","del","addFormat","_formats","separator","dataVar","dataPath","shouldAddSchema","addUsedSchema","recursiveMeta","willValidate","localRefs","ids","put","compiling","callValidate","currentOpts","_metaOpts","refVal","_validate","compileAsync","customKeyword","addKeyword","getKeyword","removeKeyword","validateKeyword","errorClasses","ValidationError","Validation","MissingRefError","MissingRef","META_IGNORE_OPTIONS","META_SUPPORT_DATA","opts","noop","setLogger","_loadingSchemas","_compilations","RULES","schemaId","_get$IdOrId","_get$Id","chooseGetId","loopRequired","errorDataPath","_errorDataPathProperty","metaOpts","getMetaSchemaOptions","addInitialFormats","keywords","keyword","addInitialKeywords","$dataSchema","$data","$id","metaSchema","addDefaultMetaSchema","nullable","optsSchemas","schemas","addInitialSchemas","loadSchema","loadMetaSchemaOf","_compileAsync","sch","$ref","missingSchema","missingRef","schemaPromise","removePromise","loadMissingSchema","fullPath","errorSubclass","Subclass","ajv","validation","DATE","DAYS","TIME","HOSTNAME","URI","URITEMPLATE","UUID","JSON_POINTER","JSON_POINTER_URI_FRAGMENT","RELATIVE_JSON_POINTER","date","year","month","day","isLeapYear","hour","minute","second","timeZone","fast","email","hostname","ipv4","ipv6","dateTime","DATE_TIME_SEPARATOR","NOT_URI_FRAGMENT","Z_ANCHOR","validateGenerator","ucs2length","checkCompiling","compIndex","endCompiling","patternCode","patterns","toQuotedString","defaultCode","refValCode","customRuleCode","vars","statement","patternsHash","defaults","defaultsHash","customRules","compilation","localCompile","cv","sourceCode","_schema","isRoot","isTop","schemaPath","errSchemaPath","errorPath","resolveRef","usePattern","useDefault","useCustomRule","processCode","makeValidate","_refVal","refCode","refIndex","resolvedRef","rootRefId","addLocalRef","localSchema","inlineRef","inlineRefs","refId","replaceLocalRef","removeLocalRef","inline","regexStr","valueStr","rule","parentSchema","it","deps","definition","every","macro","resolveSchema","refPath","_getFullPath","getFullPath","resolveRecursive","getJsonPointer","parsedRef","resolveUrl","baseIds","fullPaths","allKeys","jsonPtr","rootSchema","parentJsonPtr","parentKeyword","keyIndex","escapeFragment","PREVENT_SCOPE_CHANGE","toHash","part","unescapeFragment","SIMPLE_INLINED","limit","checkNoRef","countKeys","TRAILING_SLASH_HASH","ruleModules","ALL","implKeywords","implements","$comment","custom","checkDataType","dataType","strictNumbers","EQUAL","AND","NOT","checkDataTypes","null","integer","coerceToTypes","optionCoerceTypes","COERCE_TO_TYPES","getProperty","escapeQuotes","varOccurences","varReplace","expr","schemaHasRules","schemaHasRulesExcept","exceptKeyword","schemaUnknownRules","getPathExpr","currentPath","jsonPointers","isNumber","joinPaths","getPath","escapeJsonPointer","getData","lvl","paths","jsonPointer","segments","segment","unescapeJsonPointer","encodeURIComponent","IDENTIFIER","SINGLE_QUOTE","KEYWORDS","keywordsJsonPointers","anyOf","definitions","simpleTypes","statements","not","required","modifying","async","const","$keyword","$ruleType","$schemaValue","out","$lvl","$dataLvl","dataLevel","$schemaPath","$errSchemaPath","$breakOnError","allErrors","$isData","dataPathArr","$isMax","$exclusiveKeyword","$schemaExcl","$isDataExcl","$op","$notOp","$errorKeyword","$schemaValueExcl","$exclusive","$exclType","$exclIsNumber","$opStr","$opExpr","$$outStack","createErrors","messages","verbose","__err","compositeRule","unicode","$it","$closingBraces","$nextValid","$currentBaseId","$allSchemasEmpty","arr1","$sch","$i","l1","strictKeywords","$valid","$errs","$noEmptySchema","$wasComposite","$idx","$dataNxt","$nextData","$nonEmptySchema","$passData","$code","$compile","$inline","$macro","$ruleValidate","$validateCode","$rule","$definition","$rDef","$validateSchema","$ruleErrs","$ruleErr","$asyncKeyword","passContext","$parentData","$parentDataProperty","def_callRuleValidate","def_customError","$schemaDeps","$propertyDeps","$ownProperties","ownProperties","$property","$deps","$currentErrorPath","$propertyKey","$useData","$prop","$propertyPath","$missingProperty","arr2","l2","$vSchema","$unknownFormats","unknownFormats","$allowUnknown","$format","$isObject","$formatType","$formatRef","$thenSch","$elseSch","$thenPresent","$elsePresent","$ifClause","allOf","contains","maximum","minimum","maxItems","minItems","minLength","maxProperties","minProperties","multipleOf","oneOf","propertyNames","uniqueItems","$additionalItems","additionalItems","$currErrSchemaPath","multipleOfPrecision","$allErrorsOption","$prevValid","$passingSchemas","$key","$dataProperties","$schemaKeys","notProto","$pProperties","patternProperties","$pPropertyKeys","$aProperties","additionalProperties","$someProperties","$noAdditional","$additionalIsSchema","$removeAdditional","removeAdditional","$checkAdditional","$required","$requiredHash","$pProperty","$additionalProperty","$useDefaults","useDefaults","arr3","i3","l3","$hasDefault","default","arr4","l4","$invalidName","$refCode","$refVal","$message","missingRefs","__callValidate","$propertySch","$loopRequired","$itemType","$typeIsArray","$method","$refKeywords","$unknownKwd","$keywordsMsg","$top","rootId","strictDefaults","$defaultMsg","$closingBraces1","$closingBraces2","$typeSchema","extendRefs","coerceTypes","$coerceToTypes","$rulesGroup","$shouldUseGroup","$dataType","$coerced","$type","arr5","i5","l5","$shouldUseRule","impl","$ruleImplementsSomeKeyword","definitionSchema","_addRule","ruleGroup","rg","_validateKeyword","raw_connect","ChannelModel","connOptions","fromCallback","conn","IllegalOperationError","setIfDefined","EMPTY_OPTIONS","Args","argt","expires","messageTtl","deadLetterExchange","deadLetterRoutingKey","maxPriority","queueMode","exclusive","autoDelete","ticket","nowait","ifUnused","ifEmpty","exchange","routingKey","alternateExchange","internal","destination","convertCC","cc","deliveryMode","CC","BCC","expiration","mandatory","immediate","contentType","contentEncoding","priority","correlationId","replyTo","messageId","timestamp","userId","appId","clusterId","consumerTag","noLocal","noAck","allUpTo","deliveryTag","multiple","requeue","prefetchCount","prefetchSize","BitSet","numWords","words","wordsInUse","wordsPresent","bitIndex","wordIndex","ensureSize","bit","fromIndex","trailingZeros","closeMsg","EventEmitter","fmt","stackCapture","Channel","reply","lwm","unconfirmed","handleConfirm","handleMessage","acceptDeliveryOrReturn","acceptMessage","C","invalidOp","stack","invalidateSend","ch","sendImmediately","sendOrEnqueue","sendMessage","BasicDeliver","BasicReturn","continuation","remaining","BasicProperties","alloc","BaseChannel","consumers","allocate","freshChannel","sendMethod","BasicPublish","_rpc","expect","expectedName","closeWithError","constants","UNEXPECTED_FRAME","closeReason","classId","methodId","closeFrameError","replyCode","toClosed","capturedStack","_rejectPending","accept","releaseChannel","toClosing","ChannelCloseOk","ChannelClose","rej","discard","closeBecause","replyText","acceptMessageFrame","handle","confirmed","pushConfirmCallback","BasicAck","BasicNack","BasicCancel","emsg","BasicFlow","NOT_IMPLEMENTED","onBufferDrain","registerConsumer","unregisterConsumer","dispatchMessage","consumer","handleDelivery","handleCancel","ev","open","ConfirmChannel","rpc","ConfirmSelect","ConfirmSelectOk","try","ChannelOpen","outOfBand","ChannelOpenOk","REPLY_SUCCESS","QueueDeclare","QueueDeclareOk","checkQueue","QueueDelete","deleteQueue","QueueDeleteOk","QueuePurge","purgeQueue","QueuePurgeOk","QueueBind","bindQueue","QueueBindOk","QueueUnbind","unbindQueue","QueueUnbindOk","ExchangeDeclare","assertExchange","ExchangeDeclareOk","_ok","checkExchange","ExchangeDelete","deleteExchange","ExchangeDeleteOk","ExchangeBind","bindExchange","ExchangeBindOk","ExchangeUnbind","unbindExchange","ExchangeUnbindOk","fieldsAndProps","BasicConsume","BasicConsumeOk","ok","cancel","BasicCancelOk","BasicGet","BasicGetEmpty","BasicGetOk","nack","BasicReject","BasicRecover","recover","BasicRecoverOk","BasicQos","prefetch","BasicQosOk","qos","awaiting","ints","encodeTable","writeUInt8","write","encodeFieldValue","writeUInt32BE","encodeArray","isBuffer","writeDoubleBE","writeInt8","writeInt16BE","writeInt32BE","writeInt64BE","writeUInt64BE","writeFloatBE","places","digits","decodeFields","decodeFieldValue","readInt8","readUInt32BE","readInt32BE","readUInt64BE","until","vals","decodeArray","readDoubleBE","readFloatBE","readInt64BE","readInt16BE","readUInt8","QS","Connection","copyInto","CLIENT_PROPERTIES","openFrames","vhost","query","extraClientProperties","unescape","intOrDefault","mechanism","locale","channelMax","frameMax","heartbeat","credentialsFromUrl","user","passwd","username","password","plain","socketOptions","openCallback","sockopts","protocol","noDelay","keepAlive","keepAliveDelay","clientProperties","pass","host","servername","port","config","pathname","sock","sockok","onConnect","setNoDelay","setKeepAlive","HEARTBEAT","Mux","Duplex","Heart","PassThrough","underlying","_write","chunk","wrapStream","muxer","rest","FRAME_MIN_SIZE","sentSinceLastCheck","recvSinceLastCheck","expectSocketClose","freeChannels","ConnectionClose","ConnectionCloseOk","isFatalError","ConnectionBlocked","ConnectionUnblocked","mainAccept","rec","CHANNEL_ERROR","sendContent","sendProtocolHeader","sendBytes","PROTOCOL_HEADER","allFields","openCallback0","tunedOptions","bail","Method","negotiate","server","desired","afterStartOk","ConnectionSecure","ConnectionTune","ConnectionTuneOk","ConnectionOpen","ConnectionOpenOk","onOpenOk","openOk","heartbeater","startHeartbeater","endWhileOpening","onSocketError","acceptLoop","ConnectionStart","mechanisms","serverProperties","ConnectionStartOk","closeCallback","_closeChannels","maybeErr","hb","checkSend","checkRecv","hberr","sendHeartbeat","nextClearBit","hwm","highWaterMark","writeBuffer","objectMode","pipeFrom","go","recvFrame","recv","HEARTBEAT_BUF","encodeMethod","encodeProperties","Properties","mframe","pframe","methodHeaderLen","bodyLen","FRAME_OVERHEAD","allLen","makeBodyFrame","both","writeResult","maxBody","bodyFrame","parseFrame","decodeFrame","CONNECTION_FORCED","incoming","codec","amqplain","LOGIN","PASSWORD","external","SCRATCH","FRAME_METHOD","FRAME_HEADER","FRAME_BODY","FRAME_HEARTBEAT","FRAME_END","CONTENT_TOO_LARGE","NO_ROUTE","NO_CONSUMERS","ACCESS_REFUSED","RESOURCE_LOCKED","PRECONDITION_FAILED","INVALID_PATH","FRAME_ERROR","SYNTAX_ERROR","COMMAND_INVALID","RESOURCE_ERROR","NOT_ALLOWED","constant_strs","versionMajor","versionMinor","locales","decodeConnectionStart","decodeConnectionStartOk","challenge","decodeConnectionSecure","decodeConnectionSecureOk","readUInt16BE","decodeConnectionTune","decodeConnectionTuneOk","virtualHost","insist","decodeConnectionOpen","knownHosts","decodeConnectionOpenOk","decodeConnectionClose","decodeConnectionBlocked","decodeChannelOpen","channelId","decodeChannelOpenOk","decodeChannelFlow","decodeChannelFlowOk","decodeChannelClose","realm","decodeAccessRequest","decodeAccessRequestOk","decodeExchangeDeclare","decodeExchangeDelete","decodeExchangeBind","decodeExchangeUnbind","decodeQueueDeclare","messageCount","consumerCount","decodeQueueDeclareOk","decodeQueueBind","decodeQueuePurge","decodeQueuePurgeOk","decodeQueueDelete","decodeQueueDeleteOk","decodeQueueUnbind","decodeBasicQos","decodeBasicConsume","decodeBasicConsumeOk","decodeBasicCancel","decodeBasicCancelOk","decodeBasicPublish","decodeBasicReturn","redelivered","decodeBasicDeliver","decodeBasicGet","decodeBasicGetOk","decodeBasicGetEmpty","decodeBasicAck","decodeBasicReject","decodeBasicRecoverAsync","decodeBasicRecover","decodeBasicNack","decodeConfirmSelect","flags","decodeBasicProperties","varyingSize","scratchOffset","serverProperties_encoded","writeUInt16BE","encodeConnectionStart","clientProperties_encoded","mechanism_len","locale_len","encodeConnectionStartOk","encodeConnectionSecure","encodeConnectionSecureOk","encodeConnectionTune","encodeConnectionTuneOk","virtualHost_len","capabilities_len","encodeConnectionOpen","knownHosts_len","encodeConnectionOpenOk","replyText_len","encodeConnectionClose","encodeConnectionCloseOk","reason_len","encodeConnectionBlocked","encodeConnectionUnblocked","outOfBand_len","encodeChannelOpen","encodeChannelOpenOk","encodeChannelFlow","encodeChannelFlowOk","encodeChannelClose","encodeChannelCloseOk","realm_len","encodeAccessRequest","encodeAccessRequestOk","exchange_len","type_len","arguments_encoded","encodeExchangeDeclare","encodeExchangeDeclareOk","encodeExchangeDelete","encodeExchangeDeleteOk","destination_len","source_len","routingKey_len","encodeExchangeBind","encodeExchangeBindOk","encodeExchangeUnbind","encodeExchangeUnbindOk","queue_len","encodeQueueDeclare","encodeQueueDeclareOk","encodeQueueBind","encodeQueueBindOk","encodeQueuePurge","encodeQueuePurgeOk","encodeQueueDelete","encodeQueueDeleteOk","encodeQueueUnbind","encodeQueueUnbindOk","encodeBasicQos","encodeBasicQosOk","consumerTag_len","encodeBasicConsume","encodeBasicConsumeOk","encodeBasicCancel","encodeBasicCancelOk","encodeBasicPublish","encodeBasicReturn","encodeBasicDeliver","encodeBasicGet","encodeBasicGetOk","clusterId_len","encodeBasicGetEmpty","encodeBasicAck","encodeBasicReject","encodeBasicRecoverAsync","encodeBasicRecover","encodeBasicRecoverOk","encodeBasicNack","encodeTxSelect","encodeTxSelectOk","encodeTxCommit","encodeTxCommitOk","encodeTxRollback","encodeTxRollbackOk","encodeConfirmSelect","encodeConfirmSelectOk","contentType_len","contentEncoding_len","headers_encoded","correlationId_len","replyTo_len","expiration_len","messageId_len","userId_len","appId_len","encodeBasicProperties","methodInfoConnectionStart","methodInfoConnectionStartOk","methodInfoConnectionSecure","methodInfoConnectionSecureOk","methodInfoConnectionTune","methodInfoConnectionTuneOk","methodInfoConnectionOpen","methodInfoConnectionOpenOk","methodInfoConnectionClose","methodInfoConnectionCloseOk","methodInfoConnectionBlocked","methodInfoConnectionUnblocked","methodInfoChannelOpen","methodInfoChannelOpenOk","methodInfoChannelFlow","methodInfoChannelFlowOk","methodInfoChannelClose","methodInfoChannelCloseOk","methodInfoAccessRequest","methodInfoAccessRequestOk","methodInfoExchangeDeclare","methodInfoExchangeDeclareOk","methodInfoExchangeDelete","methodInfoExchangeDeleteOk","methodInfoExchangeBind","methodInfoExchangeBindOk","methodInfoExchangeUnbind","methodInfoExchangeUnbindOk","methodInfoQueueDeclare","methodInfoQueueDeclareOk","methodInfoQueueBind","methodInfoQueueBindOk","methodInfoQueuePurge","methodInfoQueuePurgeOk","methodInfoQueueDelete","methodInfoQueueDeleteOk","methodInfoQueueUnbind","methodInfoQueueUnbindOk","methodInfoBasicQos","methodInfoBasicQosOk","methodInfoBasicConsume","methodInfoBasicConsumeOk","methodInfoBasicCancel","methodInfoBasicCancelOk","methodInfoBasicPublish","methodInfoBasicReturn","methodInfoBasicDeliver","methodInfoBasicGet","methodInfoBasicGetOk","methodInfoBasicGetEmpty","methodInfoBasicAck","methodInfoBasicReject","methodInfoBasicRecoverAsync","methodInfoBasicRecover","methodInfoBasicRecoverOk","methodInfoBasicNack","methodInfoTxSelect","methodInfoTxSelectOk","methodInfoTxCommit","methodInfoTxCommitOk","methodInfoTxRollback","methodInfoTxRollbackOk","methodInfoConfirmSelect","methodInfoConfirmSelectOk","propertiesInfoBasicProperties","ConnectionSecureOk","ChannelFlow","ChannelFlowOk","AccessRequest","AccessRequestOk","BasicRecoverAsync","TxSelect","TxSelectOk","TxCommit","TxCommitOk","TxRollback","TxRollbackOk","trimStack","stackAtStateChange","closeMessage","showFields","Bits","bodyCons","builder","frameHeaderPattern","matcher","bin","fh","headerPattern","methodPattern","idAndArgs","flagsAndfields","intervalMs","beat","sendTimer","runHeartbeat","recvMissed","recvTimer","fail","schedule","setImmediate","nextTick","downstream","newStreams","oldStreams","blocked","scheduledRead","_readIncoming","accepting","roundrobin","streams","_scheduleRead","readable","cleanup","cleanupIfMe","unpipeFrom","asn1","bignum","define","decoders","encoders","Entity","_createNamed","Generated","entity","_initNamed","_getDecoder","_getEncoder","reporter","Reporter","DecoderBuffer","EncoderBuffer","isEncoderBuffer","isDecoderBuffer","save","restore","skip","_reporterState","Node","tags","methods","_baseState","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","_wrap","stateProps","cstate","_useArgs","newKey","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","some","_createEncoderBuffer","_encodeValue","_skipDefault","_encodeChoice","_encodePrimitive","cls","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","ReporterError","rethrow","pathLen","prev","inherited","elem","partial","captureStackTrace","reverse","tagClass","tagClassByName","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","unused","numstr","printstr","relative","identifiers","ident","subident","first","mon","sec","UTC","pem","PEMDecoder","re","base64","DEREncoder","encodedTag","encodeTag","lenOctets","objid","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","dataBuffer","defaultBuffer","PEMEncoder","endian","isBN","parseHex4Bits","parseHexByte","lowerBound","parseBase","_initNumber","_initArray","_parseHex","_parseBase","limbLen","limbPow","imuln","_iaddn","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","carry","ncarry","rword","maxJ","groupSize","groupBase","idivn","ret","toArrayLike","ArrayType","reqLength","littleEndian","clz32","_countBits","_zeroBits","zeroBits","inotn","testn","notn","iuor","uor","iuand","iand","uand","iuxor","ixor","uxor","bytesNeeded","bitsLeft","setn","wbit","isub","comb10MulTo","al0","ah0","al1","ah1","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","bl0","bh0","bl1","bh1","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","rtwdf","itwdf","rtwdf_","itwdf_","ie","io","guessLen13b","normalize13b","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","isqr","toBitArray","iushln","carryMask","newCarry","ishln","hint","extended","maskedWords","ishrn","ushln","imaskn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","qj","divmod","positive","divn","dm","half","r2","egcd","A","B","D","yp","xp","im","jm","gcd","_invmp","bincn","ucmp","gtn","gten","ltn","lten","eqn","Red","ctx","convertTo","_forceRed","convertFrom","redShl","shl","_verify2","redIMul","_verify1","redISqr","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","_prime","Mont","imod","rinv","minv","ireduce","imulK","_strip","mod3","nOne","lpow","inv","currentLen","newInvalidAsn1Error","ASN1","_buf","_size","_len","readByte","peek","readLength","lenB","readSequence","readInt","_readTag","Integer","readBoolean","Boolean","readEnumeration","Enumeration","readString","retbuf","OctetString","readOID","OID","byte","fb","EOC","BitString","Null","ObjectDescriptor","External","Real","PDV","Utf8String","RelativeOID","Sequence","NumericString","PrintableString","T61String","VideotexString","IA5String","UTCTime","GeneralizedTime","GraphicString","VisibleString","GeneralString","UniversalString","CharacterString","BMPString","Constructor","Context","DEFAULT_OPTS","growthFactor","getOwnPropertyNames","_options","_seq","writeByte","_ensure","writeInt","writeNull","writeEnumeration","writeBoolean","writeString","writeLength","writeStringArray","writeOID","octet","encodeOctet","startSequence","endSequence","_shift","Ber","BerReader","BerWriter","Stream","UUID_REGEXP","_capitalize","_toss","oper","actual","AssertionError","operator","stackStartFunction","caller","_getClass","bool","finite","regexp","_setExports","ndebug","NODE_NDEBUG","_typeof","isDeepEqual","isDeepStrictEqual","_require$codes","codes","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_TYPE","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","ERR_MISSING_ARGS","_require$types","isPromise","isRegExp","objectAssign","objectIs","is","lazyLoadComparison","comparison","warned","NO_EXCEPTION_SENTINEL","innerFail","innerOk","argLen","generatedMessage","stackStartFn","_key","internalMessage","argsLen","emitWarning","errArgs","notEqual","deepEqual","notDeepEqual","deepStrictEqual","notDeepStrictEqual","strictEqual","notStrictEqual","Comparison","_classCallCheck","compareExceptionKey","expectedException","isPrototypeOf","getActual","checkIsPromise","waitForActual","promiseFn","resultPromise","expectsError","details","fnType","expectsNoError","strict","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp1","_defineProperties","descriptor","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","_getPrototypeOf","_setPrototypeOf","sham","endsWith","this_len","blue","green","white","kReadableOperator","strictEqualObject","notStrictEqualObject","notIdentical","copyError","inspectValue","customInspect","maxArrayLength","showHidden","breakLength","showProxy","sorted","getters","createErrDiff","lastPos","skipped","actualInspected","actualLines","expectedLines","indicator","inputLength","stderr","isTTY","columns","maxCount","maxLines","_actualLines","printedLines","skippedMsg","cur","expectedLine","actualLine","divergingLines","_Error","stackTraceLimit","getColorDepth","_res","knownOperators","protoProps","staticProps","subClass","superClass","_inherits","recurseTimes","_objectSpread","createErrorType","NodeError","_Base","arg1","arg2","arg3","getMessage","thing","determiner","inspected","RangeError","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","regexFlagsSupported","arrayFromSet","arrayFromMap","objectGetOwnPropertySymbols","numberIsNaN","uncurryThis","propertyIsEnumerable","objectToString","isAnyArrayBuffer","isArrayBufferView","isDate","isMap","isSet","isNativeError","isBoxedPrimitive","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isFloat32Array","isFloat64Array","isNonIndex","getOwnNonIndexProperties","compare","innerDeepEqual","val1","val2","memos","buf1","buf2","val1Tag","keys1","keys2","keyCheck","getTime","areSimilarTypedArrays","areSimilarFloatArrays","_keys","_keys2","valueOf","isEqualBoxedPrimitive","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","val2MemoA","val2MemoB","areEq","objEquiv","setHasEqualElement","memo","findLooseMatchingPrimitives","prim","setMightHaveLoosePrim","altValue","mapMightHaveLoosePrim","curB","mapHasEqualEntry","key1","item1","key2","aValues","bValues","_val","setEquiv","aEntries","_aEntries$i","item2","bEntries","_i2","_bEntries$_i","mapEquiv","keysA","crypto","authorization","hmacSha1","createHmac","secret","stringToSign","amazonHeaders","verb","md5","toUTCString","resource","queryStringToSign","signQuery","canonicalizeHeaders","field","canonicalizeResource","aws4","querystring","credentialsCache","lru","hmac","createHash","encodeRfc3986","urlEncodedString","encodeRfc3986Full","HEADERS_TO_IGNORE","RequestSigner","hostParts","service","region","matchHost","Host","defaultCredentials","createHost","isCodeCommitGit","isSingleRegion","prepareRequest","parsePath","sessionToken","datetime","getDateTime","accessKeyId","credentialString","signedHeaders","doNotModifyHeaders","Authorization","authHeader","formatPath","toISOString","getDate","kDate","kRegion","kService","secretAccessKey","kCredentials","canonicalString","bodyHash","pathStr","queryStr","normalizePath","decodePath","doNotEncodePath","decodeSlashesInPath","firstValOnly","reducedQuery","encodedQueryPieces","piece","canonicalHeaders","env","AWS_ACCESS_KEY_ID","AWS_ACCESS_KEY","AWS_SECRET_ACCESS_KEY","AWS_SECRET_KEY","AWS_SESSION_TOKEN","decodeURI","queryIx","LruCache","capacity","DoublyLinkedList","firstNode","lastNode","DoublyLinkedNode","used","prune","moveToFront","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","transitionalDefaults","AxiosError","CanceledError","parseProtocol","onCanceled","requestData","requestHeaders","cancelToken","signal","isFormData","isStandardBrowserEnv","XMLHttpRequest","auth","btoa","baseURL","onloadend","responseHeaders","getAllResponseHeaders","responseText","paramsSerializer","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","ETIMEDOUT","xsrfValue","xsrfCookieName","xsrfHeaderName","isUndefined","onDownloadProgress","onUploadProgress","abort","aborted","ERR_BAD_REQUEST","Axios","mergeConfig","axios","createInstance","defaultConfig","extend","instanceConfig","CancelToken","isCancel","VERSION","toFormData","Cancel","spread","isAxiosError","executor","resolvePromise","onfulfilled","_resolve","throwIfRequested","ERR_CANCELED","__CANCEL__","InterceptorManager","dispatchRequest","validator","validators","interceptors","configOrUrl","assertOptions","silentJSONParsing","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","fulfilled","rejected","responseInterceptorChain","chain","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","fileName","lineNumber","columnNumber","descriptors","customProps","axiosError","toFlatObject","eject","isAbsoluteURL","combineURLs","requestedURL","transformData","throwIfCancellationRequested","transformRequest","adapter","transformResponse","config1","config2","getMergedValue","isPlainObject","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","validateStatus","ERR_BAD_RESPONSE","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","isArrayBuffer","isStream","isFile","isBlob","isURLSearchParams","isFileList","isObjectPayload","isObject","_FormData","FormData","rawValue","encoder","isString","stringifySafely","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","serializedParams","hashmarkIndex","relativeURL","secure","cookie","toGMTString","originURL","msie","urlParsingNode","createElement","requestURL","normalizedName","ignoreDuplicateOf","formData","convertValue","build","parentKey","fullKey","append","deprecatedWarnings","opt","desc","ERR_DEPRECATED","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","kindOf","kindOfTest","isFunction","pipe","product","assignValue","stripBOM","superConstructor","sourceObj","destObj","searchString","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","crypto_hash_sha512","BLF_J","Blowfish","P","F","x8","stream2word","databytes","encipher","decipher","expand0state","keybytes","d8","expandstate","blocks","dec","bcrypt_hash","sha2pass","sha2salt","cdata","BLOCKS","HASHSIZE","pbkdf","passlen","saltlen","keylen","amt","tmpout","countsalt","origkeylen","ALPHABET","ALPHABET_MAP","polymodStep","prefixChk","chk","__decode","LIMIT","lowered","uppered","wordChars","inBits","outBits","maxV","decodeUnsafe","toWordsUnsafe","toWords","fromWordsUnsafe","fromWords","$","interp","parse_int","parse_float","write_int","write_float","$start","$line","$result","bits_expr","var_name","match_seg","skip_bits","bigendian","sg","get_number","get_binary","strlen","get_string","compile_pattern","varnames","names","variables","write_seg","write_number","compile_ctor","variable","fixed","size_of","emit_write","compile_builder","writeBinary","writeInteger","writeFloat","bufsize","size_of_segment","writeUInt16LE","writeUInt32LE","writeUInt64LE","writeFloatLE","writeDoubleLE","pstr","sizeInBytes","readInt16LE","readUInt16LE","readInt32LE","readUInt32LE","readInt64LE","readUInt64LE","readFloatLE","readDoubleLE","bound","binary","boundvars","new_scope","binsize","get_integer","bitsize","byteoffset","get_float","patternlen","ast","parse_pattern","specifiers","quote","startRule","parseFunctions","result0","result1","result2","result3","pos0","pos1","parse_ws","parse_segment","parse_segmentTail","head","tail","parse_string","parse_chars","parse_char","parse_hexDigit","parse_identifier","parse_number","parse_size","parse_specifierList","parse_specifierTail","parse_specifier","parse_unit","rightmostFailuresPos","rightmostFailuresExpected","matchFailed","failure","specs","result4","h1","h4","found","errorPosition","column","seenCR","computeErrorPosition","SyntaxError","lastExpected","cleanExpected","cleanupExpected","toSource","_source","expectedHumanized","buildMessage","specifiers0","type_in","TYPES","signed_in","endian_in","unit_in","_dereq_","SomePromiseArray","_SomePromiseArray","setHowMany","setUnwrap","firstLineError","Queue","Async","_customScheduler","_isTickUsed","_lateQueue","_normalQueue","_haveDrainedQueues","drainQueues","_drainQueues","_schedule","_drainQueue","_drainQueueStep","_settlePromises","receiver","setScheduler","hasCustomScheduler","haveItemsQueued","fatalError","isNode","exit","throwLater","invokeLater","_queueTick","invoke","settlePromises","_pushOne","_reset","INTERNAL","tryConvertToPromise","calledBind","rejectThis","_reject","targetRejected","promiseRejectionQueued","bindingPromise","_then","bindingResolved","_bitField","_resolveCallback","bindingRejected","_propagateFrom","propagateFromFunction","_boundValue","boundValueFunction","maybePromise","_setBoundTo","_setOnCancel","_boundTo","_isBound","old","bluebird","noConflict","cr","callerCache","getterCache","canEvaluate","classString","ensureMethod","namedGetter","indexedGetter","isIdentifier","getter","maybeGetter","getGetter","PromiseArray","apiRejection","tryCatch","errorObj","_async","cancellation","_warn","_isCancellable","_cancelBy","_isFollowing","_followee","_cancelBranched","_cancellationParent","_setWillBeCancelled","_branchHasCancelled","_branchesRemainingToCancel","_enoughBranchesHaveCancelled","canceller","_invokeOnCancel","_cancel","_setCancelled","_cancelPromises","_length","_unsetOnCancel","_onCancelField","isPending","_isCancelled","isCancellable","isCancelled","_doInvokeOnCancel","onCancelCallback","internalOnly","_attachExtraTrace","_resultCancelled","_onCancel","_invokeInternalOnCancel","NEXT_FILTER","getKeys","instances","boundTo","predicateLoop","matchesPredicate","longStackTraces","contextStack","_trace","CapturedTrace","peekContext","_promiseCreated","_pushContext","_popContext","_peekContext","deactivateLongStackTraces","activateLongStackTraces","Promise_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","enableAsyncHooks","disableAsyncHooks","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","deferUnhandledRejectionCheck","Warning","es5","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","warnings","wForgottenReturn","unhandledRejectionCheck","_notifyUnhandledRejection","unhandledRejectionClear","suppressUnhandledRejections","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejectionIsHandled","fireRejectionEvent","_setReturnedNonUndefined","_returnedNonUndefined","_isRejectionUnhandled","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_unsetRejectionIsUnhandled","shouldUseOwnTrace","onPossiblyUnhandledRejection","_getContext","contextBind","onUnhandledRejectionHandled","disableLongStackTraces","longStackTracesIsSupported","Promise_captureStackTrace","_captureStackTrace","Promise_attachExtraTrace","Promise_dereferenceTrace","_dereferenceTrace","longStackTracesCaptureStackTrace","longStackTracesAttachExtraTrace","longStackTracesDereferenceTrace","hasLongStackTraces","legacyHandlers","unhandledrejection","before","onunhandledrejection","after","rejectionhandled","onrejectionhandled","fireDomEvent","dispatch","legacy","domEvent","cancelable","Event","createEvent","initCustomEvent","fireGlobalEvent","generatePromiseLifecycleEventObject","eventToObjectGenerator","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","unhandledRejection","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","defaultFireEvent","cancellationExecute","onCancel","_attachCancellationCallback","cancellationAttachCancellationCallback","previousOnCancel","cancellationOnCancel","cancellationSetOnCancel","cancellationClearCancellationData","cancellationPropagateFrom","branchesRemainingToCancel","warningsOption","_clearCancellationData","_execute","monitoring","_fireEvent","nodeSupportsAsyncResource","asyncHooks","isFulfilled","ignoreSelf","_parent","attachExtraTrace","__stackCleaned__","parseStackAndMessage","notEnumerableProp","formatAndLogError","cleanStack","isTraceLine","isInternalFrame","shouldIgnore","stackFramesAsArray","title","isSoft","localHandler","localEventFired","formatNonError","maxChars","snip","parseLineInfoRegex","parseLineInfo","_promisesCreated","uncycle","stackToIndex","cycleEdgeNode","currentChildLength","stacks","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","removeDuplicateOrEmptyJumps","reconstructStack","v8stackFramePattern","v8stackFormatter","ignoreUntil","hasStackAfterThrow","checkForgottenReturns","returnValue","handlerLine","creatorLine","traceLines","lineMatches","firstUserLine","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","deprecated","replacement","returner","thrower","thenReturn","thenThrow","catchThrow","_reason","caught","catchReturn","_value","PromiseReduce","PromiseAll","promiseAllThis","each","mapSeries","_TypeError","_RangeError","Objectfreeze","subError","nameProperty","defaultMessage","SubError","CancellationError","TimeoutError","AggregateError","OperationalError","cause","indent","errorTypes","RejectionError","isES5","getDescriptor","propertyIsWritable","proto","ObjectKeys","PromiseMap","catchFilter","PassThroughHandlerContext","called","cancelPromise","FinallyHandlerCancelReaction","finallyHandler","checkCancel","succeed","reasonOrValue","isFinallyHandler","isRejected","_passThrough","success","lastly","tap","tapCatch","handlerOrPredicate","catchInstances","Proxyable","yieldHandlers","PromiseSpawn","generatorFunction","yieldHandler","_finallyPromise","_promise","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_yieldedPromise","_cancellationPhase","_isResolved","_fulfill","_promiseCancelled","coroutine","returnSentinel","_continue","_promiseFulfilled","_promiseRejected","_run","_rejectCallback","traceParent","promiseFromYieldHandler","bitField","_proxy","PromiseSpawn$","spawn","addYieldHandler","last","MappingPromiseArray","_filter","constructor$","_callback","_preservedValues","_limit","_inFlight","_queue","_asyncInit","concurrency","_init$","_values","preservedValues","_totalResolved","booleans","_resolveFromSyncValue","attempt","maybeWrapAsError","rErrorKey","wrapAsOperationalError","isUntypedError","markAsOriginatingFromRejection","multiArgs","wrapped","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","makeSelfResolutionError","reflectHandler","PromiseInspection","UNDEFINED_BINDING","setReflectHandler","getDomain","getContextDomain","AsyncResource","getContextAsyncHooks","APPLY","createContext","nodebackForPromise","_fulfillmentHandler0","_rejectionHandler0","_promise0","_receiver0","_resolveFromExecutor","deferResolve","deferReject","fillTypes","reflect","didFulfill","didReject","_setIsFinal","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","fromNode","_isFateSealed","_setAsyncGuaranteed","cast","_setFulfilled","internalData","haveInternalData","settler","_settlePromiseCtx","_settlePromiseLateCancellationObserver","_addCallbacks","_setLength","_setRejected","_setFollowing","_isFinal","_unsetCancelled","_setNoAsyncGuarantee","_receiverAt","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallback0","follower","fulfill","_migrateCallbackAt","proxyable","shouldBind","_setFollowee","ignoreNonErrorWarnings","ensureErrorObject","hasStack","_settlePromiseFromHandler","_settlePromise","asyncGuaranteed","_settlePromise0","_clearCallbackDataAtIndex","_fulfillPromises","_rejectPromises","toStringTag","defer","toFastProperties","resolveValueIfEmpty","asArray","_iterate","_resolveEmptyArray","toResolutionValue","getActualLength","shouldCopyValues","isResolved","THIS","withAppended","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","suffix","getDataPropertyOrDefault","promisifiableMethods","suffixRegexp","inheritedDataKeys","passesDefaultFilter","keyWithoutAsyncSuffix","checkValid","makeNodePromisified","makeNodePromisifiedEval","__","defaultThis","promisified","promisifyAll","promisifier","promisifiedKey","promisify","copyDescriptors","isClass","Es6Map","mapToEntries","extractEntry","PropertiesPromiseArray","_isMap","castValue","entriesToMap","keyOffset","_capacity","_front","_willBeOverCapacity","_checkCapacity","wrapMask","front","_resizeTo","oldCapacity","srcIndex","dstIndex","arrayMove","race","ReductionPromiseArray","_each","_fn","_initialValue","_currentCancellable","_eachValues","completed","valueOrReason","gotAccum","_gotAccum","gotValue","_eachComplete","sender","_resultCancelled$","NativePromise","getNativePromise","MutationObserver","GlobalSetImmediate","ProcessNextTick","isRecentNode","nativePromise","standalone","cordova","toggleScheduled","div2","classList","toggle","observe","SettledPromiseArray","_promiseResolved","inspection","_settledValueField","allSettled","CANCELLATION","_howMany","_unwrap","_initialized","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","_addFulfilled","_fulfilled","_addRejected","_checkOutcome","_rejected","__isCancelled","hasProp","doGetThen","getThen","isAnyBluebirdPromise","doThenable","HandleWrapper","clearTimeout","afterValue","delay","ms","successClear","failureClear","handleWrapper","afterTimeout","NULL","resources","thenable","_isDisposable","_getDisposer","_setDisposable","castPreservingDisposable","tryDispose","Disposer","FunctionDisposer","maybeUnwrapDisposer","isDisposer","ResourceList","doDispose","_unsetDisposable","using","spreadArgs","disposer","reflectedResources","inspections","_disposer","tryCatchTarget","globalObject","tryCatcher","Child","T","isPrimitive","maybeError","safeToString","appendee","excludedPrototypes","isExcludedProto","visitedKeys","enumeration","thisAssignmentPattern","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","FakeConstructor","ic","foo","rident","filledRange","ArrayFrom","itResult","hasEnvVariables","runInAsyncScope","versions","supportsAsync","move","_move","for","modrn","allocUnsafe","_toArrayLikeLE","_toArrayLikeBE","isNegNum","Rand","_rand","getBytes","getByte","getRandomValues","msCrypto","randomBytes","asUInt32Array","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","x4","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","scrub","aes","Transform","GHASH","incr32","StreamCipher","_cipher","ck","_ghash","_finID","ghash","toPad","ivBits","writeUIntBE","calcIv","_prev","_secCache","_decrypt","_alen","_mode","_authTag","_called","rump","_final","final","xorTest","getAuthTag","setAuthTag","setAAD","ciphers","deciphers","modes","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","suite","flush","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","padBuff","ZEROES","_multiply","lsbVi","Vi","Zi","abl","bl","encryptStart","encryptByte","byteParam","shiftIn","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","instantiate","EDE","modeName","_des","des3","getr","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","qinv","coefficient","exponent1","m2","exponent2","algorithms","Sign","algorithm","Writable","_hashType","_hash","_tag","_signType","Verify","createSign","createVerify","parseKeys","getKey","algo","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","ecSign","priv_key","H","dsaSign","checkValue","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","montp","dsaVerify","padNum","objectKeys","Readable","allowHalfOpen","onend","_writableState","ended","onEndNT","getBuffer","_readableState","destroyed","_transform","ReadableState","EElistenerCount","emitter","OurUint8Array","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","er","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","pipeOpts","endFn","stdout","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","ondata","cleanedUp","needDrain","pipeOnDrain","pause","prependListener","_events","dests","asyncIterator","_fromList","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","needTransform","writeencoding","_flush","prefinish","err2","CorkedRequest","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_this2","_Object$create","hasStrings","_getString","_getBuffer","nb","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","setHeader","isRequest","destroyer","closed","popCallback","destroys","ERR_INVALID_OPT_VALUE","duplexKey","highWaterMarkFrom","pipeline","copyProps","SafeBuffer","encodingOrOffset","allocUnsafeSlow","SlowBuffer","isEncoding","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","utf8CheckExtraBytes","utf8CheckIncomplete","bufferEq","install","that","origBufEqual","origSlowBufEqual","SHIFT_LEFT_32","SHIFT_RIGHT_32","MAX_INT","isContiguousInt","check_value","check_bounds","assertContiguousInt","readUInt24BE","writeUInt24BE","readUInt40BE","writeUInt40BE","readUInt48BE","writeUInt48BE","readUInt56BE","writeUInt56BE","readUInt24LE","writeUInt24LE","readUInt40LE","writeUInt40LE","writeInt32LE","readUInt48LE","writeUInt48LE","readUInt56LE","writeUInt56LE","readInt24BE","writeInt24BE","readInt40BE","writeInt40BE","readInt48BE","writeInt48BE","readInt56BE","writeInt56BE","readInt24LE","writeInt24LE","readInt40LE","writeInt40LE","readInt48LE","writeInt48LE","writeInt16LE","readInt56LE","writeInt56LE","writeInt64LE","ieee754","customInspectSymbol","INSPECT_MAX_BYTES","K_MAX_LENGTH","arrayView","isInstance","fromArrayBuffer","fromArrayLike","fromArrayView","SharedArrayBuffer","checked","toPrimitive","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","foundIndex","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","poolSize","_isBuffer","swap16","swap32","swap64","toLocaleString","thisStart","thisEnd","thisCopy","targetCopy","hexSliceLookupTable","checkOffset","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","noAssert","writeDouble","newBuf","readUintLE","readUIntLE","readUintBE","readUIntBE","readUint8","readUint16LE","readUint16BE","readUint32LE","readUint32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readIntBE","readBigInt64LE","readBigInt64BE","writeUintLE","writeUIntLE","writeUintBE","writeUint8","writeUint16LE","writeUint16BE","writeUint32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","writeIntBE","writeBigInt64LE","writeBigInt64BE","copyWithin","E","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_BUFFER_OUT_OF_BOUNDS","received","INVALID_BASE64_RE","leadSurrogate","base64clean","alphabet","table","i16","BufferBigIntNotDefined","GetIntrinsic","callBind","$indexOf","allowMissing","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","applyBind","Caseless","dict","clobber","httpify","resp","hasHeader","getHeader","removeHeader","CentMethods","CentClient","cent_exception_1","cent_methods_enum_1","methodFactory","Publish","broadcast","Broadcast","Subscribe","Unsubscribe","Disconnect","refresh","Refresh","getPresence","Presence","getPresenceStats","PresenceStats","getHistory","History","removeHistory","HistoryRemove","getChannels","Channels","getInfo","Info","CentException","__createBinding","__esModule","__exportStar","factory","_errorTimeout","_errorConnectionClosed","Centrifuge","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","_protocol","_config","sockjs","xmlhttprequest","minRetry","maxRetry","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","_debug","ActiveXObject","headerName","WebSocket","_formatOverride","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","startsWith","_setFormat","SockJS","newStatus","backoff","xhrID","reconnect","_stopPing","errback","_createErrorObject","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","_this3","onheartbeat","_restartPing","subs","hasSubs","recoverable","epoch","_call","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","rejectCtx","_disconnect","closeEvent","needReconnect","advice","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","RPC","_methodCall","SEND","_transportSend","since","resultCB","_this4","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_this5","_dispatchSynchronized","_this6","_dispatchReply","_loop","_handleReply","_handlePush","_this7","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","_refreshFailed","clientID","_newXHRID","_this8","jitter","REFRESH","_refreshResponse","_refreshError","_ajax","_this9","client","_this10","_getTTLMilliseconds","ttl","_this11","channelsData","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_this12","_subRefresh","_this13","isResubscribe","SUBSCRIBE","_subscribeData","startSubscribeBatching","_subscribe","stopSubscribeBatching","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_this14","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","isRecover","wasReconnecting","_resetRetry","_this15","startBatching","stopBatching","_startPing","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_this16","_isSubscribing","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","_this17","errorExists","_isServerSub","leave","unsub","resubscribe","decodePush","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","_handleUnsub","_handleSub","PING","_this18","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","_this19","_nextMessageId","_isConnected","_ping","authChannels","_this20","batch","_setNeedRecover","currentSub","_setEvents","_isUnsubscribed","Subscription","methodType","pushType","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","errContext","knownEvents","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_setSubscribeSince","_setSubscribeData","_unsubscribe","_isError","_nextPromiseId","presenceStats","history","ReflectOwnKeys","R","ReflectApply","NumberIsNaN","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","existing","ProcessEmitWarning","onceWrapper","_onceWrap","fired","wrapFn","unwrap","unwrapListeners","arrayClone","setMaxListeners","getMaxListeners","doError","prependOnceListener","originalListener","spliceOne","rawListeners","eventNames","__webpack_module_cache__","moduleId","__webpack_modules__","__webpack_require__","hashMode","_finalOrDigest","__final","_encoding","inputEnc","outputEnc","outData","_toString","fin","DelayedStream","CombinedStream","dataSize","maxDataSize","pauseStreams","_released","_streams","_currentStream","_insideLoop","_pendingNext","combinedStream","option","isStreamLike","newStream","pauseStream","_checkDataSize","_handleErrors","_getNext","_realGetNext","_pipeNext","_emitError","_updateDataSize","isBoolean","isNull","isNullOrUndefined","isSymbol","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","formatReturnValue","bn","p256","secp256r1","secp192r1","p384","p521","generateKeys","getPublicKey","computeSecret","inenc","getPrivateKey","setPublicKey","setPrivateKey","_priv","MD5","RIPEMD160","sha","Hash","alg","Legacy","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","formatArgs","useColors","namespace","humanize","lastC","namespaces","removeItem","WebkitAppearance","firebug","exception","$1","chrome","local","localStorage","localstorage","colors","formatters","createDebug","curr","formatter","logFn","selectColor","skips","hasSymbols","toStr","origDefineProperty","hasPropertyDescriptors","supportsDescriptors","predicate","predicates","_maxDataSizeExceeded","_bufferedEvents","delayedStream","realEmit","_handleEmit","release","_checkIfMaxDataSizeExceeded","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","expand","substitute","rip","EDEState","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","permuteTable","padSplit","generatePrime","DH","ENCODINGS","genc","millerRabin","TWENTYFOUR","ELEVEN","TEN","SEVEN","_pub","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","rem","simpleSieve","fermatTest","checkPrime","__gen","_gen","getPrime","getGenerator","findPrime","FIVE","FOUR","_getPrimes","BigInteger","unstupid","ECCurves","ECKey","isPublic","getN","decodePointHex","n1","subtract","getG","PublicKey","encodeCompressedPointHex","PrivateKey","deriveSharedSecret","toBigInteger","Barrett","ECFieldElementFp","ECPointFp","ECCurveFp","fromBigInteger","infinity","reducer","square","divide","modInverse","ZERO","twice","getInfinity","v3","x1v2","zu2","x3","shiftLeft","y3","signum","y1z1","y1sqz1","hBit","testBit","multiplyTwo","getQ","getA","getB","encodePointHex","xHex","yHex","oLen","yIsEven","betaValue","getR","shiftRight","intValue","modMult","modReduce","qLen","compareTo","modPow","qMinusOne","legendreExponent","U","fourQ","modDouble","SecureRandom","lucasSequence","getLowestSetBit","Uh","Vl","Vh","Ql","Qh","X9ECParameters","fromHex","secp128r1","secp160k1","secp160r1","secp192k1","getH","getParamBytesForAlg","MAX_OCTET","signatureAsBuffer","countPadding","derToJose","paramBytes","maxEncodedParamLength","TAG_SEQ","seqLength","TAG_INT","rLength","rOffset","sLength","sOffset","rPadding","sPadding","joseToDer","signatureBytes","rsBytes","shortLength","getParamSize","paramBytesForAlg","ES256","ES384","ES512","EdwardsCurve","twisted","mOneA","dd","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","MontCurve","aa","bb","diffAdd","da","jumlAdd","sha256","sha384","sha512","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","firstSource","nextSource","keysArray","nextIndex","nextKey","polyfill","hashConstructor","createKeccakHash","hash_utils_1","randombytes","random_1","pk","_a","secp256k1_1","__export","bignumber_1","AddressZero","HashZero","EtherSymbol","bigNumberify","_version_1","checkNew","setCensorship","setLogLevel","__extends","extendStatics","__importStar","constants_1","address_1","bytes_1","utf8_1","properties_1","defaultCoerceFunc","parseParam","formatParamType","getParamCoder","formatSignature","parseSignature","parseSignatureEvent","parseSignatureFunction","CoderAnonymous","_super","CoderNull","CoderNumber","padZeros","coderType","junkLength","uint256Coder","CoderBoolean","CoderFixedBytes","CoderAddress","_encodeDynamicBytes","dataLength","_decodeDynamicBytes","CoderDynamicBytes","CoderString","alignSize","staticSize","dynamicSize","CoderArray","decodedLength","CoderTuple","paramTypeSimple","getTupleParamCoder","typeObject","__importDefault","bn_js_1","keccak256_1","rlp_1","i_1","initCode","BN_1","_bnify","setType","outputValue","isArrayish","isType","arrays","operartion","Zeros","Partition","UseSTD3ASCIIRules","namehash","partition","hashMessage","abi_coder_1","hash_1","_Indexed","_DeployDescription","_FunctionDescription","errorArg","errorValue","Result","_EventDescription","encodeTopics","inputIndexed","inputNonIndexed","inputDynamic","_TransactionDescription","_LogDescription","addMethod","deployFunction","isConst","_abi","isInterface","isIndexed","keccak_256","_ethersType","frozen","inheritable","errors_1","ignoreErrors","formatBytes32String","parseBytes32String","JS_SHA3_NO_NODE_JS","COMMON_JS","JS_SHA3_NO_COMMON_JS","HEX_CHARS","SHIFT","RC","BITS","OUTPUT_TYPES","createOutputMethod","outputType","Keccak","createShakeOutputMethod","outputBits","createMethod","methodNames","blockCount","byteCount","outputBlocks","notString","lastByteIndex","finalize","c0","c4","c5","c6","c7","c9","b10","b15","b16","b17","b18","b19","b20","b25","b26","b27","b28","b29","b30","b35","b36","b37","b38","b39","b40","b45","b46","b47","b48","b49","FunctionDecoder","iface","fnName","fnInfo","decodeFn","raw_params","decodeFnFromTx","raw_tx","decoded_tx","raw_nonce","raw_gasPrice","raw_gasLimit","raw_to","raw_value","raw_data","raw_v","raw_r","raw_s","ABI","elementaryName","parseTypeN","parseTypeNxM","parseTypeArray","parseNumber","isHexPrefixed","stripHexPrefix","retargs","encodeSingle","setLengthRight","decodeSingle","parsedType","parseType","rawType","subArray","memoryUsage","isDynamic","eventID","methodID","rawEncode","headLength","rawDecode","simpleEncode","simpleDecode","solidityHexValue","subType","arraySize","bytesize","setLengthLeft","solidityPack","soliditySHA256","solidityRIPEMD160","ripemd160","fromSerpent","toSerpent","ethjsUtil","eip1191ChainId","nonceBN","fromBuf","saltBuf","initCodeBuf","privateKeyVerify","sanitize","publicKeyVerify","pubKey","publicKeyConvert","publicKeyCreate","padToEven","intToBuffer","ba","keccak224","keccak384","keccak512","rlp","_fields","obj_1","setter","allowZero","allowLess","alias","keys_1","secp256k1v3","privateKeyExport","privateKeyImport","privateKeyNegate","privateKeyModInverse","tweak","privateKeyTweakAdd","privateKeyTweakMul","publicKeyTweakAdd","publicKeyTweakMul","publicKeys","publicKeyCombine","signatureNormalize","signatureExport","signatureImport","sigObj","signatureImportLax","signOptions","noncefn","bufferAlgo","ecdsaSign","recovery","ecdsaVerify","ecdsaRecover","ecdh","ecdhUnsafe","EC_PRIVKEY_EXPORT_DER_COMPRESSED","EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED","lenb","lenbyte","rindex","sindex","rvalue","svalue","ecparams","toPublicKey","shared","calculateSigRecovery","isValidSigRecovery","msgHash","senderPubKey","homesteadOrLater","SECP256K1_N_DIV_2","SECP256K1_N","rBN","sBN","balance","stateRoot","codeHash","externals_1","Account","accountData","serialized","fromValuesArray","bnToUnpaddedBuffer","hexAddress","assertIsString","assertIsHexString","toType","keccakFromString","isValidAddress","toChecksumAddress","assertIsBuffer","rlphash","keccak","publicToAddress","privateToPublic","bufferToHex","zeroAddress","Address","pubToAddress","privateToAddress","generateAddress","generateAddress2","addressBN","rangeMin","rangeMax","isSafeInteger","intToHex","setLength","assertIsArray","baToJSON","_c","arrToBufArr","bufArrToArr","buffer_1","_sha256","_ripemd160","getBinarySize","arrayContainsArray","toAscii","fromUtf8","fromAscii","superset","subset","stringValue","allowEmpty","unpadBuffer","vBN","chainIdBN","vn","ss","bufferToInt","TypeOutput","getMultiplier","formatFixed","multiplier","fraction","whole","parseFixed","wholeValue","fractionValue","wei","FixedFormat","_multiplier","FixedNumber","_isFixedNumber","_checkFormat","fromValue","hasFraction","subUnsafe","toFormat","addUnsafe","bump","BUMP","mulUnsafe","divUnsafe","fixedFormat","decimal","hexTrue","hexFalse","domainFieldTypes","domainFieldNames","checkString","domainChecks","getBaseEncoder","boundsUpper","boundsLower","padOffset","hexPadRight","encodeType","SupportedAlgorithm","TypedDataEncoder","links","parents","subtypes","primaryTypes","checkCircular","subtype","st","_types","_encoderCache","subEncoder","getEncoder","encodedType","encodeData","hashStruct","_visit","domainFields","hashDomain","ensCache","visit","domainValues","domainTypes","typesWithDomain","BaseX","_alphabetMap","_leader","Base58","computeHmac","iterations","hashAlgorithm","hLen","DK","block1","destPos","Wordlist","mnemonic","wordlist","getWord","getWordIndex","lang","loadWords","langEn","LangEn","wordlists","en","MasterSecret","HardenedBit","getUpperMask","bytes32","base58check","getWordlist","defaultPath","HDNode","parentFingerprint","chainCode","mnemonicOrPath","compressedPublicKey","IL","IR","ki","Ki","_addPoint","srcMnemonic","phrase","fingerprint","_derive","seedArray","entropyToMnemonic","mnemonicToEntropy","_fromSeed","mnemonicToSeed","extendedKey","entropyBits","checksumMask","remainingBits","checksumBits","isValidMnemonic","getAccountPath","anyGlobal","getGlobal","looseArrayify","hexString","zpad","getPassword","searchPath","currentChild","matchingChild","uuidV4","hasMnemonic","KeystoreAccount","_isKeystoreAccount","_getAccount","aesCtr","mnemonicKey","mnemonicCiphertext","mnemonicIv","mnemonicCounter","mnemonicAesCtr","fromMnemonic","derivePath","passwordBytes","dkLen","prfFunc","_pbkdf2","_computeKdfKey","pbkdf2Func","scryptFunc","progressCallback","kdf","prf","CrowdsaleAccount","_isCrowdsaleAccount","ethaddr","encseed","encryptedSeed","aesCbc","seedHex","seedHexBytes","isCrowdsaleWallet","isKeystoreWallet","getJsonWalletAddress","decryptJsonWallet","decryptCrowdsale","scrypt","decryptKeystore","decryptJsonWalletSync","decryptKeystoreSync","Wallet","_mnemonic","_signingKey","signDigest","_TypedDataEncoder","populated","uuidRandom","derivedKey","macPrefix","mac","cipher","cipherparams","kdfparams","dklen","gethFilename","encryptKeystore","extraEntropy","verifyMessage","verifyTypedData","ethDefaultProvider","providerList","InfuraProvider","infura","EtherscanProvider","etherscan","AlchemyProvider","alchemy","PocketProvider","pocket","CloudflareProvider","cloudflare","AnkrProvider","ankr","FallbackProvider","quorum","renetwork","etcDefaultProvider","homestead","ensAddress","_defaultProvider","ropsten","classicMordor","networks","unspecified","mainnet","morden","testnet","rinkeby","kovan","goerli","kintsugi","sepolia","classic","classicMorden","classicTestnet","classicKotti","xdai","matic","maticmum","optimism","arbitrum","bnb","bnbt","defaultProvider","textData","atob","flat","flatDeep","read_compressed_payload","read_payload","u16","symbol_count","pos_payload","read_width","read_buffer","read_bit","FULL","HALF","QRTR","MASK","decode_arithmetic","read_ascending","read_deltas","read_member_array","vX","vN","read_counts","read_transposed","read_linear_table","read_zero_terminated_array","ys","j_dy","read_replacement_table","VALID","IGNORED","MAPPED","fromEntries","read_mapped_map","EMOJI_ROOT","branches","fe0f","read_emoji_trie","explode_cp","filter_fe0f","cps","cp","ens_normalize_post_check","ens_normalize","emoji_filter","emoji","consume_emoji_reversed","fromCodePoint","eaten","saved","find","checkComponent","ensNameSplit","isValidName","dnsEncode","getUrl","skipFetchSetup","redirect","referrer","statusCode","staller","bodyify","_fetchData","processFunc","attemptLimit","throttleLimit","assertArgument","throttleCallback","throttleSlotInterval","errorPassThrough","allow304","allowGzip","allowInsecureAuthentication","base64Encode","reData","dataMatch","base64Decode","requestBody","requestMethod","flatHeaders","runningTimeout","timer","runningFetch","tryAgain","stall","retryAfter","serverError","throttleRetry","fetchJson","updated","poll","ceiling","retryLimit","oncePoll","onceBlock","Formatter","getDefaultFormats","bigNumber","allowNull","blockNumber","transactionIndex","uint256","creates","transactionRequest","receiptLog","arrayOf","logIndex","gasUsed","logsBloom","cumulativeGasUsed","effectiveGasPrice","parentHash","difficulty","miner","extraData","transactions","blockWithTransactions","transactionResponse","filterLog","allowFalsish","author","_difficulty","_block","byzantium","checkKey","nullValue","replaceValue","isCommunityResourcable","isCommunityResource","throttleMessage","showThrottleMessage","checkTopic","serializeTopics","PollableEvents","_lastBlockNumber","_inflight","coinInfos","p2pkh","p2sh","ilk","bytes32ify","base58Encode","matcherIpfs","matchers","_parseString","_parseBytes","getIpfsLink","link","numPad","bytesPad","encodeBytes","datas","Resolver","_supportsEip2544","supportsWildcard","_fetch","coinType","hexBytes","coinInfo","bech32","callAddress","_fetchBytes","_getAddress","linkage","getText","avatar","scheme","_resolvedAddress","owner","tokenOwner","metadataUrl","imageUrl","ipfs","ipns","swarm","skynet","urlSafe","keyBytes","defaultFormatter","nextPollId","BaseProvider","_emitted","disableCcipRead","getFormatter","anyNetwork","detectNetwork","_networkPromise","knownNetwork","_maxInternalBlockNumber","_maxFilterBlockRange","_pollingInterval","_fastQueryDate","_network","urls","errorMessages","maxAge","_internalBlockNumber","internalBlockNumber","respTime","reqTime","checkInternalBlockNumber","perform","networkError","_setFastBlockNumber","pollId","runners","_getInternalBlockNumber","pollingInterval","previousBlockNumber","eventBlockNumber","runner","minFromBlock","polling","currentNetwork","_fastBlockNumber","_fastBlockNumberPromise","detectedNetwork","_poller","_bootstrapPoll","getBlockNumber","_waitForTransaction","replaceable","cancelFuncs","alreadyDone","minedHandler","lastBlockNumber","startBlock","scannedBlock","replaceHandler","mined","getBlockWithTransactions","ti","waitForTransaction","cancelled","_wrapTransaction","unref","_getBlockTag","expectedHash","returnedHash","confirms","signedTransaction","hexTx","redirects","txSender","urlsOffset","urlsLength","urlsData","callbackSelector","ccipReadFetch","ccipResult","SERVER_ERROR","_getTransactionRequest","blockHashOrBlockTag","includeTransactions","blockWithTxs","_getBlock","_getFilter","currentName","_getResolver","addrData","getResolver","resolverAddr","nameOrAddress","resolverAddress","getAvatar","pollable","stopped","eventTag","_stopEvent","errorGas","spelunk","requireData","checkError","getResult","getLowerCase","JsonRpcSigner","addressOrIndex","UncheckedJsonRpcSigner","_address","_index","fromAddress","estimate","hexlifyTransaction","sendUncheckedTransaction","messageData","networkOrReady","_nextId","_eventLoopCache","_uncachedDetectNetwork","connectUnchecked","jsonrpc","_startPending","_pendingFilter","pendingFilter","filterId","allowExtra","allowed","WS","NextId","WebSocketProvider","_wsReady","_requests","messageEvent","subscription","fauxPoll","_detectNetwork","rid","subIdPromise","_subIds","subId","emitReceipt","CONNECTING","StaticJsonRpcProvider","UrlJsonRpcProvider","defaultApiKey","AlchemyWebSocketProvider","getHost","projectSecret","getTransactionPostData","maxFeePerGs","getJsonResult","checkLogTag","getBaseUrl","baseUrl","apikey","getPostUrl","getPostData","procFunc","payloadStr","txhash","postData","topic0","ethusd","endBlock","startblock","endblock","timeStamp","shuffled","checkNetworks","median","maxDelta","middle","nextRid","getPromise","ForwardErrors","ForwardProperties","exposeDebugConfig","getProcessFunc","configs","_highestBlockNumber","tally","normalizedTally","waitForSync","getRunner","currentBlockNumber","getEtherPrice","getStorageAt","providerConfigs","configOrProvider","stallTimeout","inflightWeight","backend","waiting","errorCode","IpcProvider","defaultProjectId","InfuraWebSocketProvider","projectId","apiKeyObj","JsonRpcBatchProvider","_pendingBatch","inflightRequest","_pendingBatchAggregator","inflight","NodesmithProvider","defaultApplicationId","applicationId","loadBalancer","applicationSecretKey","buildWeb3LegacyFetcher","sendFunc","fetcher","jsonRpcFetchFunc","subprovider","isMetaMask","buildEip1193Fetcher","getDefaultProvider","regexBytes","regexNumber","regexArray","_pack","tight","hashKeccak256","hashSha256","createTable","createRangeTable","matchMap","ranges","Table_A_1_ranges","Table_B_1_flags","Table_B_2_ranges","Table_B_2_lut_abs","Table_B_2_lut_rel","Table_B_2_complex","Table_C_ranges","nameprep","codesTableB2","codepoint","_nameprepTableB2","commify","formatted","formatUnits","unitName","parseUnits","formatEther","parseEther","ether","_ethers","toUtf8","errorListener","newListener","evlistener","wrapListener","keyBits","keyStart","ivStart","hasOwn","gOPD","hasOwnConstructor","hasIsPrototypeOf","setProperty","copyIsArray","deep","mod_assert","mod_util","jsSprintf","conversion","argn","doPad","dumpException","jsFprintf","chr","ex","cex","sprintf","printf","fprintf","cycles","aobj","bobj","seen","seenIndex","isCallable","forEachArray","forEachString","forEachObject","ForeverAgent","SSL","ForeverAgentSSL","Agent","net","tls","AgentSSL","getConnectionName","localAddress","requests","sockets","freeSockets","maxSockets","defaultMaxSockets","minSockets","defaultMinSockets","socket","onSocket","onIdleError","_onIdleError","createConnection","addRequestNoreuse","addRequest","useChunkedEncodingByDefault","idleSocket","_reusedSocket","removeSocket","createSocket","ERROR_MESSAGE","funcType","binder","boundLength","boundArgs","Empty","implementation","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","getProto","needsEval","INTRINSICS","Atomics","eval","EvalError","FinalizationRegistry","URIError","WeakRef","WeakSet","doEval","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","subString","getBaseIntrinsic","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","afterRequest","beforeRequest","browser","creator","har","page","pageTimings","timings","HARError","createAjvInstance","hasArrayLengthDefineBug","origSymbol","hasSymbolSham","symObj","syms","HashBase","_blockSize","_blockOffset","_finalized","throwIfNotStringOrBuffer","_digest","ripemd","sha1","sha224","BlockHash","pendingTotal","padLength","_delta8","_delta32","join32","inner","outer","rotl32","sum32","sum32_3","sum32_4","Kh","Ah","Bh","Ch","Dh","Eh","rh","toHex32","split32","shaCommon","sum32_5","ft_1","sha1_K","SHA1","W","SHA256","SHA224","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","SHA512","SHA384","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","cl","dl","eh","fl","gh","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotr32","p32","isSurrogatePair","htonl","zero8","parseRequest","signRequest","createSigner","isSigner","sshKeyToPEM","sshKeyFingerprint","pemToRsaSSHKey","verifySignature","verifyHMAC","HttpSignatureError","HASH_ALGOS","PK_ALGOS","InvalidAlgorithmError","validateAlgorithm","State","ParamsState","ExpiredRequestError","InvalidHeaderError","InvalidParamsError","MissingHeaderError","StrictParsingError","arrayOfString","optionalFinite","clockSkew","authzHeaderName","authorizationHeaderName","substate","tmpName","tmpValue","signingString","authz","keyId","httpVersion","hdr","sshpk","jsprim","AUTHZ_FMT","rs_alg","rs_signFunc","rs_keyId","rs_signer","parsePrivateKey","isPrivateKey","rs_key","rs_headers","rs_lines","writeHeader","writeDateHeader","rfc1123","writeTarget","optionalString","optionalArrayOfString","_stringToSign","parseKey","comment","parsedSignature","Key","isKey","hashAlg","http","https","validateParams","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","callee","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","isIE68","isDDA","strClass","GeneratorFunction","isFnRegex","generatorFunc","getGeneratorFunc","getPolyfill","shim","availableTypedArrays","globalThis","typedArrays","$slice","toStrTags","typedArray","anyTrue","tryTypedArrays","isStrictTypedArray","isLooseTypedArray","MozWebSocket","isReadable","isWritable","INPUT_ERROR","WINDOW","JS_SHA3_NO_WINDOW","WEB_WORKER","AMD","ARRAY_BUFFER","JS_SHA3_NO_ARRAY_BUFFER","CSHAKE_PADDING","SHAKE_BITS","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","createCshakeOutputMethod","createKmacOutputMethod","createOutputMethods","bytepad","Kmac","newMethodName","finalized","encodeString","strs","paddingBytes","dbits","fromNumber","nbi","inBrowser","appName","am","DB","DM","DV","FV","F1","F2","rr","vv","BI_RC","int2char","intAt","nbv","fromInt","nbits","Classic","Montgomery","mp","invDigit","mpl","mph","um","mt2","op_and","op_or","op_xor","op_andnot","lbit","cbit","NullExp","nNop","q3","dlShiftTo","mu","revert","divRemTo","multiplyTo","sqrTo","squareTo","subTo","copyTo","u0","drShiftTo","fromRadix","mi","lShiftTo","bs","cbs","bm","ds","rShiftTo","pm","pt","nsh","yt","qd","toRadix","km","modPowInt","multiplyUpperTo","multiplyLowerTo","dAddOffset","rng_state","rng_pool","rng_pptr","lowprimes","lplim","rng_seed_time","rng_psize","cs","dMultiply","bitwiseTo","isProbablePrime","nextBytes","op","changeBit","addTo","modInt","byteValue","shortValue","andNot","bitCount","setBit","clearBit","flipBit","remainder","divideAndRemainder","g2","is1","ua","appVersion","rng_get_byte","Arcfour","_traverse","arrayKeywords","propsKeywords","skipKeywords","enum","exclusiveMaximum","exclusiveMinimum","primitiveConstructors","changing","checkPropertyChange","_changing","getType","checkProp","addError","checkType","unionErrors","priorErrors","theseErrors","readonly","disallow","itemsIsArray","propDef","checkObj","enumer","maxDecimal","objTypeDef","additionalProp","existingOnly","requires","mustBeValid","serializer","replacer","cycleReplacer","thisPos","spaces","getSerialize","jws","jwt","JsonWebTokenError","NotBeforeError","TokenExpiredError","expiredAt","semver","satisfies","iat","milliseconds","plural","msAbs","isPlural","long","fmtLong","fmtShort","timespan","PS_SUPPORTED","SUPPORTED_ALGS","sign_options_schema","expiresIn","isValid","notBefore","audience","issuer","subject","jwtid","noTimestamp","keyid","mutatePayload","registered_claims_schema","nbf","parameterName","options_to_payload","options_for_objects","secretOrPrivateKey","typ","kid","validatePayload","invalid_options","claim","PUB_KEY_ALGS","RSA_KEY_ALGS","HS_ALGS","jwtString","secretOrPublicKey","clockTimestamp","decodedToken","secretCallback","hasSignature","ignoreNotBefore","clockTolerance","ignoreExpiration","audiences","aud","targetAudience","iss","jti","maxAgeTimestamp","mod_extsprintf","mod_verror","mod_jsonschema","hasKey","pluckv","doFlattenIter","marker","obj1","obj2","forEachKey","pluck","flattenObject","rv","flattenIter","validateJsonObject","validateJsonObjectJS","randElt","extraProperties","mergeObjects","parseInteger","uopts","optionalObject","baseOverride","PI_DEFAULTS","allowSign","allowPrefix","allowTrailing","allowImprecise","trimWhitespace","leadingZeroIsOctal","pbase","mult","idx","isSpace","prefixToBase","translateDigit","MIN_SAFE_INTEGER","iso8601","getUTCMilliseconds","RFC1123_DAYS","getUTCDay","RFC1123_MONTHS","parseDateTime","hrtimediff","hrtimeDiff","hrtimeAccum","hrtimeAdd","assertHrtime","hrtimeNanosec","hrtimeMicrosec","hrtimeMillisec","report","propname","VError","jsv_details","provided","bufferEqual","formatEcdsa","MSG_INVALID_SECRET","MSG_INVALID_VERIFIER_KEY","supportsKeyObjects","createPublicKey","checkIsPublicKey","typeError","asymmetricKeyType","export","checkIsPrivateKey","fromBase64","toBase64","base64url","template","errMsg","normalizeInput","createHmacSigner","checkIsSecretKey","createHmacVerifier","computedSig","createKeySigner","createKeyVerifier","verifier","createPSSKeySigner","RSA_PKCS1_PSS_PADDING","saltLength","RSA_PSS_SALTLEN_DIGEST","createPSSKeyVerifier","createECDSASigner","createECDSAVerifer","createNoneSigner","createNoneVerifier","signerFactories","hs","ps","es","none","verifierFactories","SignStream","VerifyStream","ALGORITHMS","DataStream","jwa","jwsSign","secretOrKey","securedInput","encodedHeader","encodedPayload","jwsSecuredInput","secretStream","JWS_REGEX","safeJsonParse","headerFromJWS","jwsSig","signatureFromJWS","isValidJws","jwsVerify","securedInputFromJWS","jwsDecode","payloadFromJWS","createKeccak","createShake","KeccakState","Shake","rate","delimitedSuffix","hashBitLength","_rate","_delimitedSuffix","_hashBitLength","initialize","absorb","absorbLastFewBits","squeeze","_resetState","dataByteLength","P1600_ROUND_CONSTANTS","p1600","lo0","hi0","lo1","hi1","lo2","hi2","lo3","hi3","lo4","hi4","t1slo0","t1shi0","t1slo5","t1shi5","t1slo10","t1shi10","t1slo15","t1shi15","t1slo20","t1shi20","t1slo1","t1shi1","t1slo6","t1shi6","t1slo11","t1shi11","t1slo16","t1shi16","t1slo21","t1shi21","t1slo2","t1shi2","t1slo7","t1shi7","t1slo12","t1shi12","t1slo17","t1shi17","t1slo22","t1shi22","t1slo3","t1shi3","t1slo8","t1shi8","t1slo13","t1shi13","t1slo18","t1shi18","t1slo23","t1shi23","t1slo4","t1shi4","t1slo9","t1shi9","t1slo14","t1shi14","t1slo19","t1shi19","t1slo24","t1shi24","t2slo0","t2shi0","t2slo16","t2shi16","t2slo7","t2shi7","t2slo23","t2shi23","t2slo14","t2shi14","t2slo10","t2shi10","t2slo1","t2shi1","t2slo17","t2shi17","t2slo8","t2shi8","t2slo24","t2shi24","t2slo20","t2shi20","t2slo11","t2shi11","t2slo2","t2shi2","t2slo18","t2shi18","t2slo9","t2shi9","t2slo5","t2shi5","t2slo21","t2shi21","t2slo12","t2shi12","t2slo3","t2shi3","t2slo19","t2shi19","t2slo15","t2shi15","t2slo6","t2shi6","t2slo22","t2shi22","t2slo13","t2shi13","t2slo4","t2shi4","keccakState","squeezing","INFINITY","MAX_INTEGER","NAN","argsTag","funcTag","genTag","stringTag","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","reIsUint","freeParseInt","baseIsNaN","baseValues","iteratee","arrayMap","objectProto","nativeKeys","nativeMax","arrayLikeKeys","isObjectLike","isArrayLike","isArrayLikeObject","isArguments","baseTimes","skipIndexes","isIndex","baseKeys","Ctor","isPrototype","isLength","collection","guard","isBinary","toFinite","toInteger","fromRight","baseFindIndex","baseIndexOf","funcProto","funcToString","objectCtorString","getPrototype","isHostObject","FUNC_ERROR_TEXT","freeGlobal","freeSelf","nativeMin","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","remainingWait","debounced","isInvoking","getRawTag","symToStringTag","nativeObjectToString","unmasked","baseGetTag","ARRAY16","rotl","fnF","fnG","fnH","fnI","brorand","MillerRabin","_randbelow","min_bytes","_randrange","rone","rn1","getDivisor","db","extname","EXTRACT_TYPE_REGEXP","TEXT_TYPE_REGEXP","charset","mime","charsets","exts","preference","populateMaps","rfc3986","generateBase","httpMethod","base_uri","hmacsign","consumer_secret","token_secret","hmacsign256","rsasign","private_key","rsa","signMethod","skipArgs","keysShim","isArgs","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","origKeys","originalKeys","keysWorksWithArguments","certificate","RSAPrivateKey","int","RSAPublicKey","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","ECParameters","namedCurve","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherText","cipherKey","match2","aesid","fixProc","compat","passphrase","ndata","stripped","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","iters","formatRegExp","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","stylize","stylizeNoColor","_extend","stylizeWithColor","formatValue","styleType","simple","formatPrimitive","visibleKeys","arrayToHash","formatError","braces","formatProperty","formatArray","numLinesEst","reduceToSingleString","ar","NODE_DEBUG","pid","months","getHours","getMinutes","getSeconds","getMonth","isWindows","platform","normalizeArray","allowAboveRoot","trimArray","splitDeviceRe","splitTailRe","win32","win32SplitPath","filename","device","win32StatPath","isUnc","isAbsolute","normalizeUNCRoot","resolvedDevice","resolvedTail","resolvedAbsolute","cwd","trailingSlash","joined","lowerFrom","lowerTo","toParts","lowerFromParts","lowerToParts","samePartsLength","outputParts","_makeLong","resolvedPath","dirname","basename","pathObject","sep","pathString","allParts","delimiter","splitPathRe","posix","posixSplitPath","fromParts","ZERO_BUF","checkParameters","subtle","toBrowser","checks","getNextTick","queueMicrotask","browserPbkdf2","importKey","deriveBits","prom","checkNative","MAX_ALLOC","sizes","rmd160","saltLen","shaFunc","rmd160Func","getDigest","ipad1","ipad2","hrtime","getNanoSeconds","nodeLoadTime","moduleLoadTime","hr","upTime","uptime","loadTime","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","argv","chdir","umask","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","propName","componentName","propFullName","getShim","isRequired","ReactPropTypes","elementType","instanceOf","objectOf","oneOfType","exact","checkPropTypes","PropTypes","Punycode","internals","punySuffix","wildcard","findRule","punyDomain","toASCII","errorCodes","DOMAIN_TOO_SHORT","DOMAIN_TOO_LONG","LABEL_STARTS_WITH_DASH","LABEL_ENDS_WITH_DASH","LABEL_TOO_LONG","LABEL_TOO_SHORT","LABEL_INVALID_CHARS","ascii","labels","tld","sld","subdomain","listed","domainParts","handlePunycode","tldParts","privateParts","i2ops","mgf","withPublic","zBuffer","iHash","maskedSeed","maskedDb","dif","oaep","pkcs1","paddedMsg","hLen2","dblen","nonZero","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","encoded","ucs2decode","extra","ucs2encode","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","oldi","baseMinusT","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","toUnicode","punycode","percentTwenties","RFC1738","RFC3986","allowDots","allowPrototypes","arrayLimit","parameterLimit","plainObjects","strictNullHandling","givenKey","leaf","parseArrays","cleanRoot","parseObject","ignoreQueryPrefix","tempObj","cleanStr","bracketEqualsPos","parseValues","newObj","arrayPrefixGenerators","brackets","pushToArray","valueOrArray","toISO","encodeValuesOnly","serializeDate","skipNulls","generateArrayPrefix","objKeys","arrayFormat","addQueryPrefix","hexTable","arrayToObject","compacted","compactQueue","mergeTarget","targetItem","qs","maxKeys","kstr","vstr","stringifyPrimitive","ks","pairs","undef","MAX_BYTES","MAX_UINT32","generated","oldBrowser","safeBuffer","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","ca","ea","fa","ha","ia","ka","la","ma","acceptsBooleans","attributeNamespace","mustUseProperty","sanitizeURL","removeEmptyString","ra","sa","ta","pa","oa","removeAttribute","setAttributeNS","xlinkHref","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","prepareStackTrace","displayName","Pa","Qa","$$typeof","_payload","Ra","Sa","Ta","Va","_valueTracker","stopTracking","Ua","Wa","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","controlled","ownerDocument","eb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","textContent","kb","lb","mb","namespaceURI","innerHTML","firstChild","removeChild","MSApp","execUnsafeLocalFunction","ob","lastChild","nodeType","nodeValue","pb","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","orphans","tabSize","widows","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","sb","tb","menuitem","area","br","embed","img","keygen","wbr","ub","wb","xb","srcElement","correspondingUseElement","parentNode","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","return","Wb","memoizedState","dehydrated","Xb","Zb","Yb","$b","unstable_scheduleCallback","unstable_cancelCallback","unstable_shouldYield","dc","unstable_requestPaint","unstable_now","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","pc","qc","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","yc","zc","Ac","eventTimes","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","isDehydrated","containerInfo","Xc","Yc","Zc","$c","cd","ReactCurrentBatchConfig","ed","fd","gd","hd","Uc","stopPropagation","jd","kd","ld","md","nd","od","keyCode","charCode","pd","rd","_reactName","_targetInst","isDefaultPrevented","defaultPrevented","isPropagationStopped","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","isTrusted","ud","vd","Ad","screenX","screenY","altKey","getModifierState","zd","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","which","Rd","Td","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","documentMode","fe","ge","he","le","tel","week","ne","oe","pe","qe","se","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","nextSibling","Le","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","Ne","contentEditable","Oe","focusedElem","selectionRange","selectionStart","selectionEnd","defaultView","getSelection","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","$e","ef","ff","gf","hf","lf","mf","nf","Ub","of","pf","qf","sf","capture","J","tf","uf","parentWindow","vf","wf","na","xa","$a","je","char","ke","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Ff","Gf","Hf","Jf","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","childContextTypes","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","lg","mg","ng","og","pg","qg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","deletions","Cg","pendingProps","treeContext","retryLane","Dg","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","defaultProps","Mg","Ng","Og","Pg","Qg","Rg","_currentValue","Sg","childLanes","Tg","firstContext","lanes","Ug","Vg","memoizedValue","Wg","Xg","Yg","interleaved","Zg","$g","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","effects","eventTime","lane","ih","jh","Component","kh","isMounted","_reactInternals","enqueueSetState","L","lh","mh","enqueueReplaceState","enqueueForceUpdate","oh","shouldComponentUpdate","isPureReactComponent","contextType","updater","qh","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","_owner","_stringRef","th","uh","vh","wh","Fh","Gh","Hh","Ih","tagName","Jh","Lh","Mh","revealOrder","Nh","Oh","_workInProgressVersionPrimary","Ph","ReactCurrentDispatcher","Rh","O","Sh","Th","Wh","Xh","Yh","Zh","$h","ai","bi","ci","baseQueue","di","ei","fi","lastRenderedReducer","hasEagerState","eagerState","lastRenderedState","gi","ii","ji","getSnapshot","li","ni","lastEffect","stores","oi","pi","qi","ri","si","ui","vi","wi","yi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","readContext","useCallback","useContext","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Li","Mi","Ni","Oi","Pi","Qi","Ri","getDerivedStateFromError","componentDidCatch","componentStack","Ti","pingCache","Ui","Wi","Xi","ReactCurrentOwner","Yi","aj","bj","cj","dj","ej","baseLanes","cachePool","transitions","fj","gj","hj","ij","jj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","kj","lj","pendingContext","mj","Aj","Cj","Dj","nj","oj","pj","rj","tj","dataset","dgst","uj","vj","_reactRetry","sj","subtreeFlags","wj","xj","isBackwards","rendering","renderingStartTime","tailMode","yj","Ej","Fj","Gj","wasMultiple","suppressHydrationWarning","onclick","autoFocus","createTextNode","Hj","Ij","Jj","Kj","Lj","Mj","Nj","Oj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","insertBefore","_reactRootContainer","Xj","X","Yj","Zj","ak","onCommitFiberUnmount","componentWillUnmount","bk","dk","ek","fk","isHidden","gk","hk","jk","kk","lk","__reactInternalSnapshotBeforeUpdate","Wk","mk","nk","Y","Z","qk","rk","sk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","finishedWork","finishedLanes","Qk","timeoutHandle","Rk","Sk","Tk","Uk","Vk","mutableReadLanes","Bc","Pj","onCommitFiberRoot","mc","onRecoverableError","Xk","onPostCommitFiberRoot","Yk","Zk","isReactComponent","pendingChildren","mutableSourceEagerHydrationData","pendingSuspenseBoundaries","zj","$k","ll","reportError","_internalRoot","nl","ol","ql","sl","rl","unmount","unstable_scheduleHydration","querySelectorAll","tl","usingClientEntryPoint","Events","ul","findFiberByHostInstance","bundleType","rendererPackageName","vl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","wl","isDisabled","supportsFiber","inject","createPortal","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","_createClass","_react2","_interopRequireDefault","_scrollLink2","ButtonElement","_React$Component","_extends","_scrollElement2","_propTypes2","ElementWrapper","newProps","parentBindings","domNode","propTypes","LinkElement","_ref","_temp","_Link2","_Button2","_Element2","_scroller2","_scrollEvents2","_scrollSpy2","_animateScroll2","_Helpers2","scrollSpy","defaultScroller","scrollHash","protoTypes","containerId","activeClass","absolute","onSetActive","onSetInactive","ignoreCancelEvents","hashSpy","spyThrottle","Helpers","customScroller","scroller","_initialiseProps","scrollSpyContainer","getScrollSpyContainer","mapContainer","addStateHandler","stateHandler","addSpyHandler","spyHandler","handleClick","scrollTo","getActiveLink","isInitialized","elemTopBound","elemBottomBound","containerTop","cords","isInside","isOutside","activeLink","setActiveLink","getHash","changeHash","updateStates","Element","_React$Component2","childBindings","registerElems","prevProps","unregister","_smooth2","_cancelEvents2","getAnimationType","defaultEasing","requestAnimationFrameHelper","webkitRequestAnimationFrame","currentWindowProperties","currentPositionX","containerElement","supportPageOffset","pageXOffset","isCSS1Compat","compatMode","currentPositionY","pageYOffset","animateScroll","easing","targetPosition","startPosition","progress","percent","currentPosition","horizontal","easedAnimate","registered","setContainer","animateTopScroll","scrollOffset","delayTimeout","proceedOptions","scrollToTop","scrollToBottom","scrollWidth","html","scrollContainerWidth","scrollHeight","offsetHeight","scrollContainerHeight","toPosition","scrollMore","_passiveEventListeners","cancelEvent","addPassiveEventListener","supportsPassiveOption","removePassiveEventListener","scrollEvent","evtName","_utils","_utils2","mountFlag","initialized","containers","handleHashChange","initStateFromHash","isInit","saveHashHistory","updateHash","_scrollHash2","Link","_React$PureComponent","PureComponent","elemLeftBound","elemRightBound","containerLeft","_cords","_props$saveHashHistor","_props$saveHashHistor2","_saveHashHistory","_lodash","_lodash2","spyCallbacks","spySetState","scrollSpyContainers","throttle","eventHandler","throttleAmount","eventThrottler","scrollHandler","__mapped","__activeLink","getElementsByName","getElementsByClassName","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getElementOffsetInfoUntil","offsetTop","currentOffsetParent","offsetParent","historyUpdate","hashVal","hashToUpdate","curLoc","urlToPush","pushState","replaceState","filterElementInContainer","scrollX","offsetLeft","scrollY","_getElementOffsetInfo","isDocument","__self","__source","jsx","jsxs","_result","Children","only","Profiler","StrictMode","Suspense","cloneElement","_currentValue2","_threadCount","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","startTransition","unstable_act","EE","defaultHwm","ranOut","needMoreData","roundUpToNextPowerOf2","stringMode","cpy","TransformState","WriteReq","core","errorText","expose","plumbing","PromiseImpl","constructorMixin","originalInit","requestOptions","_rp_promise","thenExposed","RequestError","StatusCodeError","TransformError","_rp_resolve","_rp_reject","_rp_callbackOrig","defaultTransformations","_rp_options","resolveWithFullResponse","transform2xxOnly","HEAD","origCallbackThrewException","thrownException","is2xx","transformedResponse","transformErr","exposeTo","bindTo","promisePropertyKey","methodToExpose","exposeAs","Bluebird","configure","stealthyRequire","EOL","bindCLS","urlParse","pubsuffix","Store","MemoryCookieStore","pathMatch","COOKIE_OCTETS","CONTROL_CHARS","TERMINATORS","PATH_VALUE","DATE_DELIM","MONTH_TO_NUM","jan","feb","mar","apr","may","jun","jul","aug","nov","NUM_TO_MONTH","NUM_TO_DAY","MAX_TIME","parseDigits","minDigits","maxDigits","trailingOK","parseTime","parseMonth","parseDate","tokens","dayOfMonth","formatDate","canonicalDomain","domainMatch","domStr","canonicalize","isIP","rightSlash","parseCookiePair","cookiePair","looseMode","cookieName","cookieValue","firstEq","terminatorIdx","trimTerminator","Cookie","firstSemi","unparsed","cookie_avs","av","av_key","av_value","av_sep","setMaxAge","httpOnly","jsonParse","serializableProperties","cookieCompare","aPathLen","creation","creationIndex","getCookieContext","cookiesCreated","CookieJar","store","rejectPublicSuffixes","enableLooseMode","hostOnly","pathIsDefault","lastAccessed","cdomain","getPublicSuffix","setExpires","age","cookieString","TTL","expiryTime","relativeTo","expiryDate","millisec","canonicalizedDomain","CAN_BE_SYNC","syncWrap","syncErr","syncResult","setCookie","ignoreError","updateCookie","oldCookie","newCookie","putCookie","findCookie","getCookies","expireCheck","expire","allPaths","matchingCookie","removeCookie","findCookies","getCookieString","getSetCookieStrings","storeType","getAllCookies","serializeSync","_importCookies","jar","putNext","deserialize","strOrObj","deserializeSync","_importCookiesSync","newStore","removeAllCookies","completedCount","removeErrors","removeCookieCb","removeErr","_cloneSync","cloneSync","permuteDomain","permutePath","permutations","lindex","pathMatcher","domainIndex","cookiePath","pathIndex","curPath","domains","curDomain","removeCookies","reqPath","pubSuf","psl","paramsHaveRequestBody","initParams","verbFunc","wrapRequestMethod","requester","pool","patch","forever","agentOptions","optionsArg","caseless","helpers","Auth","hasAuth","sentAuth","bearerToken","bearer","qop","nc","cnonce","ha1","ha1Compute","ha2","digestResponse","authValues","onRequest","onResponse","authVerb","tough","RequestJar","_jar","cookieOrStr","setCookieSync","getCookieStringSync","getCookiesSync","formatHostname","parseNoProxyZone","zone","zoneParts","hasPort","noProxy","NO_PROXY","no_proxy","noProxyZone","isMatchedAt","hostnameMatched","uriInNoProxy","HTTP_PROXY","http_proxy","HTTPS_PROXY","https_proxy","fs","Har","prep","queryObj","headersObj","jsonObj","paramsObj","queryString","reduceRight","bodySize","headersSize","createReadStream","randomString","calculateMac","app","dlg","localtimeOffsetMsec","artifacts","calculatePayloadHash","hasExt","jsonSafeStringify","requestBodyStream","multipart","safeStringify","isReadStream","numbers","major","minor","isstream","Multipart","chunked","isChunked","setHeaders","preambleCRLF","preamble","postambleCRLF","oauth","OAuth","buildParams","_oauth","qsLib","oauth_version","oauth_timestamp","oauth_nonce","oauth_signature_method","consumer_secret_or_private_key","oauth_consumer_secret","oauth_private_key","oauth_token_secret","oauth_realm","oauth_transport_method","baseurl","oauth_signature","buildBodyHash","signature_method","shasum","concatParams","formContentType","transport_method","body_hash","Querystring","lib","useQuerystring","parseOptions","stringifyOptions","qsParseOptions","qsStringifyOptions","isUrl","Redirect","followRedirect","followRedirects","followAllRedirects","followOriginalHttpMethod","allowRedirect","maxRedirects","redirectsFollowed","removeRefererHeader","redirectTo","_auth","uriPrev","agent","redirectUri","_started","_form","originalHost","tunnel","defaultProxyHeaderWhiteList","defaultProxyHeaderExclusiveList","Tunnel","proxyHeaderWhiteList","proxyHeaderExclusiveList","tunnelOverride","isEnabled","proxy","proxyHeaders","whiteList","constructProxyHeaderWhiteList","uriObject","proxyHost","constructProxyHost","tunnelFn","tunnelFnName","getTunnelFn","tunnelOptions","proxyAuth","cert","pfx","rejectUnauthorized","secureOptions","secureProtocol","constructTunnelOptions","zlib","aws2","httpSignature","getProxyFromURI","hawk","globalCookieJar","globalPool","requestToJSON","responseToJSON","_har","reserved","nonReserved","filterForNonReserved","isReserved","filterOutReservedFunctions","explicitMethod","_qs","_multipart","_redirect","_tunnel","__isRequestRequest","_callbackCalled","baseUrlEndsWithSlash","uriStartsWithSlash","enableUnixSocket","strictSSL","isUnix","setHost","hostHeaderName","originalHostHeaderName","requestForm","appendFormValue","formKey","formValue","aws","gzip","uriAuthPieces","proxyAuthPieces","setContentLength","timing","defaultModules","httpModules","httpModule","agentClass","getNewAgent","ntick","_json","_aborted","getHeaders","poolKey","globalAgent","startTimeNow","stat","_aws","reqOptions","timeoutTimer","onRequestResponse","onRequestError","isConnecting","_connecting","connecting","onLookupTiming","onConnectTiming","setReqTimeout","onReqSockConnect","timingStart","timingPhases","dns","tcp","download","authorized","targetCookieJar","addCookie","_disableCookies","_ended","responseContent","zlibOptions","Z_SYNC_FLUSH","finishFlush","createGunzip","createInflate","_paused","pipeDest","responseStarted","responseStartTime","_destdata","readResponseBody","sslErr","authorizationError","bufferLength","_jsonReviver","headersSent","ctname","clname","pipefilter","jsonReplacer","_jsonReplacer","jsonReviver","unixParts","socketPath","sign_version","signRes","originalCookieHeader","urihref","zr","sr","fn1","fn2","fn3","fn4","fn5","dr","tr","safeParseInt","encodeLength","hexLength","llength","innerRemainder","totalLength","inputBuf","inputBuffer","safer","Safer","kStringMaxLength","MAX_LENGTH","MAX_STRING_LENGTH","sortIndex","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","MAX_VALUE","h0","h5","h6","h7","bytesLeft","bitLenHi","bitLenLo","numZeros","PBKDF2_HMAC_SHA256_OneIter","innerLen","outerKey","incrementCounter","blockmix_salsa8","BY","_X","arraycopy","blockxor","salsa20_8","srcPos","checkBufferish","ensureInteger","_scrypt","XY","totalOps","currentOp","lastPercent10","incrementalSMix","steps","percent10","lastProgress","syncScrypt","loadPublicKey","xbuf","loadCompressedPublicKey","ybuf","loadUncompressedPublicKey","savePublicKey","contextRandomize","seckey","tweaked","publicKeyNegate","pubkeys","sigR","sigS","lenR","posR","lenS","posS","outputlen","_noncefn","msg32","sigr","sigs","hashfn","cond","isUint8Array","toTypeString","getAssertedOutput","SemVer","SEMVER_SPEC_VERSION","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","MAINVERSION","MAINVERSIONLOOSE","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","PRERELEASE","PRERELEASELOOSE","BUILDIDENTIFIER","BUILD","FULLPLAIN","LOOSEPLAIN","LOOSE","GTLT","XRANGEIDENTIFIERLOOSE","XRANGEIDENTIFIER","XRANGEPLAIN","XRANGEPLAINLOOSE","XRANGE","XRANGELOOSE","COERCE","LONETILDE","TILDETRIM","TILDE","TILDELOOSE","LONECARET","CARETTRIM","CARET","CARETLOOSE","COMPARATORLOOSE","COMPARATOR","COMPARATORTRIM","HYPHENRANGE","HYPHENRANGELOOSE","STAR","includePrerelease","prerelease","clean","compareMain","comparePre","compareIdentifiers","inc","identifier","version1","version2","defaultResult","anum","bnum","neq","Comparator","ANY","rcompareIdentifiers","compareLoose","rcompare","rsort","Range","parseRange","isX","hyphenReplace","$0","fM","fm","fp","fpr","tM","tm","tp","tpr","testSet","outside","hilo","gtfn","ltefn","ltfn","ecomp","comparators","comparator","rangeTmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","compRe","pr","replaceCaret","replaceCarets","replaceTilde","replaceTildes","gtlt","xM","xm","replaceXRange","replaceXRanges","replaceStars","parseComparator","thisComparators","thisComparator","rangeComparators","rangeComparator","toComparators","maxSatisfying","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","compver","validRange","ltr","gtr","r1","NonError","_prepareSuperMessage","commonProperties","isCalled","destroyCircular","to_","forceEnumerable","maxDepth","POSITIVE_INFINITY","deserializeError","newError","finalSize","_finalSize","assigned","lowBits","highBits","Algorithm","Sha","rotl30","ft","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_hl","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","algInfo","sizePart","algPrivInfo","pkcs8oid","privInfo","hashAlgs","Certificate","algs","Fingerprint","errs","Identity","CertificateParseError","arrayOfObject","subjects","assertCompatible","subjectKey","issuerKey","serial","validFrom","validUntil","purposes","_hashCache","isExpired","when","isSignedBy","issuerCert","isSignedByKey","keyOrOid","getExtensions","maybeExt","oid","x509","openssh","signWith","fmts","didOne","createSelfSigned","subjectOrSubjects","optionalNumber","lifetime","optionalBuffer","hostSubjects","userSubjects","toPublic","isCertificate","ver","isCompatible","_sshpkApiVersion","_oldVersionDetect","generateECDSA","CRYPTO_HAVE_ECDH","osCurve","ecParams","cByteLen","jsbn","generateED25519","nacl","secretKey","_isPriv","_algo","_p","_ecParams","ECPrivate","ECPublic","_params","mpNormalize","_keyCheck","isPub","setKey","otherpk","generateKey","Verifier","hashAlgo","isSignature","detached","sigBuf","FingerprintFormatError","KeyParseError","innerErr","keyName","SignatureParseError","certName","KeyEncryptedError","base64Strip","theirHash","theirHash2","hash2","base64RE","hexRE","enAlgs","isFingerprint","ssh","putty","findDNSSECHeader","dnssec","findPEMHeader","findSSHHeader","findPuTTYHeader","rfc4253","DNSSEC_PRIVKEY_HEADER_PREFIX","algElems","algoNum","algoName","supportedAlgosById","rsaParams","elementToBuf","readDNSSECRSAPrivateKey","publicFromPrivateECDSA","ecdsaKey","readDNSSECPrivateKey","keyString","elems","base64key","keyBuffer","publicExponentLen","rsaKey","ecNormalize","readRFC3110","dmodp","dmodq","addRSAMissing","rsaAlgFromOptions","mpDenormalize","iqmp","dnssecTimestamp","writeRSA","base64Key","writeECDSA","supportedAlgos","timestampStr","getFullYear","fromBuffer","signAsync","getCertType","SSHBuffer","ECDSA_ALGO","sshbuf","innerAlgo","readBuffer","certType","getAlg","partCount","readPart","readInt64","principals","pbuf","psshbuf","forUser","forHost","int64ToDate","extbuf","critical","signingKeyBuf","sourceInt64","dateToInt64","upper","lower","noSig","writePart","writeInt64","uid","forceType","opensslKeyDeriv","pbesEnd","eder","kdfEnd","kdfOid","hashAlgOid","OID_TO_HASH","cipherOid","OID_TO_CIPHER","cinfo","opensshCipherInfo","opensslName","cipherStream","sshpriv","readSSHPrivate","readType","originalInput","readPkcs1","pkcs8","readPkcs8","writePkcs8","writePkcs1","CIPHER_TO_OID","HASH_TO_OID","readMPInt","readPkcs1RSAPublic","readPkcs1RSAPrivate","readPkcs1DSAPublic","readPkcs1DSAPrivate","readECDSACurve","readPkcs1ECDSAPrivate","curveOid","readPkcs1ECDSAPublic","readBitString","zeroPadToLength","readPkcs1EdDSAPrivate","writePkcs1RSAPrivate","writePkcs1RSAPublic","writePkcs1DSAPrivate","writePkcs1DSAPublic","writePkcs1ECDSAPrivate","writePkcs1ECDSAPublic","writeBitString","writePkcs1EdDSAPrivate","writePkcs1EdDSAPublic","nm","readPkcs8RSAPublic","readPkcs8RSAPrivate","readPkcs8DSAPublic","calculateDSAPublic","readPkcs8DSAPrivate","curveName","readPkcs8ECDSAPublic","readPkcs8ECDSAPrivate","readPkcs8EdDSAPublic","calculateED25519Public","readPkcs8EdDSAPrivate","readPkcs8X25519Public","calculateX25519Public","readPkcs8X25519Private","pkcs8ToBuffer","writeECDSACurve","curveNames","fieldTypeOid","countZeros","sillyInt","writePkcs8RSAPrivate","writePkcs8RSAPublic","writePkcs8DSAPrivate","writePkcs8DSAPublic","writePkcs8ECDSAPrivate","writePkcs8ECDSAPublic","writePkcs8EdDSAPublic","formatVersion","splitHeader","encryption","publicLines","publicBuf","keyType","algToKeyType","privateLines","privateBuf","hash1","derivePPK2EncryptionKey","privateKeyParts","keyTypeToAlg","txt","readPartial","readInternal","_rfc4253Cache","readCString","MAGIC","kdfOpts","privKeyBlob","kdfOptsBuf","cinf","bcrypt","salti","ckey","checkInt1","checkInt2","privBuf","kdfopts","writeChar","kdfssh","writeCString","SSHKEY_RE","SSHKEY_RE2","kbuf","realOffset","trailer","dbuf","remain","tbsStart","sigOffset","tbsEnd","Local","certAlgOid","SIGN_ALGS","parseAsn1","readDate","issuerUniqueID","subjectUniqueID","extEnd","readExtension","sigAlgOid","sigAlg","sigData","algParts","writeTBSCert","defaultHashAlgorithm","EXTS","UTCTIME_RE","thisYear","century","setUTCFullYear","setUTCHours","setUTCSeconds","utcTimeToDate","GTIME_RE","gTimeToDate","writeDate","dateToGTime","dateToUTCTime","ALTNAME","OtherName","RFC822Name","DNSName","X400Address","DirectoryName","EDIPartyName","IPAddress","EXTPURPOSE","EXTPURPOSE_REV","KEYUSEBITS","extId","bcEnd","ekEnd","ide","setBits","bitLen","bitVal","readBitField","aeEnd","forEmail","toAsn1","altNames","purpose","writeBitField","blen","byteN","DNS_NAME_RE","oids","unoids","componentLookup","cn","mail","NOT_PRINTABLE","NOT_IA5","globMatch","aParts","bParts","asn1type","isIdentity","parseDN","dn","eqPos","parseFingerprint","generatePrivateKey","parseCertificate","createSelfSignedCertificate","createCertificate","identityFromDN","identityForHost","identityForUser","identityForEmail","identityFromArray","edCompat","partLookup","szPart","oldVerify","createDH","dhe","_pubCache","pubParts","newType","fromSecretKey","fromSeed","oldSign","parseOneNum","stype","parseDSAasn1","parseDSA","parseECDSA","readChar","lead","bufferSplit","lastPart","newPart","bigintToMpBuf","addZero","obit","klass","needVer","D_prev","bufs","clen","CIPHER_LEN","hkey","isNative","clearCache","requireCache","callbackForModulesToKeep","originalCache","originalModuleChildren","modulesToKeep","freshModule","stealthCache","_isStdio","didOnEnd","ClientRequest","statusCodes","defaultProtocol","IncomingMessage","STATUS_CODES","METHODS","getXHR","XDomainRequest","checkTypeSupport","writableStream","WritableStream","abortController","AbortController","arraybuffer","msstream","mozchunkedarraybuffer","overrideMimeType","capability","rStates","readyStates","preferBinary","_body","_headers","useFetch","decideMode","_fetchTimer","_socketTimeout","_socketTimer","_onFinish","lowerName","unsafeHeaders","_destroyed","headersList","_fetchAbortController","requestTimeout","_fetchResponse","_resetTimers","_xhr","_response","LOADING","DONE","_onXHRProgress","onprogress","statusValid","flushHeaders","setSocketKeepAlive","UNSENT","OPENED","HEADERS_RECEIVED","resetTimers","rawHeaders","trailers","rawTrailers","_resumeFetch","pipeTo","_pos","_charset","charsetMatch","newData","MSStreamReader","readAsArrayBuffer","isBufferEncoding","assertEncoding","surrogateSize","detectIncompleteChar","utf16DetectIncompleteChar","base64DetectIncompleteChar","passThroughWrite","charBuffer","charReceived","charLength","charStr","nativeTypeChecker","begin","isMath","isJSON","isInvalid","isImmutable","isMutable","isEnumerableObject","isFiniteNumber","isVague","isList","nativeTypeOf","nativeType","typeOf","safeApply","enumerate","_ignoreForEach","enumerateObject","assignAll","giver","_method","assignList","TunnelingAgent","proxyOptions","createSecureSocket","secureSocket","mergeOptions","httpOverHttp","httpsOverHttp","defaultPort","httpOverHttps","httpsOverHttps","onFree","onCloseOrRemove","placeholder","connectOptions","connectReq","upgrade","_0","_9","gf0","gf1","_121665","D2","ts64","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x5","x6","x7","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","crypto_stream_salsa20_xor","cpos","mpos","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t4","t5","t6","t7","leftover","crypto_onetimeauth","outpos","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","car25519","sel25519","pack25519","neq25519","par25519","unpack25519","t8","t9","t10","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","inv25519","crypto_scalarmult","x32","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","d7","d9","hibit","h8","h9","r0","r3","r4","r5","r6","r7","r8","r9","macpos","want","crypto_box_afternm","crypto_box_open_afternm","crypto_hashblocks_hl","crypto_hash","cswap","scalarmult","scalarbase","crypto_sign_keypair","seeded","modL","crypto_sign","sm","smlen","unpackneg","den","den2","den4","den6","pow2523","crypto_sign_open","crypto_secretbox_BOXZEROBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","checkLengths","checkArrayTypes","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","decodeUTF8","encodeUTF8","encodeBase64","decodeBase64","secretbox","keyLength","nonceLength","overheadLength","scalarMult","scalarLength","groupElementLength","checkBoxLengths","publicKeyLength","secretKeyLength","sharedKeyLength","signedMsg","mlen","seedLength","signatureLength","hashLength","setPRNG","modules","installedModules","_initializerJs","_htmlParserJs","elementId","initializer","typingComplete","toggleBlinking","onStop","arrayPos","typewrite","curString","curStrPos","backspace","onDestroy","restart","replaceText","cursor","strPos","curLoop","insertCursor","onReset","onBegin","shuffleStringsIfNeeded","bindInputFocusEvents","bindFocusEvents","currentElContent","sequence","startDelay","fadeOutClass","humanizer","numChars","htmlParser","typeHtmlChars","pauseTime","temporaryPause","onTypingPaused","stringBeforeSkip","stringSkipped","stringAfterSkip","doneTyping","keepTyping","onTypingResumed","setPauseStatus","preStringTyped","nextString","onStringTyped","backDelay","initFadeOut","backSpaceHtmlChars","curStringAtPosition","smartBackspace","stopNum","onLastStringBackspaced","onComplete","isTyping","isBlinking","cursorBlinking","speed","shuffle","fadeOutDelay","attr","isInput","showCursor","cursorChar","_defaultsJs","_defaultsJs2","Initializer","querySelector","elContent","stringsElement","stringsLength","stringEl","getCurrentElContent","autoInsertCss","appendAnimationCss","cssDataName","css","innerCss","HTMLParser","curChar","endTag","sets","isIRI","ALPHA$$","DIGIT$$","HEXDIG$$","PCT_ENCODED$","subexp","SUB_DELIMS$$","RESERVED$$","SCHEME$","USERINFO$","UNRESERVED$$","DEC_OCTET_RELAXED$","H16$","LS32$","IPV4ADDRESS$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","ZONEID$","IPV6ADDRESS$","IP_LITERAL$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","HOST$","REG_NAME$","PORT$","AUTHORITY$","PCHAR$","SEGMENT$","SEGMENT_NZ$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","PATH_ABSOLUTE$","QUERY$","PATH_NOSCHEME$","PATH_ROOTLESS$","PATH_EMPTY$","IPRIVATE$$","FRAGMENT$","HIER_PART$","URI$","RELATIVE_PART$","RELATIVE$","buildExps","tMin","tMax","initialBias","initialN","basicToDigit","_step","_step2","_step3","SCHEMES","newStr","_normalizeComponentEncoding","decodeUnreserved","decStr","pctDecChars","UNRESERVED","PCT_ENCODED","NOT_SCHEME","userinfo","NOT_USERINFO","pctEncChar","NOT_HOST","NOT_PATH","NOT_PATH_NOSCHEME","NOT_QUERY","NOT_FRAGMENT","_stripLeadingZeros","_normalizeIPv4","IPV4ADDRESS","_normalizeIPv6","IPV6ADDRESS","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","longestZeroFields","lastLongest","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","uriString","iri","IRI_PROTOCOL","URI_PROTOCOL","reference","schemeHandler","unicodeSupport","domainHost","_recomposeAuthority","uriTokens","$2","RDS1","RDS2","RDS3","RDS5","authority","absolutePath","removeDotSegments","tolerant","baseURI","relativeURI","schemelessOptions","resolveComponents","uriA","uriB","ESCAPE","isSecure","wsComponents","resourceName","ATEXT$$","VCHAR$$","SOME_DELIMS$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","mailtoComponents","unknownHeaders","hfields","hfield","toAddrs","unescapeComponent","toAddr","atIdx","localPart","URN_PARSE","urnComponents","nid","nss","urnScheme","uriComponents","uuidComponents","wss","mailto","urn","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","isSpecial","lolcation","loc","finaldestination","Url","extractProtocol","forwardSlashes","otherSlashes","slashesCount","extracted","instruction","instructions","ins","resolveObject","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","parseQueryString","slashesDenoteHost","queryIndex","splitter","uSplit","simplePath","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","esc","qm","tkeys","tkey","rkeys","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","isArgumentsObject","isGeneratorFunction","whichTypedArray","BigIntSupported","SymbolSupported","ObjectToString","numberValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","working","isDataViewToString","isDataView","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isBigInt64Array","isBigUint64Array","isWeakMap","isWeakSet","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","debugEnvRegex","debugEnv","kCustomPromisifiedSymbol","callbackifyOnRejected","promiseResolve","promiseReject","callbackify","callbackified","maybeCb","byteToHex","bth","rnds8","rnds","bytesToUuid","mod_assertplus","mod_isError","parseConstructorArguments","sprintf_args","jse_shortmsg","shortmessage","jse_cause","skipCauseMessage","jse_info","constructorOpt","SError","MultiError","ase_errors","WError","findCauseByName","hasCauseWithName","fullStack","errorFromList","errorForEach","foundName","createWebSocketStream","Server","Receiver","Sender","WebSocketServer","EMPTY_BUFFER","_mask","_unmask","toArrayBuffer","readOnly","unmask","WS_NO_BUFFER_UTIL","bufferUtil","BINARY_TYPES","GUID","kForOnEventAttribute","kListener","kStatusCode","kWebSocket","NOOP","kCode","kData","kMessage","kReason","kTarget","kType","kWasClean","CloseEvent","wasClean","ErrorEvent","MessageEvent","EventTarget","wrapper","_closeFrameReceived","_closeFrameSent","tokenChars","configurations","paramName","offers","mustUnescape","isEscaping","inQuotes","kDone","kRun","Limiter","jobs","job","zlibLimiter","TRAILER","kPerMessageDeflate","kTotalLength","kCallback","kBuffers","PerMessageDeflate","isServer","maxPayload","_maxPayload","_threshold","_isServer","_deflate","_inflate","concurrencyLimit","serverNoContextTakeover","server_no_context_takeover","clientNoContextTakeover","client_no_context_takeover","serverMaxWindowBits","server_max_window_bits","clientMaxWindowBits","client_max_window_bits","normalizeParams","acceptAsServer","acceptAsClient","accepted","_decompress","_compress","endpoint","windowBits","Z_DEFAULT_WINDOWBITS","createInflateRaw","zlibInflateOptions","inflateOnError","inflateOnData","createDeflateRaw","zlibDeflateOptions","deflateOnData","isValidStatusCode","isValidUTF8","_binaryType","_extensions","_skipUTF8Validation","skipUTF8Validation","_bufferedBytes","_buffers","_compressed","_payloadLength","_fragmented","_masked","_fin","_opcode","_totalPayloadLength","_messageLength","startLoop","getPayloadLength16","getPayloadLength64","getMask","haveLength","controlMessage","decompress","dataMessage","messageLength","ErrorCtor","applyMask","kByteLength","maskBuffer","generateMask","_generateMask","_maskBuffer","_socket","_firstFragment","_deflating","sendFrame","perMessageDeflate","opcode","rsv1","compress","dequeue","skipMasking","payloadLength","duplexOnEnd","duplexOnError","terminateOnDestroy","duplex","CLOSED","terminate","protocols","_isValidUTF8","WS_NO_UTF_8_VALIDATE","subprotocol","keyRegex","handleProtocols","clientTracking","verifyClient","noServer","backlog","_server","createServer","writeHead","listen","emitConnection","_removeListeners","addListeners","listening","handleUpgrade","clients","_shouldEmitClose","socketOnError","shouldHandle","secWebSocketProtocol","abortHandshakeOrEmitwsClientError","secWebSocketExtensions","verified","abortHandshake","completeUpgrade","setSocket","kAborted","protocolVersions","subprotocolRegex","_closeCode","_closeMessage","_closeTimer","_readyState","_sender","_bufferedAmount","_redirects","initAsClient","receiverOnConclude","receiverOnDrain","receiverOnError","receiverOnMessage","receiverOnPing","receiverOnPong","socketOnClose","socketOnData","socketOnEnd","_req","CLOSING","sendAfterClose","pong","parsedUrl","protocolVersion","invalidUrlMessage","isIpcUrl","emitErrorAndClose","protocolSet","tlsConnect","netConnect","Upgrade","handshakeTimeout","offer","Origin","_originalIpc","_originalSecure","_originalHostOrSocketPath","isSameHost","protError","serverProt","extensionNames","receiverOnFinish","arrayLikeToArray","allowArrayLike","normalCompletion","didErr","_e2","possibleConstructorReturn","Derived","hasNativeReflectConstruct","Super","NewTarget","assertThisInitialized","_regeneratorRuntime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","GeneratorFunctionPrototype","IteratorPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","genFun","mark","awrap","skipTempReset","rootRecord","rval","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","arrayWithHoles","iterableToArrayLimit","nonIterableRest","arrayWithoutHoles","iterableToArray","nonIterableSpread","minLen","isNativeFunction","possibleNames","_arrayLikeToArray","_createForOfIteratorHelper","_createSuper","_superPropBase","_get","_isNativeReflectConstruct","_toConsumableArray","_unsupportedIterableToArray","cachedModule","amdO","chunkId","miniCssF","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","onScriptComplete","doneFns","nmd","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}