@openzeppelin/contracts-upgradeable
Version:
Secure Smart Contract library for Solidity
1,029 lines • 52.7 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "TimelockControllerUpgradeable",
"sourceName": "contracts/governance/TimelockControllerUpgradeable.sol",
"abi": [
{
"inputs": [],
"name": "AccessControlBadConfirmation",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bytes32",
"name": "neededRole",
"type": "bytes32"
}
],
"name": "AccessControlUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "FailedCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "delay",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minDelay",
"type": "uint256"
}
],
"name": "TimelockInsufficientDelay",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "targets",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payloads",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "values",
"type": "uint256"
}
],
"name": "TimelockInvalidOperationLength",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "caller",
"type": "address"
}
],
"name": "TimelockUnauthorizedCaller",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "predecessorId",
"type": "bytes32"
}
],
"name": "TimelockUnexecutedPredecessor",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "operationId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "expectedStates",
"type": "bytes32"
}
],
"name": "TimelockUnexpectedOperationState",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "target",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "CallExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "CallSalt",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "target",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "delay",
"type": "uint256"
}
],
"name": "CallScheduled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "Cancelled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldDuration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newDuration",
"type": "uint256"
}
],
"name": "MinDelayChange",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "CANCELLER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "EXECUTOR_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PROPOSER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "cancel",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "payload",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "payloads",
"type": "bytes[]"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "executeBatch",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "getMinDelay",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "getOperationState",
"outputs": [
{
"internalType": "enum TimelockControllerUpgradeable.OperationState",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "getTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "hashOperation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "payloads",
"type": "bytes[]"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "hashOperationBatch",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "minDelay",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "proposers",
"type": "address[]"
},
{
"internalType": "address[]",
"name": "executors",
"type": "address[]"
},
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperation",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperationDone",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperationPending",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperationReady",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "callerConfirmation",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "delay",
"type": "uint256"
}
],
"name": "schedule",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "payloads",
"type": "bytes[]"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "delay",
"type": "uint256"
}
],
"name": "scheduleBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "newDelay",
"type": "uint256"
}
],
"name": "updateDelay",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x6080604052348015600e575f5ffd5b50611e338061001c5f395ff3fe6080604052600436106101bd575f3560e01c80638065657f116100f2578063bc197c8111610092578063d547741f11610062578063d547741f14610547578063e38335e514610566578063f23a6e6114610579578063f27a0c92146105a4575f5ffd5b8063bc197c81146104a7578063c4c4c7b3146104d2578063c4d252f5146104f1578063d45c443514610510575f5ffd5b806391d14854116100cd57806391d1485414610423578063a217fddf14610442578063b08e51c014610455578063b1c5f42714610488575f5ffd5b80638065657f146103c55780638f2a0bb0146103e45780638f61f4f514610403575f5ffd5b80632ab0f5291161015d57806336568abe1161013857806336568abe1461033c578063584b153e1461035b57806364d623531461037a5780637958004c14610399575f5ffd5b80632ab0f529146102df5780632f2ff15d146102fe57806331d507501461031d575f5ffd5b8063134008d311610198578063134008d31461024b57806313bc9f201461025e578063150b7a021461027d578063248a9ca3146102c0575f5ffd5b806301d5062a146101c857806301ffc9a7146101e957806307bd02651461021d575f5ffd5b366101c457005b5f5ffd5b3480156101d3575f5ffd5b506101e76101e236600461148b565b6105d7565b005b3480156101f4575f5ffd5b506102086102033660046114f9565b610698565b60405190151581526020015b60405180910390f35b348015610228575f5ffd5b5061023d5f516020611dde5f395f51905f5281565b604051908152602001610214565b6101e7610259366004611520565b6106a8565b348015610269575f5ffd5b50610208610278366004611586565b610747565b348015610288575f5ffd5b506102a761029736600461164c565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610214565b3480156102cb575f5ffd5b5061023d6102da366004611586565b61076c565b3480156102ea575f5ffd5b506102086102f9366004611586565b61078c565b348015610309575f5ffd5b506101e76103183660046116af565b610794565b348015610328575f5ffd5b50610208610337366004611586565b6107b6565b348015610347575f5ffd5b506101e76103563660046116af565b6107da565b348015610366575f5ffd5b50610208610375366004611586565b610812565b348015610385575f5ffd5b506101e7610394366004611586565b610857565b3480156103a4575f5ffd5b506103b86103b3366004611586565b6108db565b60405161021491906116ed565b3480156103d0575f5ffd5b5061023d6103df366004611520565b61092f565b3480156103ef575f5ffd5b506101e76103fe366004611753565b61096d565b34801561040e575f5ffd5b5061023d5f516020611dbe5f395f51905f5281565b34801561042e575f5ffd5b5061020861043d3660046116af565b610ae6565b34801561044d575f5ffd5b5061023d5f81565b348015610460575f5ffd5b5061023d7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b348015610493575f5ffd5b5061023d6104a2366004611805565b610b1c565b3480156104b2575f5ffd5b506102a76104c136600461193b565b63bc197c8160e01b95945050505050565b3480156104dd575f5ffd5b506101e76104ec366004611a49565b610b60565b3480156104fc575f5ffd5b506101e761050b366004611586565b610c5c565b34801561051b575f5ffd5b5061023d61052a366004611586565b5f9081525f516020611d7e5f395f51905f52602052604090205490565b348015610552575f5ffd5b506101e76105613660046116af565b610d15565b6101e7610574366004611805565b610d31565b348015610584575f5ffd5b506102a7610593366004611ac5565b63f23a6e6160e01b95945050505050565b3480156105af575f5ffd5b507f9a37c2aa9d186a0969ff8a8267bf4e07e864c2f2768f5040949e28a624fb36015461023d565b5f516020611dbe5f395f51905f526105ee81610e9f565b5f6105fd89898989898961092f565b90506106098184610eac565b5f817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161064496959493929190611b40565b60405180910390a3831561068d57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161068491815260200190565b60405180910390a25b505050505050505050565b5f6106a282610f6b565b92915050565b5f516020611dde5f395f51905f526106c0815f610ae6565b6106ce576106ce8133610f8f565b5f6106dd88888888888861092f565b90506106e98185610fcc565b6106f58888888861101a565b5f817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161072c9493929190611b7c565b60405180910390a361073d8161108e565b5050505050505050565b5f60025b610754836108db565b6003811115610765576107656116d9565b1492915050565b5f9081525f516020611d9e5f395f51905f52602052604090206001015490565b5f600361074b565b61079d8261076c565b6107a681610e9f565b6107b083836110c5565b50505050565b5f806107c1836108db565b60038111156107d2576107d26116d9565b141592915050565b6001600160a01b03811633146108035760405163334bd91960e11b815260040160405180910390fd5b61080d8282611166565b505050565b5f5f61081d836108db565b90506001816003811115610833576108336116d9565b14806108505750600281600381111561084e5761084e6116d9565b145b9392505050565b5f516020611d7e5f395f51905f52333081146108965760405163e2850c5960e01b81526001600160a01b03821660048201526024015b60405180910390fd5b600182015460408051918252602082018590527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a15060010155565b5f8181525f516020611d7e5f395f51905f526020526040812054805f0361090457505f92915050565b600181036109155750600392915050565b428111156109265750600192915050565b50600292915050565b5f86868686868660405160200161094b96959493929190611b40565b6040516020818303038152906040528051906020012090509695505050505050565b5f516020611dbe5f395f51905f5261098481610e9f565b88871415806109935750888514155b156109c5576040516001624fcdef60e01b03198152600481018a9052602481018690526044810188905260640161088d565b5f6109d68b8b8b8b8b8b8b8b610b1c565b90506109e28184610eac565b5f5b8a811015610a975780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a2157610a21611bad565b9050602002016020810190610a369190611bc1565b8d8d86818110610a4857610a48611bad565b905060200201358c8c87818110610a6157610a61611bad565b9050602002810190610a739190611bda565b8c8b604051610a8796959493929190611b40565b60405180910390a36001016109e4565b508315610ad957807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610ad091815260200190565b60405180910390a25b5050505050505050505050565b5f9182525f516020611d9e5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8888888888888888604051602001610b3c989796959493929190611cb0565b60405160208183030381529060405280519060200120905098975050505050505050565b5f610b696111df565b805490915060ff600160401b82041615906001600160401b03165f81158015610b8f5750825b90505f826001600160401b03166001148015610baa5750303b155b905081158015610bb8575080155b15610bd65760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c0057845460ff60401b1916600160401b1785555b610c0c89898989611207565b831561068d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610c8681610e9f565b5f516020611d7e5f395f51905f52610c9d83610812565b610cd95782610cac600261121b565b610cb6600161121b565b604051635ead8eb560e01b8152600481019390935217602482015260440161088d565b5f838152602082905260408082208290555184917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a2505050565b610d1e8261076c565b610d2781610e9f565b6107b08383611166565b5f516020611dde5f395f51905f52610d49815f610ae6565b610d5757610d578133610f8f565b8786141580610d665750878414155b15610d98576040516001624fcdef60e01b0319815260048101899052602481018590526044810187905260640161088d565b5f610da98a8a8a8a8a8a8a8a610b1c565b9050610db58185610fcc565b5f5b89811015610e89575f8b8b83818110610dd257610dd2611bad565b9050602002016020810190610de79190611bc1565b90505f8a8a84818110610dfc57610dfc611bad565b905060200201359050365f8a8a86818110610e1957610e19611bad565b9050602002810190610e2b9190611bda565b91509150610e3b8484848461101a565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610e729493929190611b7c565b60405180910390a350505050806001019050610db7565b50610e938161108e565b50505050505050505050565b610ea98133610f8f565b50565b5f516020611d7e5f395f51905f52610ec3836107b6565b15610ef45782610ed25f61121b565b604051635ead8eb560e01b81526004810192909252602482015260440161088d565b5f610f1d7f9a37c2aa9d186a0969ff8a8267bf4e07e864c2f2768f5040949e28a624fb36015490565b905080831015610f4a57604051635433660960e01b8152600481018490526024810182905260440161088d565b610f548342611d4f565b5f9485526020929092525060409092209190915550565b5f6001600160e01b03198216630271189760e51b14806106a257506106a28261123d565b610f998282610ae6565b610fc85760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161088d565b5050565b610fd582610747565b610fe45781610ed2600261121b565b8015801590610ff95750610ff78161078c565b155b15610fc85760405163121534c360e31b81526004810182905260240161088d565b5f5f856001600160a01b0316858585604051611037929190611d6e565b5f6040518083038185875af1925050503d805f8114611071576040519150601f19603f3d011682016040523d82523d5f602084013e611076565b606091505b50915091506110858282611271565b50505050505050565b5f516020611d7e5f395f51905f526110a582610747565b6110b45781610ed2600261121b565b5f9182526020526040902060019055565b5f5f516020611d9e5f395f51905f526110de8484610ae6565b61115d575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556111133390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106a2565b5f9150506106a2565b5f5f516020611d9e5f395f51905f5261117f8484610ae6565b1561115d575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106a2565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106a2565b61120f61128d565b6107b0848484846112b4565b5f81600381111561122e5761122e6116d9565b600160ff919091161b92915050565b5f6001600160e01b03198216637965db0b60e01b14806106a257506301ffc9a760e01b6001600160e01b03198316146106a2565b60608261128657611281826113eb565b6106a2565b50806106a2565b611295611413565b6112b257604051631afcd79f60e31b815260040160405180910390fd5b565b6112bc61128d565b5f516020611d7e5f395f51905f526112d45f306110c5565b506001600160a01b038216156112f0576112ee5f836110c5565b505b5f5b845181101561136b5761132b5f516020611dbe5f395f51905f5286838151811061131e5761131e611bad565b60200260200101516110c5565b506113627ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78386838151811061131e5761131e611bad565b506001016112f2565b505f5b83518110156113a35761139a5f516020611dde5f395f51905f5285838151811061131e5761131e611bad565b5060010161136e565b5060018101859055604080515f8152602081018790527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a15050505050565b8051156113fa57805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f61141c6111df565b54600160401b900460ff16919050565b80356001600160a01b0381168114611442575f5ffd5b919050565b5f5f83601f840112611457575f5ffd5b5081356001600160401b0381111561146d575f5ffd5b602083019150836020828501011115611484575f5ffd5b9250929050565b5f5f5f5f5f5f5f60c0888a0312156114a1575f5ffd5b6114aa8861142c565b96506020880135955060408801356001600160401b038111156114cb575f5ffd5b6114d78a828b01611447565b989b979a50986060810135976080820135975060a09091013595509350505050565b5f60208284031215611509575f5ffd5b81356001600160e01b031981168114610850575f5ffd5b5f5f5f5f5f5f60a08789031215611535575f5ffd5b61153e8761142c565b95506020870135945060408701356001600160401b0381111561155f575f5ffd5b61156b89828a01611447565b979a9699509760608101359660809091013595509350505050565b5f60208284031215611596575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156115d9576115d961159d565b604052919050565b5f82601f8301126115f0575f5ffd5b81356001600160401b038111156116095761160961159d565b61161c601f8201601f19166020016115b1565b818152846020838601011115611630575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f6080858703121561165f575f5ffd5b6116688561142c565b93506116766020860161142c565b92506040850135915060608501356001600160401b03811115611697575f5ffd5b6116a3878288016115e1565b91505092959194509250565b5f5f604083850312156116c0575f5ffd5b823591506116d06020840161142c565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061170d57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f83601f840112611723575f5ffd5b5081356001600160401b03811115611739575f5ffd5b6020830191508360208260051b8501011115611484575f5ffd5b5f5f5f5f5f5f5f5f5f60c08a8c03121561176b575f5ffd5b89356001600160401b03811115611780575f5ffd5b61178c8c828d01611713565b909a5098505060208a01356001600160401b038111156117aa575f5ffd5b6117b68c828d01611713565b90985096505060408a01356001600160401b038111156117d4575f5ffd5b6117e08c828d01611713565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b5f5f5f5f5f5f5f5f60a0898b03121561181c575f5ffd5b88356001600160401b03811115611831575f5ffd5b61183d8b828c01611713565b90995097505060208901356001600160401b0381111561185b575f5ffd5b6118678b828c01611713565b90975095505060408901356001600160401b03811115611885575f5ffd5b6118918b828c01611713565b999c989b509699959896976060870135966080013595509350505050565b5f6001600160401b038211156118c7576118c761159d565b5060051b60200190565b5f82601f8301126118e0575f5ffd5b81356118f36118ee826118af565b6115b1565b8082825260208201915060208360051b860101925085831115611914575f5ffd5b602085015b83811015611931578035835260209283019201611919565b5095945050505050565b5f5f5f5f5f60a0868803121561194f575f5ffd5b6119588661142c565b94506119666020870161142c565b935060408601356001600160401b03811115611980575f5ffd5b61198c888289016118d1565b93505060608601356001600160401b038111156119a7575f5ffd5b6119b3888289016118d1565b92505060808601356001600160401b038111156119ce575f5ffd5b6119da888289016115e1565b9150509295509295909350565b5f82601f8301126119f6575f5ffd5b8135611a046118ee826118af565b8082825260208201915060208360051b860101925085831115611a25575f5ffd5b602085015b8381101561193157611a3b8161142c565b835260209283019201611a2a565b5f5f5f5f60808587031215611a5c575f5ffd5b8435935060208501356001600160401b03811115611a78575f5ffd5b611a84878288016119e7565b93505060408501356001600160401b03811115611a9f575f5ffd5b611aab878288016119e7565b925050611aba6060860161142c565b905092959194509250565b5f5f5f5f5f60a08688031215611ad9575f5ffd5b611ae28661142c565b9450611af06020870161142c565b9350604086013592506060860135915060808601356001600160401b038111156119ce575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a060408201525f611b6760a083018688611b18565b60608301949094525060800152949350505050565b60018060a01b0385168152836020820152606060408201525f611ba3606083018486611b18565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611bd1575f5ffd5b6108508261142c565b5f5f8335601e19843603018112611bef575f5ffd5b8301803591506001600160401b03821115611c08575f5ffd5b602001915036819003821315611484575f5ffd5b5f8383855260208501945060208460051b820101835f5b86811015611ca457838303601f19018852813536879003601e19018112611c58575f5ffd5b86016020810190356001600160401b03811115611c73575f5ffd5b803603821315611c81575f5ffd5b611c8c858284611b18565b60209a8b019a90955093909301925050600101611c33565b50909695505050505050565b60a080825281018890525f8960c08301825b8b811015611cf0576001600160a01b03611cdb8461142c565b16825260209283019290910190600101611cc2565b5083810360208501528881526001600160fb1b03891115611d0f575f5ffd5b8860051b9150818a60208301370182810360209081016040850152611d379082018789611c1c565b60608401959095525050608001529695505050505050565b808201808211156106a257634e487b7160e01b5f52601160045260245ffd5b818382375f910190815291905056fe9a37c2aa9d186a0969ff8a8267bf4e07e864c2f2768f5040949e28a624fb360002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63a2646970667358221220a3e8f73479d7add899873fa8c28f4b42de0b72476380b89bc65f1cfd24be805d64736f6c634300081b0033",
"deployedBytecode": "0x6080604052600436106101bd575f3560e01c80638065657f116100f2578063bc197c8111610092578063d547741f11610062578063d547741f14610547578063e38335e514610566578063f23a6e6114610579578063f27a0c92146105a4575f5ffd5b8063bc197c81146104a7578063c4c4c7b3146104d2578063c4d252f5146104f1578063d45c443514610510575f5ffd5b806391d14854116100cd57806391d1485414610423578063a217fddf14610442578063b08e51c014610455578063b1c5f42714610488575f5ffd5b80638065657f146103c55780638f2a0bb0146103e45780638f61f4f514610403575f5ffd5b80632ab0f5291161015d57806336568abe1161013857806336568abe1461033c578063584b153e1461035b57806364d623531461037a5780637958004c14610399575f5ffd5b80632ab0f529146102df5780632f2ff15d146102fe57806331d507501461031d575f5ffd5b8063134008d311610198578063134008d31461024b57806313bc9f201461025e578063150b7a021461027d578063248a9ca3146102c0575f5ffd5b806301d5062a146101c857806301ffc9a7146101e957806307bd02651461021d575f5ffd5b366101c457005b5f5ffd5b3480156101d3575f5ffd5b506101e76101e236600461148b565b6105d7565b005b3480156101f4575f5ffd5b506102086102033660046114f9565b610698565b60405190151581526020015b60405180910390f35b348015610228575f5ffd5b5061023d5f516020611dde5f395f51905f5281565b604051908152602001610214565b6101e7610259366004611520565b6106a8565b348015610269575f5ffd5b50610208610278366004611586565b610747565b348015610288575f5ffd5b506102a761029736600461164c565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610214565b3480156102cb575f5ffd5b5061023d6102da366004611586565b61076c565b3480156102ea575f5ffd5b506102086102f9366004611586565b61078c565b348015610309575f5ffd5b506101e76103183660046116af565b610794565b348015610328575f5ffd5b50610208610337366004611586565b6107b6565b348015610347575f5ffd5b506101e76103563660046116af565b6107da565b348015610366575f5ffd5b50610208610375366004611586565b610812565b348015610385575f5ffd5b506101e7610394366004611586565b610857565b3480156103a4575f5ffd5b506103b86103b3366004611586565b6108db565b60405161021491906116ed565b3480156103d0575f5ffd5b5061023d6103df366004611520565b61092f565b3480156103ef575f5ffd5b506101e76103fe366004611753565b61096d565b34801561040e575f5ffd5b5061023d5f516020611dbe5f395f51905f5281565b34801561042e575f5ffd5b5061020861043d3660046116af565b610ae6565b34801561044d575f5ffd5b5061023d5f81565b348015610460575f5ffd5b5061023d7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b348015610493575f5ffd5b5061023d6104a2366004611805565b610b1c565b3480156104b2575f5ffd5b506102a76104c136600461193b565b63bc197c8160e01b95945050505050565b3480156104dd575f5ffd5b506101e76104ec366004611a49565b610b60565b3480156104fc575f5ffd5b506101e761050b366004611586565b610c5c565b34801561051b575f5ffd5b5061023d61052a366004611586565b5f9081525f516020611d7e5f395f51905f52602052604090205490565b348015610552575f5ffd5b506101e76105613660046116af565b610d15565b6101e7610574366004611805565b610d31565b348015610584575f5ffd5b506102a7610593366004611ac5565b63f23a6e6160e01b95945050505050565b3480156105af575f5ffd5b507f9a37c2aa9d186a0969ff8a8267bf4e07e864c2f2768f5040949e28a624fb36015461023d565b5f516020611dbe5f395f51905f526105ee81610e9f565b5f6105fd89898989898961092f565b90506106098184610eac565b5f817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161064496959493929190611b40565b60405180910390a3831561068d57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161068491815260200190565b60405180910390a25b505050505050505050565b5f6106a282610f6b565b92915050565b5f516020611dde5f395f51905f526106c0815f610ae6565b6106ce576106ce8133610f8f565b5f6106dd88888888888861092f565b90506106e98185610fcc565b6106f58888888861101a565b5f817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161072c9493929190611b7c565b60405180910390a361073d8161108e565b5050505050505050565b5f60025b610754836108db565b6003811115610765576107656116d9565b1492915050565b5f9081525f516020611d9e5f395f51905f52602052604090206001015490565b5f600361074b565b61079d8261076c565b6107a681610e9f565b6107b083836110c5565b50505050565b5f806107c1836108db565b60038111156107d2576107d26116d9565b141592915050565b6001600160a01b03811633146108035760405163334bd91960e11b815260040160405180910390fd5b61080d8282611166565b505050565b5f5f61081d836108db565b90506001816003811115610833576108336116d9565b14806108505750600281600381111561084e5761084e6116d9565b145b9392505050565b5f516020611d7e5f395f51905f52333081146108965760405163e2850c5960e01b81526001600160a01b03821660048201526024015b60405180910390fd5b600182015460408051918252602082018590527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a15060010155565b5f8181525f516020611d7e5f395f51905f526020526040812054805f0361090457505f92915050565b600181036109155750600392915050565b428111156109265750600192915050565b50600292915050565b5f86868686868660405160200161094b96959493929190611b40565b6040516020818303038152906040528051906020012090509695505050505050565b5f516020611dbe5f395f51905f5261098481610e9f565b88871415806109935750888514155b156109c5576040516001624fcdef60e01b03198152600481018a9052602481018690526044810188905260640161088d565b5f6109d68b8b8b8b8b8b8b8b610b1c565b90506109e28184610eac565b5f5b8a811015610a975780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a2157610a21611bad565b9050602002016020810190610a369190611bc1565b8d8d86818110610a4857610a48611bad565b905060200201358c8c87818110610a6157610a61611bad565b9050602002810190610a739190611bda565b8c8b604051610a8796959493929190611b40565b60405180910390a36001016109e4565b508315610ad957807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610ad091815260200190565b60405180910390a25b5050505050505050505050565b5f9182525f516020611d9e5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8888888888888888604051602001610b3c989796959493929190611cb0565b60405160208183030381529060405280519060200120905098975050505050505050565b5f610b696111df565b805490915060ff600160401b82041615906001600160401b03165f81158015610b8f5750825b90505f826001600160401b03166001148015610baa5750303b155b905081158015610bb8575080155b15610bd65760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c0057845460ff60401b1916600160401b1785555b610c0c89898989611207565b831561068d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610c8681610e9f565b5f516020611d7e5f395f51905f52610c9d83610812565b610cd95782610cac600261121b565b610cb6600161121b565b604051635ead8eb560e01b8152600481019390935217602482015260440161088d565b5f838152602082905260408082208290555184917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a2505050565b610d1e8261076c565b610d2781610e9f565b6107b08383611166565b5f516020611dde5f395f51905f52610d49815f610ae6565b610d5757610d578133610f8f565b8786141580610d665750878414155b15610d98576040516001624fcdef60e01b0319815260048101899052602481018590526044810187905260640161088d565b5f610da98a8a8a8a8a8a8a8a610b1c565b9050610db58185610fcc565b5f5b89811015610e89575f8b8b83818110610dd257610dd2611bad565b9050602002016020810190610de79190611bc1565b90505f8a8a84818110610dfc57610dfc611bad565b905060200201359050365f8a8a86818110610e1957610e19611bad565b9050602002810190610e2b9190611bda565b91509150610e3b8484848461101a565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610e729493929190611b7c565b60405180910390a350505050806001019050610db7565b50610e938161108e565b50505050505050505050565b610ea98133610f8f565b50565b5f516020611d7e5f395f51905f52610ec3836107b6565b15610ef45782610ed25f61121b565b604051635ead8eb560e01b81526004810192909252602482015260440161088d565b5f610f1d7f9a37c2aa9d186a0969ff8a8267bf4e07e864c2f2768f5040949e28a624fb36015490565b905080831015610f4a57604051635433660960e01b8152600481018490526024810182905260440161088d565b610f548342611d4f565b5f9485526020929092525060409092209190915550565b5f6001600160e01b03198216630271189760e51b14806106a257506106a28261123d565b610f998282610ae6565b610fc85760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161088d565b5050565b610fd582610747565b610fe45781610ed2600261121b565b8015801590610ff95750610ff78161078c565b155b15610fc85760405163121534c360e31b81526004810182905260240161088d565b5f5f856001600160a01b0316858585604051611037929190611d6e565b5f6040518083038185875af1925050503d805f8114611071576040519150601f19603f3d011682016040523d82523d5f602084013e611076565b606091505b50915091506110858282611271565b50505050505050565b5f516020611d7e5f395f51905f526110a582610747565b6110b45781610ed2600261121b565b5f9182526020526040902060019055565b5f5f516020611d9e5f395f51905f526110de8484610ae6565b61115d575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556111133390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106a2565b5f9150506106a2565b5f5f516020611d9e5f395f51905f5261117f8484610ae6565b1561115d575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106a2565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106a2565b61120f61128d565b6107b0848484846112b4565b5f81600381111561122e5761122e6116d9565b600160ff919091161b92915050565b5f6001600160e01b03198216637965db0b60e01b14806106a257506301ffc9a760e01b6001600160e01b03198316146106a2565b60608261128657611281826113eb565b6106a2565b50806106a2565b611295611413565b6112b257604051631afcd79f60e31b815260040160405180910390fd5b565b6112bc61128d565b5f516020611d7e5f395f51905f526112d45f306110c5565b506001600160a01b038216156112f0576112ee5f836110c5565b505b5f5b845181101561136b5761132b5f516020611dbe5f395f51905f5286838151811061131e5761131e611bad565b60200260200101516110c5565b506113627ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78386838151811061131e5761131e611bad565b506001016112f2565b505f5b83518110156113a35761139a5f516020611dde5f395f51905f5285838151811061131e5761131e611bad565b5060010161136e565b5060018101859055604080515f8152602081018790527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a15050505050565b8051156113fa57805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f61141c6111df565b54600160401b900460ff16919050565b80356001600160a01b0381168114611442575f5ffd5b919050565b5f5f83601f840112611457575f5ffd5b5081356001600160401b0381111561146d575f5ffd5b602083019150836020828501011115611484575f5ffd5b9250929050565b5f5f5f5f5f5f5f60c0888a0312156114a1575f5ffd5b6114aa8861142c565b96506020880135955060408801356001600160401b038111156114cb575f5ffd5b6114d78a828b01611447565b989b979a50986060810135976080820135975060a09091013595509350505050565b5f60208284031215611509575f5ffd5b81356001600160e01b031981168114610850575f5ffd5b5f5f5f5f5f5f60a08789031215611535575f5ffd5b61153e8761142c565b95506020870135945060408701356001600160401b0381111561155f575f5ffd5b61156b89828a01611447565b979a9699509760608101359660809091013595509350505050565b5f60208284031215611596575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156115d9576115d961159d565b604052919050565b5f82601f8301126115f0575f5ffd5b81356001600160401b038111156116095761160961159d565b61161c601f8201601f19166020016115b1565b818152846020838601011115611630575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f6080858703121561165f575f5ffd5b6116688561142c565b93506116766020860161142c565b92506040850135915060608501356001600160401b03811115611697575f5ffd5b6116a3878288016115e1565b91505092959194509250565b5f5f604083850312156116c0575f5ffd5b823591506116d06020840161142c565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061170d57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f83601f840112611723575f5ffd5b5081356001600160401b03811115611739575f5ffd5b6020830191508360208260051b8501011115611484575f5ffd5b5f5f5f5f5f5f5f5f5f60c08a8c03121561176b575f5ffd5b89356001600160401b03811115611780575f5ffd5b61178c8c828d01611713565b909a5098505060208a01356001600160401b038111156117aa575f5ffd5b6117b68c828d01611713565b90985096505060408a01356001600160401b038111156117d4575f5ffd5b6117e08c828d01611713565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b5f5f5f5f5f5f5f5f60a0898b03121561181c575f5ffd5b88356001600160401b03811115611831575f5ffd5b61183d8b828c01611713565b90995097505060208901356001600160401b0381111561185b575f5ffd5b6118678b828c01611713565b90975095505060408901356001600160401b03811115611885575f5ffd5b6118918b828c01611713565b999c989b509699959896976060870135966080013595509350505050565b5f6001600160401b038211156118c7576118c761159d565b5060051b60200190565b5f82601f8301126118e0575f5ffd5b81356118f36118ee826118af565b6115b1565b8082825260208201915060208360051b86