[ { "inputs": [ { "internalType": "address", "name": "chosenOptionFactory", "type": "address" }, { "internalType": "address", "name": "chosenPoolFactory", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "name": "IncorrectMaturity", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "multiplicand", "type": "uint256" }, { "internalType": "uint256", "name": "multiplier", "type": "uint256" }, { "internalType": "uint256", "name": "divisor", "type": "uint256" } ], "name": "MulDivOverflow", "type": "error" }, { "inputs": [], "name": "NoReentrantCall", "type": "error" }, { "inputs": [], "name": "NotApprovedToTransferFees", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "minuend", "type": "uint256" }, { "internalType": "uint256", "name": "subtrahend", "type": "uint256" } ], "name": "NotEnoughReceived", "type": "error" }, { "inputs": [], "name": "NotInteracted", "type": "error" }, { "inputs": [], "name": "ZeroAddress", "type": "error" }, { "inputs": [], "name": "ZeroInput", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint160", "name": "liquidityAmount", "type": "uint160" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "internalType": "struct TimeswapV2LiquidityTokenBurnParam", "name": "param", "type": "tuple" } ], "name": "burn", "outputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "long0FeesTo", "type": "address" }, { "internalType": "address", "name": "long1FeesTo", "type": "address" }, { "internalType": "address", "name": "shortFeesTo", "type": "address" }, { "internalType": "address", "name": "shortReturnedTo", "type": "address" }, { "internalType": "uint256", "name": "long0FeesDesired", "type": "uint256" }, { "internalType": "uint256", "name": "long1FeesDesired", "type": "uint256" }, { "internalType": "uint256", "name": "shortFeesDesired", "type": "uint256" }, { "internalType": "uint256", "name": "shortReturnedDesired", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "internalType": "struct TimeswapV2LiquidityTokenCollectParam", "name": "param", "type": "tuple" } ], "name": "collect", "outputs": [ { "internalType": "uint256", "name": "long0Fees", "type": "uint256" }, { "internalType": "uint256", "name": "long1Fees", "type": "uint256" }, { "internalType": "uint256", "name": "shortFees", "type": "uint256" }, { "internalType": "uint256", "name": "shortReturned", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "internalType": "struct TimeswapV2LiquidityTokenPosition", "name": "timeswapV2LiquidityTokenPosition", "type": "tuple" } ], "name": "feesEarnedAndShortReturnedGrowth", "outputs": [ { "internalType": "uint256", "name": "long0FeeGrowth", "type": "uint256" }, { "internalType": "uint256", "name": "long1FeeGrowth", "type": "uint256" }, { "internalType": "uint256", "name": "shortFeeGrowth", "type": "uint256" }, { "internalType": "uint256", "name": "shortReturnedGrowth", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "internalType": "struct TimeswapV2LiquidityTokenPosition", "name": "timeswapV2LiquidityTokenPosition", "type": "tuple" }, { "internalType": "uint96", "name": "durationForward", "type": "uint96" } ], "name": "feesEarnedAndShortReturnedGrowth", "outputs": [ { "internalType": "uint256", "name": "long0FeeGrowth", "type": "uint256" }, { "internalType": "uint256", "name": "long1FeeGrowth", "type": "uint256" }, { "internalType": "uint256", "name": "shortFeeGrowth", "type": "uint256" }, { "internalType": "uint256", "name": "shortReturnedGrowth", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "internalType": "struct TimeswapV2LiquidityTokenPosition", "name": "timeswapV2LiquidityTokenPosition", "type": "tuple" }, { "internalType": "uint96", "name": "durationForward", "type": "uint96" } ], "name": "feesEarnedAndShortReturnedOf", "outputs": [ { "internalType": "uint256", "name": "long0Fees", "type": "uint256" }, { "internalType": "uint256", "name": "long1Fees", "type": "uint256" }, { "internalType": "uint256", "name": "shortFees", "type": "uint256" }, { "internalType": "uint256", "name": "shortReturned", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "internalType": "struct TimeswapV2LiquidityTokenPosition", "name": "timeswapV2LiquidityTokenPosition", "type": "tuple" } ], "name": "feesEarnedAndShortReturnedOf", "outputs": [ { "internalType": "uint256", "name": "long0Fees", "type": "uint256" }, { "internalType": "uint256", "name": "long1Fees", "type": "uint256" }, { "internalType": "uint256", "name": "shortFees", "type": "uint256" }, { "internalType": "uint256", "name": "shortReturned", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint160", "name": "liquidityAmount", "type": "uint160" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "erc1155Data", "type": "bytes" } ], "internalType": "struct TimeswapV2LiquidityTokenMintParam", "name": "param", "type": "tuple" } ], "name": "mint", "outputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "optionFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "internalType": "struct TimeswapV2LiquidityTokenPosition", "name": "timeswapV2LiquidityTokenPosition", "type": "tuple" } ], "name": "positionOf", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalIds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "internalType": "struct TimeswapV2LiquidityTokenPosition", "name": "timeswapV2LiquidityTokenPosition", "type": "tuple" }, { "internalType": "uint160", "name": "liquidityAmount", "type": "uint160" }, { "internalType": "bytes", "name": "erc1155Data", "type": "bytes" } ], "name": "transferTokenPositionFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60c06040523480156200001157600080fd5b506040516200500438038062005004833981016040819052620000349162000194565b60408051808201909152601b81527f54696d6573776170205632204c697175696469747920546f6b656e000000000060208201526200007381620000a2565b506001600160601b0319606084811b821660805283901b1660a0526200009981620000a2565b505050620002d5565b8051620000b7906002906020840190620000bb565b5050565b828054620000c99062000298565b90600052602060002090601f016020900481019282620000ed576000855562000138565b82601f106200010857805160ff191683800117855562000138565b8280016001018555821562000138579182015b82811115620001385782518255916020019190600101906200011b565b50620001469291506200014a565b5090565b5b808211156200014657600081556001016200014b565b80516001600160a01b03811681146200017957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215620001aa57600080fd5b620001b58462000161565b92506020620001c681860162000161565b60408601519093506001600160401b0380821115620001e457600080fd5b818701915087601f830112620001f957600080fd5b8151818111156200020e576200020e6200017e565b604051601f8201601f19908116603f011681019083821181831017156200023957620002396200017e565b816040528281528a868487010111156200025257600080fd5b600093505b8284101562000276578484018601518185018701529285019262000257565b82841115620002885760008684830101525b8096505050505050509250925092565b600181811c90821680620002ad57607f821691505b60208210811415620002cf57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c614c9a6200036a600039600081816102220152818161062501528181610f93015281816112eb01528181611747015281816119d401528181611d18015261248b01526000818161032a0152818161060401528181610af201528181610f72015281816112ca01528181611726015281816119b301528181611cf701526124690152614c9a6000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c8063767de2ff116100c3578063b3461c871161007c578063b3461c8714610325578063bd85b0391461034c578063bf0343f61461036c578063d53693391461037f578063e985e9c514610392578063f242432a146103ce57600080fd5b8063767de2ff146102b35780637680a765146102c65780637ae217fa146102d95780637c229f16146102ec5780637d341b6b146102ff578063a22cb4651461031257600080fd5b80632f745c59116101155780632f745c5914610202578063390a5ba5146102155780634219dc401461021d5780634e1273f41461025c5780634f6ccce71461027c5780635cb39b4b1461028f57600080fd5b8062fdd58e1461015157806301ffc9a7146101775780630e89341c1461019a578063222d5b1e146101ba5780632eb2c2d6146101ed575b600080fd5b61016461015f366004613aa9565b6103e1565b6040519081526020015b60405180910390f35b61018a610185366004613aeb565b610477565b604051901515815260200161016e565b6101ad6101a8366004613b08565b6104c9565b60405161016e9190613b79565b6101cd6101c8366004613ba4565b61055d565b60408051948552602085019390935291830152606082015260800161016e565b6102006101fb366004613d87565b610776565b005b610164610210366004613aa9565b6107c2565b600654610164565b6102447f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161016e565b61026f61026a366004613e34565b6107ff565b60405161016e9190613f3b565b61016461028a366004613b08565b610928565b6102a261029d366004613f4e565b61094f565b60405161016e959493929190613f89565b6101cd6102c1366004613fd6565b610e90565b6101ad6102d436600461401c565b6111a5565b6101cd6102e7366004614057565b611644565b6101ad6102fa36600461408d565b61192f565b6101cd61030d3660046140c7565b611c55565b6102006103203660046140f2565b611e61565b6102447f000000000000000000000000000000000000000000000000000000000000000081565b61016461035a366004613b08565b60009081526005602052604090205490565b61020061037a366004614130565b611e70565b61016461038d366004614057565b611ee8565b61018a6103a03660046141eb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102006103dc366004614219565b611f1e565b60006001600160a01b0383166104515760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806104a857506001600160e01b031982166303a24d0760e21b145b806104c357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546104d890614281565b80601f016020809104026020016040519081016040528092919081815260200182805461050490614281565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b50505050509050919050565b600080808080600a8161057d610578368a90038a018a6142b6565b611f63565b8152602001908152602001600020549050600d600082815260200190815260200160002054600014156105fd576000818152600b602090815260409182902082516080810184528154808252600183015493820184905260028301549482018590526003909201546060909101819052909750909550909350915061076e565b60006106667f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061065160208b018b61432a565b61066160408c0160208d0161432a565b611fbd565b6040805163c0d27cc560e01b8152908a0135600482015260608a01356024820152306044820152909250600091508190819081906001600160a01b0386169063c0d27cc59060640160806040518083038186803b1580156106c657600080fd5b505afa1580156106da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fe9190614347565b60008a8152600d6020908152604080832054600b835292819020815160808101835281548152600182015493810193909352600281015491830191909152600301546060820152949850929650909450925061075e919086868686612072565b929c50909a509850965050505050505b509193509193565b6001600160a01b038516331480610792575061079285336103a0565b6107ae5760405162461bcd60e51b81526004016104489061437d565b6107bb85858585856120ee565b5050505050565b6001600160a01b03821660009081526003602052604081208054839081106107ec576107ec6143cb565b9060005260206000200154905092915050565b606081518351146108645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610448565b600083516001600160401b0381111561087f5761087f613bc0565b6040519080825280602002602001820160405280156108a8578160200160208202803683370190505b50905060005b8451811015610920576108f38582815181106108cc576108cc6143cb565b60200260200101518583815181106108e6576108e66143cb565b60200260200101516103e1565b828281518110610905576109056143cb565b6020908102919091010152610919816143f7565b90506108ae565b509392505050565b60006006828154811061093d5761093d6143cb565b90600052602060002001549050919050565b6000808080606061096761096287614412565b6122df565b60408051608081019091526000906109cb908061098760208b018b61432a565b6001600160a01b031681526020018960200160208101906109a8919061432a565b6001600160a01b031681526040808b0135602083015260608b0135910152611f63565b90506109d6816123b8565b6000818152600a6020526040902054336109f660a08a0160808b0161432a565b6001600160a01b03161480610a425750610a42610a1960a08a0160808b0161432a565b6001600160a01b0316600090815260016020908152604080832033845290915290205460ff1690565b610a5f5760405163a411173560e01b815260040160405180910390fd5b610a7c610a7260a08a0160808b0161432a565b60008360006123fa565b610ae18861012001358961014001358a61016001358b6101800135600c600087815260200190815260200160002060008e6080016020810190610abf919061432a565b6001600160a01b03168152602081019190915260400160002093929190612741565b929950909750955093506000610b337f0000000000000000000000000000000000000000000000000000000000000000610b1e60208c018c61432a565b610b2e60408d0160208e0161432a565b612793565b90508715610bba576001600160a01b03811663b2ceca7760408b013560608c0135610b6460c08e0160a08f0161432a565b60008d6040518663ffffffff1660e01b8152600401610b87959493929190614514565b600060405180830381600087803b158015610ba157600080fd5b505af1158015610bb5573d6000803e3d6000fd5b505050505b8615610c3f576001600160a01b03811663b2ceca7760408b013560608c0135610be960e08e0160c08f0161432a565b60018c6040518663ffffffff1660e01b8152600401610c0c959493929190614514565b600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505050505b610c498587614562565b15610cd7576001600160a01b03811663b2ceca7760408b013560608c0135610c786101008e0160e08f0161432a565b6002610c848b8d614562565b6040518663ffffffff1660e01b8152600401610ca4959493929190614514565b600060405180830381600087803b158015610cbe57600080fd5b505af1158015610cd2573d6000803e3d6000fd5b505050505b610ce56101a08a018a61457a565b159050610e2a576040805161012081019091523390636e3d9ae89080610d0e60208e018e61432a565b6001600160a01b031681526020018c6020016020810190610d2f919061432a565b6001600160a01b031681526020018c6040013581526020018c6060013581526020018b81526020018a81526020018981526020018881526020018c806101a00190610d7a919061457a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040516001600160e01b031960e084901b168152610dd191906004016145c7565b600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e27919081019061465b565b93505b610e7b88888888600c600088815260200190815260200160002060008f6080016020810190610e59919061432a565b6001600160a01b031681526020810191909152604001600020939291906127b8565b610e8483612829565b50505091939590929450565b600080808080600a81610eab610578368b90038b018b6142b6565b8152602001908152602001600020549050600d60008281526020019081526020016000205460001415610f6b576000818152600c602090815260408083206001600160a01b038c1684528252918290208251610100810184528154815260018201549281019290925260028101549282019290925260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840181905260079094015460e09093018390529097509550909350915061119b565b6000610fcf7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610fbf60208c018c61432a565b61066160408d0160208e0161432a565b6040805163de64af9360e01b8152908b0135600482015260608b013560248201523060448201526001600160601b038a1660648201529092506001600160a01b038316915063de64af939060840160806040518083038186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190614347565b6000868152600d6020908152604080832054600b83528184208251608081018452815481526001820154948101949094526002810154928401929092526003909101546060830152959b509399509197509550918291829182916110d4918c8c8c8c612072565b93509350935093506000600c600088815260200190815260200160002060008f6001600160a01b03166001600160a01b031681526020019081526020016000206040518061010001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050905061118a61117f8f896103e1565b82908787878761284a565b929d50909b50995097505050505050505b5093509350935093565b60606111b86111b3836146dc565b6128ce565b6040805160808101909152600090806111d4602086018661432a565b6001600160a01b031681526020018460200160208101906111f5919061432a565b6001600160a01b03168152604080860135602083015260608601359101529050600061122082611f63565b6000818152600a6020526040902054909150806112b157600e60008154611246906143f7565b91829055506000818152600960209081526040808320875181546001600160a01b039182166001600160a01b0319918216178355848a01516001840180549190931691161790558188015160028201556060880151600390910155858352600a909152902081905590505b6112ba82612922565b6112c3826123b8565b60006113277f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061131760208a018a61432a565b61066160408b0160208c0161432a565b91506000905061133d60c0880160a0890161432a565b6040805163f78333a360e01b8152908901356004820152606089013560248201523060448201526001600160a01b0384169063f78333a39060640160206040518083038186803b15801561139057600080fd5b505afa1580156113a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c891906147a1565b6113d291906147be565b90506114486113e760a0890160808a0161432a565b846113f860c08b0160a08c0161432a565b6001600160a01b031661140e60e08c018c61457a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061296092505050565b6040805160c08101909152339063bef8f8f5908061146960208c018c61432a565b6001600160a01b031681526020018a602001602081019061148a919061432a565b6001600160a01b031681526020018a6040013581526020018a6060013581526020018a60a00160208101906114bf919061432a565b6001600160a01b031681526020016114da60c08c018c61457a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040516001600160e01b031960e084901b168152611531919060040161483e565b600060405180830381600087803b15801561154b57600080fd5b505af115801561155f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611587919081019061465b565b6040805163f78333a360e01b815290890135600482015260608901356024820152306044820152909650611631906001600160a01b0384169063f78333a39060640160206040518083038186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161991906147a1565b6001600160a01b0316826001600160a01b0316612a92565b61163a84612829565b5050505050919050565b600080808080600a8161165f610578368a90038a018a6142b6565b8152602001908152602001600020549050600d6000828152602001908152602001600020546000141561171f576000818152600c602090815260408083206001600160a01b038b1684528252918290208251610100810184528154815260018201549281019290925260028101549282019290925260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840181905260079094015460e090930183905290975095509093509150611925565b60006117737f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061065160208b018b61432a565b6040805163c0d27cc560e01b8152908a0135600482015260608a013560248201523060448201529092506001600160a01b038316915063c0d27cc59060640160806040518083038186803b1580156117ca57600080fd5b505afa1580156117de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118029190614347565b6000868152600d6020908152604080832054600b83528184208251608081018452815481526001820154948101949094526002810154928401929092526003909101546060830152959b50939950919750955091829182918291611869918c8c8c8c612072565b93509350935093506000600c600088815260200190815260200160002060008e6001600160a01b03166001600160a01b031681526020019081526020016000206040518061010001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050905061191461117f8e896103e1565b929d50909b50995097505050505050505b5092959194509250565b606061193d6111b383614851565b60408051608081019091526000906119a1908061195d602087018761432a565b6001600160a01b0316815260200185602001602081019061197e919061432a565b6001600160a01b0316815260408087013560208301526060870135910152611f63565b90506119ac816123b8565b6000611a107f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611a00602088018861432a565b6106616040890160208a0161432a565b9150506001600160a01b03811663c0e0c4c660408601356060870135611a3c60a0890160808a0161432a565b611a4c60c08a0160a08b0161432a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b039081166044840152166064820152608401600060405180830381600087803b158015611aa357600080fd5b505af1158015611ab7573d6000803e3d6000fd5b50611ac99250505060c085018561457a565b159050611c12576040805160c08101909152339063aef2b3349080611af1602089018961432a565b6001600160a01b03168152602001876020016020810190611b12919061432a565b6001600160a01b0316815260200187604001358152602001876060013581526020018760a0016020810190611b47919061432a565b6001600160a01b03168152602001611b6260c089018961457a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040516001600160e01b031960e084901b168152611bb9919060040161483e565b600060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c0f919081019061465b565b92505b6000828152600a6020526040902054611c45903390611c3760c0880160a0890161432a565b6001600160a01b0316612abd565b611c4e82612829565b5050919050565b600080808080600a81611c70610578368b90038b018b6142b6565b8152602001908152602001600020549050600d60008281526020019081526020016000205460001415611cf0576000818152600b6020908152604091829020825160808101845281548082526001830154938201849052600283015494820185905260039092015460609091018190529097509095509093509150611925565b6000611d447f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610fbf60208c018c61432a565b6040805163de64af9360e01b8152908b0135600482015260608b013560248201523060448201526001600160601b038a166064820152909250600091508190819081906001600160a01b0386169063de64af939060840160806040518083038186803b158015611db357600080fd5b505afa158015611dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611deb9190614347565b60008a8152600d6020908152604080832054600b8352928190208151608081018352815481526001820154938101939093526002810154918301919091526003015460608201529498509296509094509250611e4b919086868686612072565b929f919e509c50909a5098505050505050505050565b611e6c338383612c57565b5050565b611ee08686600a6000611e8b610578368b90038b018b6142b6565b815260200190815260200160002054866001600160a01b031686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f1e92505050565b505050505050565b6000611f1783600a83611f03610578368890038801886142b6565b8152602001908152602001600020546103e1565b9392505050565b6001600160a01b038516331480611f3a5750611f3a85336103a0565b611f565760405162461bcd60e51b81526004016104489061437d565b6107bb8585858585612d38565b6040805182516001600160a01b03908116602080840191909152840151168183015290820151606080830191909152820151608082015260009060a001604051602081830303815290604052805190602001209050919050565b600080611fd46001600160a01b0387168585612793565b6040516330af0bbf60e21b81526001600160a01b0380831660048301529193509086169063c2bc2efc9060240160206040518083038186803b15801561201957600080fd5b505afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205191906147a1565b90506001600160a01b03811661206957612069612e7e565b94509492505050565b600080600080612082888a612e97565b8a5161208e9190614562565b935061209a878a612e97565b8a602001516120a99190614562565b92506120b5868a612e97565b8a604001516120c49190614562565b91506120d0858a612e97565b8a606001516120df9190614562565b90509650965096509692505050565b81518351146121505760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610448565b6001600160a01b0384166121765760405162461bcd60e51b8152600401610448906148ee565b33612185818787878787612eb2565b60005b845181101561226b5760008582815181106121a5576121a56143cb565b6020026020010151905060008583815181106121c3576121c36143cb565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156122135760405162461bcd60e51b815260040161044890614933565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612250908490614562565b9250508190555050505080612264906143f7565b9050612188565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516122bb92919061497d565b60405180910390a46122d1818787878787612f33565b611ee0818787878787612fa6565b60808101516001600160a01b03161580612304575060a08101516001600160a01b0316155b8061231a575060c08101516001600160a01b0316155b80612330575060e08101516001600160a01b0316155b8061234757506101008101516001600160a01b0316155b1561235457612354612e7e565b60608101516001600160601b031015612374576123748160600151613111565b61012081015115801561238a5750610140810151155b80156123995750610160810151155b80156123a85750610180810151155b156123b5576123b561312d565b50565b6000818152600860205260409020546123d9906001600160601b0316613146565b600090815260086020526040902080546001600160601b0319166002179055565b826001600160a01b0316846001600160a01b03161461273b576000828152600960209081526040808320815160808101835281546001600160a01b039081168083526001840154909116948201859052600283015493820193909352600390910154606082015292916124b1917f0000000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009190611fbd565b915050600080600080846001600160a01b03166382b9008f6040518061014001604052808960400151815260200189606001518152602001306001600160a01b03168152602001306001600160a01b03168152602001306001600160a01b03168152602001306001600160a01b03168152602001428a606001511161253757600061253b565b6000195b8152602001428a6060015111612552576000612556565b6000195b815260200160001981526020016000198152506040518263ffffffff1660e01b815260040161258591906149a2565b608060405180830381600087803b15801561259f57600080fd5b505af11580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d79190614347565b60008c8152600d6020908152604080832054600b9092529091209498509296509094509250906001600160a01b0382161561261a5761261a818388888888613198565b6001600160a01b038c161561268e576000600c60008c815260200190815260200160002060008e6001600160a01b03166001600160a01b03168152602001908152602001600020905061268c6126708e8d6103e1565b835460018501546002860154600387015486949392919061322b565b505b6001600160a01b038b16156126ce5760008a8152600c602090815260408083206001600160a01b038f16845290915290206126cc6126708d8d6103e1565b505b6001600160a01b038c166127005760008a8152600d6020526040812080548b92906126fa908490614562565b90915550505b6001600160a01b038b166127325760008a8152600d6020526040812080548b929061272c908490614a57565b90915550505b50505050505050505b50505050565b6000806000806127558960040154896132f9565b93506127658960050154886132f9565b92506127758960060154876132f9565b91506127858960070154866132f9565b905095509550955095915050565b60006127a084848461330f565b90506001600160a01b038116611f1757611f17612e7e565b838560040160008282546127cc9190614a57565b92505081905550828560050160008282546127e79190614a57565b92505081905550818560060160008282546128029190614a57565b925050819055508085600701600082825461281d9190614a57565b90915550505050505050565b600090815260086020526040902080546001600160601b0319166001179055565b60008060008061285f898b600001518a61339c565b8a6080015161286e9190614562565b935061287f898b602001518961339c565b8a60a0015161288e9190614562565b925061289f898b604001518861339c565b8a60c001516128ae9190614562565b91506128bf898b606001518761339c565b8a60e001516120df9190614562565b60808101516001600160a01b03166128e8576128e8612e7e565b60608101516001600160601b031015612908576129088160600151613111565b60a08101516001600160a01b03166123b5576123b561312d565b6000818152600860205260409020546001600160601b03166123b557600081815260086020526040902080546001600160601b031916600117905550565b6001600160a01b0384166129c05760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610448565b3360006129cc856133c9565b905060006129d9856133c9565b90506129ea83600089858589612eb2565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290612a1a908490614562565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612a7a83600089858589612f33565b612a8983600089898989613414565b50505050505050565b80821015611e6c57604051631c22ff0160e21b81526004810183905260248101829052604401610448565b6001600160a01b038316612b1f5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610448565b336000612b2b846133c9565b90506000612b38846133c9565b9050612b5883876000858560405180602001604052806000815250612eb2565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015612bd55760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610448565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612a8984886000868660405180602001604052806000815250612f33565b816001600160a01b0316836001600160a01b03161415612ccb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610448565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416612d5e5760405162461bcd60e51b8152600401610448906148ee565b336000612d6a856133c9565b90506000612d77856133c9565b9050612d87838989858589612eb2565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015612dc85760405162461bcd60e51b815260040161044890614933565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612e05908490614562565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612e65848a8a86868a612f33565b612e73848a8a8a8a8a613414565b505050505050505050565b60405163d92e233d60e01b815260040160405180910390fd5b6000611f1783600160801b6001600160a01b038516846134de565b612ec08686868686866135da565b60005b8351811015612a8957828181518110612ede57612ede6143cb565b6020026020010151600014612f2b57612f2b8686868481518110612f0457612f046143cb565b6020026020010151868581518110612f1e57612f1e6143cb565b60200260200101516123fa565b600101612ec3565b60005b8351811015612a8957828181518110612f5157612f516143cb565b6020026020010151600014612f9e57612f9e8686868481518110612f7757612f776143cb565b6020026020010151868581518110612f9157612f916143cb565b602002602001015161364d565b600101612f36565b6001600160a01b0384163b15611ee05760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612fea9089908990889088908890600401614a6e565b602060405180830381600087803b15801561300457600080fd5b505af1925050508015613034575060408051601f3d908101601f1916820190925261303191810190614acc565b60015b6130e157613040614ae9565b806308c379a0141561307a5750613055614b05565b80613060575061307c565b8060405162461bcd60e51b81526004016104489190613b79565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610448565b6001600160e01b0319811663bc197c8160e01b14612a895760405162461bcd60e51b815260040161044890614b8e565b6040516335f135d360e01b815260048101829052602401610448565b60405163af458c0760e01b815260040160405180910390fd5b6001600160601b03811661316d5760405163e2228b1560e01b815260040160405180910390fd5b6001600160601b038116600214156123b55760405163865a6de560e01b815260040160405180910390fd5b6131a28486612e97565b8660000160008282546131b59190614562565b909155506131c590508386612e97565b8660010160008282546131d89190614562565b909155506131e890508286612e97565b8660020160008282546131fb9190614562565b9091555061320b90508186612e97565b86600301600082825461321e9190614562565b9091555050505050505050565b6001600160a01b038516156132dd576132498587600001548661339c565b86600401600082825461325c9190614562565b925050819055506132728587600101548561339c565b8660050160008282546132859190614562565b9250508190555061329b8587600201548461339c565b8660060160008282546132ae9190614562565b925050819055506132c48587600301548361339c565b8660070160008282546132d79190614562565b90915550505b9285556001850191909155600284015560039092019190915550565b60008183106133085781611f17565b5090919050565b60405163d81e842360e01b81526001600160a01b03838116600483015282811660248301526000919085169063d81e84239060440160206040518083038186803b15801561335c57600080fd5b505afa158015613370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339491906147a1565b949350505050565b6000828214156133ad576000613394565b6133946001600160a01b038516848403600160801b60006134de565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613403576134036143cb565b602090810291909101015292915050565b6001600160a01b0384163b15611ee05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906134589089908990889088908890600401614bd6565b602060405180830381600087803b15801561347257600080fd5b505af19250505080156134a2575060408051601f3d908101601f1916820190925261349f91810190614acc565b60015b6134ae57613040614ae9565b6001600160e01b0319811663f23a6e6160e01b14612a895760405162461bcd60e51b815260040161044890614b8e565b60008060006134ed87876136f9565b91509150806000141561350e57613505828686613718565b92505050613394565b80851161353f5760405163362ced0960e11b8152600481018890526024810187905260448101869052606401610448565b600085878909600087810388169788900497600260038a028118808b02820302808b02820302808b02820302808b02820302808b02820302808b029091030291819003819004600101868411909503948502929095039490940417928302935084905080156135bd575084806135b7576135b7614c10565b86880915155b156135d057826135cc816143f7565b9350505b5050949350505050565b60005b8351811015612a89578281815181106135f8576135f86143cb565b602002602001015160001461364557613645868686848151811061361e5761361e6143cb565b6020026020010151868581518110613638576136386143cb565b6020026020010151613753565b6001016135dd565b6001600160a01b0383166136a65760008281526005602052604081208054839290613679908490614a57565b9091555050600082815260056020526040902054158015613698575060015b156136a6576136a68261387c565b6001600160a01b038416158015906136d05750826001600160a01b0316846001600160a01b031614155b1561273b576136df84836103e1565b1580156136ea575060015b1561273b5761273b8483613938565b6000806000198385098385029250828110838203039150509250929050565b60006137248385614c26565b905081801561373b57506137388385614c3a565b15155b15611f17578061374a816143f7565b95945050505050565b6001600160a01b0384166137ec5760008281526005602052604090205415801561377b575060015b156137c8576137c882600680546000838152600760205260408120829055600182018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0155565b600082815260056020526040812080548392906137e6908490614562565b90915550505b6001600160a01b038316158015906138165750836001600160a01b0316836001600160a01b031614155b1561273b5761382583836103e1565b158015613830575060015b1561273b576001600160a01b038316600090815260036020818152604080842080546004845282862088875284529185208290559282526001810183559183529091200182905561273b565b60065460009061388e90600190614a57565b6000838152600760205260409020549091508082146138fd576000600683815481106138bc576138bc6143cb565b9060005260206000200154905080600683815481106138dd576138dd6143cb565b600091825260208083209091019290925591825260079052604090208190555b600083815260076020526040812055600680548061391d5761391d614c4e565b60019003818190600052602060002001600090559055505050565b6001600160a01b03821660009081526003602052604081205461395d90600190614a57565b6001600160a01b0384166000908152600460209081526040808320868452909152902054909150808214613a2b576001600160a01b03841660009081526003602052604081208054849081106139b5576139b56143cb565b906000526020600020015490508060036000876001600160a01b03166001600160a01b0316815260200190815260200160002083815481106139f9576139f96143cb565b60009182526020808320909101929092556001600160a01b038716815260048252604080822093825292909152208190555b6001600160a01b038416600081815260046020908152604080832087845282528083208390559282526003905220805480613a6857613a68614c4e565b6001900381819060005260206000200160009055905550505050565b6001600160a01b03811681146123b557600080fd5b8035613aa481613a84565b919050565b60008060408385031215613abc57600080fd5b8235613ac781613a84565b946020939093013593505050565b6001600160e01b0319811681146123b557600080fd5b600060208284031215613afd57600080fd5b8135611f1781613ad5565b600060208284031215613b1a57600080fd5b5035919050565b60005b83811015613b3c578181015183820152602001613b24565b8381111561273b5750506000910152565b60008151808452613b65816020860160208601613b21565b601f01601f19169290920160200192915050565b602081526000611f176020830184613b4d565b600060808284031215613b9e57600080fd5b50919050565b600060808284031215613bb657600080fd5b611f178383613b8c565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613bfb57613bfb613bc0565b6040525050565b6040516101c081016001600160401b0381118282101715613c2557613c25613bc0565b60405290565b60405161010081016001600160401b0381118282101715613c2557613c25613bc0565b60405160e081016001600160401b0381118282101715613c2557613c25613bc0565b60006001600160401b03821115613c8957613c89613bc0565b5060051b60200190565b600082601f830112613ca457600080fd5b81356020613cb182613c70565b604051613cbe8282613bd6565b83815260059390931b8501820192828101915086841115613cde57600080fd5b8286015b84811015613cf95780358352918301918301613ce2565b509695505050505050565b60006001600160401b03821115613d1d57613d1d613bc0565b50601f01601f191660200190565b600082601f830112613d3c57600080fd5b8135613d4781613d04565b604051613d548282613bd6565b828152856020848701011115613d6957600080fd5b82602086016020830137600092810160200192909252509392505050565b600080600080600060a08688031215613d9f57600080fd5b8535613daa81613a84565b94506020860135613dba81613a84565b935060408601356001600160401b0380821115613dd657600080fd5b613de289838a01613c93565b94506060880135915080821115613df857600080fd5b613e0489838a01613c93565b93506080880135915080821115613e1a57600080fd5b50613e2788828901613d2b565b9150509295509295909350565b60008060408385031215613e4757600080fd5b82356001600160401b0380821115613e5e57600080fd5b818501915085601f830112613e7257600080fd5b81356020613e7f82613c70565b604051613e8c8282613bd6565b83815260059390931b8501820192828101915089841115613eac57600080fd5b948201945b83861015613ed3578535613ec481613a84565b82529482019490820190613eb1565b96505086013592505080821115613ee957600080fd5b50613ef685828601613c93565b9150509250929050565b600081518084526020808501945080840160005b83811015613f3057815187529582019590820190600101613f14565b509495945050505050565b602081526000611f176020830184613f00565b600060208284031215613f6057600080fd5b81356001600160401b03811115613f7657600080fd5b82016101c08185031215611f1757600080fd5b85815284602082015283604082015282606082015260a060808201526000613fb460a0830184613b4d565b979650505050505050565b80356001600160601b0381168114613aa457600080fd5b600080600060c08486031215613feb57600080fd5b8335613ff681613a84565b92506140058560208601613b8c565b915061401360a08501613fbf565b90509250925092565b60006020828403121561402e57600080fd5b81356001600160401b0381111561404457600080fd5b82016101008185031215611f1757600080fd5b60008060a0838503121561406a57600080fd5b823561407581613a84565b91506140848460208501613b8c565b90509250929050565b60006020828403121561409f57600080fd5b81356001600160401b038111156140b557600080fd5b820160e08185031215611f1757600080fd5b60008060a083850312156140da57600080fd5b6140e48484613b8c565b915061408460808401613fbf565b6000806040838503121561410557600080fd5b823561411081613a84565b91506020830135801515811461412557600080fd5b809150509250929050565b600080600080600080610100878903121561414a57600080fd5b863561415581613a84565b9550602087013561416581613a84565b94506141748860408901613b8c565b935060c087013561418481613a84565b925060e08701356001600160401b03808211156141a057600080fd5b818901915089601f8301126141b457600080fd5b8135818111156141c357600080fd5b8a60208285010111156141d557600080fd5b6020830194508093505050509295509295509295565b600080604083850312156141fe57600080fd5b823561420981613a84565b9150602083013561412581613a84565b600080600080600060a0868803121561423157600080fd5b853561423c81613a84565b9450602086013561424c81613a84565b9350604086013592506060860135915060808601356001600160401b0381111561427557600080fd5b613e2788828901613d2b565b600181811c9082168061429557607f821691505b60208210811415613b9e57634e487b7160e01b600052602260045260246000fd5b6000608082840312156142c857600080fd5b604051608081018181106001600160401b03821117156142ea576142ea613bc0565b60405282356142f881613a84565b8152602083013561430881613a84565b6020820152604083810135908201526060928301359281019290925250919050565b60006020828403121561433c57600080fd5b8135611f1781613a84565b6000806000806080858703121561435d57600080fd5b505082516020840151604085015160609095015191969095509092509050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561440b5761440b6143e1565b5060010190565b60006101c0823603121561442557600080fd5b61442d613c02565b61443683613a99565b815261444460208401613a99565b6020820152604083013560408201526060830135606082015261446960808401613a99565b608082015261447a60a08401613a99565b60a082015261448b60c08401613a99565b60c082015261449c60e08401613a99565b60e08201526101006144af818501613a99565b9082015261012083810135908201526101408084013590820152610160808401359082015261018080840135908201526101a0808401356001600160401b038111156144fa57600080fd5b61450636828701613d2b565b918301919091525092915050565b858152602081018590526001600160a01b038416604082015260a081016003841061454f57634e487b7160e01b600052602160045260246000fd5b6060820193909352608001529392505050565b60008219821115614575576145756143e1565b500190565b6000808335601e1984360301811261459157600080fd5b8301803591506001600160401b038211156145ab57600080fd5b6020019150368190038213156145c057600080fd5b9250929050565b602081526145e16020820183516001600160a01b03169052565b600060208301516145fd60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e0830151610100818185015280850151915050610120808185015250613394610140840182613b4d565b60006020828403121561466d57600080fd5b81516001600160401b0381111561468357600080fd5b8201601f8101841361469457600080fd5b805161469f81613d04565b6040516146ac8282613bd6565b8281528660208486010111156146c157600080fd5b6146d2836020830160208701613b21565b9695505050505050565b600061010082360312156146ef57600080fd5b6146f7613c2b565b61470083613a99565b815261470e60208401613a99565b6020820152604083013560408201526060830135606082015261473360808401613a99565b608082015261474460a08401613a99565b60a082015260c08301356001600160401b038082111561476357600080fd5b61476f36838701613d2b565b60c084015260e085013591508082111561478857600080fd5b5061479536828601613d2b565b60e08301525092915050565b6000602082840312156147b357600080fd5b8151611f1781613a84565b60006001600160a01b038281168482168083038211156147e0576147e06143e1565b01949350505050565b600060018060a01b0380835116845280602084015116602085015260408301516040850152606083015160608501528060808401511660808501525060a082015160c060a085015261339460c0850182613b4d565b602081526000611f1760208301846147e9565b600060e0823603121561486357600080fd5b61486b613c4e565b61487483613a99565b815261488260208401613a99565b602082015260408301356040820152606083013560608201526148a760808401613a99565b60808201526148b860a08401613a99565b60a082015260c08301356001600160401b038111156148d657600080fd5b6148e236828601613d2b565b60c08301525092915050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006149906040830185613f00565b828103602084015261374a8185613f00565b600061014082019050825182526020830151602083015260408301516149d360408401826001600160a01b03169052565b5060608301516149ee60608401826001600160a01b03169052565b506080830151614a0960808401826001600160a01b03169052565b5060a0830151614a2460a08401826001600160a01b03169052565b5060c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b600082821015614a6957614a696143e1565b500390565b6001600160a01b0386811682528516602082015260a060408201819052600090614a9a90830186613f00565b8281036060840152614aac8186613f00565b90508281036080840152614ac08185613b4d565b98975050505050505050565b600060208284031215614ade57600080fd5b8151611f1781613ad5565b600060033d1115614b025760046000803e5060005160e01c5b90565b600060443d1015614b135790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614b4257505050505090565b8285019150815181811115614b5a5750505050505090565b843d8701016020828501011115614b745750505050505090565b614b8360208286010187613bd6565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090613fb490830184613b4d565b634e487b7160e01b600052601260045260246000fd5b600082614c3557614c35614c10565b500490565b600082614c4957614c49614c10565b500690565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220cd01625efe0843efd50c5551683211298b88c6b64b9b1708aa53fc5af2c2a13264736f6c6343000808003300000000000000000000000017385e95cb74a20150e4fa092aa72d57330896c400000000000000000000000097509c65ff29c268f0d283a41201be6b4090354c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000