UNPKG

witnet-solidity-bridge

Version:

Witnet Solidity Bridge contracts for EVM-compatible chains

1,097 lines 93.7 kB
{ "_format": "hh3-artifact-1", "contractName": "WitOracleRadonEncodingLib", "sourceName": "contracts/libs/WitOracleRadonEncodingLib.sol", "abi": [ { "inputs": [], "name": "EmptyBuffer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "range", "type": "uint256" } ], "name": "IndexOutOfBounds", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "InvalidLengthEncoding", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expected", "type": "uint256" }, { "internalType": "uint256", "name": "given", "type": "uint256" } ], "name": "MissingArgs", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "read", "type": "uint256" }, { "internalType": "uint256", "name": "expected", "type": "uint256" } ], "name": "UnexpectedMajorType", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "method", "type": "uint8" }, { "internalType": "string", "name": "schema", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" } ], "name": "UnsupportedDataRequestMethod", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "unexpected", "type": "uint256" } ], "name": "UnsupportedMajorType", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "datatype", "type": "uint8" }, { "internalType": "uint256", "name": "maxlength", "type": "uint256" } ], "name": "UnsupportedRadonDataType", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "name": "UnsupportedRadonFilterArgs", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" } ], "name": "UnsupportedRadonFilterOpcode", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" } ], "name": "UnsupportedRadonReducerOpcode", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "script", "type": "bytes" }, { "internalType": "uint256", "name": "offset", "type": "uint256" } ], "name": "UnsupportedRadonReducerScript", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "script", "type": "bytes" }, { "internalType": "uint256", "name": "offset", "type": "uint256" } ], "name": "UnsupportedRadonScript", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "script", "type": "bytes" }, { "internalType": "uint256", "name": "cursor", "type": "uint256" }, { "internalType": "uint8", "name": "opcode", "type": "uint8" } ], "name": "UnsupportedRadonScriptOpcode", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "name": "UnsupportedRadonTallyScript", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "buf", "type": "bytes" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonReduceOpcodes", "name": "opcode", "type": "Witnet.RadonReduceOpcodes" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "cborArgs", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "reducer", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "bytecode", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "enum Witnet.RadonReduceOpcodes", "name": "opcode", "type": "Witnet.RadonReduceOpcodes" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "buf", "type": "bytes" }, { "internalType": "uint256", "name": "majorType", "type": "uint256" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "n", "type": "uint64" }, { "internalType": "bytes1", "name": "t", "type": "bytes1" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "buf", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval[]", "name": "sources", "type": "tuple[]" }, { "internalType": "string[][]", "name": "args", "type": "string[][]" }, { "internalType": "bytes", "name": "aggregatorInnerBytecode", "type": "bytes" }, { "internalType": "bytes", "name": "tallyInnerBytecode", "type": "bytes" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "numWitnesses", "type": "uint8" }, { "internalType": "uint8", "name": "minConsensusPercentage", "type": "uint8" }, { "internalType": "uint64", "name": "witnessReward", "type": "uint64" }, { "internalType": "uint64", "name": "witnessCollateral", "type": "uint64" }, { "internalType": "uint64", "name": "minerCommitRevealFee", "type": "uint64" } ], "internalType": "struct Witnet.RadonSLAv1", "name": "sla", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "cborArgs", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter", "name": "filter", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "bytecode", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval[]", "name": "retrievals", "type": "tuple[]" }, { "internalType": "string[]", "name": "args", "type": "string[]" }, { "internalType": "bytes", "name": "aggregatorInnerBytecode", "type": "bytes" }, { "internalType": "bytes", "name": "tallyInnerBytecode", "type": "bytes" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "source", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint8", "name": "argIndex", "type": "uint8" }, { "internalType": "string", "name": "argValue", "type": "string" } ], "name": "replaceCborStringsFromBytes", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "string[]", "name": "args", "type": "string[]" } ], "name": "replaceCborStringsFromBytes", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "self", "type": "tuple" }, { "internalType": "uint8", "name": "argIndex", "type": "uint8" }, { "internalType": "string", "name": "argValue", "type": "string" } ], "name": "replaceWildcards", "outputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "", "type": "tuple" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "self", "type": "tuple" }, { "internalType": "string[]", "name": "args", "type": "string[]" } ], "name": "replaceWildcards", "outputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "", "type": "tuple" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "uint16", "name": "maxDataSize", "type": "uint16" } ], "name": "validate", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "Witnet.RadonRetrievalMethods" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "script", "type": "bytes" } ], "name": "validate", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "numWitnesses", "type": "uint8" }, { "internalType": "uint8", "name": "minConsensusPercentage", "type": "uint8" }, { "internalType": "uint64", "name": "witnessReward", "type": "uint64" }, { "internalType": "uint64", "name": "witnessCollateral", "type": "uint64" }, { "internalType": "uint64", "name": "minerCommitRevealFee", "type": "uint64" } ], "internalType": "struct Witnet.RadonSLAv1", "name": "sla", "type": "tuple" } ], "name": "validate", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "cborArgs", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter", "name": "filter", "type": "tuple" } ], "name": "validate", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonReduceOpcodes", "name": "opcode", "type": "Witnet.RadonReduceOpcodes" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "cborArgs", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "reducer", "type": "tuple" } ], "name": "validate", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "script", "type": "bytes" } ], "name": "verifyRadonScriptResultDataType", "outputs": [ { "internalType": "enum Witnet.RadonDataTypes", "name": "", "type": "Witnet.RadonDataTypes" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x6141ba610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061013d575f3560e01c8063a8c06a13116100bf578063c5f3674a11610084578063c5f3674a146102a0578063d7a7291e146102b3578063daf4b0ef146102c6578063dfaecd11146102d9578063f3106f78146102ec578063fa5dce121461030c575f5ffd5b8063a8c06a1314610241578063a97b1d3114610254578063acbade1f14610267578063b6349ebd1461027a578063b7aa578f1461028d575f5ffd5b806336c6c9a41161010557806336c6c9a4146101d25780633b1e539b146101f357806369c3a0b3146102065780636a11b2a81461021957806372d22a861461022c575f5ffd5b80630160730f1461014157806312496a1b1461016c5780631c02d22b1461018c57806326ee38271461019f57806331d5650c146101b2575b5f5ffd5b61015461014f36600461307f565b61031f565b60405161ffff90911681526020015b60405180910390f35b61017f61017a3660046131af565b6104a9565b6040516101639190613216565b61017f61019a3660046132b2565b6104b6565b61017f6101ad3660046133bc565b61054e565b6101c56101c036600461360c565b6105b6565b6040516101639190613700565b6101e56101e03660046137b1565b610730565b604051908152602001610163565b6101c5610201366004613901565b61084c565b61017f610214366004613964565b6109c1565b61017f6102273660046131af565b6109e2565b61023f61023a366004613993565b6109ef565b005b61017f61024f366004613a20565b610cb3565b61023f610262366004613a61565b610e03565b61017f610275366004613a92565b610ec6565b61017f610288366004613b51565b61102b565b61017f61029b366004613993565b611166565b61017f6102ae366004613a61565b6111dd565b61017f6102c1366004613c8c565b61129c565b61023f6102d43660046132b2565b61139d565b61017f6102e7366004613d5e565b61149e565b6102ff6102fa3660046131af565b6114ff565b6040516101639190613d90565b61017f61031a366004613d9e565b611512565b5f808360138111156103335761033361363f565b14806103505750600783601381111561034e5761034e61363f565b145b8061036c5750600383601381111561036a5761036a61363f565b145b80610388575060018360138111156103865761038661363f565b145b806103a4575060068360138111156103a2576103a261363f565b145b15610406578161ffff165f036103f4578260138111156103c6576103c661363f565b604051637aba172760e01b815260ff909116600482015261ffff831660248201526044015b60405180910390fd5b6103ff826003613de3565b90506104a3565b600483601381111561041a5761041a61363f565b1480610437575060058360138111156104355761043561363f565b145b80610453575060028360138111156104515761045161363f565b145b15610460575060096104a3565b8260138111156104725761047261363f565b61047b846117f8565b604051637aba172760e01b815260ff909216600483015261ffff1660248201526044016103eb565b92915050565b60606104a3826002610cb3565b60605f5b82602001515181101561051957816104ee846020015183815181106104e1576104e1613dfd565b60200260200101516111dd565b6040516020016104ff929190613e28565b60408051601f1981840301815291905291506001016104ba565b5080610527835f01516109c1565b604051602001610538929190613e28565b6040516020818303038152906040529050919050565b60605f61055a85611864565b90505b805180515160209091015110156105ac57600360ff16816040015160ff160361059b5761058b81858561188f565b61059481611923565b905061055d565b6105946105a78261194b565b611923565b5151949350505050565b6105f56040805160e081019091525f808252602082019081526020015f8152602001606081526020016060815260200160608152602001606081525090565b61060484606001518484611b0b565b60608501526080840151610619908484611b0b565b608085015260c084015161062e90848461054e565b60c08501525f5b8460a0015151811015610727576106808560a00151828151811061065b5761065b613dfd565b60200260200101515f6002811061067457610674613dfd565b60200201518585611b0b565b8560a00151828151811061069657610696613dfd565b60200260200101515f600281106106af576106af613dfd565b60200201819052506106ea8560a0015182815181106106d0576106d0613dfd565b602002602001015160016002811061067457610674613dfd565b8560a00151828151811061070057610700613dfd565b602002602001015160016002811061071a5761071a613dfd565b6020020152600101610635565b50929392505050565b5f60038660048111156107455761074561363f565b148061076c575060018660048111156107605761076061363f565b14801561076c57508351155b80610792575060048660048111156107865761078661363f565b14801561079257508351155b806107dc575060028660048111156107ac576107ac61363f565b1480156107b857508451155b80156107c357508351155b80156107ce57508251155b80156107dc57506001825110155b610812578560048111156107f2576107f261363f565b858585604051633a3cb62160e01b81526004016103eb9493929190613e3c565b858585858560405160200161082b959493929190613e88565b60405160208183030381529060405280519060200120905095945050505050565b61088b6040805160e081019091525f808252602082019081526020015f8152602001606081526020016060815260200160608152602001606081525090565b610899836060015183611b23565b606084015260808301516108ad9083611b23565b608084015260c08301516108c1908361149e565b60c08401525f5b8360a00151518110156109b9576109128460a0015182815181106108ee576108ee613dfd565b60200260200101515f6002811061090757610907613dfd565b602002015184611b23565b8460a00151828151811061092857610928613dfd565b60200260200101515f6002811061094157610941613dfd565b602002018190525061097c8460a00151828151811061096257610962613dfd565b602002602001015160016002811061090757610907613dfd565b8460a00151828151811061099257610992613dfd565b60200260200101516001600281106109ac576109ac613dfd565b60200201526001016108c8565b509192915050565b60606104a382600b8111156109d8576109d861363f565b600160fc1b610ec6565b60606104a3826003610cb3565b80604001516001600160401b03165f03610a525760405162461bcd60e51b815260206004820152603160248201525f5160206141655f395f51905f526044820152701a590814d3104e881b9bc81c995dd85c99607a1b60648201526084016103eb565b805160ff165f03610aaf5760405162461bcd60e51b815260206004820152603460248201525f5160206141655f395f51905f52604482015273696420534c413a206e6f207769746e657373657360601b60648201526084016103eb565b607f815f015160ff161115610b235760405162461bcd60e51b815260206004820152604160248201525f5160206141655f395f51905f5260448201527f696420534c413a20746f6f206d616e79207769746e657373657320283e3132376064820152602960f81b608482015260a4016103eb565b6033816020015160ff161080610b4057506063816020015160ff16115b15610bb25760405162461bcd60e51b815260206004820152604960248201525f5160206141655f395f51905f5260448201527f696420534c413a20636f6e73656e7375732070657263656e74616765206f7574606482015268206f662072616e676560b81b608482015260a4016103eb565b60608101516001600160401b031615610c185760405162461bcd60e51b815260206004820152603560248201525f5160206141655f395f51905f526044820152741a590814d3104e881b9bc818dbdb1b185d195c985b605a1b60648201526084016103eb565b607f81604001518260600151610c2e9190613f01565b6001600160401b03161115610cb05760405162461bcd60e51b815260206004820152604f60248201525f5160206141655f395f51905f5260448201527f696420534c413a20636f6c6c61746572616c2f72657761726420726174696f2060648201526e746f6f206869676820283e3132372960881b608482015260a4016103eb565b50565b81516060906017811015610cf4578060ff16600584901b1784604051602001610cdd929190613f2e565b6040516020818303038152906040529150506104a3565b600583901b606060ff8311610d3b576040516001600160f81b031960f885901b166020820152601892909217916021015b6040516020818303038152906040529050610dce565b61ffff8311610d6a576040516001600160f01b031960f085901b16602082015260199290921791602201610d25565b63ffffffff8311610d9b576040516001600160e01b031960e085901b166020820152601a9290921791602401610d25565b6040516001600160c01b031960c085901b166020820152601b929092179160280160405160208183030381529060405290505b818187604051602001610de393929190613f4d565b60405160208183030381529060405293505050506104a3565b5092915050565b600581516009811115610e1857610e1861363f565b03610e5c578060200151515f03610cb05780516009811115610e3c57610e3c61363f565b81602001516040516319037b1360e31b81526004016103eb929190613f6f565b600881516009811115610e7157610e7161363f565b03610e945760208101515115610cb05780516009811115610e3c57610e3c61363f565b80516009811115610ea757610ea761363f565b60405163ddb08eaf60e01b815260ff90911660048201526024016103eb565b60608260025b607f826001600160401b03161115610ef9576007826001600160401b0316901c9150600181019050610ecc565b806001600160401b03166001600160401b03811115610f1a57610f1a6130b0565b6040519080825280601f01601f191660200182016040528015610f44576020820181803683370190505b50925084915083835f81518110610f5d57610f5d613dfd565b60200101906001600160f81b03191690815f1a90535060015b816001600160401b0316816001600160401b03161015610fe45782607f1660801760f81b84826001600160401b031681518110610fb557610fb5613dfd565b60200101906001600160f81b03191690815f1a90535060079290921c6701ffffffffffffff1691600101610f76565b50607f60f81b83600183036001600160401b03168151811061100857611008613dfd565b0160200180519091166001600160f81b031916905f82901a905350505092915050565b60605f86516001600160401b03811115611047576110476130b0565b60405190808252806020026020018201604052801561107a57816020015b60608152602001906001900390816110655790505b5090505f5b875181101561110c576110c488828151811061109d5761109d613dfd565b60200260200101518883815181106110b7576110b7613dfd565b602002602001015161084c565b506110e78882815181106110da576110da613dfd565b6020026020010151611512565b8282815181106110f9576110f9613dfd565b602090810291909101015260010161107f565b5061111681611b39565b855161112690600d60f91b610ec6565b866111368751602260f81b610ec6565b8760405160200161114b959493929190613f8a565b60405160208183030381529060405291505095945050505050565b606061117a8260400151601060f81b610ec6565b825161118d9060ff16600360fb1b610ec6565b60808401516111a090600160fd1b610ec6565b60208501516111b69060ff16600560fb1b610ec6565b60608601516111c990600360fc1b610ec6565b604051602001610538959493929190613f8a565b6060611201825f015160098111156111f7576111f761363f565b600160fb1b610ec6565b5f836020015151116112215760405180602001604052805f815250611259565b60208301515161123590600960f91b610ec6565b602080850151604051611249939201613e28565b6040516020818303038152906040525b60405160200161126a929190613e28565b604051602081830303815290604052905061128a8151600a60f81b610ec6565b81604051602001610538929190613e28565b60605f86516001600160401b038111156112b8576112b86130b0565b6040519080825280602002602001820160405280156112eb57816020015b60608152602001906001900390816112d65790505b5090505f5b875181101561135e5761132388828151811061130e5761130e613dfd565b60200260200101518888906102019190613fb3565b506113398882815181106110da576110da613dfd565b82828151811061134b5761134b613dfd565b60209081029190910101526001016112f0565b5061136881611b39565b845161137890600d60f91b610ec6565b856113888651602260f81b610ec6565b8660405160200161114b959493929190613f8a565b60038151600b8111156113b2576113b261363f565b14806113d0575060078151600b8111156113ce576113ce61363f565b145b806113ed575060028151600b8111156113eb576113eb61363f565b145b8061140a5750600b8151600b8111156114085761140861363f565b145b80611427575060058151600b8111156114255761142561363f565b145b61145d578051600b81111561143e5761143e61363f565b60405163a1165d6360e01b815260ff90911660048201526024016103eb565b5f5b81602001515181101561149a576114928260200151828151811061148557611485613dfd565b6020026020010151610e03565b60010161145f565b5050565b60605f6114aa84611864565b90505b805180515160209091015110156114f657600360ff16816040015160ff16036114ea576114da8184611b8e565b6114e381611923565b90506114ad565b6114e36105a78261194b565b51519392505050565b5f6104a361150c83611864565b5f611c20565b60605f61152e836020015160048111156111f7576111f761363f565b905060605f846060015151111561157b5760608401515161155390600960f91b610ec6565b8460600151604051602001611569929190613e28565b60405160208183030381529060405290505b60c084015151606090156115c55760c08501515161159d90600d60f91b610ec6565b8560c001516040516020016115b3929190613e28565b60405160208183030381529060405290505b6080850151516060901561160f576080860151516115e790601160f91b610ec6565b86608001516040516020016115fd929190613e28565b60405160208183030381529060405290505b60a0860151516060901561177f575f5b8760a001515181101561177d575f61166f8960a00151838151811061164657611646613dfd565b60200260200101515f6002811061165f5761165f613dfd565b602002015151600560f91b610ec6565b8960a00151838151811061168557611685613dfd565b60200260200101515f6002811061169e5761169e613dfd565b60200201516116e68b60a0015185815181106116bc576116bc613dfd565b60200260200101516001600281106116d6576116d6613dfd565b602002015151600960f91b610ec6565b8b60a0015185815181106116fc576116fc613dfd565b602002602001015160016002811061171657611716613dfd565b602002015160405160200161172e9493929190613fbf565b60405160208183030381529060405290508261174f8251602a60f81b610ec6565b8260405160200161176293929190613fdd565b60408051601f1981840301815291905292505060010161161f565b505b5f815183518551875189516117949190613fee565b61179e9190613fee565b6117a89190613fee565b6117b29190613fee565b90506117c281600960f91b610ec6565b86868686866040516020016117dc96959493929190614001565b6040516020818303038152906040529650505050505050919050565b5f600482601381111561180d5761180d61363f565b148061182a575060058260138111156118285761182861363f565b145b1561183757506009919050565b600282601381111561184b5761184b61363f565b0361185857506001919050565b505f919050565b919050565b61186c61301b565b604080518082019091528281525f602082015261188881611db0565b9392505050565b60808301518351602001516001600160401b03909116905f6118b086611ecd565b90505f5f6118bf838888611fd2565b90925090508015611919575f6118d4836109e2565b90506118e08686614021565b8951602001528351611900906118f7908890613fee565b8a519083612229565b805189516020018051611914908390613fee565b905250505b5050505050505050565b61192b61301b565b815180515160209091015110156119475781516104a390611db0565b5090565b61195361301b565b604082015160ff16158061196e5750604082015160ff166001145b806119a75750604082015160ff16600714801561199357506019826060015160ff1610155b80156119a75750601b826060015160ff1611155b156119d9576119b582612352565b6001600160401b0316825f01516020018181516119d29190613fee565b9052505090565b604082015160ff16600314806119f65750604082015160ff166002145b15611a37575f611a0d835f015184606001516123bd565b9050806001600160401b0316835f0151602001818151611a2d9190613fee565b9052506119479050565b604082015160ff1660041480611a545750604082015160ff166005145b15611a7c57611a6a825f015183606001516123bd565b6001600160401b031660808301525090565b604082015160ff166007141580611aae5750816060015160ff16601414158015611aae5750816060015160ff16601514155b156119475760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b60648201526084016103eb565b60605f611b19858585611fd2565b5095945050505050565b60605f611b30848461247d565b50949350505050565b604051602081015f60015b84518111611b78576020818102860151805190918201611b65868284612709565b5093840193929092019150600101611b44565b5080835260208101604051016040525050919050565b60808201518251602001516001600160401b03909116905f611baf85611ecd565b90505f5f611bbd838761247d565b90925090508015611c17575f611bd2836109e2565b9050611bde8686614021565b8851602001528351611bfe90611bf5908890613fee565b89519083612229565b805188516020018051611c12908390613fee565b905250505b50505050505050565b5f600460ff16836040015160ff1603611cb8575f611c3d8461274f565b9050600181511115611caf5782611c8457611c7f8160028351611c609190614021565b81518110611c7057611c70613dfd565b60200260200101516001611c20565b611ca7565b611ca7815f81518110611c9957611c99613dfd565b60200260200101515f611c20565b9150506104a3565b5f9150506104a3565b604083015160ff16611d88578251602001515f611cd4856128fa565b6001600160401b031690505f6040518060a00160405280608081526020016140e560809139518211611d37576040518060a00160405280608081526020016140e5608091398281518110611d2a57611d2a613dfd565b016020015160f81c611d3a565b60ff5b9050601360ff82161115611d6957855151604051631aef51bd60e31b81526103eb919085908590600401614034565b8060ff166013811115611d7e57611d7e61363f565b93505050506104a3565b604080840151905161800560e51b81525f600482015260ff90911660248201526044016103eb565b611db861301b565b81515182905f03611ddc576040516309036d4760e21b815260040160405180910390fd5b5f60ff816001600160401b038160015b8015611e5d57611dfb89612949565b955081611e078161405f565b6007600589901c169650601f881695509250506005198501611e56576020890151611e328a866123bd565b9350808a60200151611e449190614021565b611e4e9084613fee565b925050611dec565b505f611dec565b600760ff86161115611e875760405163bd2ac87960e01b815260ff861660048201526024016103eb565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b60608160038060ff16826040015160ff1614611f0d57604080830151905161800560e51b815260ff918216600482015290821660248201526044016103eb565b611f1e845f015185606001516123bd565b6001600160401b03166080850181905267fffffffffffffffe1901611fb8575f5b80611fb2575f611f56865f015187604001516129a9565b90506001600160401b038082161015611fa75784611f80611f78600484613f01565b885190612a4e565b604051602001611f91929190613e28565b6040516020818303038152906040529450611fac565b600191505b50611f3f565b50611fcb565b60808401518451611fc891612a4e565b92505b5050919050565b60605f5f5f90505f5f90505f5f5f5f5f5f60038d511015612000578c5f995099505050505050505050612221565b60208d019450604051995060208a01925060208b0190508a5191505f60028e510390505b808910156121b457601760fa1b6001600160f81b0319168e8a8151811061204d5761204d613dfd565b01602001516001600160f81b0319161480156120995750601760fa1b6001600160f81b0319168e8a6002018151811061208857612088613dfd565b01602001516001600160f81b031916145b80156120d65750600360fc1b6001600160f81b0319168e8a600101815181106120c4576120c4613dfd565b01602001516001600160f81b03191610155b80156121135750603960f81b6001600160f81b0319168e8a6001018151811061210157612101613dfd565b01602001516001600160f81b03191611155b801561214957508c60ff16600360fc1b60f81c8f8b6001018151811061213b5761213b613dfd565b016020015160f81c0360ff16145b156121a95787890396508789111561217657612166848789612709565b948601600301949286019261217d565b6003860195505b612188848385612709565b60019099019860039890980197889750868301949094019392820192612024565b600190980197612024565b508c519750831561220557868811156121f2576121db83866121d68a8c614021565b612709565b6121e58789614021565b6121ef9085613fee565b93505b838a526020840160405101604052612218565b8c5f995099505050505050505050612221565b50505050505050505b935093915050565b6020830151835151839161223c91614021565b612247906001613fee565b80821115612272576040516363a056dd60e01b815260048101839052602481018290526044016103eb565b604080516003808252608082019092525f91816020015b60608152602001906001900390816122895790505090506122af865f8860200151612bd2565b815f815181106122c1576122c1613dfd565b602002602001018190525083816001815181106122e0576122e0613dfd565b6020026020010181905250612321868688602001516122ff9190613fee565b6020890151895151899161231291614021565b61231c9190614021565b612bd2565b8160028151811061233457612334613dfd565b602002602001018190525061234881611b39565b9095525050505050565b5f6018826060015160ff16101561236a57505f919050565b601c826060015160ff161015612399576018826060015161238b9190614077565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff90911660048201526024016103eb565b5f60188260ff1610156123d4575060ff81166104a3565b8160ff166018036123f2576123e883612949565b60ff1690506104a3565b8160ff166019036124115761240683612c77565b61ffff1690506104a3565b8160ff16601a036124325761242583612ce2565b63ffffffff1690506104a3565b8160ff16601b03612446576103ff83612d40565b8160ff16601f0361245f57506001600160401b036104a3565b604051636d785b1360e01b815260ff831660048201526024016103eb565b60605f5f5f90505f5f90505f5f5f5f5f5f5f60038d5110156124ad578c5f9a509a50505050505050505050612702565b6040518d51909b5060208e810197508c019450600119015b808a101561269857601760fa1b6001600160f81b0319168e8b815181106124ee576124ee613dfd565b01602001516001600160f81b03191614801561253a5750601760fa1b6001600160f81b0319168e8b6002018151811061252957612529613dfd565b01602001516001600160f81b031916145b80156125775750600360fc1b6001600160f81b0319168e8b6001018151811061256557612565613dfd565b01602001516001600160f81b03191610155b80156125b45750603960f81b6001600160f81b0319168e8b600101815181106125a2576125a2613dfd565b01602001516001600160f81b03191611155b1561268d57888a039750888a11156125e1576125d185888a612709565b95870160030195938701936125e8565b6003870196505b5f600360fc1b60f81c8f8c6001018151811061260657612606613dfd565b602001015160f81c60f81b60f81c0360ff1690508d51811061264a578d516040516306786e0760e21b815260018301600482015260248101919091526044016103eb565b600181016020028e015194508451935060208501925061266b868486612709565b506001909a0199600399909901988998508783019590950194938201936124c5565b6001909901986124c5565b508c51985084156126e457878911156126d1576126ba84876121d68b8d614021565b6126c4888a614021565b6126ce9086613fee565b94505b848b5260208501604051016040526126f8565b8c5f9a509a50505050505050505050612702565b5050505050505050505b9250929050565b5b60208110612729578151835260209283019290910190601f190161270a565b801561274a578151835160208390036101000a5f1901801990921691161783525b505050565b60608160048060ff16826040015160ff161461278f57604080830151905161800560e51b815260ff918216600482015290821660248201526044016103eb565b5f6127a1855f015186606001516123bd565b90506127ae816001614090565b6001600160401b03166001600160401b038111156127ce576127ce6130b0565b60405190808252806020026020018201604052801561280757816020015b6127f461301b565b8152602001906001900390816127ec5790505b5093505f5b816001600160401b03168110156128ca5761282686611923565b955061283186612d9e565b85828151811061284357612843613dfd565b6020026020010181905250600460ff16866040015160ff160361289b575f61286a8761274f565b9050806001825161287b9190614021565b8151811061288b5761288b613dfd565b60200260200101519650506128c2565b600560ff16866040015160ff16036128b7575f61286a87612e35565b6128c08661194b565b505b60010161280c565b508484826001600160401b0316815181106128e7576128e7613dfd565b6020026020010181905250505050919050565b5f815f8060ff16826040015160ff161461293857604080830151905161800560e51b815260ff918216600482015290821660248201526044016103eb565b611fc8845f015185606001516123bd565b5f8160200151825f0151518082111561297f576040516363a056dd60e01b815260048101839052602481018290526044016103eb565b835160208501805180830160010151955090819061299c8261405f565b8152505050505050919050565b5f5f6129b484612949565b90508060ff1660ff036129d1576001600160401b039150506104a3565b6129de8482601f166123bd565b91506001600160401b0380831610612a1457604051636d785b1360e01b81526001600160401b03831660048201526024016103eb565b60ff83166007600583901c1614610dfc5760405161800560e51b81526007600583901c16600482015260ff841660248201526044016103eb565b6060816001600160401b03166001600160401b03811115612a7157612a716130b0565b6040519080825280601f01601f191660200182016040528015612a9b576020820181803683370190505b5090505f5b826001600160401b0316816001600160401b03161015612bc9575f612ac485612949565b90506080811615612b8b5760e08160ff161015612b0057612ae485612949565b603f16600682601f1660ff16901b179050600184039350612b8b565b60f08160ff161015612b4557612b1585612949565b603f166006612b2387612949565b603f1660ff16901b600c83600f1660ff16901b17179050600284039350612b8b565b612b4e85612949565b603f166006612b5c87612949565b603f16901b600c612b6c88612949565b603f1660ff16901b601284600f1660ff16901b17171790506003840393505b8060f81b83836001600160401b031681518110612baa57612baa613dfd565b60200101906001600160f81b03191690815f1a90535050600101612aa0565b50908152919050565b6060612bde8284613fee565b84515180821115612c0c576040516363a056dd60e01b815260048101839052602481018290526044016103eb565b85515f856001600160401b03811115612c2757612c276130b0565b6040519080825280601f01601f191660200182016040528015612c51576020820181803683370190505b50905060208082019083890101612c6982828a612709565b509098975050505050505050565b5f81602001516002612c899190613fee565b82515180821115612cb7576040516363a056dd60e01b815260048101839052602481018290526044016103eb565b8351602085018051600281840181015196509091612cd58284613fee565b9052509395945050505050565b5f81602001516004612cf49190613fee565b82515180821115612d22576040516363a056dd60e01b815260048101839052602481018290526044016103eb565b8351602085018051600481840181015196509091612cd58284613fee565b5f81602001516008612d529190613fee565b82515180821115612d80576040516363a056dd60e01b815260048101839052602481018290526044016103eb565b8351602085018051600881840181015196509091612cd58284613fee565b612da661301b565b6040805160c0810180835284516101008301845260609091525f60e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff1614612e7557604080830151905161800560e51b815260ff918216600482015290821660248201526044016103eb565b5f612e87855f015186606001516123bd565b612e929060026140af565b9050612e9f816001614090565b6001600160401b03166001600160