solc-0.8.36-doubleshift20 0x83bc649fcdb2c8da146b2154a559ddedf937ef12 optimized
20814 bytes
608060405260043610610445575f3560e01c806353f3fcb111610236578063c00b2d6111610134578063e4537934116100b3578063f2fde38b11610078578063f2fde38b14610e66578063f340fa0114610e85578063f3fef3a314610e98578063f9609f0814610eb7578063fc6dfe4e14610eca575f5ffd5b8063e453793414610d9e578063e74b981b14610dd6578063e939482314610df5578063ee30511614610e28578063f2c5998a14610e47575f5ffd5b8063d6951aa9116100f9578063d6951aa914610cfe578063da79205814610d1d578063da8ed1f714610d41578063dcbfb6c314610d60578063de70b59f14610d7f575f5ffd5b8063c00b2d6114610c71578063c00c2d7314610c90578063c98bea5b14610caf578063d0e30db014610cd7578063d67b8fee14610cdf575f5ffd5b80637c8dc440116101c05780639a8a302b116101855780639a8a302b14610bec578063aaf10f4214610c0b578063b46a130e14610c1f578063baaff11614610c3e578063bac1520314610c5d575f5ffd5b80637c8dc44014610b3d5780637c90fbf014610b5c5780638da5cb5b14610b82578063917266fa14610b9f5780639795947314610bbe575f5ffd5b80635c975abb116102065780635c975abb14610aab578063616e6c1b14610acb578063715018a614610aea57806371cb700f14610afe5780637346f1aa14610b1d575f5ffd5b806353f3fcb114610a215780635460172614610a3a578063561bddf814610a6d57806356f1199b14610a8c575f5ffd5b806322828cc2116103435780633a53acb0116102cd57806346d4b7141161029257806346d4b7141461099d5780634c73f498146109bc5780634f1ef286146109db57806351199700146109ee57806352d1902d14610a0d575f5ffd5b80633a53acb01461090d578063439766ce1461092c578063456a23a614610940578063469048401461095f578063469963aa1461097e575f5ffd5b80632db004a3116103135780632db004a314610871578063358764761461089c5780633659cfe6146108bb57806337cfdaca146108da578063397a1b28146108ee575f5ffd5b806322828cc2146107c457806326d5d54a146107e357806328a947d91461083d57806328ac82e714610852575f5ffd5b806310ddce8e116103cf57806317e51e801161039457806317e51e80146107295780631991c225146107485780631aab9ef1146107675780631e95e60e146107865780631ee665c4146107a5575f5ffd5b806310ddce8e1461066e57806312c53c9b146106ac578063158f8f59146106cc5780631665f66d146106eb5780631729d10b1461070a575f5ffd5b8063083884261161041557806308388426146105bb578063086e16c0146105da57806308c73259146105f85780630de371e21461062f5780630ea9e8521461064e575f5ffd5b806303dcfbdc146104f757806306be9c53146105295780630716e2421461055c57806308061aeb1461057d575f5ffd5b366104f3576001600160801b033411156104725760405163162908e360e11b815260040160405180910390fd5b60cf80543491905f9061048f9084906001600160801b03166143c0565b92506101000a8154816001600160801b03021916908360801b60801c02179055503460cf60108282829054906101000a900460801b60801c6104d191906143df565b92506101000a8154816001600160801b03021916908360801b60801c02179055005b5f5ffd5b348015610502575f5ffd5b50610516610511366004614412565b610ef8565b6040519081526020015b60405180910390f35b348015610534575f5ffd5b506105167fc6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef081565b348015610567575f5ffd5b5061057b61057636600461449f565b610fc1565b005b348015610588575f5ffd5b506105ab6105973660046144dd565b60db6020525f908152604090205460ff1681565b6040519015158152602001610520565b3480156105c6575f5ffd5b5061057b6105d536600461453c565b6110b7565b3480156105e5575f5ffd5b5061057b6105f4366004614658565b5050565b348015610603575f5ffd5b5060e054610617906001600160a01b031681565b6040516001600160a01b039091168152602001610520565b34801561063a575f5ffd5b5060ce54610617906001600160a01b031681565b348015610659575f5ffd5b506105165f51602061512e5f395f51905f5281565b348015610679575f5ffd5b5060d45461069490600160801b90046001600160801b031681565b6040516001600160801b039091168152602001610520565b3480156106b7575f5ffd5b5060ce546105ab90600160a01b900460ff1681565b3480156106d7575f5ffd5b5061057b6106e63660046144dd565b61169d565b3480156106f6575f5ffd5b5061057b61070536600461469d565b6117ea565b348015610715575f5ffd5b5060de54610617906001600160a01b031681565b348015610734575f5ffd5b5060dd54610617906001600160a01b031681565b348015610753575f5ffd5b5061057b61076236600461469d565b61185c565b348015610772575f5ffd5b506105166107813660046146b8565b6118e3565b348015610791575f5ffd5b506106176107a03660046146ea565b611a3d565b3480156107b0575f5ffd5b5061057b6107bf366004614701565b611a65565b3480156107cf575f5ffd5b5060c954610617906001600160a01b031681565b3480156107ee575f5ffd5b506108206107fd366004614782565b60d76020525f908152604090205463ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610520565b348015610848575f5ffd5b5061051660e15481565b34801561085d575f5ffd5b5060cb54610617906001600160a01b031681565b34801561087c575f5ffd5b5061051661088b3660046146ea565b60d86020525f908152604090205481565b3480156108a7575f5ffd5b5061057b6108b63660046147a0565b611b07565b3480156108c6575f5ffd5b5061057b6108d53660046144dd565b611d30565b3480156108e5575f5ffd5b50610516611df7565b3480156108f9575f5ffd5b50610516610908366004614831565b611e26565b348015610918575f5ffd5b506105166109273660046146ea565b611f56565b348015610937575f5ffd5b5061057b611ff0565b34801561094b575f5ffd5b5060cf54610694906001600160801b031681565b34801561096a575f5ffd5b5060d054610617906001600160a01b031681565b348015610989575f5ffd5b5060ca54610617906001600160a01b031681565b3480156109a8575f5ffd5b5061057b6109b736600461485b565b612188565b3480156109c7575f5ffd5b5061057b6109d636600461485b565b6122dc565b61057b6109e93660046148b8565b612392565b3480156109f9575f5ffd5b50610516610a083660046144dd565b612447565b348015610a18575f5ffd5b50610516612553565b348015610a2c575f5ffd5b5060dc546105ab9060ff1681565b348015610a45575f5ffd5b506105167f20e7d93f475a4a8dd621285797dd2d68da59e4450b89aea5ca9bf079e95c1db581565b348015610a78575f5ffd5b50610516610a873660046146ea565b612604565b348015610a97575f5ffd5b5061057b610aa63660046144dd565b61268e565b348015610ab6575f5ffd5b5060dc546105ab90600160881b900460ff1681565b348015610ad6575f5ffd5b5061057b610ae53660046146ea565b6127e5565b348015610af5575f5ffd5b5061057b6128c1565b348015610b09575f5ffd5b5060d254610617906001600160a01b031681565b348015610b28575f5ffd5b5060d9546105ab90600160a01b900460ff1681565b348015610b48575f5ffd5b5061057b610b57366004614944565b6128d4565b348015610b67575f5ffd5b5060cf5461069490600160801b90046001600160801b031681565b348015610b8d575f5ffd5b506033546001600160a01b0316610617565b348015610baa575f5ffd5b50610516610bb93660046146ea565b612a34565b348015610bc9575f5ffd5b506105ab610bd83660046144dd565b60da6020525f908152604090205460ff1681565b348015610bf7575f5ffd5b5060d154610617906001600160a01b031681565b348015610c16575f5ffd5b50610617612aef565b348015610c2a575f5ffd5b50610516610c39366004614964565b612afd565b348015610c49575f5ffd5b5061057b610c583660046149a3565b612b93565b348015610c68575f5ffd5b5061057b612d7e565b348015610c7c575f5ffd5b5061057b610c8b3660046149ea565b612f00565b348015610c9b575f5ffd5b5060d954610617906001600160a01b031681565b348015610cba575f5ffd5b5060d5546108209063ffffffff8082169164010000000090041682565b61051661300c565b348015610cea575f5ffd5b5060cd54610617906001600160a01b031681565b348015610d09575f5ffd5b5060d454610694906001600160801b031681565b348015610d28575f5ffd5b5060dc546106949061010090046001600160801b031681565b348015610d4c575f5ffd5b5061057b610d5b366004614a17565b613016565b348015610d6b575f5ffd5b5060df54610617906001600160a01b031681565b348015610d8a575f5ffd5b5061057b610d99366004614701565b6130c3565b348015610da9575f5ffd5b5060d054610dc190600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610520565b348015610de1575f5ffd5b5061057b610df03660046144dd565b613206565b348015610e00575f5ffd5b506106177f000000000000000000000000000000000000000000000000000000000000000081565b348015610e33575f5ffd5b5060cc54610617906001600160a01b031681565b348015610e52575f5ffd5b5061057b610e613660046146ea565b6132ee565b348015610e71575f5ffd5b5061057b610e803660046144dd565b6133c9565b610516610e933660046144dd565b61343f565b348015610ea3575f5ffd5b50610516610eb2366004614831565b61349a565b610516610ec536600461485b565b6138d0565b348015610ed5575f5ffd5b506105ab610ee43660046144dd565b60d66020525f908152604090205460ff1681565b5f610f0161394d565b60ce546001600160a01b031663d505accf333085356020870135610f2b6060890160408a01614a32565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606085013560a4820152608085013560c482015260e4015f604051808303815f87803b158015610f9b575f5ffd5b505af1925050508015610fac575060015b50610fb78484611e26565b90505b9392505050565b60e054604051632474521560e21b81525f51602061512e5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa15801561101a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103e9190614a52565b61105b5760405163209296a360e01b815260040160405180910390fd5b5f5b818110156110b25782828281811061107757611077614a6d565b905060200201357f339b23d24a078f6403801d644f7cba5045424e28175a49da36de4445b66387da60405160405180910390a260010161105d565b505050565b6110bf61394d565b60e054604051632474521560e21b81527fc6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef060048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa15801561112b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114f9190614a52565b61116c5760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec80000060e154108061118f5750686f05b59d3b2000000060e154115b156111ad57604051633f4219cd60e21b815260040160405180910390fd5b845115806111bc575084518314155b806111c8575084518114155b156111e65760405163a9854bc960e01b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af115801561122e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112529190614a81565b60e15461125f9190614a98565b90505f86516001600160401b0381111561127b5761127b6144f8565b6040519080825280602002602001820160405280156112d657816020015b6112c3604051806080016040528060608152602001606081526020015f8152602001606081525090565b8152602001906001900390816112995790505b5090505f5b87518110156116165760ca5488515f916001600160a01b03169063b165e295908b908590811061130d5761130d614a6d565b60200260200101516040518263ffffffff1660e01b815260040161133391815260200190565b602060405180830381865afa15801561134e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113729190614aab565b90505f8160601b60601c63bcbb073a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d29190614aab565b60ca54604051632a25a9af60e11b81526001600160a01b0380841660048301529293505f929091169063544b535e906024015f60405180830381865afa15801561141e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114459190810190614ac6565b60c9549091505f906001600160a01b031663125ae56b8c8c8881811061146d5761146d614a6d565b905060200281019061147f9190614b3a565b8c8c8a81811061149157611491614a6d565b90506020028101906114a39190614b3a565b878d6040518763ffffffff1660e01b81526004016114c696959493929190614bd2565b602060405180830381865afa1580156114e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115059190614a81565b90505f60405180608001604052808d8d8981811061152557611525614a6d565b90506020028101906115379190614b3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018b8b8981811061158257611582614a6d565b90506020028101906115949190614b3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506020808301869052604080519182018152918152910152875190915081908890889081106115f9576115f9614a6d565b6020026020010181905250505050505080806001019150506112db565b505f8751836116259190614c20565b90506116308161399a565b60c95460e154604051635d57f88b60e11b81526001600160a01b039092169163baaff116918491611665918791600401614c37565b5f604051808303818588803b15801561167c575f5ffd5b505af115801561168e573d5f5f3e3d5ffd5b50505050505050505050505050565b6001600160a01b0381165f90815260db602052604090205460ff166116fa5760405162461bcd60e51b815260206004820152600e60248201526d139bdd081c9959da5cdd195c995960921b60448201526064015b60405180910390fd5b60e054604051632474521560e21b81525f51602061512e5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015611753573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117779190614a52565b6117935760405162461bcd60e51b81526004016116f190614ced565b6001600160a01b0381165f81815260db6020908152604091829020805460ff1916905590519182527f8a5afe4e68ed1b812242442424ef608ee7b0a23b6111c6183e781ac4656e817391015b60405180910390a150565b60d9546001600160a01b03163314611815576040516317fe949f60e01b815260040160405180910390fd5b60dc805482919060019061183890849061010090046001600160801b03166143df565b92506101000a8154816001600160801b03021916908360801b60801c021790555050565b60d9546001600160a01b03163314611887576040516317fe949f60e01b815260040160405180910390fd5b6040516001600160801b03821681527fafea3ee583ed00355634c0a2f47d947b6af95fda2bc1dbe0ff919c45166789d49060200160405180910390a160d0546105f4906001600160a01b03166001600160801b0383165f612afd565b5f6118ec61394d565b60cc546001600160a01b03163314611917576040516317fe949f60e01b815260040160405180910390fd5b5f61192184611f56565b90506001600160601b03841180611936575083155b8061193f575080155b1561195d5760405163162908e360e11b815260040160405180910390fd5b60d25460ce5461197c916001600160a01b0391821691339116876139f9565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb0906119b290889086908b908a90600401614d17565b6020604051808303815f875af11580156119ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f29190614a81565b60405190915033907fb9da3f3df62c28aca604806cc6ee9678189d7591ef511a77bb040fa8361e9e0290611a2c9089908990600290614d69565b60405180910390a295945050505050565b60d38181548110611a4c575f80fd5b5f918252602090912001546001600160a01b0316905081565b611a6d61394d565b335f90815260db602052604090205460ff16611a9b5760405162461bcd60e51b81526004016116f190614ced565b60c954604051637c561c3960e11b81526001600160a01b039091169063f8ac387290611ad39088908890889088908890600401614ea0565b5f604051808303815f87803b158015611aea575f5ffd5b505af1158015611afc573d5f5f3e3d5ffd5b505050505050505050565b5f54610100900460ff1615808015611b2557505f54600160ff909116105b80611b3e5750303b158015611b3e57505f5460ff166001145b611ba15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016116f1565b5f805460ff191660011790558015611bc2575f805461ff0019166101001790555b6001600160a01b0388161580611bdf57506001600160a01b038716155b80611bf157506001600160a01b038616155b80611c0357506001600160a01b038516155b80611c1557506001600160a01b038416155b15611c335760405163baca868960e01b815260040160405180910390fd5b611c3b613a59565b611c43613a87565b60ce80546001600160a01b03199081166001600160a01b038b81169190911790925560c9805482168a841617905560ca8054821689841617905560cc8054821688841617905560cd8054821687841617905560dc8054600160881b71ffffffffffffffffffffffffffffffffffff1990911617905560d98054821686841617905560d2805490911691841691909117905560de805460ff60a01b191690558015611d26575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611d785760405162461bcd60e51b81526004016116f190614eff565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611daa613aad565b6001600160a01b031614611dd05760405162461bcd60e51b81526004016116f190614f4b565b611dd981613ac8565b604080515f80825260208201909252611df491839190613b1b565b50565b60cf545f90611e18906001600160801b03600160801b8204811691166143df565b6001600160801b0316919050565b5f611e2f61394d565b5f611e3983611f56565b90506001600160601b03831180611e4e575082155b80611e57575080155b15611e755760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611e94916001600160a01b0391821691339116866139f9565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb090611eca90879086908a908790600401614d17565b6020604051808303815f875af1158015611ee6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0a9190614a81565b60405190915033907fb9da3f3df62c28aca604806cc6ee9678189d7591ef511a77bb040fa8361e9e0290611f449088908890600190614d69565b60405180910390a29150505b92915050565b5f5f611f60611df7565b9050805f03611f7157505f92915050565b60ce5460408051633a98ef3960e01b8152905183926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015611fb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fdc9190614a81565b611fe69085614c20565b610fba9190614f97565b60e05460408051633bd48c9f60e11b815290516001600160a01b03909216916391d148549183916377a9193e916004808201926020929091908290030181865afa158015612040573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120649190614a81565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401602060405180830381865afa1580156120a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c89190614a52565b6120e55760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff161561213f5760405162461bcd60e51b815260206004820152601860248201527f5061757361626c653a20616c726561647920706175736564000000000000000060448201526064016116f1565b60dc805460ff60881b1916600160881b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b612190613c82565b60df546001600160a01b03161580156121b157506001600160a01b03811615155b6121e75760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016116f1565b60e0546001600160a01b0316156122365760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016116f1565b60df80546001600160a01b038084166001600160a01b03199283161790925560e08054928516929091169190911790555f61226f611df7565b60cf80546001600160801b03478116600160801b90810292821692909217928390559293506122a192910416826143c0565b60cf80546001600160801b0319166001600160801b03929092169190911790556122c9611df7565b6001600160801b038216146110b2575f5ffd5b6122e4613c82565b6001600160a01b0382161580159061230457506001600160a01b03811615155b8015612319575060dd546001600160a01b0316155b801561232e575060de546001600160a01b0316155b6123645760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016116f1565b60dd80546001600160a01b039384166001600160a01b03199182161790915560de8054929093169116179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036123da5760405162461bcd60e51b81526004016116f190614eff565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661240c613aad565b6001600160a01b0316146124325760405162461bcd60e51b81526004016116f190614f4b565b61243b82613ac8565b6105f482826001613b1b565b60ce5460408051633a98ef3960e01b815290515f92839283926001600160a01b0390921691633a98ef39916004808201926020929091908290030181865afa158015612495573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b99190614a81565b9050801561254c5760ce5460405163673e156160e11b81526001600160a01b0386811660048301528392169063ce7c2ac290602401602060405180830381865afa158015612509573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061252d9190614a81565b612535611df7565b61253f9190614c20565b6125499190614f97565b91505b5092915050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125f25760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016116f1565b505f5160206150e75f395f51905f5290565b60ce5460408051633a98ef3960e01b815290515f9283926001600160a01b0390911691633a98ef39916004808201926020929091908290030181865afa158015612650573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126749190614a81565b9050805f0361268557505f92915050565b80611fdc611df7565b60e054604051632474521560e21b81525f51602061512e5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa1580156126e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061270b9190614a52565b6127285760405163209296a360e01b815260040160405180910390fd5b6001600160a01b0381165f90815260db602052604090205460ff16156127855760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064016116f1565b6040805160208082018352600182526001600160a01b0384165f81815260db83528490209251835460ff19169015151790925591519081527f8bef88cac8d05094711d367d04bf4f2fcb4b589ca12a6ed8c8f375000e1e848e91016117df565b60e054604051632474521560e21b81525f51602061512e5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa15801561283e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128629190614a52565b61287f5760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec80000081108061289e5750686f05b59d3b2000000081115b156128bc57604051633f4219cd60e21b815260040160405180910390fd5b60e155565b6128c9613c82565b6128d25f613cdc565b565b5f6128de82612a34565b60df549091506001600160a01b0316331461290c576040516317fe949f60e01b815260040160405180910390fd5b821580612917575081155b156129355760405163162908e360e11b815260040160405180910390fd5b828111156129565760405163162908e360e11b815260040160405180910390fd5b60cf80548391905f906129739084906001600160801b03166143c0565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b8152336004820152602481018590526001600160a01b039091169063ee7a7c04906044015f604051808303815f87803b1580156129df575f5ffd5b505af11580156129f1573d5f5f3e3d5ffd5b505060408051868152602081018690527f888a2432cd9af74ee23f9ebdf262368f5434dffe681b3c7426880c6639b2a74a935001905060405180910390a1505050565b5f5f612a3e611df7565b9050805f03612a4f57505f92915050565b60ce5460408051633a98ef3960e01b815290515f926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015612a96573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aba9190614a81565b612ac49085614c20565b9050816001612ad38284614fb6565b612add9190614a98565b612ae79190614f97565b949350505050565b5f612af8613aad565b905090565b5f612b0661394d565b60de546001600160a01b0316331480612b29575060d9546001600160a01b031633145b612b455760405162461bcd60e51b81526004016116f190614ced565b8360601b60601c7fa241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d84600185604051612b8093929190614fc9565b60405180910390a2610fb7845f85613d2d565b612b9b61394d565b60e054604051632474521560e21b81527fc6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef060048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015612c07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2b9190614a52565b612c485760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec800000811080612c675750686f05b59d3b2000000081115b15612c8557604051633f4219cd60e21b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af1158015612ccd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf19190614a81565b612cfb9083614a98565b90505f612d088483614c20565b9050612d138161399a565b60c954604051635d57f88b60e11b81526001600160a01b039091169063baaff116908390612d4990899089908990600401614ff6565b5f604051808303818588803b158015612d60575f5ffd5b505af1158015612d72573d5f5f3e3d5ffd5b50505050505050505050565b60e0546040805163421d0eb360e01b815290516001600160a01b03909216916391d1485491839163421d0eb3916004808201926020929091908290030181865afa158015612dce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df29190614a81565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401602060405180830381865afa158015612e32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e569190614a52565b612e735760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff16612ec35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016116f1565b60dc805460ff60881b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9060200161217e565b60cc546001600160a01b03163314612f2b576040516317fe949f60e01b815260040160405180910390fd5b60cf54612f429082906001600160801b0316615019565b60cf80546001600160801b0319166001600160801b03929092169190911790557f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511612f8b611df7565b60ce5460408051633a98ef3960e01b815290516001600160a01b0390921691633a98ef39916004808201926020929091908290030181865afa158015612fd3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff79190614a81565b604080519283526020830191909152016117df565b5f612af85f61343f565b60e054604051632474521560e21b81525f51602061512e5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa15801561306f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130939190614a52565b6130b05760405163209296a360e01b815260040160405180910390fd5b60dc805460ff1916911515919091179055565b6130cb61394d565b60e054604051632474521560e21b81527f20e7d93f475a4a8dd621285797dd2d68da59e4450b89aea5ca9bf079e95c1db560048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015613137573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315b9190614a52565b6131785760405163209296a360e01b815260040160405180910390fd5b5f61318b83670de0b6b3a7640000614c20565b90506131968161399a565b60c954604051632dc4817560e21b81526001600160a01b039091169063b71205d49083906131d0908a908a908a908a908a90600401614ea0565b5f604051808303818588803b1580156131e7575f5ffd5b505af11580156131f9573d5f5f3e3d5ffd5b5050505050505050505050565b60e054604051632474521560e21b81525f51602061512e5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa15801561325f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132839190614a52565b6132a05760405163209296a360e01b815260040160405180910390fd5b60d080546001600160a01b0319166001600160a01b0383169081179091556040519081527fbf5406678e9fe702eaea01d92d3b62ac5be0a14e1802562e2a428364d30d1b11906020016117df565b60df546001600160a01b03163314801590613314575060d2546001600160a01b03163314155b80156133495750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15613367576040516317fe949f60e01b815260040160405180910390fd5b60ce54604051633b9e9f0160e21b8152336004820152602481018390526001600160a01b039091169063ee7a7c04906044015f604051808303815f87803b1580156133b0575f5ffd5b505af11580156133c2573d5f5f3e3d5ffd5b5050505050565b6133d1613c82565b6001600160a01b0381166134365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016116f1565b611df481613cdc565b5f61344861394d565b60405133907fa241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d9061347f9034906001908790614fc9565b60405180910390a261349233345f613d2d565b90505b919050565b5f6134a361394d565b5f6134ad83612a34565b60d2549091506001600160a01b03163314806134d3575060cc546001600160a01b031633145b806134e8575060df546001600160a01b031633145b8061351b5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6135375760405162461bcd60e51b81526004016116f190614ced565b60cf54600160801b90046001600160801b03168311806135be575060ce546040516370a0823160e01b815233600482015284916001600160a01b0316906370a0823190602401602060405180830381865afa158015613598573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135bc9190614a81565b105b156135dc5760405163bb55fd2760e01b815260040160405180910390fd5b6001600160801b038311806135ef575082155b806135f8575080155b156136165760405163162908e360e11b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561367f575060dc5460cf548491613674916001600160801b03610100909204821691600160801b909104166143c0565b6001600160801b0316105b1561369d5760405163bb55fd2760e01b815260040160405180910390fd5b60d2546001600160a01b0316330361381f5760dc5461010090046001600160801b03168311156136e05760405163bb55fd2760e01b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016156137da575f7f000000000000000000000000000000000000000000000000000000000000000060601b60601c63341c6b3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613769573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061378d9190615058565b60cf5490915084906137b0908390600160801b90046001600160801b03166143c0565b6001600160801b031610156137d85760405163bb55fd2760e01b815260040160405180910390fd5b505b60dc80548491906001906137fd90849061010090046001600160801b03166143c0565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b60cf8054849190601090613844908490600160801b90046001600160801b03166143c0565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b8152336004820152602481018390526001600160a01b039091169063ee7a7c04906044015f604051808303815f87803b1580156138b0575f5ffd5b505af11580156138c2573d5f5f3e3d5ffd5b50505050610fba8484613e6b565b5f6138d961394d565b60cc546001600160a01b031633146139035760405162461bcd60e51b81526004016116f190614ced565b60405133907fa241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d9061393a9034906002908790614fc9565b60405180910390a2610fba33345f613d2d565b60dc54600160881b900460ff16156128d25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016116f1565b60cf80548291905f906139b79084906001600160801b03166143df565b92506101000a8154816001600160801b03021916908360801b60801c02179055508060cf60108282829054906101000a900460801b60801c61183891906143c0565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613a53908590613f0b565b50505050565b5f54610100900460ff16613a7f5760405162461bcd60e51b81526004016116f190615073565b6128d2613fd4565b5f54610100900460ff166128d25760405162461bcd60e51b81526004016116f190615073565b5f5160206150e75f395f51905f52546001600160a01b031690565b60e054604051635006bb7b60e01b81523360048201526001600160a01b0390911690635006bb7b906024015f6040518083038186803b158015613b09575f5ffd5b505afa1580156133c2573d5f5f3e3d5ffd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613b4e576110b283614003565b8260601b60601c6352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613ba5575060408051601f3d908101601f19168201909252613ba291810190614a81565b60015b613c085760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016116f1565b5f5160206150e75f395f51905f528114613c765760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016116f1565b506110b283838361409e565b6033546001600160a01b031633146128d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016116f1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cf80545f918491601090613d53908490600160801b90046001600160801b03166143df565b82546101009290920a6001600160801b0381810219909316918316021790915560cf805485935090915f91613d8a918591166143df565b92506101000a8154816001600160801b03021916908360801b60801c02179055505f8284613db89190614fb6565b90505f613dc4826140c2565b90506001600160801b03821180613dd9575081155b80613de2575080155b15613e005760405163162908e360e11b815260040160405180910390fd5b60ce546040516329460cc560e11b81526001600160a01b038881166004830152602482018490529091169063528c198a906044015f604051808303815f87803b158015613e4b575f5ffd5b505af1158015613e5d573d5f5f3e3d5ffd5b509298975050505050505050565b60405147905f906001600160a01b0385169084908381818185875af1925050503d805f8114613eb5576040519150601f19603f3d011682016040523d82523d5f602084013e613eba565b606091505b50509050808015613ed45750613ed08383614a98565b4710155b613a535760405162461bcd60e51b815260206004820152600860248201526714d95b9911985a5b60c21b60448201526064016116f1565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201525f90613f57906001600160a01b0385169084906140e7565b8051909150156110b25780806020019051810190613f759190614a52565b6110b25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016116f1565b5f54610100900460ff16613ffa5760405162461bcd60e51b81526004016116f190615073565b6128d233613cdc565b6001600160a01b0381163b6140705760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016116f1565b5f5160206150e75f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6140a7836140f5565b5f825111806140b35750805b156110b257613a538383614134565b5f5f826140cd611df7565b6140d79190614a98565b9050805f03611f71575090919050565b6060610fb784845f85614221565b6140fe81614003565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606001600160a01b0383163b61419c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016116f1565b5f5f8460601b60601c846040516141b391906150be565b5f60405180830381855af49150503d805f81146141eb576040519150601f19603f3d011682016040523d82523d5f602084013e6141f0565b606091505b50915091506142188282604051806060016040528060278152602001615107602791396142f5565b95945050505050565b6060824710156142825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016116f1565b5f5f8660601b60601c858760405161429a91906150be565b5f6040518083038185875af1925050503d805f81146142d4576040519150601f19603f3d011682016040523d82523d5f602084013e6142d9565b606091505b50915091506142ea8783838761430e565b979650505050505050565b60608315614304575081610fba565b610fba8383614382565b6060831561437c5782515f03614375576001600160a01b0385163b6143755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016116f1565b5081612ae7565b612ae783835b8151156143925781518083602001fd5b8060405162461bcd60e51b81526004016116f191906150d4565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b038281168282160390811115611f5057611f506143ac565b6001600160801b038181168382160190811115611f5057611f506143ac565b6001600160a01b0381168114611df4575f5ffd5b5f5f5f83850360e0811215614425575f5ffd5b8435614430816143fe565b93506020850135925060a0603f198201121561444a575f5ffd5b506040840190509250925092565b5f5f83601f840112614468575f5ffd5b5081356001600160401b0381111561447e575f5ffd5b6020830191508360208260051b8501011115614498575f5ffd5b9250929050565b5f5f602083850312156144b0575f5ffd5b82356001600160401b038111156144c5575f5ffd5b6144d185828601614458565b90969095509350505050565b5f602082840312156144ed575f5ffd5b8135610fba816143fe565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614534576145346144f8565b604052919050565b5f5f5f5f5f60608688031215614550575f5ffd5b85356001600160401b03811115614565575f5ffd5b8601601f81018813614575575f5ffd5b80356001600160401b0381111561458e5761458e6144f8565b8060051b61459e6020820161450c565b9182526020818401810192908101908b8411156145b9575f5ffd5b6020850194505b838510156145df578435808352602095860195909350909101906145c0565b9850505050602087013590506001600160401b038111156145fe575f5ffd5b61460a88828901614458565b90955093505060408601356001600160401b03811115614628575f5ffd5b61463488828901614458565b969995985093965092949392505050565b803563ffffffff81168114613495575f5ffd5b5f5f60408385031215614669575f5ffd5b61467283614645565b915061468060208401614645565b90509250929050565b6001600160801b0381168114611df4575f5ffd5b5f602082840312156146ad575f5ffd5b8135610fba81614689565b5f5f5f606084860312156146ca575f5ffd5b83356146d5816143fe565b95602085013595506040909401359392505050565b5f602082840312156146fa575f5ffd5b5035919050565b5f5f5f5f5f60608688031215614715575f5ffd5b85356001600160401b0381111561472a575f5ffd5b61473688828901614458565b90965094505060208601356001600160401b03811115614754575f5ffd5b61476088828901614458565b9094509250506040860135614774816143fe565b809150509295509295909350565b5f60208284031215614792575f5ffd5b813560048110610fba575f5ffd5b5f5f5f5f5f5f5f60e0888a0312156147b6575f5ffd5b87356147c1816143fe565b965060208801356147d1816143fe565b955060408801356147e1816143fe565b945060608801356147f1816143fe565b93506080880135614801816143fe565b925060a0880135614811816143fe565b915060c0880135614821816143fe565b8091505092959891949750929550565b5f5f60408385031215614842575f5ffd5b823561484d816143fe565b946020939093013593505050565b5f5f6040838503121561486c575f5ffd5b8235614877816143fe565b91506020830135614887816143fe565b809150509250929050565b5f6001600160401b038211156148aa576148aa6144f8565b50601f01601f191660200190565b5f5f604083850312156148c9575f5ffd5b82356148d4816143fe565b915060208301356001600160401b038111156148ee575f5ffd5b8301601f810185136148fe575f5ffd5b803561491161490c82614892565b61450c565b818152866020838501011115614925575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f60408385031215614955575f5ffd5b50508035926020909101359150565b5f5f5f60608486031215614976575f5ffd5b8335614981816143fe565b9250602084013591506040840135614998816143fe565b809150509250925092565b5f5f5f604084860312156149b5575f5ffd5b83356001600160401b038111156149ca575f5ffd5b6149d686828701614458565b909790965060209590950135949350505050565b5f602082840312156149fa575f5ffd5b813580600f0b8114610fba575f5ffd5b8015158114611df4575f5ffd5b5f60208284031215614a27575f5ffd5b8135610fba81614a0a565b5f60208284031215614a42575f5ffd5b813560ff81168114610fba575f5ffd5b5f60208284031215614a62575f5ffd5b8151610fba81614a0a565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614a91575f5ffd5b5051919050565b81810381811115611f5057611f506143ac565b5f60208284031215614abb575f5ffd5b8151610fba816143fe565b5f60208284031215614ad6575f5ffd5b81516001600160401b03811115614aeb575f5ffd5b8201601f81018413614afb575f5ffd5b8051614b0961490c82614892565b818152856020838501011115614b1d575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f8335601e19843603018112614b4f575f5ffd5b8301803591506001600160401b03821115614b68575f5ffd5b602001915036819003821315614498575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b608081525f614be560808301888a614b7c565b8281036020840152614bf8818789614b7c565b90508281036040840152614c0c8186614ba4565b915050826060830152979650505050505050565b8082028115828204841417611f5057611f506143ac565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b82811015614cd957605f198786030184528151805160808752614c836080880182614ba4565b905060208201518782036020890152614c9c8282614ba4565b91505060408201516040880152606082015191508681036060880152614cc28183614ba4565b965050506020938401939190910190600101614c5d565b505050506020929092019290925292915050565b60208082526010908201526f24b731b7b93932b1ba1021b0b63632b960811b604082015260600190565b6001600160601b0394851681529290931660208301526001600160a01b03166040820152606081019190915260800190565b60048110614d6557634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b03841681526020810183905260608101612ae76040830184614d49565b5f5f8335601e19843603018112614da2575f5ffd5b83016020810192503590506001600160401b03811115614dc0575f5ffd5b803603821315614498575f5ffd5b5f8383855260208501945060208460051b820101835f5b86811015614e9457838303601f19018852813536879003607e19018112614e0a575f5ffd5b8601614e168180614d8d565b60808652614e28608087018284614b7c565b915050614e386020830183614d8d565b8683036020880152614e4b838284614b7c565b9250505060408201356040860152614e666060830183614d8d565b92508582036060870152614e7b828483614b7c565b60209b8c019b9096509490940193505050600101614de5565b50909695505050505050565b606081525f614eb3606083018789614dce565b82810360208401528481526001600160fb1b03851115614ed1575f5ffd5b8460051b808760208401376001600160a01b0394909416604093909301929092525001602001949350505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f82614fb157634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611f5057611f506143ac565b83815260608101614fdd6020830185614d49565b6001600160a01b03929092166040919091015292915050565b604081525f615009604083018587614dce565b9050826020830152949350505050565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff1982121715611f5057611f506143ac565b5f60208284031215615068575f5ffd5b8151610fba81614689565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f920191825250919050565b602081525f610fba6020830184614ba456fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640e8d94121b3383f03d9ae60b39295aa793469d7230d51a3f62cbf47cd45481d9