witnet-solidity-bridge
Version:
Witnet Solidity Bridge contracts for EVM-compatible chains
1,097 lines • 93.7 kB
JSON
{
"_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