[ { "inputs": [ { "internalType": "address", "name": "roles", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "param", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "ParameterUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "param", "type": "string" }, { "indexed": false, "internalType": "address", "name": "subject", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SubjectParameterUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "param", "type": "string" }, { "indexed": false, "internalType": "address", "name": "subject", "type": "address" } ], "name": "SubjectUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "_charactersPlayed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "_dependsOnCharacters", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "_dependsOnRoles", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "_rolesPlayed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "listenParticipant", "type": "address" } ], "name": "addListener", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "transferParticipant", "type": "address" } ], "name": "addTransferer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "charactersPlayed", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, { "internalType": "uint224", "name": "votes", "type": "uint224" } ], "internalType": "struct ERC20Votes.Checkpoint", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dependsOnCharacters", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dependsOnRoles", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "mainCharacterCache", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "listenParticipant", "type": "address" } ], "name": "removeListener", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "transferParticipant", "type": "address" } ], "name": "removeTransferer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "roleCache", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "roles", "outputs": [ { "internalType": "contract Roles", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rolesPlayed", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "role", "type": "uint256" } ], "name": "updateMainCharacterCache", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "role", "type": "uint256" }, { "internalType": "address", "name": "contr", "type": "address" } ], "name": "updateRoleCache", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "viewListeners", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "viewTransferers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" } ]
6101806040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140523480156200003757600080fd5b5060405162003051380380620030518339810160408190526200005a916200039e565b6040518060400160405280600b81526020016a2b32a6b7b932aa37b5b2b760a91b8152506040518060400160405280600681526020016576654d4f524560d01b81525082808280604051806040016040528060018152602001603160f81b81525086868160039080519060200190620000d5929190620002f8565b508051620000eb906004906020840190620002f8565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060601b60c0526101205250505050506001600160a01b038116620001e95760405162461bcd60e51b815260206004820152602260248201527f506c656173652070726f766964652076616c696420726f6c6573206164647265604482015261737360f01b606482015260840160405180910390fd5b60601b6001600160601b0319166101605262000214600f600062000286602090811b6200124e17901c565b5050600c80546001818101909255600a7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790910155600d8054918201815560005260797fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb590910155506200040b915050565b60006200029d836001600160a01b038416620002a6565b90505b92915050565b6000818152600183016020526040812054620002ef57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002a0565b506000620002a0565b8280546200030690620003ce565b90600052602060002090601f0160209004810192826200032a576000855562000375565b82601f106200034557805160ff191683800117855562000375565b8280016001018555821562000375579182015b828111156200037557825182559160200191906001019062000358565b506200038392915062000387565b5090565b5b8082111562000383576000815560010162000388565b600060208284031215620003b0578081fd5b81516001600160a01b0381168114620003c7578182fd5b9392505050565b600181811c90821680620003e357607f821691505b602082108114156200040557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160601c60e0516101005161012051610140516101605160601c612bbe62000493600039600081816102c501528181610674015281816109650152818161156001526115f301526000610fad015260006116ec0152600061173b015260006117160152600061166d01526000611697015260006116c10152612bbe6000f3fe608060405234801561001057600080fd5b50600436106101f95760003560e01c806306fdde03146101fe578063071060a61461021c578063095ea7b31461023157806318160ddd1461025457806323b872dd1461026657806326a17412146102795780632be24ac81461028e578063313ce567146102a157806335a1b307146102b05780633644e515146102b8578063392f5f64146102c057806339509351146102ff5780633a46b1a81461031257806340c10f1914610325578063447d52ba146103385780634a7a7f411461034b578063587cde1e146103605780635c19a95c146103735780635e1be6bc146103865780636caa9c11146103995780636fcfff45146103ac57806370a08231146103d457806379cc6790146103e75780637a1a04df146103fa5780637dad209b146104285780637ecebe00146104305780638e539e8c1461044357806395d89b41146104565780639ab24eb01461045e5780639bc5741f14610471578063a457c2d714610484578063a9059cbb14610497578063abcbc4fc146104aa578063aeb38d8b146104bd578063bf184ea4146104d0578063c3cda520146104e3578063d505accf146104f6578063d5b5025214610509578063dc94cb7d1461051c578063dd62ed3e14610524578063e8ea4fae1461055d578063e9c3f77d14610565578063f1127ed81461058e575b600080fd5b6102066105cb565b60405161021391906129aa565b60405180910390f35b61022f61022a3660046128d0565b61065e565b005b61024461023f3660046127f7565b610724565b6040519015158152602001610213565b6002545b604051908152602001610213565b61024461027436600461274a565b61073b565b6102816107ea565b6040516102139190612925565b61022f61029c3660046126da565b6107fb565b60405160128152602001610213565b610281610853565b61025861085f565b6102e77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610213565b61024461030d3660046127f7565b610869565b6102586103203660046127f7565b6108a5565b61022f6103333660046127f7565b6108ef565b61022f6103463660046128e8565b61094e565b610353610a24565b6040516102139190612972565b6102e761036e3660046126da565b610a7b565b61022f6103813660046126da565b610a9c565b61022f6103943660046126da565b610aa9565b6102586103a73660046128d0565b610afd565b6103bf6103ba3660046126da565b610b1e565b60405163ffffffff9091168152602001610213565b6102586103e23660046126da565b610b40565b61022f6103f53660046127f7565b610b5b565b6102446104083660046127f7565b600a60209081526000928352604080842090915290825290205460ff1681565b610353610bba565b61025861043e3660046126da565b610c10565b6102586104513660046128d0565b610c2e565b610206610c5a565b61025861046c3660046126da565b610c69565b61022f61047f3660046126da565b610cfd565b6102446104923660046127f7565b610d51565b6102446104a53660046127f7565b610dea565b6102586104b83660046128d0565b610df7565b6102586104cb3660046128d0565b610e07565b6102586104de3660046128d0565b610e17565b61022f6104f1366004612822565b610e27565b61022f61050436600461278a565b610f59565b61022f6105173660046126da565b6110bd565b610353611111565b610258610532366004612712565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610353611167565b6102e76105733660046128d0565b6009602052600090815260409020546001600160a01b031681565b6105a161059c36600461287b565b6111bd565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610213565b6060600380546105da90612acd565b80601f016020809104026020016040519081016040528092919081815260200182805461060690612acd565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b505050505090505b90565b60405163b4ed0b6d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b4ed0b6d9060240160206040518083038186803b1580156106be57600080fd5b505afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f691906126f6565b60009182526009602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000610731338484611263565b5060015b92915050565b6000610748848484611387565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107d25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6107df8533858403611263565b506001949350505050565b60606107f6601161154f565b905090565b3361080461155c565b6001600160a01b0316148061082857503361081d6115ef565b6001600160a01b0316145b6108445760405162461bcd60e51b81526004016107c990612a34565b61084f600f8261124e565b5050565b60606107f6600f61154f565b60006107f6611660565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107319185906108a0908690612a7e565b611263565b60004382106108c65760405162461bcd60e51b81526004016107c9906129fd565b6001600160a01b03831660009081526007602052604090206108e8908361178b565b9392505050565b6108f833611863565b6109445760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420617574686f72697a656420746f206d696e742076654d6f726500000060448201526064016107c9565b61084f828261188c565b60405163f0723d9760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f0723d979061099c908490869060040161290c565b60206040518083038186803b1580156109b457600080fd5b505afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec91906128b0565b6001600160a01b03919091166000908152600a6020908152604080832094835293905291909120805460ff1916911515919091179055565b6060600c80548060200260200160405190810160405280929190818152602001828054801561065357602002820191906000526020600020905b815481526020019060010190808311610a5e575050505050905090565b6001600160a01b03808216600090815260066020526040902054165b919050565b610aa63382611896565b50565b33610ab261155c565b6001600160a01b03161480610ad6575033610acb6115ef565b6001600160a01b0316145b610af25760405162461bcd60e51b81526004016107c990612a34565b61084f600f82611916565b600e8181548110610b0d57600080fd5b600091825260209091200154905081565b6001600160a01b0381166000908152600760205260408120546107359061192b565b6001600160a01b031660009081526020819052604090205490565b610b6433611863565b610bb05760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420617574686f72697a656420746f206275726e2076654d6f726500000060448201526064016107c9565b61084f8282611994565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106535760200282019190600052602060002090815481526020019060010190808311610a5e575050505050905090565b6001600160a01b038116600090815260056020526040812054610735565b6000438210610c4f5760405162461bcd60e51b81526004016107c9906129fd565b61073560088361178b565b6060600480546105da90612acd565b6001600160a01b0381166000908152600760205260408120548015610cea576001600160a01b0383166000908152600760205260409020610cab600183612ab6565b81548110610cc957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600160201b90046001600160e01b0316610ced565b60005b6001600160e01b03169392505050565b33610d0661155c565b6001600160a01b03161480610d2a575033610d1f6115ef565b6001600160a01b0316145b610d465760405162461bcd60e51b81526004016107c990612a34565b61084f601182611916565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610dd35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107c9565b610de03385858403611263565b5060019392505050565b6000610731338484611387565b600b8181548110610b0d57600080fd5b600d8181548110610b0d57600080fd5b600c8181548110610b0d57600080fd5b83421115610e775760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016107c9565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ef190610ee99060a0016040516020818303038152906040528051906020012061199e565b8585856119ec565b9050610efc81611a14565b8614610f465760405162461bcd60e51b81526020600482015260196024820152784552433230566f7465733a20696e76616c6964206e6f6e636560381b60448201526064016107c9565b610f508188611896565b50505050505050565b83421115610fa95760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016107c9565b60007f0000000000000000000000000000000000000000000000000000000000000000888888610fd88c611a14565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006110338261199e565b90506000611043828787876119ec565b9050896001600160a01b0316816001600160a01b0316146110a65760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016107c9565b6110b18a8a8a611263565b50505050505050505050565b336110c661155c565b6001600160a01b031614806110ea5750336110df6115ef565b6001600160a01b0316145b6111065760405162461bcd60e51b81526004016107c990612a34565b61084f60118261124e565b6060600b8054806020026020016040519081016040528092919081815260200182805480156106535760200282019190600052602060002090815481526020019060010190808311610a5e575050505050905090565b6060600e8054806020026020016040519081016040528092919081815260200182805480156106535760200282019190600052602060002090815481526020019060010190808311610a5e575050505050905090565b60408051808201909152600080825260208201526001600160a01b0383166000908152600760205260409020805463ffffffff841690811061120f57634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b60006108e8836001600160a01b038416611a3c565b6001600160a01b0383166112c55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107c9565b6001600160a01b0382166113265760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107c9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113eb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107c9565b6001600160a01b03821661144d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107c9565b6001600160a01b038316600090815260208190526040902054818110156114c55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107c9565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906114fc908490612a7e565b92505081905550826001600160a01b0316846001600160a01b0316600080516020612b498339815191528460405161153691815260200190565b60405180910390a3611549848484611a8b565b50505050565b606060006108e883611b2b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b757600080fd5b505afa1580156115cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f691906126f6565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561164c57600080fd5b505af11580156115cb573d6000803e3d6000fd5b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156116b957507f000000000000000000000000000000000000000000000000000000000000000046145b156116e557507f000000000000000000000000000000000000000000000000000000000000000061065b565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012061065b565b8154600090815b818110156117fd5760006117a68284611b87565b9050848682815481106117c957634e487b7160e01b600052603260045260246000fd5b60009182526020909120015463ffffffff1611156117e9578092506117f7565b6117f4816001612a7e565b91505b50611792565b811561184e578461180f600184612ab6565b8154811061182d57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600160201b90046001600160e01b0316611851565b60005b6001600160e01b031695945050505050565b6001600160a01b03166000908152600a6020818152604080842092845291905290205460ff1690565b61084f8282611ba2565b60006118a183610a7b565b905060006118ae84610b40565b6001600160a01b0385811660008181526006602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611549828483611c2c565b60006108e8836001600160a01b038416611d45565b600063ffffffff8211156119905760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016107c9565b5090565b61084f8282611e62565b60006107356119ab611660565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006119fd87878787611e7a565b91509150611a0a81611f5d565b5095945050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b6000611a48838361215b565b611a7e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610735565b506000610735565b505050565b611a96600f84612173565b80611aa75750611aa7600f83612173565b611af05760405162461bcd60e51b815260206004820152601a6024820152792737ba1030baba3437b934bd32b2103a37903a3930b739b332b960311b60448201526064016107c9565b611afb838383612188565b6001600160a01b03831615611b1357611b13836121a3565b6001600160a01b03821615611a8657611a86826121a3565b606081600001805480602002602001604051908101604052809291908181526020018280548015611b7b57602002820191906000526020600020905b815481526020019060010190808311611b67575b50505050509050919050565b6000611b966002848418612a96565b6108e890848416612a7e565b611bac8282612241565b6002546001600160e01b031015611c1e5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016107c9565b611549600861231683612322565b816001600160a01b0316836001600160a01b031614158015611c4e5750600081115b15611a86576001600160a01b03831615611cca576001600160a01b03831660009081526007602052604081208190611c89906124c385612322565b91509150846001600160a01b0316600080516020612b698339815191528383604051611cbf929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611a86576001600160a01b03821660009081526007602052604081208190611d009061231685612322565b91509150836001600160a01b0316600080516020612b698339815191528383604051611d36929190918252602082015260400190565b60405180910390a25050505050565b60008181526001830160205260408120548015611e58576000611d69600183612ab6565b8554909150600090611d7d90600190612ab6565b9050818114611dfe576000866000018281548110611dab57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611ddc57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e1d57634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610735565b6000915050610735565b611e6c82826124cf565b61154960086124c383612322565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115611ea75750600090506003611f54565b8460ff16601b14158015611ebf57508460ff16601c14155b15611ed05750600090506004611f54565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f24573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f4d57600060019250925050611f54565b9150600090505b94509492505050565b6000816004811115611f7f57634e487b7160e01b600052602160045260246000fd5b1415611f8a57610aa6565b6001816004811115611fac57634e487b7160e01b600052602160045260246000fd5b1415611ff55760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b60448201526064016107c9565b600281600481111561201757634e487b7160e01b600052602160045260246000fd5b14156120655760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107c9565b600381600481111561208757634e487b7160e01b600052602160045260246000fd5b14156120e05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016107c9565b600481600481111561210257634e487b7160e01b600052602160045260246000fd5b1415610aa65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016107c9565b60009081526001919091016020526040902054151590565b60006108e8836001600160a01b03841661215b565b611a8661219484610a7b565b61219d84610a7b565b83611c2c565b60006121ae82610b40565b905060005b806121be6011612612565b1115611a86576121cf60118261261c565b6001600160a01b0316634f00a93e84846040518363ffffffff1660e01b81526004016121fc92919061290c565b600060405180830381600087803b15801561221657600080fd5b505af115801561222a573d6000803e3d6000fd5b50505050808061223990612b02565b9150506121b3565b6001600160a01b0382166122975760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107c9565b80600260008282546122a99190612a7e565b90915550506001600160a01b038216600090815260208190526040812080548392906122d6908490612a7e565b90915550506040518181526001600160a01b03831690600090600080516020612b498339815191529060200160405180910390a361084f60008383611a8b565b60006108e88284612a7e565b82546000908190801561237a578561233b600183612ab6565b8154811061235957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600160201b90046001600160e01b031661237d565b60005b6001600160e01b0316925061239683858763ffffffff16565b91506000811180156123e2575043866123b0600184612ab6565b815481106123ce57634e487b7160e01b600052603260045260246000fd5b60009182526020909120015463ffffffff16145b15612450576123f082612628565b866123fc600184612ab6565b8154811061241a57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506124ba565b8560405180604001604052806124654361192b565b63ffffffff16815260200161247985612628565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b50935093915050565b60006108e88284612ab6565b6001600160a01b03821661252f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107c9565b6001600160a01b038216600090815260208190526040902054818110156125a35760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107c9565b6001600160a01b03831660009081526020819052604081208383039055600280548492906125d2908490612ab6565b90915550506040518281526000906001600160a01b03851690600080516020612b498339815191529060200160405180910390a3611a8683600084611a8b565b6000610735825490565b60006108e88383612691565b60006001600160e01b038211156119905760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016107c9565b60008260000182815481106126b657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b803560ff81168114610a9757600080fd5b6000602082840312156126eb578081fd5b81356108e881612b33565b600060208284031215612707578081fd5b81516108e881612b33565b60008060408385031215612724578081fd5b823561272f81612b33565b9150602083013561273f81612b33565b809150509250929050565b60008060006060848603121561275e578081fd5b833561276981612b33565b9250602084013561277981612b33565b929592945050506040919091013590565b600080600080600080600060e0888a0312156127a4578283fd5b87356127af81612b33565b965060208801356127bf81612b33565b955060408801359450606088013593506127db608089016126c9565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612809578182fd5b823561281481612b33565b946020939093013593505050565b60008060008060008060c0878903121561283a578182fd5b863561284581612b33565b95506020870135945060408701359350612861606088016126c9565b92506080870135915060a087013590509295509295509295565b6000806040838503121561288d578182fd5b823561289881612b33565b9150602083013563ffffffff8116811461273f578182fd5b6000602082840312156128c1578081fd5b815180151581146108e8578182fd5b6000602082840312156128e1578081fd5b5035919050565b600080604083850312156128fa578182fd5b82359150602083013561273f81612b33565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156129665783516001600160a01b031683529284019291840191600101612941565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129665783518352928401929184019160010161298e565b6000602080835283518082850152825b818110156129d6578581018301518582016040015282016129ba565b818111156129e75783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604082015260600190565b6020808252602a908201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572206f604082015269391032bc32b1baba37b960b11b606082015260800190565b60008219821115612a9157612a91612b1d565b500190565b600082612ab157634e487b7160e01b81526012600452602481fd5b500490565b600082821015612ac857612ac8612b1d565b500390565b600181811c90821680612ae157607f821691505b60208210811415611a3657634e487b7160e01b600052602260045260246000fd5b6000600019821415612b1657612b16612b1d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610aa657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724a264697066735822122065e910a180bb3477a95a5ebac45e96f2c52a25a3498c2c864f118a73336e659164736f6c634300080300330000000000000000000000009e1ee00d45252aa58623f7d771fb414aa38f0878