@citizenwallet/sdk
Version:
An sdk to easily work with citizen wallet.
559 lines • 925 kB
JSON
{
"abi": [
{
"type": "function",
"name": "NAME",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "UPGRADE_INTERFACE_VERSION",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "VERSION",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "activeSessions",
"inputs": [
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "uint256", "internalType": "uint256" }
],
"outputs": [
{ "name": "expiry", "type": "uint48", "internalType": "uint48" },
{ "name": "owner", "type": "address", "internalType": "address" },
{ "name": "account", "type": "address", "internalType": "address" }
],
"stateMutability": "view"
},
{
"type": "function",
"name": "addSigner",
"inputs": [
{ "name": "signer", "type": "address", "internalType": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "checkAfterExecution",
"inputs": [
{ "name": "", "type": "bytes32", "internalType": "bytes32" },
{ "name": "", "type": "bool", "internalType": "bool" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "checkTransaction",
"inputs": [
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "bytes", "internalType": "bytes" },
{ "name": "", "type": "uint8", "internalType": "enum Enum.Operation" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "address", "internalType": "address payable" },
{ "name": "", "type": "bytes", "internalType": "bytes" },
{ "name": "msgSender", "type": "address", "internalType": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "confirm",
"inputs": [
{
"name": "sessionRequestHash",
"type": "bytes32",
"internalType": "bytes32"
},
{ "name": "sessionHash", "type": "bytes32", "internalType": "bytes32" },
{
"name": "ownerSignedSessionHash",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "contractExists",
"inputs": [
{
"name": "contractAddress",
"type": "address",
"internalType": "address"
}
],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "domainSeparator",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "encodeMessageDataForSafe",
"inputs": [
{ "name": "safe", "type": "address", "internalType": "contract Safe" },
{ "name": "message", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "getChainId",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "getMessageHash",
"inputs": [
{ "name": "message", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "getMessageHashForSafe",
"inputs": [
{ "name": "safe", "type": "address", "internalType": "contract Safe" },
{ "name": "message", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "getModules",
"inputs": [],
"outputs": [
{ "name": "", "type": "address[]", "internalType": "address[]" }
],
"stateMutability": "view"
},
{
"type": "function",
"name": "initialize",
"inputs": [
{ "name": "_owner", "type": "address", "internalType": "address" },
{
"name": "_twoFAFactory",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "isExpired",
"inputs": [
{ "name": "account", "type": "address", "internalType": "address" },
{ "name": "_owner", "type": "address", "internalType": "address" }
],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "isValidSignature",
"inputs": [
{ "name": "_dataHash", "type": "bytes32", "internalType": "bytes32" },
{ "name": "_signature", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "isValidSignature",
"inputs": [
{ "name": "_data", "type": "bytes", "internalType": "bytes" },
{ "name": "_signature", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "onERC1155BatchReceived",
"inputs": [
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "uint256[]", "internalType": "uint256[]" },
{ "name": "", "type": "uint256[]", "internalType": "uint256[]" },
{ "name": "", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
"stateMutability": "pure"
},
{
"type": "function",
"name": "onERC1155Received",
"inputs": [
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
"stateMutability": "pure"
},
{
"type": "function",
"name": "onERC721Received",
"inputs": [
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "bytes", "internalType": "bytes" }
],
"outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
"stateMutability": "pure"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "proxiableUUID",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "removeExpiredSessions",
"inputs": [
{ "name": "sender", "type": "address", "internalType": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "renounceOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "request",
"inputs": [
{ "name": "sessionSalt", "type": "bytes32", "internalType": "bytes32" },
{
"name": "sessionRequestHash",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "signedSessionRequestHash",
"type": "bytes",
"internalType": "bytes"
},
{
"name": "signedSessionHash",
"type": "bytes",
"internalType": "bytes"
},
{ "name": "sessionExpiry", "type": "uint48", "internalType": "uint48" },
{
"name": "challengeExpiry",
"type": "uint48",
"internalType": "uint48"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "revoke",
"inputs": [
{ "name": "signer", "type": "address", "internalType": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "sessionRequests",
"inputs": [
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "bytes32", "internalType": "bytes32" }
],
"outputs": [
{ "name": "expiry", "type": "uint48", "internalType": "uint48" },
{
"name": "challengeExpiry",
"type": "uint48",
"internalType": "uint48"
},
{
"name": "signedSessionHash",
"type": "bytes",
"internalType": "bytes"
},
{ "name": "provider", "type": "address", "internalType": "address" },
{ "name": "owner", "type": "address", "internalType": "address" },
{ "name": "account", "type": "address", "internalType": "address" }
],
"stateMutability": "view"
},
{
"type": "function",
"name": "simulate",
"inputs": [
{
"name": "targetContract",
"type": "address",
"internalType": "address"
},
{ "name": "calldataPayload", "type": "bytes", "internalType": "bytes" }
],
"outputs": [
{ "name": "response", "type": "bytes", "internalType": "bytes" }
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "supportsInterface",
"inputs": [
{ "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }
],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "tokensReceived",
"inputs": [
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "address", "internalType": "address" },
{ "name": "", "type": "uint256", "internalType": "uint256" },
{ "name": "", "type": "bytes", "internalType": "bytes" },
{ "name": "", "type": "bytes", "internalType": "bytes" }
],
"outputs": [],
"stateMutability": "pure"
},
{
"type": "function",
"name": "transferOwnership",
"inputs": [
{ "name": "newOwner", "type": "address", "internalType": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "twoFAFactory",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "upgradeToAndCall",
"inputs": [
{
"name": "newImplementation",
"type": "address",
"internalType": "address"
},
{ "name": "data", "type": "bytes", "internalType": "bytes" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "event",
"name": "Confirmed",
"inputs": [
{
"name": "provider",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "sessionOwner",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Initialized",
"inputs": [
{
"name": "version",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"type": "event",
"name": "OwnershipTransferred",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Requested",
"inputs": [
{
"name": "provider",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "sessionRequestHash",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Upgraded",
"inputs": [
{
"name": "implementation",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{ "type": "error", "name": "AccountNotCreated", "inputs": [] },
{
"type": "error",
"name": "AddressEmptyCode",
"inputs": [
{ "name": "target", "type": "address", "internalType": "address" }
]
},
{ "type": "error", "name": "ArrayLimitExceeded", "inputs": [] },
{ "type": "error", "name": "ChallengeExpired", "inputs": [] },
{
"type": "error",
"name": "ERC1967InvalidImplementation",
"inputs": [
{
"name": "implementation",
"type": "address",
"internalType": "address"
}
]
},
{ "type": "error", "name": "ERC1967NonPayable", "inputs": [] },
{ "type": "error", "name": "FailedInnerCall", "inputs": [] },
{ "type": "error", "name": "FailedToAddSigner", "inputs": [] },
{ "type": "error", "name": "FailedToRemoveSigner", "inputs": [] },
{ "type": "error", "name": "InvalidInitialization", "inputs": [] },
{ "type": "error", "name": "InvalidOwnerSignedSessionHash", "inputs": [] },
{ "type": "error", "name": "InvalidProvider", "inputs": [] },
{ "type": "error", "name": "InvalidSessionData", "inputs": [] },
{ "type": "error", "name": "NotInitializing", "inputs": [] },
{
"type": "error",
"name": "OwnableInvalidOwner",
"inputs": [
{ "name": "owner", "type": "address", "internalType": "address" }
]
},
{
"type": "error",
"name": "OwnableUnauthorizedAccount",
"inputs": [
{ "name": "account", "type": "address", "internalType": "address" }
]
},
{ "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] },
{ "type": "error", "name": "SessionOwnerIsProvider", "inputs": [] },
{ "type": "error", "name": "SessionRequestExpired", "inputs": [] },
{ "type": "error", "name": "SessionRequestNotFound", "inputs": [] },
{ "type": "error", "name": "SignerAlreadyExists", "inputs": [] },
{ "type": "error", "name": "SignerNotOwner", "inputs": [] },
{ "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] },
{
"type": "error",
"name": "UUPSUnsupportedProxiableUUID",
"inputs": [
{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }
]
}
],
"bytecode": {
"object": "0x60a06040523060805234801561001457600080fd5b506080516139ee61003e60003960008181611d1701528181611d400152611e8101526139ee6000f3fe6080604052600436106102035760003560e01c806375f0bb5211610118578063bd61951d116100a0578063f23a6e611161006f578063f23a6e611461068f578063f2fde38b146106bc578063f681de3b146106dc578063f698da251461070e578063ffa1ad741461072357600080fd5b8063bd61951d1461060f578063e26be2101461062f578063eb12d61e1461064f578063ee2b8f3e1461066f57600080fd5b80639b7177e7116100e75780639b7177e714610533578063a3f4df7e14610553578063ad3cb1cc1461058d578063b2494df3146105be578063bc197c81146105e057600080fd5b806375f0bb52146104825780637709bc78146104a25780638da5cb5b146104c3578063932713681461051457600080fd5b806345fd13151161019b5780635e413c5a1161016a5780635e413c5a146103ed5780636290319a1461040d5780636ac247841461042d578063715018a61461044d57806374a8f1031461046257600080fd5b806345fd131514610357578063485cc955146103a55780634f1ef286146103c557806352d1902d146103d857600080fd5b80631626ba7e116101d75780631626ba7e146102d757806320c13b0b146102f757806323031640146103175780633408e4701461034457600080fd5b806223de291461020857806301ffc9a71461022f5780630a1028c414610264578063150b7a0214610292575b600080fd5b34801561021457600080fd5b5061022d610223366004612ccd565b5050505050505050565b005b34801561023b57600080fd5b5061024f61024a366004612d93565b610754565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004612e65565b61078b565b60405190815260200161025b565b34801561029e57600080fd5b506102be6102ad366004612ea1565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161025b565b3480156102e357600080fd5b506102be6102f2366004612f13565b610797565b34801561030357600080fd5b506102be610312366004612f5e565b610855565b34801561032357600080fd5b50610337610332366004612fc1565b6109a0565b60405161025b9190613056565b34801561035057600080fd5b5046610284565b34801561036357600080fd5b50610377610372366004613069565b610ab2565b6040805165ffffffffffff90941684526001600160a01b03928316602085015291169082015260600161025b565b3480156103b157600080fd5b5061022d6103c0366004613095565b610b09565b61022d6103d3366004612fc1565b610c43565b3480156103e457600080fd5b50610284610c5e565b3480156103f957600080fd5b5061022d6104083660046130ce565b610c7b565b34801561041957600080fd5b5061024f610428366004613095565b610f37565b34801561043957600080fd5b50610284610448366004612fc1565b6110a6565b34801561045957600080fd5b5061022d6110c1565b34801561046e57600080fd5b5061022d61047d3660046130ce565b6110d5565b34801561048e57600080fd5b5061022d61049d3660046130fa565b611186565b3480156104ae57600080fd5b5061024f6104bd3660046130ce565b3b151590565b3480156104cf57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161025b565b34801561052057600080fd5b5061022d61052f3660046131ec565b5050565b34801561053f57600080fd5b5061022d61054e366004613227565b61119c565b34801561055f57600080fd5b506103376040518060400160405280600e81526020016d53657373696f6e204d6f64756c6560901b81525081565b34801561059957600080fd5b50610337604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156105ca57600080fd5b506105d36114ef565b60405161025b91906132ca565b3480156105ec57600080fd5b506102be6105fb36600461335b565b63bc197c8160e01b98975050505050505050565b34801561061b57600080fd5b5061033761062a3660046133f8565b61156a565b34801561063b57600080fd5b5061022d61064a366004613433565b6115b4565b34801561065b57600080fd5b5061022d61066a3660046130ce565b611a18565b34801561067b57600080fd5b506000546104fc906001600160a01b031681565b34801561069b57600080fd5b506102be6106aa366004613485565b63f23a6e6160e01b9695505050505050565b3480156106c857600080fd5b5061022d6106d73660046130ce565b611ac7565b3480156106e857600080fd5b506106fc6106f7366004613069565b611b02565b60405161025b96959493929190613500565b34801561071a57600080fd5b50610284611be5565b34801561072f57600080fd5b5061033760405180604001604052806005815260200164302e302e3360d81b81525081565b60006001600160e01b0319821663736bd41d60e11b148061078557506001600160e01b031982166301ffc9a760e01b145b92915050565b600061078533836110a6565b60408051602080820186905282518083039091018152818301928390526320c13b0b60e01b9092526000913391839183916320c13b0b916107de9189908990604401613556565b602060405180830381865afa1580156107fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081f919061359c565b90506001600160e01b031981166320c13b0b60e01b14610840576000610849565b630b135d3f60e11b5b925050505b9392505050565b6000338161086382866109a0565b8051602082012085519192509060000361092d57604051635ae6bd3760e01b8152600481018290526001600160a01b03841690635ae6bd3790602401602060405180830381865afa1580156108bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e091906135b9565b6000036109285760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08185c1c1c9bdd9959607a1b60448201526064015b60405180910390fd5b61098e565b60405163934f3a1160e01b81526001600160a01b0384169063934f3a119061095d90849086908a906004016135d2565b60006040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050505b506320c13b0b60e01b95945050505050565b606060007f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020016109ea929190918252602082015260400190565b604051602081830303815290604052805190602001209050601960f81b600160f81b856001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e91906135b9565b6040516001600160f81b0319938416602082015292909116602183015260228201526042810182905260620160405160208183030381529060405291505092915050565b60026020528160005260406000208181548110610ace57600080fd5b60009182526020909120600290910201805460019091015465ffffffffffff821693506001600160a01b03600160301b909204821692501683565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610b4e5750825b90506000826001600160401b03166001148015610b6a5750303b155b905081158015610b78575080155b15610b965760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bc057845460ff60401b1916600160401b1785555b610bc987611ce3565b610bd1611cf4565b610bd9611cfc565b600080546001600160a01b0319166001600160a01b0388161790558315610c3a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610c4b611d0c565b610c5482611db1565b61052f8282611db9565b6000610c68611e76565b5060008051602061397983398151915290565b6001600160a01b0381166000908152600260205260408120549003610c9d5750565b8060005b6001600160a01b038316600090815260026020526040902054811015610f32576001600160a01b0383166000908152600260205260409020805442919083908110610cee57610cee613607565b600091825260209091206002909102015465ffffffffffff161015610dfe576001600160a01b03831660009081526002602052604090208054610da4919083908110610d3c57610d3c613607565b60009182526020808320600292830201600101546001600160a01b038881168552929091526040909220805491909216919084908110610d7e57610d7e613607565b6000918252602090912060029091020154600160301b90046001600160a01b0316611ebf565b6001600160a01b0383166000908152600260205260409020805482908110610dce57610dce613607565b6000918252602090912060029091020180546001600160d01b031916815560010180546001600160a01b03191690555b816001600160a01b0316632f54bf6e60026000866001600160a01b03166001600160a01b031681526020019081526020016000208381548110610e4357610e43613607565b600091825260209091206002909102015460405160e083901b6001600160e01b0319168152600160301b9091046001600160a01b03166004820152602401602060405180830381865afa158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec2919061361d565b610f20576001600160a01b0383166000908152600260205260409020805482908110610ef057610ef0613607565b6000918252602090912060029091020180546001600160d01b031916815560010180546001600160a01b03191690555b80610f2a81613650565b915050610ca1565b505050565b6040516317aa5fb760e11b81526001600160a01b0382811660048301526000918291851690632f54bf6e90602401602060405180830381865afa158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa6919061361d565b905080610fb7576001915050610785565b600160005b6001600160a01b03861660009081526002602052604090205481101561109d576001600160a01b0386811660009081526002602052604090208054918716918390811061100b5761100b613607565b6000918252602090912060029091020154600160301b90046001600160a01b031614801561107d57506001600160a01b038616600090815260026020526040902080544291908390811061106157611061613607565b600091825260209091206002909102015465ffffffffffff1610155b1561108b576000915061109d565b8061109581613650565b915050610fbc565b50949350505050565b60006110b283836109a0565b80519060200120905092915050565b6110c9612194565b6110d360006121ef565b565b333b6110f45760405163041bbac760e31b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b03821660048201523390632f54bf6e90602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c919061361d565b611179576040516328e32f5760e11b815260040160405180910390fd5b6111833382611ebf565b50565b61118f81610c7b565b5050505050505050505050565b60008265ffffffffffff161180156111bb5750428265ffffffffffff16105b156111d957604051631c88b45d60e11b815260040160405180910390fd5b60008165ffffffffffff161180156111f85750428165ffffffffffff16105b156112165760405163f06506c560e01b815260040160405180910390fd5b3360008960008054604051635fbfb9cf60e01b81526001600160a01b0386811660048301526024820185905293945091921690635fbfb9cf906044016020604051808303816000875af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190613669565b90506112a081612260565b60006112e28b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e492505050565b9050836001600160a01b0316816001600160a01b03160361131657604051632ed3775360e11b815260040160405180910390fd5b6040518060c001604052808765ffffffffffff1681526020018665ffffffffffff16815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152602001856001600160a01b03168152602001826001600160a01b03168152602001836001600160a01b031681525060016000866001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160010190816114539190613706565b5060608201516002820180546001600160a01b03199081166001600160a01b03938416179091556080840151600384018054831691841691909117905560a09093015160049092018054909316918116919091179091556040518c8152908516907f070669e6be82aa9b077a096b0f9617893a4dc5cb05897e27fd7a6112c8e6629e9060200160405180910390a2505050505050505050505050565b604051636617c22960e11b815260016004820152600a60248201526060903390600090829063cc2f845290604401600060405180830381865afa15801561153a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611562919081019061384d565b509392505050565b606060405163b4faba0960e01b8152600436036004808301376020600036836000335af1505060203d036040519150808201604052806020833e5060005161084e57805160208201fd5b8315806115bf575082155b806115c8575080155b156115e657604051639bdfc59f60e01b815260040160405180910390fd5b3360009081526001602081815260408084208885528252808420815160c081018352815465ffffffffffff8082168352600160301b909104169381019390935292830180549293929184019161163b90613686565b80601f016020809104026020016040519081016040528092919081815260200182805461166790613686565b80156116b45780601f10611689576101008083540402835291602001916116b4565b820191906000526020600020905b81548152906001019060200180831161169757829003601f168201915b505050918352505060028201546001600160a01b039081166020830152600383015481166040830152600490920154821660609091015260808201519192501661171157604051631ae9d48f60e11b815260040160405180910390fd5b805165ffffffffffff1615801590611734575042816000015165ffffffffffff16105b1561175257604051631c88b45d60e11b815260040160405180910390fd5b6000816020015165ffffffffffff16118015611779575042816020015165ffffffffffff16105b156117975760405163f06506c560e01b815260040160405180910390fd5b606081015133906001600160a01b031681146117c657604051633b136dc160e11b815260040160405180910390fd5b6117d58186846040015161231d565b6117f257604051633b136dc160e11b815260040160405180910390fd5b81608001516001600160a01b03166118408686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e492505050565b6001600160a01b031614611867576040516389d52d5f60e01b815260040160405180910390fd5b6118798260a00151836080015161247b565b60a08201516001600160a01b031660009081526002602052604090205460001981106118b857604051635988e4b960e11b815260040160405180910390fd5b60a0830180516001600160a01b03908116600090815260026020818152604080842081516060810183528a5165ffffffffffff908116825260808c015188168286019081529851881682850190815283546001818101865594895286892093519702909201805499518916600160301b026001600160d01b0319909a169690911695909517979097178455955192860180549386166001600160a01b03199094169390931790925592861682528383528082208b835290925290812080546bffffffffffffffffffffffff191681559161199490830182612c12565b506002810180546001600160a01b03199081169091556003820180548216905560049091018054909116905560a083015160808401516040516001600160a01b03918216815291811691908416907f603c57ecb4a9802537649ceb6523e5d48c939e7856768ce6f9b3128a889a5cfe9060200160405180910390a350505050505050565b333b611a375760405163041bbac760e31b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b03821660048201523390632f54bf6e90602401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f919061361d565b15611abd57604051630e1857b360e21b815260040160405180910390fd5b611183338261247b565b611acf612194565b6001600160a01b038116611af957604051631e4fbdf760e01b81526000600482015260240161091f565b611183816121ef565b600160208181526000938452604080852090915291835291208054918101805465ffffffffffff80851694600160301b900416929190611b4190613686565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6d90613686565b8015611bba5780601f10611b8f57610100808354040283529160200191611bba565b820191906000526020600020905b815481529060010190602001808311611b9d57829003601f168201915b505050506002830154600384015460049094015492936001600160a01b039182169390821692501686565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6040518060400160405280600e81526020016d53657373696f6e204d6f64756c6560901b815250604051602001611c429190613893565b6040516020818303038152906040528051906020012060405180604001604052806005815260200164302e302e3360d81b815250604051602001611c869190613893565b60405160208183030381529060405280519060200120611ca34690565b604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611ceb6126fb565b61118381612744565b6110d36126fb565b611d046126fb565b6110d361274c565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d9357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d87600080516020613979833981519152546001600160a01b031690565b6001600160a01b031614155b156110d35760405163703e46dd60e11b815260040160405180910390fd5b611183612194565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e13575060408051601f3d908101601f19168201909252611e10918101906135b9565b60015b611e3b57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091f565b6000805160206139798339815191528114611e6c57604051632a87526960e21b81526004810182905260240161091f565b610f32838361277a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110d35760405163703e46dd60e11b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b038281166004830152839190821690632f54bf6e90602401602060405180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c919061361d565b611f49576040516328e32f5760e11b815260040160405180910390fd5b6000816001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad91906135b9565b90506000826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261201791908101906138af565b905060018460005b835181101561209e57866001600160a01b031684828151811061204457612044613607565b60200260200101516001600160a01b03160361208c578015612087578361206c6001836138e3565b8151811061207c5761207c613607565b602002602001015192505b61209e565b8061209681613650565b91505061201f565b506040516001600160a01b038084166024830152821660448201526064810185905260009060840160408051601f198184030181529181526020820180516001600160e01b031663f8dc5dd960e01b1790525163468721a760e01b81529091506000906001600160a01b038a169063468721a790612126908c908590879082906004016138f6565b6020604051808303816000875af1158015612145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612169919061361d565b905080612189576040516310da247360e01b815260040160405180910390fd5b505050505050505050565b336121c67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146110d35760405163118cdaa760e01b815233600482015260240161091f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b604080516020810182526000808252915163468721a760e01b815290916001600160a01b0384169163468721a7916122a191869190869082906004016138f6565b6020604051808303816000875af11580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f32919061361d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c839052603c812061084e90836127d0565b60008061232a84846122e4565b90506001600160a01b03811661234457600091505061084e565b846001600160a01b0316816001600160a01b03160361236757600191505061084e565b843b61237757600091505061084e565b604051630b135d3f60e11b81526001600160a01b03861690631626ba7e906123a5908790879060040161394c565b602060405180830381865afa9250505080156123de575060408051601f3d908101601f191682019092526123db9181019061359c565b60015b15612408576001600160e01b03198116630b135d3f60e11b036124065760019250505061084e565b505b6040516317aa5fb760e11b81526001600160a01b038281166004830152861690632f54bf6e90602401602060405180830381865afa15801561244e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612472919061361d565b95945050505050565b813b61249a5760405163041bbac760e31b815260040160405180910390fd5b6000826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261250291908101906138af565b5190506032612512826001613965565b11156125aa576125aa83846001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561255a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261258291908101906138af565b61258d6001856138e3565b8151811061259d5761259d613607565b6020026020010151611ebf565b6000836001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260e91906135b9565b6040516001600160a01b03851660248201526044810182905290915060009060640160408051601f198184030181529181526020820180516001600160e01b0316630d582f1360e01b1790525163468721a760e01b81529091506000906001600160a01b0387169063468721a7906126909089908590879082906004016138f6565b6020604051808303816000875af11580156126af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d3919061361d565b9050806126f35760405163dfae2d2f60e01b815260040160405180910390fd5b505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110d357604051631afcd79f60e31b815260040160405180910390fd5b611acf6126fb565b6127546126fb565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61278382612a36565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156127c857610f328282612a9b565b61052f612b08565b600081516041146128375760405162461bcd60e51b815260206004820152603a602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000606482015260840161091f565b60008260408151811061284c5761284c613607565b016020015160f81c905060006128628482612b27565b90506000612871856020612b27565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156128f75760405162461bcd60e51b815260206004820152603d602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265202773272076616c7565000000606482015260840161091f565b8260ff16601b1415801561290f57508260ff16601c14155b156129705760405162461bcd60e51b815260206004820152603d602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265202776272076616c7565000000606482015260840161091f565b60408051600081526020810180835288905260ff851691810191909152606081018390526080810182905260019060a0016020604051602081039080840390855afa1580156129c3573d6000803e3d6000fd5b5050604051601f1901519450506001600160a01b038416612a2d5760405162461bcd60e51b8152602060048201526030602482015260008051602061399983398151915260448201526f1d1024a72b20a624a22fa9a4a3a722a960811b606482015260840161091f565b50505092915050565b806001600160a01b03163b600003612a6c57604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091f565b60008051602061397983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ab89190613893565b600060405180830381855af49150503d8060008114612af3576040519150601f19603f3d011682016040523d82523d6000602084013e612af8565b606091505b5091509150612472858383612b8d565b34156110d35760405163b398979f60e01b815260040160405180910390fd5b6000612b34826020613965565b83511015612b845760405162461bcd60e51b815260206004820181905260248201527f72656164427974657333323a20696e76616c69642064617461206c656e677468604482015260640161091f565b50016020015190565b606082612ba257612b9d82612be9565b61084e565b8151158015612bb957506001600160a01b0384163b155b15612be257604051639996b31560e01b81526001600160a01b038516600482015260240161091f565b508061084e565b805115612bf95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054612c1e90613686565b6000825580601f10612c2e575050565b601f01602090049060005260206000209081019061118391905b80821115612c5c5760008155600101612c48565b5090565b6001600160a01b038116811461118357600080fd5b8035612c8081612c60565b919050565b60008083601f840112612c9757600080fd5b5081356001600160401b03811115612cae57600080fd5b602083019150836020828501011115612cc657600080fd5b9250929050565b60008060008060008060008060c0898b031215612ce957600080fd5b8835612cf481612c60565b97506020890135612d0481612c60565b96506040890135612d1481612c60565b95506060890135945060808901356001600160401b0380821115612d3757600080fd5b612d438c838d01612c85565b909650945060a08b0135915080821115612d5c57600080fd5b50612d698b828c01612c85565b999c989b5096995094979396929594505050565b6001600160e01b03198116811461118357600080fd5b600060208284031215612da557600080fd5b813561084e81612d7d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612dee57612dee612db0565b604052919050565b600082601f830112612e0757600080fd5b81356001600160401b03811115612e2057612e20612db0565b612e33601f8201601f1916602001612dc6565b818152846020838601011115612e4857600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612df6565b949350505050565b600080600080600060808688031215612eb957600080fd5b8535612ec481612c60565b94506020860135612ed481612c60565b93506040860135925060608601356001600160401b03811115612ef657600080fd5b612f0288828901612c85565b969995985093965092949392505050565b600080600060408486031215612f2857600080fd5b8335925060208401356001600160401b03811115612f4557600080fd5b612f5186828701612c85565b9497909650939450505050565b60008060408385031215612f7157600080fd5b82356001600160401b0380821115612f8857600080fd5b612f9486838701612df6565b93506020850135915080821115612faa57600080fd5b50612fb785828601612df6565b9150509250929050565b60008060408385031215612fd457600080fd5b8235612fdf81612c60565b915060208301356001600160401b03811115612ffa57600080fd5b612fb785828601612df6565b60005b83811015613021578181015183820152602001613009565b50506000910152565b60008151808452613042816020860160208601613006565b601f01601f19169290920160200192915050565b60208152600061084e602083018461302a565b6000806040838503121561307c57600080fd5b823561308781612c60565b946020939093013593505050565b600080604083850312156130a857600080fd5b82356130b381612c60565b915060208301356130c381612c60565b809150509250929050565b6000602082840312156130e057600080fd5b813561084e81612c60565b803560028110612c8057600080fd5b60008060008060008060008060008060006101608c8e03121561311c57600080fd5b6131258c612c75565b9a5060208c013599506001600160401b038060408e0135111561314757600080fd5b6131578e60408f01358f01612df6565b995061316560608e016130eb565b985060808d0135975060a08d0135965060c08d0135955061318860e08e01612c75565b94506131976101008e01612c75565b9350806101208e013511156131ab57600080fd5b506131bd8d6101208e01358e01612df6565b91506131cc6101408d01612c75565b90509295989b509295989b9093969950565b801515811461118357600080fd5b600080604083850312156131ff57600080fd5b8235915060208301356130c3816131de565b803565ffffffffffff81168114612c8057600080fd5b60008060008060008060008060c0898b03121561324357600080fd5b883597506020890135965060408901356001600160401b038082111561326857600080fd5b6132748c838d01612c85565b909850965060608b013591508082111561328d57600080fd5b5061329a8b828c01612c85565b90955093506132ad905060808a01613211565b91506132bb60a08a01613211565b90509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561330b5783516001600160a01b0316835292840192918401916001016132e6565b50909695505050505050565b60008083601f84011261332957600080fd5b5081356001600160401b0381111561334057600080fd5b6020830191508360208260051b8501011115612cc657600080fd5b60008060008060008060008060a0898b03121561337757600080fd5b883561338281612c60565b9750602089013561339281612c60565b965060408901356001600160401b03808211156133ae57600080fd5b6133ba8c838d01613317565b909850965060608b01359150808211156133d357600080fd5b6133df8c838d01613317565b909650945060808b0135915080821115612d5c57600080fd5b60008060006040848603121561340d57600080fd5b833561341881612c60565b925060208401356001600160401b03811115612f4557600080fd5b6000806000806060858703121561344957600080fd5b843593506020850135925060408501356001600160401b0381111561346d57600080fd5b61347987828801612c85565b95989497509550505050565b60008060008060008060a0878903121561349e57600080fd5b86356134a981612c60565b955060208701356134b981612c60565b9450604087013593506060870135925060808701356001600160401b038111156134e257600080fd5b6134ee89828a01612c85565b979a9699509497509295939492505050565b600065ffffffffffff808916835280881660208401525060c0604083015261352b60c083018761302a565b6001600160a01b039586166060840152938516608083015250921660a0909201919091529392505050565b604081526000613569604083018661302a565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b6000602082840312156135ae57600080fd5b815161084e81612d7d565b6000602082840312156135cb57600080fd5b5051919050565b8381526060602082015260006135eb606083018561302a565b82810360408401526135fd818561302a565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561362f57600080fd5b815161084e816131de565b634e487b7160e01b600052601160045260246000fd5b6000600182016136625761366261363a565b5060010190565b60006020828403121561367b57600080fd5b815161084e81612c60565b600181811c9082168061369a57607f821691505b6020821081036136ba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610f3257600081815260208120601f850160051c810160208610156136e75750805b601f850160051c820191505b818110156126f3578281556001016136f3565b81516001600160401b0381111561371f5761371f612db0565b6137338161372d8454613686565b846136c0565b602080601f83116001811461376857600084156137505750858301515b600019600386901b1c1916600185901b1785556126f3565b600085815260208120601f198616915b8281101561379757888601518255948401946001909101908401613778565b50858210156137b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126137d657600080fd5b815160206001600160401b038211156137f1576137f1612db0565b8160051b613800828201612dc6565b928352848101820192828101908785111561381a57600080fd5b83870192505b8483101561384257825161383381612c60565b82529183019190830190613820565b979650505050505050565b6000806040838503121561386057600080fd5b82516001600160401b0381111561387657600080fd5b613882858286016137c5565b92505060208301516130c381612c60565b600082516138a5818460208701613006565b9190910192915050565b6000602082840312156138c157600080fd5b81516001600160401b038111156138d757600080fd5b612e99848285016137c5565b818103818111156107855761078561363a565b60018060a01b038516815283602082015260806040820152600061391d608083018561302a565b90506002831061393d57634e487b7160e01b600052602160045260246000fd5b82606083015295945050505050565b828152604060208201526000612e99604083018461302a565b808201808211156107855761078561363a56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5369676e617475726556616c696461746f72237265636f7665725369676e6572a264697066735822122011b6d18a7d11abaf22e7086ce9359d1524d29cedb44931e393862fe88156fe1164736f6c63430008140033",
"sourceMap": "1779:21414:116:-:0;;;1171:4:32;1128:48;;1779:21414:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
"linkReferences": {}
},
"deployedBytecode": {
"object": "0x6080604052600436106102035760003560e01c806375f0bb5211610118578063bd61951d116100a0578063f23a6e611161006f578063f23a6e611461068f578063f2fde38b146106bc578063f681de3b146106dc578063f698da251461070e578063ffa1ad741461072357600080fd5b8063bd61951d1461060f578063e26be2101461062f578063eb12d61e1461064f578063ee2b8f3e1461066f57600080fd5b80639b7177e7116100e75780639b7177e714610533578063a3f4df7e14610553578063ad3cb1cc1461058d578063b2494df3146105be578063bc197c81146105e057600080fd5b806375f0bb52146104825780637709bc78146104a25780638da5cb5b146104c3578063932713681461051457600080fd5b806345fd13151161019b5780635e413c5a1161016a5780635e413c5a146103ed5780636290319a1461040d5780636ac247841461042d578063715018a61461044d57806374a8f1031461046257600080fd5b806345fd131514610357578063485cc955146103a55780634f1ef286146103c557806352d1902d146103d857600080fd5b80631626ba7e116101d75780631626ba7e146102d757806320c13b0b146102f757806323031640146103175780633408e4701461034457600080fd5b806223de291461020857806301ffc9a71461022f5780630a1028c414610264578063150b7a0214610292575b600080fd5b34801561021457600080fd5b5061022d610223366004612ccd565b5050505050505050565b005b34801561023b57600080fd5b5061024f61024a366004612d93565b610754565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004612e65565b61078b565b60405190815260200161025b565b34801561029e57600080fd5b506102be6102ad366004612ea1565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161025b565b3480156102e357600080fd5b506102be6102f2366004612f13565b610797565b34801561030357600080fd5b506102be610312366004612f5e565b610855565b34801561032357600080fd5b50610337610332366004612fc1565b6109a0565b60405161025b9190613056565b34801561035057600080fd5b5046610284565b34801561036357600080fd5b50610377610372366004613069565b610ab2565b6040805165ffffffffffff90941684526001600160a01b03928316602085015291169082015260600161025b565b3480156103b157600080fd5b5061022d6103c0366004613095565b610b09565b61022d6103d3366004612fc1565b610c43565b3480156103e457600080fd5b50610284610c5e565b3480156103f957600080fd5b5061022d6104083660046130ce565b610c7b565b34801561041957600080fd5b5061024f610428366004613095565b610f37565b34801561043957600080fd5b50610284610448366004612fc1565b6110a6565b34801561045957600080fd5b5061022d6110c1565b34801561046e57600080fd5b5061022d61047d3660046130ce565b6110d5565b34801561048e57600080fd5b5061022d61049d3660046130fa565b611186565b3480156104ae57600080fd5b5061024f6104bd3660046130ce565b3b151590565b3480156104cf57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161025b565b34801561052057600080fd5b5061022d61052f3660046131ec565b5050565b34801561053f57600080fd5b5061022d61054e366004613227565b61119c565b34801561055f57600080fd5b506103376040518060400160405280600e81526020016d53657373696f6e204d6f64756c6560901b81525081565b34801561059957600080fd5b50610337604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156105ca57600080fd5b506105d36114ef565b60405161025b919