diff --git a/src/content/applications/Tasks/settings/AdminOptions.tsx b/src/content/applications/Tasks/settings/AdminOptions.tsx index 0bdcbce..79999dc 100644 --- a/src/content/applications/Tasks/settings/AdminOptions.tsx +++ b/src/content/applications/Tasks/settings/AdminOptions.tsx @@ -8,7 +8,7 @@ import CoverAdminOptions from 'src/components/Cover/CoverAdminOptions'; const AdminOptions = () => { const taskService = useTaskService(); - const { handleRole, handleOperator } = useTaskServiceHook(taskService); + const { handleRole, handleOperator, handleQuorum, handleDeposit } = useTaskServiceHook(taskService); const [role, setRole] = useState({ roleId: "", @@ -22,37 +22,90 @@ const AdminOptions = () => { isAuthorized: false }); - const handleInputChange = (action: string, event: { target: { name: any; value: any; }; }) => { - if (action == 'role') { - setRole((prevRole) => ({ - ...prevRole, - [event.target.name]: event.target.value - })); - } else { - setOperator((prevOperator) => ({ - ...prevOperator, - [event.target.name]: event.target.value - })); + const [quorum, setQuorum] = useState({ + quorum: "" + }); + + const [deposit, setDeposit] = useState({ + roleId: "", + amount: "" + }); + const handleInputChange = (action: string, event: { target: { name: any; value: any; }; }) => { + switch (action) { + case "role": { + setRole((prevRole) => ({ + ...prevRole, + [event.target.name]: event.target.value + })); + break; + } + case "operator": { + setOperator((prevOperator) => ({ + ...prevOperator, + [event.target.name]: event.target.value + })); + break; + } + case "quorum": { + setQuorum((prevOperator) => ({ + ...prevOperator, + [event.target.name]: event.target.value + })); + break; + } + case "deposit": { + setDeposit((prevOperator) => ({ + ...prevOperator, + [event.target.name]: event.target.value + })); + break; + } + default: { + console.log('default'); + } } } const handleSubmit = async (action: string, event: { preventDefault: () => void; }) => { event.preventDefault(); - if (action == 'setRole') { - try { - await handleRole(role.roleId, role.authorizedAddress, role.isAuthorized); - - } catch (error) { - console.error('Erro ao enviar o formulário:', error); + switch (action) { + case "setRole": { + try { + await handleRole(role.roleId, role.authorizedAddress, role.isAuthorized); + + } catch (error) { + console.error('Erro ao enviar o formulário:', error); + } + break; } - } else { - try { - - await handleOperator(operator.interfaceId, operator.roleId, operator.isAuthorized) - } catch (error) { - console.error('Erro ao enviar o formulário:', error); + case "setOperator": { + try { + await handleOperator(operator.interfaceId, operator.roleId, operator.isAuthorized) + } catch (error) { + console.error('Erro ao enviar o formulário:', error); + } + break; + } + case "setQuorum": { + try { + await handleQuorum(BigInt(quorum.quorum)) + } catch (error) { + console.error('Erro ao enviar o formulário:', error); + } + break; + } + case "setDeposit": { + try { + await handleDeposit(deposit.roleId, deposit.amount) + } catch (error) { + console.error('Erro ao enviar o formulário:', error); + } + break; + } + default: { + break; } } }; @@ -61,31 +114,36 @@ const AdminOptions = () => { <> - - - - + + Deposit + (handleInputChange('deposit', event))} name='roleId' /> + (handleInputChange('deposit', event))} name='amount' /> + + + setRole (handleInputChange('role', event))} name='roleId' /> (handleInputChange('role', event))} name='authorizedAddress' /> (handleInputChange('role', event))} name='isAuthorized' /> - + - - + setOperator (handleInputChange('operator', event))} name='interfaceId' /> (handleInputChange('operator', event))} name='roleId' /> (handleInputChange('operator', event))} name='isAuthorized' /> - + + + + setQuorum + (handleInputChange('quorum', event))} name='Value' /> + - - - + ); }; diff --git a/src/contracts/31337/TasksManager.json b/src/contracts/31337/TasksManager.json index 5f1733f..ce04a2b 100644 --- a/src/contracts/31337/TasksManager.json +++ b/src/contracts/31337/TasksManager.json @@ -1303,8 +1303,8 @@ "type": "function" } ], - "bytecode": "0x60806040526002600a553480156200001657600080fd5b5060405180604001604052806008815260200167576562335461736b60c01b815250604051806040016040528060048152602001630ae66a8960e31b815250816000908162000066919062000135565b50600162000075828262000135565b5050600680546001600160a01b031916331790555062000201565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000bb57607f821691505b602082108103620000dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013057600081815260208120601f850160051c810160208610156200010b5750805b601f850160051c820191505b818110156200012c5782815560010162000117565b5050505b505050565b81516001600160401b0381111562000151576200015162000090565b6200016981620001628454620000a6565b84620000e2565b602080601f831160018114620001a15760008415620001885750858301515b600019600386901b1c1916600185901b1785556200012c565b600085815260208120601f198616915b82811015620001d257888601518255948401946001909101908401620001b1565b5085821015620001f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61373080620002116000396000f3fe6080604052600436106102255760003560e01c80635af4aa0511610123578063ac9650d8116100ab578063c87b56dd1161006f578063c87b56dd14610684578063e610a2dd146106a4578063e985e9c5146106c4578063ec2606c01461070d578063f3ae70f01461072d57600080fd5b8063ac9650d8146105f1578063b080114d14610611578063b6b55f2514610631578063b88d4fde14610644578063c66e95431461066457600080fd5b80638da5cb5b116100f25780638da5cb5b1461055157806395d576601461056f57806395d89b411461059c578063a053e7e9146105b1578063a22cb465146105d157600080fd5b80635af4aa05146104d15780636352211e146104f157806370a0823114610511578063751e89421461053157600080fd5b806323b872dd116101b15780634bbe46b4116101755780634bbe46b4146104465780635102bc9d1461045b5780635297a0281461047b578063563909de14610491578063593aa283146104b157600080fd5b806323b872dd146103b05780632a6446ca146103d05780633322b23d146103f057806342842e0e14610406578063441a3e701461042657600080fd5b8063108c8ae4116101f8578063108c8ae4146102db5780631397e04a146102fb57806313e9a2631461031b5780631d65e77e146103485780631e0104391461037557600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a6102453660046129a5565b61074d565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027461079f565b6040516102569190612a12565b34801561028d57600080fd5b506102a161029c366004612a25565b610831565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d4366004612a53565b610858565b005b3480156102e757600080fd5b5061024a6102f6366004612a7f565b610972565b34801561030757600080fd5b5061024a610316366004612a7f565b610c2d565b34801561032757600080fd5b5061033b610336366004612aa1565b610d28565b6040516102569190612b15565b34801561035457600080fd5b50610368610363366004612a25565b610e35565b6040516102569190612bea565b34801561038157600080fd5b506103a2610390366004612a25565b6000908152600c602052604090205490565b604051908152602001610256565b3480156103bc57600080fd5b506102d96103cb366004612cac565b611157565b3480156103dc57600080fd5b506102d96103eb366004612d98565b611188565b3480156103fc57600080fd5b506103a260095481565b34801561041257600080fd5b506102d9610421366004612cac565b6111e9565b34801561043257600080fd5b5061024a610441366004612a7f565b611204565b34801561045257600080fd5b506102d961137d565b34801561046757600080fd5b506102d9610476366004612d98565b61142c565b34801561048757600080fd5b506103a2600a5481565b34801561049d57600080fd5b506102d96104ac366004612a25565b611481565b3480156104bd57600080fd5b506102d96104cc366004612d98565b6114e9565b3480156104dd57600080fd5b506102d96104ec366004612df3565b61153e565b3480156104fd57600080fd5b506102a161050c366004612a25565b6115fc565b34801561051d57600080fd5b506103a261052c366004612e31565b61165c565b34801561053d57600080fd5b506102d961054c366004612a7f565b6116e2565b34801561055d57600080fd5b506006546001600160a01b03166102a1565b34801561057b57600080fd5b5061058f61058a366004612e31565b611733565b6040516102569190612e4e565b3480156105a857600080fd5b5061027461179f565b3480156105bd57600080fd5b5061024a6105cc366004612e61565b6117ae565b3480156105dd57600080fd5b506102d96105ec366004612e7f565b611806565b3480156105fd57600080fd5b5061033b61060c366004612aa1565b611815565b34801561061d57600080fd5b506102d961062c366004612eb4565b611902565b61024a61063f366004612a25565b6119b6565b34801561065057600080fd5b506102d961065f366004612ee9565b611a08565b34801561067057600080fd5b5061024a61067f366004612f68565b611a40565b34801561069057600080fd5b5061027461069f366004612a25565b611b82565b3480156106b057600080fd5b506103a26106bf366004612fb7565b611bf6565b3480156106d057600080fd5b5061024a6106df366004612ff2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071957600080fd5b5061024a61072836600461302b565b611ddb565b34801561073957600080fd5b5061024a610748366004612a7f565b611e32565b60006001600160e01b031982166380ac58cd60e01b148061077e57506001600160e01b03198216635b5e139f60e01b145b8061079957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107ae90613050565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90613050565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061083c82611fda565b506000908152600460205260409020546001600160a01b031690565b6000610863826115fc565b9050806001600160a01b0316836001600160a01b0316036108d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806108f157506108f181336106df565b6109635760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108cc565b61096d838361203c565b505050565b600063042322b960e21b82336109888282611ddb565b158061099b575061099983836117ae565b155b156109c45760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b60006109cf87610e35565b90506002815160048111156109e6576109e6612b77565b14610a07578051604051633ba7bf8960e11b81526108cc919060040161308a565b858160c0015114610a2d5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600e6020526040902054336001600160a01b0390911603610a6857604051633512759d60e21b81523360048201526024016108cc565b6000878152600e6020908152604080832080546001600160a01b03191633179055600d9091528120805491610a9c836130ae565b9091555050600a546000888152600d602052604090205403610c20576000878152600b60205260409020805460ff1916600317905560e0810151610ae090886120aa565b60008160e001516001600160a01b0316826060015160405160006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b50509050801580610b5c57506000878152600c60205260409020546060830151115b15610b99576000878152600c602052604090819020546060840151915163cf47918160e01b81526108cc9290600401918252602082015260400190565b877f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6003604051610bca919061308a565b60405180910390a28160e001516001600160a01b0316877f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf8460600151604051610c1691815260200190565b60405180910390a3505b5060019695505050505050565b60006309cbf02560e11b8233610c438282611ddb565b1580610c565750610c5483836117ae565b155b15610c7f5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000610c8a87610e35565b9050600481516004811115610ca157610ca1612b77565b03610cc2578051604051633ba7bf8960e11b81526108cc919060040161308a565b6000878152600b6020526040902080546004919060ff19166001830217905550867f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6004604051610d13919061308a565b60405180910390a25060019695505050505050565b6060816001600160401b03811115610d4257610d42612ced565b604051908082528060200260200182016040528015610d7557816020015b6060815260200190600190039081610d605790505b50905060005b82811015610e2e57600030858584818110610d9857610d986130c7565b9050602002810190610daa91906130dd565b604051610db892919061312a565b600060405180830381855afa9150503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091505080838381518110610e0f57610e0f6130c7565b6020026020010181905250508080610e26906130ae565b915050610d7b565b5092915050565b610e8e604080516101208101909152806000815260200160608152602001606081526020016000815260200160008152602001606081526020016000815260200160006001600160a01b03168152602001606081525090565b6000828152600b6020526040808220815161012081019092528054829060ff166004811115610ebf57610ebf612b77565b6004811115610ed057610ed0612b77565b8152602001600182018054610ee490613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1090613050565b8015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b50505050508152602001600282018054610f7690613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa290613050565b8015610fef5780601f10610fc457610100808354040283529160200191610fef565b820191906000526020600020905b815481529060010190602001808311610fd257829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820180548060200260200160405190810160405280929190818152602001828054801561105b57602002820191906000526020600020905b815481526020019060010190808311611047575b50505091835250506006820154602082015260078201546001600160a01b0316604082015260088201805460609092019161109590613050565b80601f01602080910402602001604051908101604052809291908181526020018280546110c190613050565b801561110e5780601f106110e35761010080835404028352916020019161110e565b820191906000526020600020905b8154815290600101906020018083116110f157829003601f168201915b5050505050815250509050428160800151101561079957806080015160000361114d576040516345e2cbed60e01b8152600481018490526024016108cc565b6004815292915050565b6111613382612235565b61117d5760405162461bcd60e51b81526004016108cc9061313a565b61096d8383836122b4565b61119182612418565b6000828152600b602052604090206002016111ac82826131dc565b50817ff608c377d37afaf8d19d5b32cb0cb388e64cc92b5b8e263396f34a562b99d371826040516111dd9190612a12565b60405180910390a25050565b61096d83838360405180602001604052806000815250611a08565b6000630441a3e760e41b833361121a8282611ddb565b158061122d575061122b83836117ae565b155b156112565760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000868152600c6020526040902054858110156112a1576000878152600c60205260409081902054905163cf47918160e01b81526004810191909152602481018790526044016108cc565b6000878152600c6020526040812080548892906112bf90849061329f565b9091555050604051600090339088908381818185875af1925050503d8060008114611306576040519150601f19603f3d011682016040523d82523d6000602084013e61130b565b606091505b50509050806113375760405163cf47918160e01b815260048101839052602481018890526044016108cc565b604051878152339089907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf906020015b60405180910390a3506001979650505050505050565b6006546001600160a01b031633146113aa5760405163472511eb60e11b81523360048201526024016108cc565b60405133904790600081818185875af1925050503d80600081146113ea576040519150601f19603f3d011682016040523d82523d6000602084013e6113ef565b606091505b50506040514781523391506000907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf9060200160405180910390a3565b61143582612418565b6000828152600b6020526040902060010161145082826131dc565b50817f56f46d3f19f6cbee6fd2120d9a27053b85f976606730b6c2ce520d477fae4292826040516111dd9190612a12565b6006546001600160a01b031633146114ae5760405163472511eb60e11b81523360048201526024016108cc565b600a8190556040518181527ff18f88786aae85a652aadb99a82462616489a33370c9bcc7b245906812ef7cd19060200160405180910390a150565b6114f282612418565b6000828152600b6020526040902060080161150d82826131dc565b50817f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c47309826040516111dd9190612a12565b6006546001600160a01b0316331461156b5760405163472511eb60e11b81523360048201526024016108cc565b8160000361158f576040516336b242eb60e21b8152600481018390526024016108cc565b6001600160e01b031983166000818152600860209081526040808320868452825291829020805460ff191685151590811790915591519182528492917ff72cf37738ab1ee401cdc8f05bc3e31194ed55e5bcfd1ad48093b595c2a621d291015b60405180910390a3505050565b6000818152600260205260408120546001600160a01b0316806107995760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b60006001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108cc565b506001600160a01b031660009081526003602052604090205490565b6116eb82612418565b6000828152600b6020526040908190206004018290555182907f275dd536a6956e78302b90e20bb13c379fb11632284794aa77ad452d0f472a15906111dd9084815260200190565b6001600160a01b0381166000908152600f602090815260409182902080548351818402810184019094528084526060939283018282801561179357602002820191906000526020600020905b81548152602001906001019080831161177f575b50505050509050919050565b6060600180546107ae90613050565b6000336117c36006546001600160a01b031690565b6001600160a01b0316036117d957506001610799565b506001600160e01b0319919091166000908152600860209081526040808320938352929052205460ff1690565b6118113383836124a7565b5050565b6060816001600160401b0381111561182f5761182f612ced565b60405190808252806020026020018201604052801561186257816020015b606081526020019060019003908161184d5790505b50905060005b82811015610e2e576118d230858584818110611886576118866130c7565b905060200281019061189891906130dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061256d92505050565b8282815181106118e4576118e46130c7565b602002602001018190525080806118fa906130ae565b915050611868565b6006546001600160a01b0316331461192f5760405163472511eb60e11b81523360048201526024016108cc565b82600003611953576040516336b242eb60e21b8152600481018490526024016108cc565b60008381526007602090815260408083206001600160a01b03861680855290835292819020805460ff1916851515908117909155905190815285917f394b55d0358e2f1133a0f0c1d37af480d46b61463faa7e9cee65134ccf54248591016115ef565b6000818152600c6020908152604080832034908190559051908152339184917feaa18152488ce5959073c9c79c88ca90b3d96c00de1f118cfaad664c3dab06b9910160405180910390a3506001919050565b611a123383612235565b611a2e5760405162461bcd60e51b81526004016108cc9061313a565b611a3a84848484612592565b50505050565b600063c66e954360e01b8333611a568282611ddb565b1580611a695750611a6783836117ae565b155b15611a925760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611a9d88610e35565b60e08101519091506001600160a01b03163314611ada57868160c0015114611ada5760405163472511eb60e11b81523360048201526024016108cc565b600181516004811115611aef57611aef612b77565b03611b12576000888152600b60205260409020805460ff19166002179055611b48565b600281516004811115611b2757611b27612b77565b14611b48578051604051633ba7bf8960e11b81526108cc919060040161308a565b336001600160a01b0316887fa113d8544e03d8ca3bb9efae1a2a4ffedc87358f9cab0647fdcfbcac72f6ac83886040516113679190612a12565b6060611b8d82611fda565b6000611ba460408051602081019091526000815290565b90506000815111611bc45760405180602001604052806000815250611bef565b80611bce846125c5565b604051602001611bdf9291906132b2565b6040516020818303038152906040525b9392505050565b600063e610a2dd60e01b60c083013533611c108282611ddb565b1580611c235750611c2183836117ae565b155b15611c4c5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b4285608001351015611c7d5760405163a32789d960e01b8152608086013560048201524260248201526044016108cc565b6000611c8c60208701876132ee565b6004811115611c9d57611c9d612b77565b14611cc957611caf60208601866132ee565b604051633ba7bf8960e11b81526004016108cc919061308a565b60c08501356000908152600c60205260409020546060860135811015611d0f5760405163cf47918160e01b815260048101829052606087013560248201526044016108cc565b60098054600101908190556000908152600b602052604090208690611d3482826134e6565b5050336000908152600f60209081526040822060095481546001810183559184529190922090910155611d6e610100870160e08801612e31565b6001600160a01b0316336001600160a01b03166009547f487933e034710db4f40e8db61e822d2fff54215ca95e11baff632af66e1fbab689606001358a60800135604051611dc6929190918252602082015260400190565b60405180910390a45050600954949350505050565b600033611df06006546001600160a01b031690565b6001600160a01b031603611e0657506001610799565b5060009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000630f3ae70f60e41b8233611e488282611ddb565b1580611e5b5750611e5983836117ae565b155b15611e845760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611e8f87610e35565b9050600081516004811115611ea657611ea6612b77565b14611ec7578051604051633ba7bf8960e11b81526108cc919060040161308a565b611ed58160a0015187612657565b611ef5576040516336b242eb60e21b8152600481018790526024016108cc565b60e08101516001600160a01b0316611f2d576000878152600b6020526040902060070180546001600160a01b03191633179055611f5c565b60e08101516001600160a01b03163314611f5c5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600b60209081526040808320805460ff1916600190811790915560e08501516001600160a01b03168452600f835281842080549182018155845291832090910189905551339189917f51747b1d57e7c06f70f592aaaefde3fc6cd4b89a2e45b9f53126f2acf054c3d29190a35060019695505050505050565b6000818152600260205260409020546001600160a01b03166120395760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612071826115fc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382166121005760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121655760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121ca5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080612241836115fc565b9050806001600160a01b0316846001600160a01b0316148061228857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806122ac5750836001600160a01b03166122a184610831565b6001600160a01b0316145b949350505050565b826001600160a01b03166122c7826115fc565b6001600160a01b0316146122ed5760405162461bcd60e51b81526004016108cc906135bc565b6001600160a01b03821661234f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108cc565b826001600160a01b0316612362826115fc565b6001600160a01b0316146123885760405162461bcd60e51b81526004016108cc906135bc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061242382610e35565b905060038151600481111561243a5761243a612b77565b1480612458575060048151600481111561245657612456612b77565b145b1561247a5780516040516306f4489360e11b81526108cc918491600401613601565b6124888160c0015133611ddb565b6118115760405163472511eb60e11b81523360048201526024016108cc565b816001600160a01b0316836001600160a01b0316036125085760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016115ef565b6060611bef83836040518060600160405280602781526020016136d4602791396126a0565b61259d8484846122b4565b6125a984848484612718565b611a3a5760405162461bcd60e51b81526004016108cc90613615565b606060006125d283612819565b60010190506000816001600160401b038111156125f1576125f1612ced565b6040519080825280601f01601f19166020018201604052801561261b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461262557509392505050565b6000805b83518110156126965782848281518110612677576126776130c7565b60200260200101510361268e576001915050610799565b60010161265b565b5060009392505050565b6060600080856001600160a01b0316856040516126bd9190613667565b600060405180830381855af49150503d80600081146126f8576040519150601f19603f3d011682016040523d82523d6000602084013e6126fd565b606091505b509150915061270e868383876128f1565b9695505050505050565b60006001600160a01b0384163b1561280e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061275c903390899088908890600401613683565b6020604051808303816000875af1925050508015612797575060408051601f3d908101601f19168201909252612794918101906136b6565b60015b6127f4573d8080156127c5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ca565b606091505b5080516000036127ec5760405162461bcd60e51b81526004016108cc90613615565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506122ac565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106128585772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612884576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106128a257662386f26fc10000830492506010015b6305f5e10083106128ba576305f5e100830492506008015b61271083106128ce57612710830492506004015b606483106128e0576064830492506002015b600a83106107995760010192915050565b60608315612960578251600003612959576001600160a01b0385163b6129595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108cc565b50816122ac565b6122ac83838151156129755781518083602001fd5b8060405162461bcd60e51b81526004016108cc9190612a12565b6001600160e01b03198116811461203957600080fd5b6000602082840312156129b757600080fd5b8135611bef8161298f565b60005b838110156129dd5781810151838201526020016129c5565b50506000910152565b600081518084526129fe8160208601602086016129c2565b601f01601f19169290920160200192915050565b602081526000611bef60208301846129e6565b600060208284031215612a3757600080fd5b5035919050565b6001600160a01b038116811461203957600080fd5b60008060408385031215612a6657600080fd5b8235612a7181612a3e565b946020939093013593505050565b60008060408385031215612a9257600080fd5b50508035926020909101359150565b60008060208385031215612ab457600080fd5b82356001600160401b0380821115612acb57600080fd5b818501915085601f830112612adf57600080fd5b813581811115612aee57600080fd5b8660208260051b8501011115612b0357600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612b6a57603f19888603018452612b588583516129e6565b94509285019290850190600101612b3c565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b60058110612bab57634e487b7160e01b600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b83811015612bdf57815187529582019590820190600101612bc3565b509495945050505050565b60208152612bfc602082018351612b8d565b60006020830151610120806040850152612c1a6101408501836129e6565b91506040850151601f1980868503016060870152612c3884836129e6565b935060608701516080870152608087015160a087015260a08701519150808685030160c0870152612c698483612baf565b935060c087015160e087015260e08701519150610100612c93818801846001600160a01b03169052565b87015186850390910183870152905061270e83826129e6565b600080600060608486031215612cc157600080fd5b8335612ccc81612a3e565b92506020840135612cdc81612a3e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612d1d57612d1d612ced565b604051601f8501601f19908116603f01168101908282118183101715612d4557612d45612ced565b81604052809350858152868686011115612d5e57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612d8957600080fd5b611bef83833560208501612d03565b60008060408385031215612dab57600080fd5b8235915060208301356001600160401b03811115612dc857600080fd5b612dd485828601612d78565b9150509250929050565b80358015158114612dee57600080fd5b919050565b600080600060608486031215612e0857600080fd5b8335612e138161298f565b925060208401359150612e2860408501612dde565b90509250925092565b600060208284031215612e4357600080fd5b8135611bef81612a3e565b602081526000611bef6020830184612baf565b60008060408385031215612e7457600080fd5b8235612a718161298f565b60008060408385031215612e9257600080fd5b8235612e9d81612a3e565b9150612eab60208401612dde565b90509250929050565b600080600060608486031215612ec957600080fd5b833592506020840135612edb81612a3e565b9150612e2860408501612dde565b60008060008060808587031215612eff57600080fd5b8435612f0a81612a3e565b93506020850135612f1a81612a3e565b92506040850135915060608501356001600160401b03811115612f3c57600080fd5b8501601f81018713612f4d57600080fd5b612f5c87823560208401612d03565b91505092959194509250565b600080600060608486031215612f7d57600080fd5b833592506020840135915060408401356001600160401b03811115612fa157600080fd5b612fad86828701612d78565b9150509250925092565b600060208284031215612fc957600080fd5b81356001600160401b03811115612fdf57600080fd5b82016101208185031215611bef57600080fd5b6000806040838503121561300557600080fd5b823561301081612a3e565b9150602083013561302081612a3e565b809150509250929050565b6000806040838503121561303e57600080fd5b82359150602083013561302081612a3e565b600181811c9082168061306457607f821691505b60208210810361308457634e487b7160e01b600052602260045260246000fd5b50919050565b602081016107998284612b8d565b634e487b7160e01b600052601160045260246000fd5b6000600182016130c0576130c0613098565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126130f457600080fd5b8301803591506001600160401b0382111561310e57600080fd5b60200191503681900382131561312357600080fd5b9250929050565b8183823760009101908152919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5b818110156118115760008155600101613188565b601f82111561096d57806000526020600020601f840160051c810160208510156131c35750805b6131d5601f850160051c830182613187565b5050505050565b81516001600160401b038111156131f5576131f5612ced565b613209816132038454613050565b8461319c565b602080601f83116001811461323e57600084156132265750858301515b600019600386901b1c1916600185901b178555613297565b600085815260208120601f198616915b8281101561326d5788860151825594840194600190910190840161324e565b508582101561328b5787850151600019600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561079957610799613098565b600083516132c48184602088016129c2565b8351908301906132d88183602088016129c2565b01949350505050565b6005811061203957600080fd5b60006020828403121561330057600080fd5b8135611bef816132e1565b60008135610799816132e1565b6005821061333657634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b6001600160401b0383111561336057613360612ced565b6133748361336e8354613050565b8361319c565b6000601f8411600181146133a857600085156133905750838201355b600019600387901b1c1916600186901b1783556131d5565b600083815260209020601f19861690835b828110156133d957868501358255602094850194600190920191016133b9565b50868210156133f65760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000808335601e1984360301811261341f57600080fd5b8301803591506001600160401b0382111561343957600080fd5b6020019150600581901b360382131561312357600080fd5b6001600160401b0383111561346857613468612ced565b6801000000000000000083111561348157613481612ced565b8054838255808410156134a7578160005260206000206134a5828201868301613187565b505b50818160005260208060002060005b868110156134d057833582820155928201926001016134b6565b50505050505050565b6000813561079981612a3e565b6134f86134f28361330b565b82613318565b61350560208301836130dd565b613513818360018601613349565b505061352260408301836130dd565b613530818360028601613349565b5050606082013560038201556080820135600482015561355360a0830183613408565b613561818360058601613451565b505060c082013560068201556135a061357c60e084016134d9565b6007830180546001600160a01b0319166001600160a01b0392909216919091179055565b6135ae6101008301836130dd565b611a3a818360088601613349565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b82815260408101611bef6020830184612b8d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082516136798184602087016129c2565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061270e908301846129e6565b6000602082840312156136c857600080fd5b8151611bef8161298f56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207ba80914af20077f61cd9158cba7e55c029fde36544faa1e64fa65a98e844ae664736f6c63430008140033", - "deployedBytecode": "0x6080604052600436106102255760003560e01c80635af4aa0511610123578063ac9650d8116100ab578063c87b56dd1161006f578063c87b56dd14610684578063e610a2dd146106a4578063e985e9c5146106c4578063ec2606c01461070d578063f3ae70f01461072d57600080fd5b8063ac9650d8146105f1578063b080114d14610611578063b6b55f2514610631578063b88d4fde14610644578063c66e95431461066457600080fd5b80638da5cb5b116100f25780638da5cb5b1461055157806395d576601461056f57806395d89b411461059c578063a053e7e9146105b1578063a22cb465146105d157600080fd5b80635af4aa05146104d15780636352211e146104f157806370a0823114610511578063751e89421461053157600080fd5b806323b872dd116101b15780634bbe46b4116101755780634bbe46b4146104465780635102bc9d1461045b5780635297a0281461047b578063563909de14610491578063593aa283146104b157600080fd5b806323b872dd146103b05780632a6446ca146103d05780633322b23d146103f057806342842e0e14610406578063441a3e701461042657600080fd5b8063108c8ae4116101f8578063108c8ae4146102db5780631397e04a146102fb57806313e9a2631461031b5780631d65e77e146103485780631e0104391461037557600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a6102453660046129a5565b61074d565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027461079f565b6040516102569190612a12565b34801561028d57600080fd5b506102a161029c366004612a25565b610831565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d4366004612a53565b610858565b005b3480156102e757600080fd5b5061024a6102f6366004612a7f565b610972565b34801561030757600080fd5b5061024a610316366004612a7f565b610c2d565b34801561032757600080fd5b5061033b610336366004612aa1565b610d28565b6040516102569190612b15565b34801561035457600080fd5b50610368610363366004612a25565b610e35565b6040516102569190612bea565b34801561038157600080fd5b506103a2610390366004612a25565b6000908152600c602052604090205490565b604051908152602001610256565b3480156103bc57600080fd5b506102d96103cb366004612cac565b611157565b3480156103dc57600080fd5b506102d96103eb366004612d98565b611188565b3480156103fc57600080fd5b506103a260095481565b34801561041257600080fd5b506102d9610421366004612cac565b6111e9565b34801561043257600080fd5b5061024a610441366004612a7f565b611204565b34801561045257600080fd5b506102d961137d565b34801561046757600080fd5b506102d9610476366004612d98565b61142c565b34801561048757600080fd5b506103a2600a5481565b34801561049d57600080fd5b506102d96104ac366004612a25565b611481565b3480156104bd57600080fd5b506102d96104cc366004612d98565b6114e9565b3480156104dd57600080fd5b506102d96104ec366004612df3565b61153e565b3480156104fd57600080fd5b506102a161050c366004612a25565b6115fc565b34801561051d57600080fd5b506103a261052c366004612e31565b61165c565b34801561053d57600080fd5b506102d961054c366004612a7f565b6116e2565b34801561055d57600080fd5b506006546001600160a01b03166102a1565b34801561057b57600080fd5b5061058f61058a366004612e31565b611733565b6040516102569190612e4e565b3480156105a857600080fd5b5061027461179f565b3480156105bd57600080fd5b5061024a6105cc366004612e61565b6117ae565b3480156105dd57600080fd5b506102d96105ec366004612e7f565b611806565b3480156105fd57600080fd5b5061033b61060c366004612aa1565b611815565b34801561061d57600080fd5b506102d961062c366004612eb4565b611902565b61024a61063f366004612a25565b6119b6565b34801561065057600080fd5b506102d961065f366004612ee9565b611a08565b34801561067057600080fd5b5061024a61067f366004612f68565b611a40565b34801561069057600080fd5b5061027461069f366004612a25565b611b82565b3480156106b057600080fd5b506103a26106bf366004612fb7565b611bf6565b3480156106d057600080fd5b5061024a6106df366004612ff2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071957600080fd5b5061024a61072836600461302b565b611ddb565b34801561073957600080fd5b5061024a610748366004612a7f565b611e32565b60006001600160e01b031982166380ac58cd60e01b148061077e57506001600160e01b03198216635b5e139f60e01b145b8061079957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107ae90613050565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90613050565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061083c82611fda565b506000908152600460205260409020546001600160a01b031690565b6000610863826115fc565b9050806001600160a01b0316836001600160a01b0316036108d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806108f157506108f181336106df565b6109635760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108cc565b61096d838361203c565b505050565b600063042322b960e21b82336109888282611ddb565b158061099b575061099983836117ae565b155b156109c45760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b60006109cf87610e35565b90506002815160048111156109e6576109e6612b77565b14610a07578051604051633ba7bf8960e11b81526108cc919060040161308a565b858160c0015114610a2d5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600e6020526040902054336001600160a01b0390911603610a6857604051633512759d60e21b81523360048201526024016108cc565b6000878152600e6020908152604080832080546001600160a01b03191633179055600d9091528120805491610a9c836130ae565b9091555050600a546000888152600d602052604090205403610c20576000878152600b60205260409020805460ff1916600317905560e0810151610ae090886120aa565b60008160e001516001600160a01b0316826060015160405160006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b50509050801580610b5c57506000878152600c60205260409020546060830151115b15610b99576000878152600c602052604090819020546060840151915163cf47918160e01b81526108cc9290600401918252602082015260400190565b877f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6003604051610bca919061308a565b60405180910390a28160e001516001600160a01b0316877f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf8460600151604051610c1691815260200190565b60405180910390a3505b5060019695505050505050565b60006309cbf02560e11b8233610c438282611ddb565b1580610c565750610c5483836117ae565b155b15610c7f5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000610c8a87610e35565b9050600481516004811115610ca157610ca1612b77565b03610cc2578051604051633ba7bf8960e11b81526108cc919060040161308a565b6000878152600b6020526040902080546004919060ff19166001830217905550867f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6004604051610d13919061308a565b60405180910390a25060019695505050505050565b6060816001600160401b03811115610d4257610d42612ced565b604051908082528060200260200182016040528015610d7557816020015b6060815260200190600190039081610d605790505b50905060005b82811015610e2e57600030858584818110610d9857610d986130c7565b9050602002810190610daa91906130dd565b604051610db892919061312a565b600060405180830381855afa9150503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091505080838381518110610e0f57610e0f6130c7565b6020026020010181905250508080610e26906130ae565b915050610d7b565b5092915050565b610e8e604080516101208101909152806000815260200160608152602001606081526020016000815260200160008152602001606081526020016000815260200160006001600160a01b03168152602001606081525090565b6000828152600b6020526040808220815161012081019092528054829060ff166004811115610ebf57610ebf612b77565b6004811115610ed057610ed0612b77565b8152602001600182018054610ee490613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1090613050565b8015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b50505050508152602001600282018054610f7690613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa290613050565b8015610fef5780601f10610fc457610100808354040283529160200191610fef565b820191906000526020600020905b815481529060010190602001808311610fd257829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820180548060200260200160405190810160405280929190818152602001828054801561105b57602002820191906000526020600020905b815481526020019060010190808311611047575b50505091835250506006820154602082015260078201546001600160a01b0316604082015260088201805460609092019161109590613050565b80601f01602080910402602001604051908101604052809291908181526020018280546110c190613050565b801561110e5780601f106110e35761010080835404028352916020019161110e565b820191906000526020600020905b8154815290600101906020018083116110f157829003601f168201915b5050505050815250509050428160800151101561079957806080015160000361114d576040516345e2cbed60e01b8152600481018490526024016108cc565b6004815292915050565b6111613382612235565b61117d5760405162461bcd60e51b81526004016108cc9061313a565b61096d8383836122b4565b61119182612418565b6000828152600b602052604090206002016111ac82826131dc565b50817ff608c377d37afaf8d19d5b32cb0cb388e64cc92b5b8e263396f34a562b99d371826040516111dd9190612a12565b60405180910390a25050565b61096d83838360405180602001604052806000815250611a08565b6000630441a3e760e41b833361121a8282611ddb565b158061122d575061122b83836117ae565b155b156112565760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000868152600c6020526040902054858110156112a1576000878152600c60205260409081902054905163cf47918160e01b81526004810191909152602481018790526044016108cc565b6000878152600c6020526040812080548892906112bf90849061329f565b9091555050604051600090339088908381818185875af1925050503d8060008114611306576040519150601f19603f3d011682016040523d82523d6000602084013e61130b565b606091505b50509050806113375760405163cf47918160e01b815260048101839052602481018890526044016108cc565b604051878152339089907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf906020015b60405180910390a3506001979650505050505050565b6006546001600160a01b031633146113aa5760405163472511eb60e11b81523360048201526024016108cc565b60405133904790600081818185875af1925050503d80600081146113ea576040519150601f19603f3d011682016040523d82523d6000602084013e6113ef565b606091505b50506040514781523391506000907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf9060200160405180910390a3565b61143582612418565b6000828152600b6020526040902060010161145082826131dc565b50817f56f46d3f19f6cbee6fd2120d9a27053b85f976606730b6c2ce520d477fae4292826040516111dd9190612a12565b6006546001600160a01b031633146114ae5760405163472511eb60e11b81523360048201526024016108cc565b600a8190556040518181527ff18f88786aae85a652aadb99a82462616489a33370c9bcc7b245906812ef7cd19060200160405180910390a150565b6114f282612418565b6000828152600b6020526040902060080161150d82826131dc565b50817f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c47309826040516111dd9190612a12565b6006546001600160a01b0316331461156b5760405163472511eb60e11b81523360048201526024016108cc565b8160000361158f576040516336b242eb60e21b8152600481018390526024016108cc565b6001600160e01b031983166000818152600860209081526040808320868452825291829020805460ff191685151590811790915591519182528492917ff72cf37738ab1ee401cdc8f05bc3e31194ed55e5bcfd1ad48093b595c2a621d291015b60405180910390a3505050565b6000818152600260205260408120546001600160a01b0316806107995760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b60006001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108cc565b506001600160a01b031660009081526003602052604090205490565b6116eb82612418565b6000828152600b6020526040908190206004018290555182907f275dd536a6956e78302b90e20bb13c379fb11632284794aa77ad452d0f472a15906111dd9084815260200190565b6001600160a01b0381166000908152600f602090815260409182902080548351818402810184019094528084526060939283018282801561179357602002820191906000526020600020905b81548152602001906001019080831161177f575b50505050509050919050565b6060600180546107ae90613050565b6000336117c36006546001600160a01b031690565b6001600160a01b0316036117d957506001610799565b506001600160e01b0319919091166000908152600860209081526040808320938352929052205460ff1690565b6118113383836124a7565b5050565b6060816001600160401b0381111561182f5761182f612ced565b60405190808252806020026020018201604052801561186257816020015b606081526020019060019003908161184d5790505b50905060005b82811015610e2e576118d230858584818110611886576118866130c7565b905060200281019061189891906130dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061256d92505050565b8282815181106118e4576118e46130c7565b602002602001018190525080806118fa906130ae565b915050611868565b6006546001600160a01b0316331461192f5760405163472511eb60e11b81523360048201526024016108cc565b82600003611953576040516336b242eb60e21b8152600481018490526024016108cc565b60008381526007602090815260408083206001600160a01b03861680855290835292819020805460ff1916851515908117909155905190815285917f394b55d0358e2f1133a0f0c1d37af480d46b61463faa7e9cee65134ccf54248591016115ef565b6000818152600c6020908152604080832034908190559051908152339184917feaa18152488ce5959073c9c79c88ca90b3d96c00de1f118cfaad664c3dab06b9910160405180910390a3506001919050565b611a123383612235565b611a2e5760405162461bcd60e51b81526004016108cc9061313a565b611a3a84848484612592565b50505050565b600063c66e954360e01b8333611a568282611ddb565b1580611a695750611a6783836117ae565b155b15611a925760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611a9d88610e35565b60e08101519091506001600160a01b03163314611ada57868160c0015114611ada5760405163472511eb60e11b81523360048201526024016108cc565b600181516004811115611aef57611aef612b77565b03611b12576000888152600b60205260409020805460ff19166002179055611b48565b600281516004811115611b2757611b27612b77565b14611b48578051604051633ba7bf8960e11b81526108cc919060040161308a565b336001600160a01b0316887fa113d8544e03d8ca3bb9efae1a2a4ffedc87358f9cab0647fdcfbcac72f6ac83886040516113679190612a12565b6060611b8d82611fda565b6000611ba460408051602081019091526000815290565b90506000815111611bc45760405180602001604052806000815250611bef565b80611bce846125c5565b604051602001611bdf9291906132b2565b6040516020818303038152906040525b9392505050565b600063e610a2dd60e01b60c083013533611c108282611ddb565b1580611c235750611c2183836117ae565b155b15611c4c5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b4285608001351015611c7d5760405163a32789d960e01b8152608086013560048201524260248201526044016108cc565b6000611c8c60208701876132ee565b6004811115611c9d57611c9d612b77565b14611cc957611caf60208601866132ee565b604051633ba7bf8960e11b81526004016108cc919061308a565b60c08501356000908152600c60205260409020546060860135811015611d0f5760405163cf47918160e01b815260048101829052606087013560248201526044016108cc565b60098054600101908190556000908152600b602052604090208690611d3482826134e6565b5050336000908152600f60209081526040822060095481546001810183559184529190922090910155611d6e610100870160e08801612e31565b6001600160a01b0316336001600160a01b03166009547f487933e034710db4f40e8db61e822d2fff54215ca95e11baff632af66e1fbab689606001358a60800135604051611dc6929190918252602082015260400190565b60405180910390a45050600954949350505050565b600033611df06006546001600160a01b031690565b6001600160a01b031603611e0657506001610799565b5060009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000630f3ae70f60e41b8233611e488282611ddb565b1580611e5b5750611e5983836117ae565b155b15611e845760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611e8f87610e35565b9050600081516004811115611ea657611ea6612b77565b14611ec7578051604051633ba7bf8960e11b81526108cc919060040161308a565b611ed58160a0015187612657565b611ef5576040516336b242eb60e21b8152600481018790526024016108cc565b60e08101516001600160a01b0316611f2d576000878152600b6020526040902060070180546001600160a01b03191633179055611f5c565b60e08101516001600160a01b03163314611f5c5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600b60209081526040808320805460ff1916600190811790915560e08501516001600160a01b03168452600f835281842080549182018155845291832090910189905551339189917f51747b1d57e7c06f70f592aaaefde3fc6cd4b89a2e45b9f53126f2acf054c3d29190a35060019695505050505050565b6000818152600260205260409020546001600160a01b03166120395760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612071826115fc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382166121005760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121655760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121ca5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080612241836115fc565b9050806001600160a01b0316846001600160a01b0316148061228857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806122ac5750836001600160a01b03166122a184610831565b6001600160a01b0316145b949350505050565b826001600160a01b03166122c7826115fc565b6001600160a01b0316146122ed5760405162461bcd60e51b81526004016108cc906135bc565b6001600160a01b03821661234f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108cc565b826001600160a01b0316612362826115fc565b6001600160a01b0316146123885760405162461bcd60e51b81526004016108cc906135bc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061242382610e35565b905060038151600481111561243a5761243a612b77565b1480612458575060048151600481111561245657612456612b77565b145b1561247a5780516040516306f4489360e11b81526108cc918491600401613601565b6124888160c0015133611ddb565b6118115760405163472511eb60e11b81523360048201526024016108cc565b816001600160a01b0316836001600160a01b0316036125085760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016115ef565b6060611bef83836040518060600160405280602781526020016136d4602791396126a0565b61259d8484846122b4565b6125a984848484612718565b611a3a5760405162461bcd60e51b81526004016108cc90613615565b606060006125d283612819565b60010190506000816001600160401b038111156125f1576125f1612ced565b6040519080825280601f01601f19166020018201604052801561261b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461262557509392505050565b6000805b83518110156126965782848281518110612677576126776130c7565b60200260200101510361268e576001915050610799565b60010161265b565b5060009392505050565b6060600080856001600160a01b0316856040516126bd9190613667565b600060405180830381855af49150503d80600081146126f8576040519150601f19603f3d011682016040523d82523d6000602084013e6126fd565b606091505b509150915061270e868383876128f1565b9695505050505050565b60006001600160a01b0384163b1561280e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061275c903390899088908890600401613683565b6020604051808303816000875af1925050508015612797575060408051601f3d908101601f19168201909252612794918101906136b6565b60015b6127f4573d8080156127c5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ca565b606091505b5080516000036127ec5760405162461bcd60e51b81526004016108cc90613615565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506122ac565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106128585772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612884576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106128a257662386f26fc10000830492506010015b6305f5e10083106128ba576305f5e100830492506008015b61271083106128ce57612710830492506004015b606483106128e0576064830492506002015b600a83106107995760010192915050565b60608315612960578251600003612959576001600160a01b0385163b6129595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108cc565b50816122ac565b6122ac83838151156129755781518083602001fd5b8060405162461bcd60e51b81526004016108cc9190612a12565b6001600160e01b03198116811461203957600080fd5b6000602082840312156129b757600080fd5b8135611bef8161298f565b60005b838110156129dd5781810151838201526020016129c5565b50506000910152565b600081518084526129fe8160208601602086016129c2565b601f01601f19169290920160200192915050565b602081526000611bef60208301846129e6565b600060208284031215612a3757600080fd5b5035919050565b6001600160a01b038116811461203957600080fd5b60008060408385031215612a6657600080fd5b8235612a7181612a3e565b946020939093013593505050565b60008060408385031215612a9257600080fd5b50508035926020909101359150565b60008060208385031215612ab457600080fd5b82356001600160401b0380821115612acb57600080fd5b818501915085601f830112612adf57600080fd5b813581811115612aee57600080fd5b8660208260051b8501011115612b0357600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612b6a57603f19888603018452612b588583516129e6565b94509285019290850190600101612b3c565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b60058110612bab57634e487b7160e01b600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b83811015612bdf57815187529582019590820190600101612bc3565b509495945050505050565b60208152612bfc602082018351612b8d565b60006020830151610120806040850152612c1a6101408501836129e6565b91506040850151601f1980868503016060870152612c3884836129e6565b935060608701516080870152608087015160a087015260a08701519150808685030160c0870152612c698483612baf565b935060c087015160e087015260e08701519150610100612c93818801846001600160a01b03169052565b87015186850390910183870152905061270e83826129e6565b600080600060608486031215612cc157600080fd5b8335612ccc81612a3e565b92506020840135612cdc81612a3e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612d1d57612d1d612ced565b604051601f8501601f19908116603f01168101908282118183101715612d4557612d45612ced565b81604052809350858152868686011115612d5e57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612d8957600080fd5b611bef83833560208501612d03565b60008060408385031215612dab57600080fd5b8235915060208301356001600160401b03811115612dc857600080fd5b612dd485828601612d78565b9150509250929050565b80358015158114612dee57600080fd5b919050565b600080600060608486031215612e0857600080fd5b8335612e138161298f565b925060208401359150612e2860408501612dde565b90509250925092565b600060208284031215612e4357600080fd5b8135611bef81612a3e565b602081526000611bef6020830184612baf565b60008060408385031215612e7457600080fd5b8235612a718161298f565b60008060408385031215612e9257600080fd5b8235612e9d81612a3e565b9150612eab60208401612dde565b90509250929050565b600080600060608486031215612ec957600080fd5b833592506020840135612edb81612a3e565b9150612e2860408501612dde565b60008060008060808587031215612eff57600080fd5b8435612f0a81612a3e565b93506020850135612f1a81612a3e565b92506040850135915060608501356001600160401b03811115612f3c57600080fd5b8501601f81018713612f4d57600080fd5b612f5c87823560208401612d03565b91505092959194509250565b600080600060608486031215612f7d57600080fd5b833592506020840135915060408401356001600160401b03811115612fa157600080fd5b612fad86828701612d78565b9150509250925092565b600060208284031215612fc957600080fd5b81356001600160401b03811115612fdf57600080fd5b82016101208185031215611bef57600080fd5b6000806040838503121561300557600080fd5b823561301081612a3e565b9150602083013561302081612a3e565b809150509250929050565b6000806040838503121561303e57600080fd5b82359150602083013561302081612a3e565b600181811c9082168061306457607f821691505b60208210810361308457634e487b7160e01b600052602260045260246000fd5b50919050565b602081016107998284612b8d565b634e487b7160e01b600052601160045260246000fd5b6000600182016130c0576130c0613098565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126130f457600080fd5b8301803591506001600160401b0382111561310e57600080fd5b60200191503681900382131561312357600080fd5b9250929050565b8183823760009101908152919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5b818110156118115760008155600101613188565b601f82111561096d57806000526020600020601f840160051c810160208510156131c35750805b6131d5601f850160051c830182613187565b5050505050565b81516001600160401b038111156131f5576131f5612ced565b613209816132038454613050565b8461319c565b602080601f83116001811461323e57600084156132265750858301515b600019600386901b1c1916600185901b178555613297565b600085815260208120601f198616915b8281101561326d5788860151825594840194600190910190840161324e565b508582101561328b5787850151600019600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561079957610799613098565b600083516132c48184602088016129c2565b8351908301906132d88183602088016129c2565b01949350505050565b6005811061203957600080fd5b60006020828403121561330057600080fd5b8135611bef816132e1565b60008135610799816132e1565b6005821061333657634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b6001600160401b0383111561336057613360612ced565b6133748361336e8354613050565b8361319c565b6000601f8411600181146133a857600085156133905750838201355b600019600387901b1c1916600186901b1783556131d5565b600083815260209020601f19861690835b828110156133d957868501358255602094850194600190920191016133b9565b50868210156133f65760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000808335601e1984360301811261341f57600080fd5b8301803591506001600160401b0382111561343957600080fd5b6020019150600581901b360382131561312357600080fd5b6001600160401b0383111561346857613468612ced565b6801000000000000000083111561348157613481612ced565b8054838255808410156134a7578160005260206000206134a5828201868301613187565b505b50818160005260208060002060005b868110156134d057833582820155928201926001016134b6565b50505050505050565b6000813561079981612a3e565b6134f86134f28361330b565b82613318565b61350560208301836130dd565b613513818360018601613349565b505061352260408301836130dd565b613530818360028601613349565b5050606082013560038201556080820135600482015561355360a0830183613408565b613561818360058601613451565b505060c082013560068201556135a061357c60e084016134d9565b6007830180546001600160a01b0319166001600160a01b0392909216919091179055565b6135ae6101008301836130dd565b611a3a818360088601613349565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b82815260408101611bef6020830184612b8d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082516136798184602087016129c2565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061270e908301846129e6565b6000602082840312156136c857600080fd5b8151611bef8161298f56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207ba80914af20077f61cd9158cba7e55c029fde36544faa1e64fa65a98e844ae664736f6c63430008140033", + "bytecode": "0x60806040526002600a553480156200001657600080fd5b5060405180604001604052806008815260200167576562335461736b60c01b815250604051806040016040528060048152602001630ae66a8960e31b815250816000908162000066919062000135565b50600162000075828262000135565b5050600680546001600160a01b031916331790555062000201565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000bb57607f821691505b602082108103620000dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013057600081815260208120601f850160051c810160208610156200010b5750805b601f850160051c820191505b818110156200012c5782815560010162000117565b5050505b505050565b81516001600160401b0381111562000151576200015162000090565b6200016981620001628454620000a6565b84620000e2565b602080601f831160018114620001a15760008415620001885750858301515b600019600386901b1c1916600185901b1785556200012c565b600085815260208120601f198616915b82811015620001d257888601518255948401946001909101908401620001b1565b5085821015620001f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61373080620002116000396000f3fe6080604052600436106102255760003560e01c80635af4aa0511610123578063ac9650d8116100ab578063c87b56dd1161006f578063c87b56dd14610684578063e610a2dd146106a4578063e985e9c5146106c4578063ec2606c01461070d578063f3ae70f01461072d57600080fd5b8063ac9650d8146105f1578063b080114d14610611578063b6b55f2514610631578063b88d4fde14610644578063c66e95431461066457600080fd5b80638da5cb5b116100f25780638da5cb5b1461055157806395d576601461056f57806395d89b411461059c578063a053e7e9146105b1578063a22cb465146105d157600080fd5b80635af4aa05146104d15780636352211e146104f157806370a0823114610511578063751e89421461053157600080fd5b806323b872dd116101b15780634bbe46b4116101755780634bbe46b4146104465780635102bc9d1461045b5780635297a0281461047b578063563909de14610491578063593aa283146104b157600080fd5b806323b872dd146103b05780632a6446ca146103d05780633322b23d146103f057806342842e0e14610406578063441a3e701461042657600080fd5b8063108c8ae4116101f8578063108c8ae4146102db5780631397e04a146102fb57806313e9a2631461031b5780631d65e77e146103485780631e0104391461037557600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a6102453660046129a5565b61074d565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027461079f565b6040516102569190612a12565b34801561028d57600080fd5b506102a161029c366004612a25565b610831565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d4366004612a53565b610858565b005b3480156102e757600080fd5b5061024a6102f6366004612a7f565b610972565b34801561030757600080fd5b5061024a610316366004612a7f565b610c2d565b34801561032757600080fd5b5061033b610336366004612aa1565b610d28565b6040516102569190612b15565b34801561035457600080fd5b50610368610363366004612a25565b610e35565b6040516102569190612bea565b34801561038157600080fd5b506103a2610390366004612a25565b6000908152600c602052604090205490565b604051908152602001610256565b3480156103bc57600080fd5b506102d96103cb366004612cac565b611157565b3480156103dc57600080fd5b506102d96103eb366004612d98565b611188565b3480156103fc57600080fd5b506103a260095481565b34801561041257600080fd5b506102d9610421366004612cac565b6111e9565b34801561043257600080fd5b5061024a610441366004612a7f565b611204565b34801561045257600080fd5b506102d961137d565b34801561046757600080fd5b506102d9610476366004612d98565b61142c565b34801561048757600080fd5b506103a2600a5481565b34801561049d57600080fd5b506102d96104ac366004612a25565b611481565b3480156104bd57600080fd5b506102d96104cc366004612d98565b6114e9565b3480156104dd57600080fd5b506102d96104ec366004612df3565b61153e565b3480156104fd57600080fd5b506102a161050c366004612a25565b6115fc565b34801561051d57600080fd5b506103a261052c366004612e31565b61165c565b34801561053d57600080fd5b506102d961054c366004612a7f565b6116e2565b34801561055d57600080fd5b506006546001600160a01b03166102a1565b34801561057b57600080fd5b5061058f61058a366004612e31565b611733565b6040516102569190612e4e565b3480156105a857600080fd5b5061027461179f565b3480156105bd57600080fd5b5061024a6105cc366004612e61565b6117ae565b3480156105dd57600080fd5b506102d96105ec366004612e7f565b611806565b3480156105fd57600080fd5b5061033b61060c366004612aa1565b611815565b34801561061d57600080fd5b506102d961062c366004612eb4565b611902565b61024a61063f366004612a25565b6119b6565b34801561065057600080fd5b506102d961065f366004612ee9565b611a08565b34801561067057600080fd5b5061024a61067f366004612f68565b611a40565b34801561069057600080fd5b5061027461069f366004612a25565b611b82565b3480156106b057600080fd5b506103a26106bf366004612fb7565b611bf6565b3480156106d057600080fd5b5061024a6106df366004612ff2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071957600080fd5b5061024a61072836600461302b565b611ddb565b34801561073957600080fd5b5061024a610748366004612a7f565b611e32565b60006001600160e01b031982166380ac58cd60e01b148061077e57506001600160e01b03198216635b5e139f60e01b145b8061079957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107ae90613050565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90613050565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061083c82611fda565b506000908152600460205260409020546001600160a01b031690565b6000610863826115fc565b9050806001600160a01b0316836001600160a01b0316036108d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806108f157506108f181336106df565b6109635760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108cc565b61096d838361203c565b505050565b600063042322b960e21b82336109888282611ddb565b158061099b575061099983836117ae565b155b156109c45760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b60006109cf87610e35565b90506002815160048111156109e6576109e6612b77565b14610a07578051604051633ba7bf8960e11b81526108cc919060040161308a565b858160c0015114610a2d5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600e6020526040902054336001600160a01b0390911603610a6857604051633512759d60e21b81523360048201526024016108cc565b6000878152600e6020908152604080832080546001600160a01b03191633179055600d9091528120805491610a9c836130ae565b9091555050600a546000888152600d602052604090205403610c20576000878152600b60205260409020805460ff1916600317905560e0810151610ae090886120aa565b60008160e001516001600160a01b0316826060015160405160006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b50509050801580610b5c57506000878152600c60205260409020546060830151115b15610b99576000878152600c602052604090819020546060840151915163cf47918160e01b81526108cc9290600401918252602082015260400190565b877f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6003604051610bca919061308a565b60405180910390a28160e001516001600160a01b0316877f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf8460600151604051610c1691815260200190565b60405180910390a3505b5060019695505050505050565b60006309cbf02560e11b8233610c438282611ddb565b1580610c565750610c5483836117ae565b155b15610c7f5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000610c8a87610e35565b9050600481516004811115610ca157610ca1612b77565b03610cc2578051604051633ba7bf8960e11b81526108cc919060040161308a565b6000878152600b6020526040902080546004919060ff19166001830217905550867f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6004604051610d13919061308a565b60405180910390a25060019695505050505050565b6060816001600160401b03811115610d4257610d42612ced565b604051908082528060200260200182016040528015610d7557816020015b6060815260200190600190039081610d605790505b50905060005b82811015610e2e57600030858584818110610d9857610d986130c7565b9050602002810190610daa91906130dd565b604051610db892919061312a565b600060405180830381855afa9150503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091505080838381518110610e0f57610e0f6130c7565b6020026020010181905250508080610e26906130ae565b915050610d7b565b5092915050565b610e8e604080516101208101909152806000815260200160608152602001606081526020016000815260200160008152602001606081526020016000815260200160006001600160a01b03168152602001606081525090565b6000828152600b6020526040808220815161012081019092528054829060ff166004811115610ebf57610ebf612b77565b6004811115610ed057610ed0612b77565b8152602001600182018054610ee490613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1090613050565b8015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b50505050508152602001600282018054610f7690613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa290613050565b8015610fef5780601f10610fc457610100808354040283529160200191610fef565b820191906000526020600020905b815481529060010190602001808311610fd257829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820180548060200260200160405190810160405280929190818152602001828054801561105b57602002820191906000526020600020905b815481526020019060010190808311611047575b50505091835250506006820154602082015260078201546001600160a01b0316604082015260088201805460609092019161109590613050565b80601f01602080910402602001604051908101604052809291908181526020018280546110c190613050565b801561110e5780601f106110e35761010080835404028352916020019161110e565b820191906000526020600020905b8154815290600101906020018083116110f157829003601f168201915b5050505050815250509050428160800151101561079957806080015160000361114d576040516345e2cbed60e01b8152600481018490526024016108cc565b6004815292915050565b6111613382612235565b61117d5760405162461bcd60e51b81526004016108cc9061313a565b61096d8383836122b4565b61119182612418565b6000828152600b602052604090206002016111ac82826131dc565b50817ff608c377d37afaf8d19d5b32cb0cb388e64cc92b5b8e263396f34a562b99d371826040516111dd9190612a12565b60405180910390a25050565b61096d83838360405180602001604052806000815250611a08565b6000630441a3e760e41b833361121a8282611ddb565b158061122d575061122b83836117ae565b155b156112565760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000868152600c6020526040902054858110156112a1576000878152600c60205260409081902054905163cf47918160e01b81526004810191909152602481018790526044016108cc565b6000878152600c6020526040812080548892906112bf90849061329f565b9091555050604051600090339088908381818185875af1925050503d8060008114611306576040519150601f19603f3d011682016040523d82523d6000602084013e61130b565b606091505b50509050806113375760405163cf47918160e01b815260048101839052602481018890526044016108cc565b604051878152339089907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf906020015b60405180910390a3506001979650505050505050565b6006546001600160a01b031633146113aa5760405163472511eb60e11b81523360048201526024016108cc565b60405133904790600081818185875af1925050503d80600081146113ea576040519150601f19603f3d011682016040523d82523d6000602084013e6113ef565b606091505b50506040514781523391506000907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf9060200160405180910390a3565b61143582612418565b6000828152600b6020526040902060010161145082826131dc565b50817f56f46d3f19f6cbee6fd2120d9a27053b85f976606730b6c2ce520d477fae4292826040516111dd9190612a12565b6006546001600160a01b031633146114ae5760405163472511eb60e11b81523360048201526024016108cc565b600a8190556040518181527ff18f88786aae85a652aadb99a82462616489a33370c9bcc7b245906812ef7cd19060200160405180910390a150565b6114f282612418565b6000828152600b6020526040902060080161150d82826131dc565b50817f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c47309826040516111dd9190612a12565b6006546001600160a01b0316331461156b5760405163472511eb60e11b81523360048201526024016108cc565b8160000361158f576040516336b242eb60e21b8152600481018390526024016108cc565b6001600160e01b031983166000818152600860209081526040808320868452825291829020805460ff191685151590811790915591519182528492917ff72cf37738ab1ee401cdc8f05bc3e31194ed55e5bcfd1ad48093b595c2a621d291015b60405180910390a3505050565b6000818152600260205260408120546001600160a01b0316806107995760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b60006001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108cc565b506001600160a01b031660009081526003602052604090205490565b6116eb82612418565b6000828152600b6020526040908190206004018290555182907f275dd536a6956e78302b90e20bb13c379fb11632284794aa77ad452d0f472a15906111dd9084815260200190565b6001600160a01b0381166000908152600f602090815260409182902080548351818402810184019094528084526060939283018282801561179357602002820191906000526020600020905b81548152602001906001019080831161177f575b50505050509050919050565b6060600180546107ae90613050565b6000336117c36006546001600160a01b031690565b6001600160a01b0316036117d957506001610799565b506001600160e01b0319919091166000908152600860209081526040808320938352929052205460ff1690565b6118113383836124a7565b5050565b6060816001600160401b0381111561182f5761182f612ced565b60405190808252806020026020018201604052801561186257816020015b606081526020019060019003908161184d5790505b50905060005b82811015610e2e576118d230858584818110611886576118866130c7565b905060200281019061189891906130dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061256d92505050565b8282815181106118e4576118e46130c7565b602002602001018190525080806118fa906130ae565b915050611868565b6006546001600160a01b0316331461192f5760405163472511eb60e11b81523360048201526024016108cc565b82600003611953576040516336b242eb60e21b8152600481018490526024016108cc565b60008381526007602090815260408083206001600160a01b03861680855290835292819020805460ff1916851515908117909155905190815285917f394b55d0358e2f1133a0f0c1d37af480d46b61463faa7e9cee65134ccf54248591016115ef565b6000818152600c6020908152604080832034908190559051908152339184917feaa18152488ce5959073c9c79c88ca90b3d96c00de1f118cfaad664c3dab06b9910160405180910390a3506001919050565b611a123383612235565b611a2e5760405162461bcd60e51b81526004016108cc9061313a565b611a3a84848484612592565b50505050565b600063c66e954360e01b8333611a568282611ddb565b1580611a695750611a6783836117ae565b155b15611a925760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611a9d88610e35565b60e08101519091506001600160a01b03163314611ada57868160c0015114611ada5760405163472511eb60e11b81523360048201526024016108cc565b600181516004811115611aef57611aef612b77565b03611b12576000888152600b60205260409020805460ff19166002179055611b48565b600281516004811115611b2757611b27612b77565b14611b48578051604051633ba7bf8960e11b81526108cc919060040161308a565b336001600160a01b0316887fa113d8544e03d8ca3bb9efae1a2a4ffedc87358f9cab0647fdcfbcac72f6ac83886040516113679190612a12565b6060611b8d82611fda565b6000611ba460408051602081019091526000815290565b90506000815111611bc45760405180602001604052806000815250611bef565b80611bce846125c5565b604051602001611bdf9291906132b2565b6040516020818303038152906040525b9392505050565b600063e610a2dd60e01b60c083013533611c108282611ddb565b1580611c235750611c2183836117ae565b155b15611c4c5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b4285608001351015611c7d5760405163a32789d960e01b8152608086013560048201524260248201526044016108cc565b6000611c8c60208701876132ee565b6004811115611c9d57611c9d612b77565b14611cc957611caf60208601866132ee565b604051633ba7bf8960e11b81526004016108cc919061308a565b60c08501356000908152600c60205260409020546060860135811015611d0f5760405163cf47918160e01b815260048101829052606087013560248201526044016108cc565b60098054600101908190556000908152600b602052604090208690611d3482826134e6565b5050336000908152600f60209081526040822060095481546001810183559184529190922090910155611d6e610100870160e08801612e31565b6001600160a01b0316336001600160a01b03166009547f487933e034710db4f40e8db61e822d2fff54215ca95e11baff632af66e1fbab689606001358a60800135604051611dc6929190918252602082015260400190565b60405180910390a45050600954949350505050565b600033611df06006546001600160a01b031690565b6001600160a01b031603611e0657506001610799565b5060009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000630f3ae70f60e41b8233611e488282611ddb565b1580611e5b5750611e5983836117ae565b155b15611e845760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611e8f87610e35565b9050600081516004811115611ea657611ea6612b77565b14611ec7578051604051633ba7bf8960e11b81526108cc919060040161308a565b611ed58160a0015187612657565b611ef5576040516336b242eb60e21b8152600481018790526024016108cc565b60e08101516001600160a01b0316611f2d576000878152600b6020526040902060070180546001600160a01b03191633179055611f5c565b60e08101516001600160a01b03163314611f5c5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600b60209081526040808320805460ff1916600190811790915560e08501516001600160a01b03168452600f835281842080549182018155845291832090910189905551339189917f51747b1d57e7c06f70f592aaaefde3fc6cd4b89a2e45b9f53126f2acf054c3d29190a35060019695505050505050565b6000818152600260205260409020546001600160a01b03166120395760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612071826115fc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382166121005760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121655760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121ca5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080612241836115fc565b9050806001600160a01b0316846001600160a01b0316148061228857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806122ac5750836001600160a01b03166122a184610831565b6001600160a01b0316145b949350505050565b826001600160a01b03166122c7826115fc565b6001600160a01b0316146122ed5760405162461bcd60e51b81526004016108cc906135bc565b6001600160a01b03821661234f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108cc565b826001600160a01b0316612362826115fc565b6001600160a01b0316146123885760405162461bcd60e51b81526004016108cc906135bc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061242382610e35565b905060038151600481111561243a5761243a612b77565b1480612458575060048151600481111561245657612456612b77565b145b1561247a5780516040516306f4489360e11b81526108cc918491600401613601565b6124888160c0015133611ddb565b6118115760405163472511eb60e11b81523360048201526024016108cc565b816001600160a01b0316836001600160a01b0316036125085760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016115ef565b6060611bef83836040518060600160405280602781526020016136d4602791396126a0565b61259d8484846122b4565b6125a984848484612718565b611a3a5760405162461bcd60e51b81526004016108cc90613615565b606060006125d283612819565b60010190506000816001600160401b038111156125f1576125f1612ced565b6040519080825280601f01601f19166020018201604052801561261b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461262557509392505050565b6000805b83518110156126965782848281518110612677576126776130c7565b60200260200101510361268e576001915050610799565b60010161265b565b5060009392505050565b6060600080856001600160a01b0316856040516126bd9190613667565b600060405180830381855af49150503d80600081146126f8576040519150601f19603f3d011682016040523d82523d6000602084013e6126fd565b606091505b509150915061270e868383876128f1565b9695505050505050565b60006001600160a01b0384163b1561280e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061275c903390899088908890600401613683565b6020604051808303816000875af1925050508015612797575060408051601f3d908101601f19168201909252612794918101906136b6565b60015b6127f4573d8080156127c5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ca565b606091505b5080516000036127ec5760405162461bcd60e51b81526004016108cc90613615565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506122ac565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106128585772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612884576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106128a257662386f26fc10000830492506010015b6305f5e10083106128ba576305f5e100830492506008015b61271083106128ce57612710830492506004015b606483106128e0576064830492506002015b600a83106107995760010192915050565b60608315612960578251600003612959576001600160a01b0385163b6129595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108cc565b50816122ac565b6122ac83838151156129755781518083602001fd5b8060405162461bcd60e51b81526004016108cc9190612a12565b6001600160e01b03198116811461203957600080fd5b6000602082840312156129b757600080fd5b8135611bef8161298f565b60005b838110156129dd5781810151838201526020016129c5565b50506000910152565b600081518084526129fe8160208601602086016129c2565b601f01601f19169290920160200192915050565b602081526000611bef60208301846129e6565b600060208284031215612a3757600080fd5b5035919050565b6001600160a01b038116811461203957600080fd5b60008060408385031215612a6657600080fd5b8235612a7181612a3e565b946020939093013593505050565b60008060408385031215612a9257600080fd5b50508035926020909101359150565b60008060208385031215612ab457600080fd5b82356001600160401b0380821115612acb57600080fd5b818501915085601f830112612adf57600080fd5b813581811115612aee57600080fd5b8660208260051b8501011115612b0357600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612b6a57603f19888603018452612b588583516129e6565b94509285019290850190600101612b3c565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b60058110612bab57634e487b7160e01b600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b83811015612bdf57815187529582019590820190600101612bc3565b509495945050505050565b60208152612bfc602082018351612b8d565b60006020830151610120806040850152612c1a6101408501836129e6565b91506040850151601f1980868503016060870152612c3884836129e6565b935060608701516080870152608087015160a087015260a08701519150808685030160c0870152612c698483612baf565b935060c087015160e087015260e08701519150610100612c93818801846001600160a01b03169052565b87015186850390910183870152905061270e83826129e6565b600080600060608486031215612cc157600080fd5b8335612ccc81612a3e565b92506020840135612cdc81612a3e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612d1d57612d1d612ced565b604051601f8501601f19908116603f01168101908282118183101715612d4557612d45612ced565b81604052809350858152868686011115612d5e57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612d8957600080fd5b611bef83833560208501612d03565b60008060408385031215612dab57600080fd5b8235915060208301356001600160401b03811115612dc857600080fd5b612dd485828601612d78565b9150509250929050565b80358015158114612dee57600080fd5b919050565b600080600060608486031215612e0857600080fd5b8335612e138161298f565b925060208401359150612e2860408501612dde565b90509250925092565b600060208284031215612e4357600080fd5b8135611bef81612a3e565b602081526000611bef6020830184612baf565b60008060408385031215612e7457600080fd5b8235612a718161298f565b60008060408385031215612e9257600080fd5b8235612e9d81612a3e565b9150612eab60208401612dde565b90509250929050565b600080600060608486031215612ec957600080fd5b833592506020840135612edb81612a3e565b9150612e2860408501612dde565b60008060008060808587031215612eff57600080fd5b8435612f0a81612a3e565b93506020850135612f1a81612a3e565b92506040850135915060608501356001600160401b03811115612f3c57600080fd5b8501601f81018713612f4d57600080fd5b612f5c87823560208401612d03565b91505092959194509250565b600080600060608486031215612f7d57600080fd5b833592506020840135915060408401356001600160401b03811115612fa157600080fd5b612fad86828701612d78565b9150509250925092565b600060208284031215612fc957600080fd5b81356001600160401b03811115612fdf57600080fd5b82016101208185031215611bef57600080fd5b6000806040838503121561300557600080fd5b823561301081612a3e565b9150602083013561302081612a3e565b809150509250929050565b6000806040838503121561303e57600080fd5b82359150602083013561302081612a3e565b600181811c9082168061306457607f821691505b60208210810361308457634e487b7160e01b600052602260045260246000fd5b50919050565b602081016107998284612b8d565b634e487b7160e01b600052601160045260246000fd5b6000600182016130c0576130c0613098565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126130f457600080fd5b8301803591506001600160401b0382111561310e57600080fd5b60200191503681900382131561312357600080fd5b9250929050565b8183823760009101908152919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5b818110156118115760008155600101613188565b601f82111561096d57806000526020600020601f840160051c810160208510156131c35750805b6131d5601f850160051c830182613187565b5050505050565b81516001600160401b038111156131f5576131f5612ced565b613209816132038454613050565b8461319c565b602080601f83116001811461323e57600084156132265750858301515b600019600386901b1c1916600185901b178555613297565b600085815260208120601f198616915b8281101561326d5788860151825594840194600190910190840161324e565b508582101561328b5787850151600019600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561079957610799613098565b600083516132c48184602088016129c2565b8351908301906132d88183602088016129c2565b01949350505050565b6005811061203957600080fd5b60006020828403121561330057600080fd5b8135611bef816132e1565b60008135610799816132e1565b6005821061333657634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b6001600160401b0383111561336057613360612ced565b6133748361336e8354613050565b8361319c565b6000601f8411600181146133a857600085156133905750838201355b600019600387901b1c1916600186901b1783556131d5565b600083815260209020601f19861690835b828110156133d957868501358255602094850194600190920191016133b9565b50868210156133f65760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000808335601e1984360301811261341f57600080fd5b8301803591506001600160401b0382111561343957600080fd5b6020019150600581901b360382131561312357600080fd5b6001600160401b0383111561346857613468612ced565b6801000000000000000083111561348157613481612ced565b8054838255808410156134a7578160005260206000206134a5828201868301613187565b505b50818160005260208060002060005b868110156134d057833582820155928201926001016134b6565b50505050505050565b6000813561079981612a3e565b6134f86134f28361330b565b82613318565b61350560208301836130dd565b613513818360018601613349565b505061352260408301836130dd565b613530818360028601613349565b5050606082013560038201556080820135600482015561355360a0830183613408565b613561818360058601613451565b505060c082013560068201556135a061357c60e084016134d9565b6007830180546001600160a01b0319166001600160a01b0392909216919091179055565b6135ae6101008301836130dd565b611a3a818360088601613349565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b82815260408101611bef6020830184612b8d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082516136798184602087016129c2565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061270e908301846129e6565b6000602082840312156136c857600080fd5b8151611bef8161298f56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203b386334a91d47b73fa988a5dbb7cc65429cd0cffbdf5fb8b57ba0423c80bd9464736f6c63430008140033", + "deployedBytecode": "0x6080604052600436106102255760003560e01c80635af4aa0511610123578063ac9650d8116100ab578063c87b56dd1161006f578063c87b56dd14610684578063e610a2dd146106a4578063e985e9c5146106c4578063ec2606c01461070d578063f3ae70f01461072d57600080fd5b8063ac9650d8146105f1578063b080114d14610611578063b6b55f2514610631578063b88d4fde14610644578063c66e95431461066457600080fd5b80638da5cb5b116100f25780638da5cb5b1461055157806395d576601461056f57806395d89b411461059c578063a053e7e9146105b1578063a22cb465146105d157600080fd5b80635af4aa05146104d15780636352211e146104f157806370a0823114610511578063751e89421461053157600080fd5b806323b872dd116101b15780634bbe46b4116101755780634bbe46b4146104465780635102bc9d1461045b5780635297a0281461047b578063563909de14610491578063593aa283146104b157600080fd5b806323b872dd146103b05780632a6446ca146103d05780633322b23d146103f057806342842e0e14610406578063441a3e701461042657600080fd5b8063108c8ae4116101f8578063108c8ae4146102db5780631397e04a146102fb57806313e9a2631461031b5780631d65e77e146103485780631e0104391461037557600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a6102453660046129a5565b61074d565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027461079f565b6040516102569190612a12565b34801561028d57600080fd5b506102a161029c366004612a25565b610831565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d4366004612a53565b610858565b005b3480156102e757600080fd5b5061024a6102f6366004612a7f565b610972565b34801561030757600080fd5b5061024a610316366004612a7f565b610c2d565b34801561032757600080fd5b5061033b610336366004612aa1565b610d28565b6040516102569190612b15565b34801561035457600080fd5b50610368610363366004612a25565b610e35565b6040516102569190612bea565b34801561038157600080fd5b506103a2610390366004612a25565b6000908152600c602052604090205490565b604051908152602001610256565b3480156103bc57600080fd5b506102d96103cb366004612cac565b611157565b3480156103dc57600080fd5b506102d96103eb366004612d98565b611188565b3480156103fc57600080fd5b506103a260095481565b34801561041257600080fd5b506102d9610421366004612cac565b6111e9565b34801561043257600080fd5b5061024a610441366004612a7f565b611204565b34801561045257600080fd5b506102d961137d565b34801561046757600080fd5b506102d9610476366004612d98565b61142c565b34801561048757600080fd5b506103a2600a5481565b34801561049d57600080fd5b506102d96104ac366004612a25565b611481565b3480156104bd57600080fd5b506102d96104cc366004612d98565b6114e9565b3480156104dd57600080fd5b506102d96104ec366004612df3565b61153e565b3480156104fd57600080fd5b506102a161050c366004612a25565b6115fc565b34801561051d57600080fd5b506103a261052c366004612e31565b61165c565b34801561053d57600080fd5b506102d961054c366004612a7f565b6116e2565b34801561055d57600080fd5b506006546001600160a01b03166102a1565b34801561057b57600080fd5b5061058f61058a366004612e31565b611733565b6040516102569190612e4e565b3480156105a857600080fd5b5061027461179f565b3480156105bd57600080fd5b5061024a6105cc366004612e61565b6117ae565b3480156105dd57600080fd5b506102d96105ec366004612e7f565b611806565b3480156105fd57600080fd5b5061033b61060c366004612aa1565b611815565b34801561061d57600080fd5b506102d961062c366004612eb4565b611902565b61024a61063f366004612a25565b6119b6565b34801561065057600080fd5b506102d961065f366004612ee9565b611a08565b34801561067057600080fd5b5061024a61067f366004612f68565b611a40565b34801561069057600080fd5b5061027461069f366004612a25565b611b82565b3480156106b057600080fd5b506103a26106bf366004612fb7565b611bf6565b3480156106d057600080fd5b5061024a6106df366004612ff2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071957600080fd5b5061024a61072836600461302b565b611ddb565b34801561073957600080fd5b5061024a610748366004612a7f565b611e32565b60006001600160e01b031982166380ac58cd60e01b148061077e57506001600160e01b03198216635b5e139f60e01b145b8061079957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107ae90613050565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90613050565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061083c82611fda565b506000908152600460205260409020546001600160a01b031690565b6000610863826115fc565b9050806001600160a01b0316836001600160a01b0316036108d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806108f157506108f181336106df565b6109635760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108cc565b61096d838361203c565b505050565b600063042322b960e21b82336109888282611ddb565b158061099b575061099983836117ae565b155b156109c45760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b60006109cf87610e35565b90506002815160048111156109e6576109e6612b77565b14610a07578051604051633ba7bf8960e11b81526108cc919060040161308a565b858160c0015114610a2d5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600e6020526040902054336001600160a01b0390911603610a6857604051633512759d60e21b81523360048201526024016108cc565b6000878152600e6020908152604080832080546001600160a01b03191633179055600d9091528120805491610a9c836130ae565b9091555050600a546000888152600d602052604090205403610c20576000878152600b60205260409020805460ff1916600317905560e0810151610ae090886120aa565b60008160e001516001600160a01b0316826060015160405160006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b50509050801580610b5c57506000878152600c60205260409020546060830151115b15610b99576000878152600c602052604090819020546060840151915163cf47918160e01b81526108cc9290600401918252602082015260400190565b877f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6003604051610bca919061308a565b60405180910390a28160e001516001600160a01b0316877f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf8460600151604051610c1691815260200190565b60405180910390a3505b5060019695505050505050565b60006309cbf02560e11b8233610c438282611ddb565b1580610c565750610c5483836117ae565b155b15610c7f5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000610c8a87610e35565b9050600481516004811115610ca157610ca1612b77565b03610cc2578051604051633ba7bf8960e11b81526108cc919060040161308a565b6000878152600b6020526040902080546004919060ff19166001830217905550867f2da408880f35ba4c128d53d978436383214730e9e4f141928a16650273b3c32a6004604051610d13919061308a565b60405180910390a25060019695505050505050565b6060816001600160401b03811115610d4257610d42612ced565b604051908082528060200260200182016040528015610d7557816020015b6060815260200190600190039081610d605790505b50905060005b82811015610e2e57600030858584818110610d9857610d986130c7565b9050602002810190610daa91906130dd565b604051610db892919061312a565b600060405180830381855afa9150503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091505080838381518110610e0f57610e0f6130c7565b6020026020010181905250508080610e26906130ae565b915050610d7b565b5092915050565b610e8e604080516101208101909152806000815260200160608152602001606081526020016000815260200160008152602001606081526020016000815260200160006001600160a01b03168152602001606081525090565b6000828152600b6020526040808220815161012081019092528054829060ff166004811115610ebf57610ebf612b77565b6004811115610ed057610ed0612b77565b8152602001600182018054610ee490613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1090613050565b8015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b50505050508152602001600282018054610f7690613050565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa290613050565b8015610fef5780601f10610fc457610100808354040283529160200191610fef565b820191906000526020600020905b815481529060010190602001808311610fd257829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820180548060200260200160405190810160405280929190818152602001828054801561105b57602002820191906000526020600020905b815481526020019060010190808311611047575b50505091835250506006820154602082015260078201546001600160a01b0316604082015260088201805460609092019161109590613050565b80601f01602080910402602001604051908101604052809291908181526020018280546110c190613050565b801561110e5780601f106110e35761010080835404028352916020019161110e565b820191906000526020600020905b8154815290600101906020018083116110f157829003601f168201915b5050505050815250509050428160800151101561079957806080015160000361114d576040516345e2cbed60e01b8152600481018490526024016108cc565b6004815292915050565b6111613382612235565b61117d5760405162461bcd60e51b81526004016108cc9061313a565b61096d8383836122b4565b61119182612418565b6000828152600b602052604090206002016111ac82826131dc565b50817ff608c377d37afaf8d19d5b32cb0cb388e64cc92b5b8e263396f34a562b99d371826040516111dd9190612a12565b60405180910390a25050565b61096d83838360405180602001604052806000815250611a08565b6000630441a3e760e41b833361121a8282611ddb565b158061122d575061122b83836117ae565b155b156112565760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000868152600c6020526040902054858110156112a1576000878152600c60205260409081902054905163cf47918160e01b81526004810191909152602481018790526044016108cc565b6000878152600c6020526040812080548892906112bf90849061329f565b9091555050604051600090339088908381818185875af1925050503d8060008114611306576040519150601f19603f3d011682016040523d82523d6000602084013e61130b565b606091505b50509050806113375760405163cf47918160e01b815260048101839052602481018890526044016108cc565b604051878152339089907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf906020015b60405180910390a3506001979650505050505050565b6006546001600160a01b031633146113aa5760405163472511eb60e11b81523360048201526024016108cc565b60405133904790600081818185875af1925050503d80600081146113ea576040519150601f19603f3d011682016040523d82523d6000602084013e6113ef565b606091505b50506040514781523391506000907f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf9060200160405180910390a3565b61143582612418565b6000828152600b6020526040902060010161145082826131dc565b50817f56f46d3f19f6cbee6fd2120d9a27053b85f976606730b6c2ce520d477fae4292826040516111dd9190612a12565b6006546001600160a01b031633146114ae5760405163472511eb60e11b81523360048201526024016108cc565b600a8190556040518181527ff18f88786aae85a652aadb99a82462616489a33370c9bcc7b245906812ef7cd19060200160405180910390a150565b6114f282612418565b6000828152600b6020526040902060080161150d82826131dc565b50817f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c47309826040516111dd9190612a12565b6006546001600160a01b0316331461156b5760405163472511eb60e11b81523360048201526024016108cc565b8160000361158f576040516336b242eb60e21b8152600481018390526024016108cc565b6001600160e01b031983166000818152600860209081526040808320868452825291829020805460ff191685151590811790915591519182528492917ff72cf37738ab1ee401cdc8f05bc3e31194ed55e5bcfd1ad48093b595c2a621d291015b60405180910390a3505050565b6000818152600260205260408120546001600160a01b0316806107995760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b60006001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108cc565b506001600160a01b031660009081526003602052604090205490565b6116eb82612418565b6000828152600b6020526040908190206004018290555182907f275dd536a6956e78302b90e20bb13c379fb11632284794aa77ad452d0f472a15906111dd9084815260200190565b6001600160a01b0381166000908152600f602090815260409182902080548351818402810184019094528084526060939283018282801561179357602002820191906000526020600020905b81548152602001906001019080831161177f575b50505050509050919050565b6060600180546107ae90613050565b6000336117c36006546001600160a01b031690565b6001600160a01b0316036117d957506001610799565b506001600160e01b0319919091166000908152600860209081526040808320938352929052205460ff1690565b6118113383836124a7565b5050565b6060816001600160401b0381111561182f5761182f612ced565b60405190808252806020026020018201604052801561186257816020015b606081526020019060019003908161184d5790505b50905060005b82811015610e2e576118d230858584818110611886576118866130c7565b905060200281019061189891906130dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061256d92505050565b8282815181106118e4576118e46130c7565b602002602001018190525080806118fa906130ae565b915050611868565b6006546001600160a01b0316331461192f5760405163472511eb60e11b81523360048201526024016108cc565b82600003611953576040516336b242eb60e21b8152600481018490526024016108cc565b60008381526007602090815260408083206001600160a01b03861680855290835292819020805460ff1916851515908117909155905190815285917f394b55d0358e2f1133a0f0c1d37af480d46b61463faa7e9cee65134ccf54248591016115ef565b6000818152600c6020908152604080832034908190559051908152339184917feaa18152488ce5959073c9c79c88ca90b3d96c00de1f118cfaad664c3dab06b9910160405180910390a3506001919050565b611a123383612235565b611a2e5760405162461bcd60e51b81526004016108cc9061313a565b611a3a84848484612592565b50505050565b600063c66e954360e01b8333611a568282611ddb565b1580611a695750611a6783836117ae565b155b15611a925760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611a9d88610e35565b60e08101519091506001600160a01b03163314611ada57868160c0015114611ada5760405163472511eb60e11b81523360048201526024016108cc565b600181516004811115611aef57611aef612b77565b03611b12576000888152600b60205260409020805460ff19166002179055611b48565b600281516004811115611b2757611b27612b77565b14611b48578051604051633ba7bf8960e11b81526108cc919060040161308a565b336001600160a01b0316887fa113d8544e03d8ca3bb9efae1a2a4ffedc87358f9cab0647fdcfbcac72f6ac83886040516113679190612a12565b6060611b8d82611fda565b6000611ba460408051602081019091526000815290565b90506000815111611bc45760405180602001604052806000815250611bef565b80611bce846125c5565b604051602001611bdf9291906132b2565b6040516020818303038152906040525b9392505050565b600063e610a2dd60e01b60c083013533611c108282611ddb565b1580611c235750611c2183836117ae565b155b15611c4c5760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b4285608001351015611c7d5760405163a32789d960e01b8152608086013560048201524260248201526044016108cc565b6000611c8c60208701876132ee565b6004811115611c9d57611c9d612b77565b14611cc957611caf60208601866132ee565b604051633ba7bf8960e11b81526004016108cc919061308a565b60c08501356000908152600c60205260409020546060860135811015611d0f5760405163cf47918160e01b815260048101829052606087013560248201526044016108cc565b60098054600101908190556000908152600b602052604090208690611d3482826134e6565b5050336000908152600f60209081526040822060095481546001810183559184529190922090910155611d6e610100870160e08801612e31565b6001600160a01b0316336001600160a01b03166009547f487933e034710db4f40e8db61e822d2fff54215ca95e11baff632af66e1fbab689606001358a60800135604051611dc6929190918252602082015260400190565b60405180910390a45050600954949350505050565b600033611df06006546001600160a01b031690565b6001600160a01b031603611e0657506001610799565b5060009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000630f3ae70f60e41b8233611e488282611ddb565b1580611e5b5750611e5983836117ae565b155b15611e845760405163472511eb60e11b81526001600160a01b03821660048201526024016108cc565b6000611e8f87610e35565b9050600081516004811115611ea657611ea6612b77565b14611ec7578051604051633ba7bf8960e11b81526108cc919060040161308a565b611ed58160a0015187612657565b611ef5576040516336b242eb60e21b8152600481018790526024016108cc565b60e08101516001600160a01b0316611f2d576000878152600b6020526040902060070180546001600160a01b03191633179055611f5c565b60e08101516001600160a01b03163314611f5c5760405163472511eb60e11b81523360048201526024016108cc565b6000878152600b60209081526040808320805460ff1916600190811790915560e08501516001600160a01b03168452600f835281842080549182018155845291832090910189905551339189917f51747b1d57e7c06f70f592aaaefde3fc6cd4b89a2e45b9f53126f2acf054c3d29190a35060019695505050505050565b6000818152600260205260409020546001600160a01b03166120395760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108cc565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612071826115fc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382166121005760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121655760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6000818152600260205260409020546001600160a01b0316156121ca5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080612241836115fc565b9050806001600160a01b0316846001600160a01b0316148061228857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806122ac5750836001600160a01b03166122a184610831565b6001600160a01b0316145b949350505050565b826001600160a01b03166122c7826115fc565b6001600160a01b0316146122ed5760405162461bcd60e51b81526004016108cc906135bc565b6001600160a01b03821661234f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108cc565b826001600160a01b0316612362826115fc565b6001600160a01b0316146123885760405162461bcd60e51b81526004016108cc906135bc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061242382610e35565b905060038151600481111561243a5761243a612b77565b1480612458575060048151600481111561245657612456612b77565b145b1561247a5780516040516306f4489360e11b81526108cc918491600401613601565b6124888160c0015133611ddb565b6118115760405163472511eb60e11b81523360048201526024016108cc565b816001600160a01b0316836001600160a01b0316036125085760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016115ef565b6060611bef83836040518060600160405280602781526020016136d4602791396126a0565b61259d8484846122b4565b6125a984848484612718565b611a3a5760405162461bcd60e51b81526004016108cc90613615565b606060006125d283612819565b60010190506000816001600160401b038111156125f1576125f1612ced565b6040519080825280601f01601f19166020018201604052801561261b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461262557509392505050565b6000805b83518110156126965782848281518110612677576126776130c7565b60200260200101510361268e576001915050610799565b60010161265b565b5060009392505050565b6060600080856001600160a01b0316856040516126bd9190613667565b600060405180830381855af49150503d80600081146126f8576040519150601f19603f3d011682016040523d82523d6000602084013e6126fd565b606091505b509150915061270e868383876128f1565b9695505050505050565b60006001600160a01b0384163b1561280e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061275c903390899088908890600401613683565b6020604051808303816000875af1925050508015612797575060408051601f3d908101601f19168201909252612794918101906136b6565b60015b6127f4573d8080156127c5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ca565b606091505b5080516000036127ec5760405162461bcd60e51b81526004016108cc90613615565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506122ac565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106128585772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612884576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106128a257662386f26fc10000830492506010015b6305f5e10083106128ba576305f5e100830492506008015b61271083106128ce57612710830492506004015b606483106128e0576064830492506002015b600a83106107995760010192915050565b60608315612960578251600003612959576001600160a01b0385163b6129595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108cc565b50816122ac565b6122ac83838151156129755781518083602001fd5b8060405162461bcd60e51b81526004016108cc9190612a12565b6001600160e01b03198116811461203957600080fd5b6000602082840312156129b757600080fd5b8135611bef8161298f565b60005b838110156129dd5781810151838201526020016129c5565b50506000910152565b600081518084526129fe8160208601602086016129c2565b601f01601f19169290920160200192915050565b602081526000611bef60208301846129e6565b600060208284031215612a3757600080fd5b5035919050565b6001600160a01b038116811461203957600080fd5b60008060408385031215612a6657600080fd5b8235612a7181612a3e565b946020939093013593505050565b60008060408385031215612a9257600080fd5b50508035926020909101359150565b60008060208385031215612ab457600080fd5b82356001600160401b0380821115612acb57600080fd5b818501915085601f830112612adf57600080fd5b813581811115612aee57600080fd5b8660208260051b8501011115612b0357600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612b6a57603f19888603018452612b588583516129e6565b94509285019290850190600101612b3c565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b60058110612bab57634e487b7160e01b600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b83811015612bdf57815187529582019590820190600101612bc3565b509495945050505050565b60208152612bfc602082018351612b8d565b60006020830151610120806040850152612c1a6101408501836129e6565b91506040850151601f1980868503016060870152612c3884836129e6565b935060608701516080870152608087015160a087015260a08701519150808685030160c0870152612c698483612baf565b935060c087015160e087015260e08701519150610100612c93818801846001600160a01b03169052565b87015186850390910183870152905061270e83826129e6565b600080600060608486031215612cc157600080fd5b8335612ccc81612a3e565b92506020840135612cdc81612a3e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612d1d57612d1d612ced565b604051601f8501601f19908116603f01168101908282118183101715612d4557612d45612ced565b81604052809350858152868686011115612d5e57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612d8957600080fd5b611bef83833560208501612d03565b60008060408385031215612dab57600080fd5b8235915060208301356001600160401b03811115612dc857600080fd5b612dd485828601612d78565b9150509250929050565b80358015158114612dee57600080fd5b919050565b600080600060608486031215612e0857600080fd5b8335612e138161298f565b925060208401359150612e2860408501612dde565b90509250925092565b600060208284031215612e4357600080fd5b8135611bef81612a3e565b602081526000611bef6020830184612baf565b60008060408385031215612e7457600080fd5b8235612a718161298f565b60008060408385031215612e9257600080fd5b8235612e9d81612a3e565b9150612eab60208401612dde565b90509250929050565b600080600060608486031215612ec957600080fd5b833592506020840135612edb81612a3e565b9150612e2860408501612dde565b60008060008060808587031215612eff57600080fd5b8435612f0a81612a3e565b93506020850135612f1a81612a3e565b92506040850135915060608501356001600160401b03811115612f3c57600080fd5b8501601f81018713612f4d57600080fd5b612f5c87823560208401612d03565b91505092959194509250565b600080600060608486031215612f7d57600080fd5b833592506020840135915060408401356001600160401b03811115612fa157600080fd5b612fad86828701612d78565b9150509250925092565b600060208284031215612fc957600080fd5b81356001600160401b03811115612fdf57600080fd5b82016101208185031215611bef57600080fd5b6000806040838503121561300557600080fd5b823561301081612a3e565b9150602083013561302081612a3e565b809150509250929050565b6000806040838503121561303e57600080fd5b82359150602083013561302081612a3e565b600181811c9082168061306457607f821691505b60208210810361308457634e487b7160e01b600052602260045260246000fd5b50919050565b602081016107998284612b8d565b634e487b7160e01b600052601160045260246000fd5b6000600182016130c0576130c0613098565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126130f457600080fd5b8301803591506001600160401b0382111561310e57600080fd5b60200191503681900382131561312357600080fd5b9250929050565b8183823760009101908152919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5b818110156118115760008155600101613188565b601f82111561096d57806000526020600020601f840160051c810160208510156131c35750805b6131d5601f850160051c830182613187565b5050505050565b81516001600160401b038111156131f5576131f5612ced565b613209816132038454613050565b8461319c565b602080601f83116001811461323e57600084156132265750858301515b600019600386901b1c1916600185901b178555613297565b600085815260208120601f198616915b8281101561326d5788860151825594840194600190910190840161324e565b508582101561328b5787850151600019600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561079957610799613098565b600083516132c48184602088016129c2565b8351908301906132d88183602088016129c2565b01949350505050565b6005811061203957600080fd5b60006020828403121561330057600080fd5b8135611bef816132e1565b60008135610799816132e1565b6005821061333657634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b6001600160401b0383111561336057613360612ced565b6133748361336e8354613050565b8361319c565b6000601f8411600181146133a857600085156133905750838201355b600019600387901b1c1916600186901b1783556131d5565b600083815260209020601f19861690835b828110156133d957868501358255602094850194600190920191016133b9565b50868210156133f65760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000808335601e1984360301811261341f57600080fd5b8301803591506001600160401b0382111561343957600080fd5b6020019150600581901b360382131561312357600080fd5b6001600160401b0383111561346857613468612ced565b6801000000000000000083111561348157613481612ced565b8054838255808410156134a7578160005260206000206134a5828201868301613187565b505b50818160005260208060002060005b868110156134d057833582820155928201926001016134b6565b50505050505050565b6000813561079981612a3e565b6134f86134f28361330b565b82613318565b61350560208301836130dd565b613513818360018601613349565b505061352260408301836130dd565b613530818360028601613349565b5050606082013560038201556080820135600482015561355360a0830183613408565b613561818360058601613451565b505060c082013560068201556135a061357c60e084016134d9565b6007830180546001600160a01b0319166001600160a01b0392909216919091179055565b6135ae6101008301836130dd565b611a3a818360088601613349565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b82815260408101611bef6020830184612b8d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082516136798184602087016129c2565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061270e908301846129e6565b6000602082840312156136c857600080fd5b8151611bef8161298f56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203b386334a91d47b73fa988a5dbb7cc65429cd0cffbdf5fb8b57ba0423c80bd9464736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } \ No newline at end of file diff --git a/src/hooks/TaskServiceHook.tsx b/src/hooks/TaskServiceHook.tsx index dfe71e1..ba81db8 100644 --- a/src/hooks/TaskServiceHook.tsx +++ b/src/hooks/TaskServiceHook.tsx @@ -12,6 +12,8 @@ interface TaskService { getMultiTasks: (start: number, end: number, isUserProfile: boolean) => Promise; setRole: (roleId: any, authorizedAddress: any, isAuthorized: boolean) => Promise setOperator: (interfaceId: any, roleId: any, isAuthorized: boolean) => Promise + setMinQuorum: (quorum: any) => Promise + deposit: (roleId: any, amount: any) => Promise } /** @@ -47,19 +49,14 @@ export const useTaskServiceHook = (task: TaskService) => { switch (status) { case TaskStatus.Created: return "Created" - break; case TaskStatus.Canceled: return "Canceled" - break; case TaskStatus.Review: return "In Review" - break; case TaskStatus.Progress: return "In Progress" - break; case TaskStatus.Completed: return "Completed" - break; default: break; } @@ -192,6 +189,24 @@ export const useTaskServiceHook = (task: TaskService) => { }; + const handleQuorum = async (quorum: any) => { + try { + handleSnackbar('Set Quorum process initiated with success!', 'info') + return await task.setMinQuorum(quorum); + } catch (error) { + handleSnackbar('Error Set Quorum!', 'error') + } + }; + + const handleDeposit = async (roleId: any, amount: any) => { + try { + handleSnackbar('Set Deposit process initiated with success!', 'info') + return await task.deposit(roleId, amount); + } catch (error) { + handleSnackbar('Error Set Deposit!', 'error') + } + }; + return { taskData, multiTasksData, @@ -200,6 +215,8 @@ export const useTaskServiceHook = (task: TaskService) => { handleTask, handleMultiTask, handleRole, - handleOperator + handleOperator, + handleQuorum, + handleDeposit }; }; \ No newline at end of file diff --git a/src/hooks/Web3UtilsHook.tsx b/src/hooks/Web3UtilsHook.tsx index 831a1f9..7d9015f 100644 --- a/src/hooks/Web3UtilsHook.tsx +++ b/src/hooks/Web3UtilsHook.tsx @@ -1,4 +1,5 @@ import { useAccount, useEnsName } from 'wagmi'; +import { BigNumber, ethers } from "ethers"; export function useWeb3Utils() { @@ -30,8 +31,12 @@ export function useWeb3Utils() { function userAddress(): string { return accountData?.address; } + + function parseUnits(amount: string): BigNumber { + return ethers.utils.parseUnits(amount, "ether"); + } - return { shortenAddressOrEnsName, shortenAddressFromAddress, shortenAddressFromUser, userAddress }; + return { shortenAddressOrEnsName, shortenAddressFromAddress, shortenAddressFromUser, userAddress, parseUnits }; } \ No newline at end of file diff --git a/src/services/tasks-service.ts b/src/services/tasks-service.ts index 4bfbf28..436abe2 100644 --- a/src/services/tasks-service.ts +++ b/src/services/tasks-service.ts @@ -8,7 +8,7 @@ import { AlertColor } from '@mui/material/Alert'; export function useTaskService() { - const { userAddress } = useWeb3Utils(); + const { userAddress, parseUnits } = useWeb3Utils(); const { showSnackBar } = useSnackBar(); const handleSnackbar = (message: string, color: AlertColor) => { @@ -117,7 +117,7 @@ export function useTaskService() { try { return await tasksManagerContract.getTask(taskId); } catch (error) { - handleSnackbar('Erro ao buscar tarefa', 'error') + handleSnackbar('Error searching Task', 'error') } } @@ -168,7 +168,7 @@ export function useTaskService() { try { return await tasksManagerContract.setRole(roleId, authorizedAddress, isAuthorized); } catch (error) { - handleSnackbar('Erro ao setar Role', 'error') + handleSnackbar('Error setting Role', 'error') } } @@ -176,7 +176,23 @@ export function useTaskService() { try { return await tasksManagerContract.setOperator(interfaceId, roleId, isAuthorized); } catch (error) { - handleSnackbar('Erro ao setar Operador', 'error') + handleSnackbar('Error setting Operator', 'error') + } + } + + async function setMinQuorum(quorum: any) { + try { + return await tasksManagerContract.setMinQuorum(quorum); + } catch (error) { + handleSnackbar('Error setting Quorum', 'error') + } + } + + async function deposit(roleId: any, amount: any) { + try { + return await tasksManagerContract.deposit(roleId, { value: parseUnits(amount) }); + } catch (error) { + handleSnackbar('Error setting deposit', 'error') } } @@ -199,7 +215,9 @@ export function useTaskService() { setRole, setOperator, hasLeaderRole, - hasMemberRole + hasMemberRole, + setMinQuorum, + deposit }; }