solc-0.8.35 0xd86756dbb01e75a11aadacb75c8495759ed92033 optimized

9557 bytes

608060405234801561000f575f5ffd5b50600436106101fd575f3560e01c806370a0823111610114578063c2376dff116100a9578063dd62ed3e11610079578063dd62ed3e14610489578063e5c4fffe146104c1578063e696393a146104f1578063f51b0fd4146104fa578063f9854bfc14610502575f5ffd5b8063c2376dff14610453578063c7af33521461045b578063cd6dc68714610463578063d38bfff414610476575f5ffd5b80639d01fc72116100e45780639d01fc72146104075780639dc29fac1461041a578063a9059cbb1461042d578063baa9c9db14610440575f5ffd5b806370a08231146103c45780637a46a9c5146103d75780637d0d66ff146103df57806395d89b41146103e7575f5ffd5b806339a7919f116101955780635d36b190116101655780635d36b1901461033c5780635f5a857714610344578063609350cd1461036c5780636691cb3d146103945780636b96be391461039c575f5ffd5b806339a7919f146102d457806340c10f19146102e7578063430bf08a146102fa578063456ee2861461030d575f5ffd5b80630c340a24116101d05780630c340a241461028957806318160ddd146102a957806323b872dd146102b2578063313ce567146102c5575f5ffd5b806306a2da3d1461020157806306fdde0314610216578063077f22b714610250578063095ea7b314610266575b5f5ffd5b61021461020f3660046121ef565b61052a565b005b60408051808201909152600c81526b27b934b3b4b71022ba3432b960a11b60208201525b604051610247919061220a565b60405180910390f35b61025861079a565b604051908152602001610247565b61027961027436600461223f565b6107b2565b6040519015158152602001610247565b61029161081e565b6040516001600160a01b039091168152602001610247565b610258609a5481565b6102796102c0366004612269565b610834565b60405160128152602001610247565b6102146102e23660046122a7565b610965565b6102146102f536600461223f565b610b3b565b609c54610291906001600160a01b031681565b61032f61031b3660046121ef565b60a26020525f908152604090205460ff1681565b60405161024791906122d2565b610214610c66565b6102916103523660046121ef565b60a46020525f90815260409020546001600160a01b031681565b61025861037a3660046121ef565b6001600160a01b03165f90815260a1602052604090205490565b610258610d0c565b6102916103aa3660046121ef565b60a56020525f90815260409020546001600160a01b031681565b6102586103d23660046121ef565b610d1f565b609f54610258565b609e54610258565b60408051808201909152600481526309e8aa8960e31b602082015261023a565b6102146104153660046122f8565b610e08565b61021461042836600461223f565b6113a2565b61027961043b36600461223f565b61148d565b61021461044e3660046121ef565b611514565b610214611592565b61027961159b565b61021461047136600461223f565b6115ca565b6102146104843660046121ef565b6116ad565b6102586104973660046122f8565b6001600160a01b039182165f908152609b6020908152604080832093909416825291909152205490565b6104d46104cf3660046121ef565b611750565b604080519384526020840192909252151590820152606001610247565b61025860a05481565b610214611783565b6105156105103660046121ef565b61178c565b60408051928352602083019190915201610247565b61053261159b565b806105c15750609c5f9054906101000a90046001600160a01b03166001600160a01b031663570d8e1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610588573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ac919061232f565b6001600160a01b0316336001600160a01b0316145b6105e65760405162461bcd60e51b81526004016105dd9061234a565b60405180910390fd5b6001600160a01b038181165f90815260a46020526040902054166106475760405162461bcd60e51b815260206004820152601860248201527716995c9bc81859191c995cdcc81b9bdd08185b1b1bddd95960421b60448201526064016105dd565b6001600160a01b038082165f90815260a460205260408120549091169061066d83610d1f565b90505f61067983610d1f565b6001600160a01b0384165f908152609d602052604081205491925061069d8361180b565b6001600160a01b038681165f81815260a56020908152604080832080546001600160a01b0319908116909155948c16835260a48252808320805490951690945560a2808252848320805460ff19908116600117909155609d8084528685208c905594845290825284832080549091166002179055919091529081208290559091506107278361184b565b6107308361184b565b61073a91906123a6565b905061074e816107498761184b565b6118b8565b604080516001600160a01b03808a168252881660208201527fa4fa89dd14422a509261a2d4d459f93abdc84c6e92c5e7ae5448243713967bd3910160405180910390a150505050505050565b5f633b9aca00609e546107ad91906123cc565b905090565b335f818152609b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061080c9086815260200190565b60405180910390a35060015b92915050565b5f6107ad5f5160206125355f395f51905f525490565b5f6001600160a01b0383166108865760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220746f207a65726f206164647265737360401b60448201526064016105dd565b6001600160a01b0384165f908152609b60209081526040808320338452909152902054808311156108ee5760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016105dd565b6001600160a01b0385165f908152609b60209081526040808320338452909152902083820390556109208585856118fc565b836001600160a01b0316856001600160a01b03165f5160206125155f395f51905f528560405161095291815260200190565b60405180910390a3506001949350505050565b609c546001600160a01b0316331461098f5760405162461bcd60e51b81526004016105dd906123eb565b5f609a54116109e05760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420696e637265617365203020737570706c79000000000000000060448201526064016105dd565b80609a5403610a3357609a54609e54609f5460408051938452602084019290925282820152517f41645eb819d3011b13f97696a8109d14bfcddfaca7d063ec0564d62a3e2572359181900360600190a150565b6001600160801b038111610a475780610a50565b6001600160801b035b609a81905560a0545f91610a649190612422565b905080600182609e54670de0b6b3a7640000610a809190612435565b610a8a919061244c565b610a949190612422565b610a9e91906123cc565b609f819055610aef5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206368616e676520696e20737570706c79000000000000000060448201526064016105dd565b609a54609e54609f5460408051938452602084019290925282820152517f41645eb819d3011b13f97696a8109d14bfcddfaca7d063ec0564d62a3e2572359181900360600190a1505b50565b609c546001600160a01b03163314610b655760405162461bcd60e51b81526004016105dd906123eb565b6001600160a01b038216610bbb5760405162461bcd60e51b815260206004820152601860248201527f4d696e7420746f20746865207a65726f2061646472657373000000000000000060448201526064016105dd565b5f5f610bcf84610bca8561184b565b611943565b91509150610bdd82826118b8565b82609a54610beb919061244c565b609a8190556001600160801b0311610c325760405162461bcd60e51b815260206004820152600a6024820152694d617820737570706c7960b01b60448201526064016105dd565b6040518381526001600160a01b038516905f905f5160206125155f395f51905f52906020015b60405180910390a350505050565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b031614610d015760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016105dd565b610d0a33611c21565b565b5f633b9aca00609f546107ad91906123cc565b6001600160a01b0381165f90815260a2602052604081205460ff166003816004811115610d4e57610d4e6122be565b03610d6f5750506001600160a01b03165f908152609d602052604090205490565b5f610d7984611c80565b6001600160a01b0385165f908152609d6020526040902054610da390670de0b6b3a7640000612435565b610dad91906123cc565b90506004826004811115610dc357610dc36122be565b03610e01576001600160a01b038085165f90815260a560209081526040808320549093168252609d90522054610df99082612422565b949350505050565b9392505050565b610e1061159b565b80610e9f5750609c5f9054906101000a90046001600160a01b03166001600160a01b031663570d8e1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8a919061232f565b6001600160a01b0316336001600160a01b0316145b610ebb5760405162461bcd60e51b81526004016105dd9061234a565b6001600160a01b038216610f115760405162461bcd60e51b815260206004820152601d60248201527f5a65726f2066726f6d2061646472657373206e6f7420616c6c6f77656400000060448201526064016105dd565b6001600160a01b038116610f675760405162461bcd60e51b815260206004820152601b60248201527f5a65726f20746f2061646472657373206e6f7420616c6c6f776564000000000060448201526064016105dd565b806001600160a01b0316826001600160a01b031603610fc85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742064656c656761746520746f2073656c6600000000000000000060448201526064016105dd565b6001600160a01b038181165f90815260a560205260409020541615801561100657506001600160a01b038181165f90815260a4602052604090205416155b801561102957506001600160a01b038281165f90815260a5602052604090205416155b801561104c57506001600160a01b038281165f90815260a4602052604090205416155b6110a45760405162461bcd60e51b8152602060048201526024808201527f426c6f636b6564206279206578697374696e67207969656c642064656c6567616044820152633a34b7b760e11b60648201526084016105dd565b6001600160a01b038083165f90815260a2602052604080822054928416825281205460ff9283169216908260048111156110e0576110e06122be565b14806110fd575060018260048111156110fb576110fb6122be565b145b8061111957506002826004811115611117576111176122be565b145b6111655760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642072656261736553746174652066726f6d000000000000000060448201526064016105dd565b5f816004811115611178576111786122be565b148061119557506001816004811115611193576111936122be565b145b806111b1575060028160048111156111af576111af6122be565b145b6111f65760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726562617365537461746520746f60501b60448201526064016105dd565b6001600160a01b0384165f90815260a16020526040812054900361121d5761121d84611cae565b6001600160a01b0383165f90815260a16020526040902054156112435761124383611e84565b5f61124d85610d1f565b90505f61125985610d1f565b6001600160a01b0386165f908152609d6020526040812054919250611286611281848661244c565b61180b565b6001600160a01b038981165f81815260a46020908152604080832080546001600160a01b0319908116968f1696871790915585845260a5835281842080549091168517905592825260a2808252838320805460ff1990811660031790915560a18352848420670de0b6b3a76400009055609d8084528585208c9055958452908252838320805490911660041790559290925281208290559091506113298361184b565b6113328361184b565b61133c91906123a6565b90506113548161134b8761184b565b6107499061245f565b604080516001600160a01b03808c1682528a1660208201527f31e39e4bb9df9d4143551c8a3a4798fc19b0854768570ce84d966f6adffd01a3910160405180910390a1505050505050505050565b609c546001600160a01b031633146113cc5760405162461bcd60e51b81526004016105dd906123eb565b6001600160a01b0382166114225760405162461bcd60e51b815260206004820152601a60248201527f4275726e2066726f6d20746865207a65726f206164647265737300000000000060448201526064016105dd565b8015611489575f5f611440846114378561184b565b610bca9061245f565b9150915061144e82826118b8565b82609a5461145c9190612422565b609a556040518381525f906001600160a01b038616905f5160206125155f395f51905f5290602001610c58565b5050565b5f6001600160a01b0383166114df5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220746f207a65726f206164647265737360401b60448201526064016105dd565b6114ea3384846118fc565b6040518281526001600160a01b0384169033905f5160206125155f395f51905f529060200161080c565b61151c61159b565b6115385760405162461bcd60e51b81526004016105dd90612479565b6001600160a01b0381166115895760405162461bcd60e51b815260206004820152601860248201527716995c9bc81859191c995cdcc81b9bdd08185b1b1bddd95960421b60448201526064016105dd565b610b3881611e84565b610d0a33611cae565b5f6115b15f5160206125355f395f51905f525490565b6001600160a01b0316336001600160a01b031614905090565b6115d261159b565b6115ee5760405162461bcd60e51b81526004016105dd90612479565b6001600160a01b0382166116395760405162461bcd60e51b81526020600482015260126024820152715a65726f207661756c74206164647265737360701b60448201526064016105dd565b609c546001600160a01b0316156116885760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016105dd565b609f55609c80546001600160a01b0319166001600160a01b0392909216919091179055565b6116b561159b565b6116d15760405162461bcd60e51b81526004016105dd90612479565b6116f9817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b03166117185f5160206125355f395f51905f525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b6001600160a01b0381165f908152609d60205260408120548190819061177585611c80565b909590945060019350915050565b610d0a33611e84565b5f5f5f61179884611c80565b9050806b033b2e3c9fd0803ce8000000036117cc576001600160a01b039093165f908152609d602052604090205493915050565b6001600160a01b0384165f908152609d60205260409020546117f390633b9aca00906123cc565b611801633b9aca00836123cc565b9250925050915091565b5f670de0b6b3a76400006001609f54846118259190612435565b61183790670de0b6b3a764000061244c565b6118419190612422565b61081891906123cc565b5f6001600160ff1b038211156118b45760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016105dd565b5090565b81156118e0576118dc826118cd609e5461184b565b6118d791906124b0565b612058565b609e555b8015611489576118f5816118cd60a05461184b565b60a0555050565b5f5f61190b856114378561184b565b915091505f5f61191e86610bca8761184b565b909250905061193a61193083866124b0565b61074983866124b0565b50505050505050565b6001600160a01b0382165f90815260a26020526040812054819060ff168161197261196d87610d1f565b61184b565b90505f61197f86836124b0565b12156119cd5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016105dd565b5f6119db6118d787846124b0565b905060038360048111156119f1576119f16122be565b03611a92576001600160a01b038088165f90815260a4602052604081205490911690611a1c82610d1f565b90505f611a2c611281858461244c565b6001600160a01b0384165f908152609d6020526040902054909150611a509061184b565b611a598261184b565b611a6391906123a6565b6001600160a01b03808c165f908152609d60205260408082208890559590911681529390932055509450611c17565b6004836004811115611aa657611aa66122be565b03611b3b576001600160a01b038088165f90815260a560209081526040808320549093168252609d905290812054611ae290611281908461244c565b6001600160a01b0389165f908152609d6020526040902054909150611b069061184b565b611b0f8261184b565b611b1991906123a6565b6001600160a01b0389165f908152609d60205260409020919091559450611c17565b611b44876120a9565b6001600160a01b0387165f90815260a160205260409020548015611bb65786945080670de0b6b3a764000014611b97576001600160a01b0388165f90815260a160205260409020670de0b6b3a764000090555b6001600160a01b0388165f908152609d60205260409020829055611c15565b5f611bc08361180b565b6001600160a01b038a165f908152609d6020526040902054909150611be49061184b565b611bed8261184b565b611bf791906123a6565b6001600160a01b038a165f908152609d602052604090209190915595505b505b5050509250929050565b6001600160a01b038116611c775760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016105dd565b610b3881612176565b6001600160a01b0381165f90815260a160205260408120548015611ca45792915050565b5050609f54919050565b6001600160a01b0381165f90815260a1602052604090205415611d135760405162461bcd60e51b815260206004820152601860248201527f4163636f756e74206d757374206265207265626173696e67000000000000000060448201526064016105dd565b6001600160a01b0381165f90815260a2602052604090205460ff166002816004811115611d4257611d426122be565b1480611d5e57505f816004811115611d5c57611d5c6122be565b145b611dbe5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c79207374616e64617264207265626173696e67206163636f756e74732060448201526a18d85b881bdc1d081bdd5d60aa1b60648201526084016105dd565b6001600160a01b0382165f908152609d602052604081205490611de084610d1f565b6001600160a01b0385165f90815260a260209081526040808320805460ff1916600117905560a18252808320670de0b6b3a76400009055609d90915290208190559050611e41611e2f8361184b565b611e389061245f565b6107498361184b565b6040516001600160a01b03851681527f201ace89ad3f5ab7428b91989f6a50d1998791c7b94a0fa812fd64a57687165e906020015b60405180910390a150505050565b5f611e8e82610d1f565b6001600160a01b0383165f90815260a16020526040902054909150151580611ecb57506001600160a01b0382165f908152609d6020526040902054155b611f175760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e74206d757374206265206e6f6e2d7265626173696e670000000060448201526064016105dd565b6001600160a01b0382165f90815260a2602052604090205460ff166001816004811115611f4657611f466122be565b1480611f6257505f816004811115611f6057611f606122be565b145b611fc55760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207374616e64617264206e6f6e2d7265626173696e67206163636f7560448201526d373a399031b0b71037b83a1034b760911b60648201526084016105dd565b5f611fcf8361180b565b6001600160a01b0385165f90815260a260209081526040808320805460ff1916600217905560a18252808320839055609d9091529020819055905061201f6120168261184b565b61134b8561184b565b6040516001600160a01b03851681527f19a249fa2050bac8314ac10e3ad420bd9825574bf750f58810c3c7adfc7b1c6f90602001611e76565b5f5f8212156118b45760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f73697469766560448201526064016105dd565b6001600160a01b0381163b5f81158061210957508160171480156121095750826001600160a01b0316803b806020016040519081016040528181525f908060200190933c6120f6906124d7565b6001600160e81b03191662ef010060e81b145b90508015801561214257506001600160a01b0383165f90815260a2602052604081205460ff166004811115612140576121406122be565b145b801561216357506001600160a01b0383165f90815260a16020526040902054155b156121715761217183611cae565b505050565b806001600160a01b03166121955f5160206125355f395f51905f525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a35f5160206125355f395f51905f5255565b6001600160a01b0381168114610b38575f5ffd5b5f602082840312156121ff575f5ffd5b8135610e01816121db565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215612250575f5ffd5b823561225b816121db565b946020939093013593505050565b5f5f5f6060848603121561227b575f5ffd5b8335612286816121db565b92506020840135612296816121db565b929592945050506040919091013590565b5f602082840312156122b7575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60208101600583106122f257634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f60408385031215612309575f5ffd5b8235612314816121db565b91506020830135612324816121db565b809150509250929050565b5f6020828403121561233f575f5ffd5b8151610e01816121db565b60208082526028908201527f43616c6c6572206973206e6f74207468652053747261746567697374206f722060408201526723b7bb32b93737b960c11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b8181035f8312801583831316838312821617156123c5576123c5612392565b5092915050565b5f826123e657634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b8181038181111561081857610818612392565b808202811582820484141761081857610818612392565b8082018082111561081857610818612392565b5f600160ff1b820161247357612473612392565b505f0390565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b8082018281125f8312801582168215821617156124cf576124cf612392565b505092915050565b805160208201516001600160e81b031981169190600382101561250d576001600160e81b03196003838103901b81901b82161692505b505091905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a