60806040526005805460ff60a01b191690556014805460ff1916905534801562000027575f80fd5b5060405180604001604052806007815260200166436f6e6169686160c81b81525060405180604001604052806007815260200166434f4e4149484160c81b81525081600390816200007991906200063d565b5060046200008882826200063d565b505050620000a56200009f6200033f60201b60201c565b62000343565b620000bd336b033b2e3c9fd0803ce800000062000394565b600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b815290515f929163c45a01559160048083019260209291908290030181865afa15801562000122573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000148919062000705565b6001600160a01b031663c9c6539630600b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ce919062000705565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000219573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200023f919062000705565b90506200024e81600162000459565b50335f908152601360205260408082208054600160ff199182168117909255600880546001600160a01b031990811672cb2eef16307825fb536f42521ad4c93244eae8178255600980548216730c91f5694ea821f03edf75445411a1a51f4ec15d178155600b546001600160a01b039081168852868820805486168717905583548116885286882080548616871790559054811687529490952080549092169092179055617530600e819055600f55614e20601055619c40601181905560125554600a805490931691161790556a108b2a2c280290940000006006556a084595161401484a0000006007556200075a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620003f05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060025f82825462000403919062000734565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6200046362000540565b6001600160a01b038216620004cb5760405162461bcd60e51b815260206004820152602760248201527f284e65772920414d4d20616464726573732063616e206e6f74206265206164646044820152660e4cae6e64060f60cb1b6064820152608401620003e7565b6001600160a01b0382165f818152600d6020908152604091829020805460ff1916851515908117909155600c80546001600160a01b0319168517905591519182527f52f7750de642e169ff687a199cc8453a96d938130a797c0a11ea42a4d1659d87910160405180910390a25050565b505050565b6005546001600160a01b031633146200059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620003e7565b565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005c757607f821691505b602082108103620005e657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200053b575f81815260208120601f850160051c81016020861015620006145750805b601f850160051c820191505b81811015620006355782815560010162000620565b505050505050565b81516001600160401b038111156200065957620006596200059e565b62000671816200066a8454620005b2565b84620005ec565b602080601f831160018114620006a7575f84156200068f5750858301515b5f19600386901b1c1916600185901b17855562000635565b5f85815260208120601f198616915b82811015620006d757888601518255948401946001909101908401620006b6565b5085821015620006f557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000716575f80fd5b81516001600160a01b03811681146200072d575f80fd5b9392505050565b808201808211156200075457634e487b7160e01b5f52601160045260245ffd5b92915050565b61241180620007685f395ff3fe60806040526004361061024b575f3560e01c806365c5570f11610134578063a457c2d7116100b3578063c38ec0b611610078578063c38ec0b614610699578063d368371e146106ad578063dd62ed3e146106c2578063f2fde38b146106e1578063f887ea4014610700578063f8b45b051461071f575f80fd5b8063a457c2d714610613578063a9059cbb14610632578063aed04fae14610651578063ba69ebed14610666578063c18bc1951461067a575f80fd5b80638da5cb5b116100f95780638da5cb5b1461057657806390aa2ea61461059357806391cca3db146105c157806393e60845146105e057806395d89b41146105ff575f80fd5b806365c5570f146104db57806370a08231146104fa578063715018a61461052e5780637796ff3714610542578063809d458d14610557575f80fd5b8063293230b8116101cb578063470624021161019057806347062402146104315780634ada218b1461044657806350b9a9f51461045f57806358c9b0471461047e57806361d027b31461049d5780636303516c146104bc575f80fd5b8063293230b8146103af5780632b14ca56146103c3578063313ce567146103d85780633190bb8a146103f35780633950935114610412575f80fd5b806318160ddd1161021157806318160ddd1461032a5780631816467f1461033e5780631fd0d9a51461035d57806320800a001461037c57806323b872dd14610390575f80fd5b8062ae3bf81461025657806306fdde0314610277578063095ea7b3146102a15780630ac249d5146102d057806315291cd414610307575f80fd5b3661025257005b5f80fd5b348015610261575f80fd5b50610275610270366004612093565b610734565b005b348015610282575f80fd5b5061028b610826565b60405161029891906120b5565b60405180910390f35b3480156102ac575f80fd5b506102c06102bb366004612100565b6108b6565b6040519015158152602001610298565b3480156102db575f80fd5b50600c546102ef906001600160a01b031681565b6040516001600160a01b039091168152602001610298565b348015610312575f80fd5b5061031c60105481565b604051908152602001610298565b348015610335575f80fd5b5060025461031c565b348015610349575f80fd5b50610275610358366004612093565b6108cf565b348015610368575f80fd5b50610275610377366004612137565b6109ca565b348015610387575f80fd5b50610275610aa9565b34801561039b575f80fd5b506102c06103aa36600461216e565b610b8e565b3480156103ba575f80fd5b50610275610bb1565b3480156103ce575f80fd5b5061031c600f5481565b3480156103e3575f80fd5b5060405160128152602001610298565b3480156103fe575f80fd5b5061027561040d366004612093565b610c43565b34801561041d575f80fd5b506102c061042c366004612100565b610c99565b34801561043c575f80fd5b5061031c600e5481565b348015610451575f80fd5b506014546102c09060ff1681565b34801561046a575f80fd5b506102756104793660046121ac565b610cba565b348015610489575f80fd5b506102756104983660046121c3565b610d56565b3480156104a8575f80fd5b506008546102ef906001600160a01b031681565b3480156104c7575f80fd5b50600a546102ef906001600160a01b031681565b3480156104e6575f80fd5b506102756104f5366004612137565b610e2a565b348015610505575f80fd5b5061031c610514366004612093565b6001600160a01b03165f9081526020819052604090205490565b348015610539575f80fd5b50610275610ef4565b34801561054d575f80fd5b5061031c60115481565b348015610562575f80fd5b50610275610571366004612093565b610f07565b348015610581575f80fd5b506005546001600160a01b03166102ef565b34801561059e575f80fd5b506102c06105ad366004612093565b600d6020525f908152604090205460ff1681565b3480156105cc575f80fd5b506009546102ef906001600160a01b031681565b3480156105eb575f80fd5b506102756105fa3660046121ec565b610fed565b34801561060a575f80fd5b5061028b6110ee565b34801561061e575f80fd5b506102c061062d366004612100565b6110fd565b34801561063d575f80fd5b506102c061064c366004612100565b611177565b34801561065c575f80fd5b5061031c60125481565b348015610671575f80fd5b50610275611184565b348015610685575f80fd5b506102756106943660046121ac565b6114a7565b3480156106a4575f80fd5b5061027561156d565b3480156106b8575f80fd5b5061031c60075481565b3480156106cd575f80fd5b5061031c6106dc36600461220c565b61169f565b3480156106ec575f80fd5b506102756106fb366004612093565b6116c9565b34801561070b575f80fd5b50600b546102ef906001600160a01b031681565b34801561072a575f80fd5b5061031c60065481565b61073c611742565b6009546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015610791573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b59190612238565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156107fd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610821919061224f565b505050565b6060600380546108359061226a565b80601f01602080910402602001604051908101604052809291908181526020018280546108619061226a565b80156108ac5780601f10610883576101008083540402835291602001916108ac565b820191905f5260205f20905b81548152906001019060200180831161088f57829003601f168201915b5050505050905090565b5f336108c381858561179c565b60019150505b92915050565b6108d7611742565b6001600160a01b0381166109465760405162461bcd60e51b815260206004820152602b60248201527f4e6577206f7065726174696f6e732077616c6c65742063616e206e6f7420626560448201526a040c2c8c8e4cae6e64060f60ab1b60648201526084015b60405180910390fd5b600980546001600160a01b039081165f908152601360209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f51482c4aa4bc4e2beea6780677baa5397a7654163858238af5593173c347d9b791015b60405180910390a150565b6109d2611742565b6001600160a01b038216610a385760405162461bcd60e51b815260206004820152602760248201527f284e65772920414d4d20616464726573732063616e206e6f74206265206164646044820152660e4cae6e64060f60cb1b606482015260840161093d565b6001600160a01b0382165f818152600d6020908152604091829020805460ff1916851515908117909155600c80546001600160a01b0319168517905591519182527f52f7750de642e169ff687a199cc8453a96d938130a797c0a11ea42a4d1659d8791015b60405180910390a25050565b610ab1611742565b4780610af45760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b604482015260640161093d565b6009546040515f916001600160a01b03169083908381818185875af1925050503d805f8114610b3e576040519150601f19603f3d011682016040523d82523d5f602084013e610b43565b606091505b5050905080610b8a5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161093d565b5050565b5f33610b9b8582856118bf565b610ba6858585611937565b506001949350505050565b610bb9611742565b60145460ff1615610c0c5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c6564000000000000604482015260640161093d565b6014805460ff191660011790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c7905f90a1565b610c4b611742565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9e77f14f2f2fd349500bebec446fdae4cbdafd5f17d18997a7382d3cb8e8c53b906020016109bf565b5f336108c3818585610cab838361169f565b610cb591906122b6565b61179c565b610cc2611742565b683635c9adc5dea00000811015610d105760405162461bcd60e51b81526020600482015260126024820152713130303020697320746865206d696e6d756d60701b604482015260640161093d565b600780549082905560408051828152602081018490527f046078a3b350ab7ef8b49720ee84ad777c5172459d33cff8e353c3b9b04757ea91015b60405180910390a15050565b610d5e611742565b80610d6983856122b6565b610d7391906122b6565b620186a014610dd55760405162461bcd60e51b815260206004820152602860248201527f53756d6d6564206665652073686172657320617265206e6f7420313030252028604482015267313030303030292160c01b606482015260840161093d565b60108390556011829055601281905560408051848152602081018490529081018290527f192b126d6d86e50716742827858f2c3edda14906a341f1fc234c27fc1e4c8f8b9060600160405180910390a1505050565b610e32611742565b6001600160a01b038216610e9d5760405162461bcd60e51b815260206004820152602c60248201527f284e657729206578636c7564656420616464726573732063616e206e6f74206260448201526b0ca40c2c8c8e4cae6e64060f60a31b606482015260840161093d565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f33e99dbd8a2fdf021abaf8531c98838a37f8e85fd3cbf0e897047074f9c4ecf49101610a9d565b610efc611742565b610f055f611c33565b565b610f0f611742565b6001600160a01b038116610f705760405162461bcd60e51b815260206004820152602260248201527f4e65772074726561737572792063616e206e6f74206265206164647265737320604482015261060f60f31b606482015260840161093d565b600880546001600160a01b039081165f908152601360209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f302f069e87193d33e629b90572b0aff2bdb294f6ec0967d7881bbc314feb3ac191016109bf565b610ff5611742565b600e5482036110515760405162461bcd60e51b815260206004820152602260248201527f4275792066656520697320616c726561647920746861742070657263656e7461604482015261676560f01b606482015260840161093d565b600f5481036110ae5760405162461bcd60e51b815260206004820152602360248201527f53656c6c2066656520697320616c726561647920746861742070657263656e7460448201526261676560e81b606482015260840161093d565b600e829055600f81905560408051838152602081018390527f74dbbbe280ef27b79a8a0c449d5ae2ba7a31849103241d0f98df70bbc9d03e379101610d4a565b6060600480546108359061226a565b5f338161110a828661169f565b90508381101561116a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161093d565b610ba6828686840361179c565b5f336108c3818585611937565b6005805460ff60a01b1916600160a01b179055305f908152602081905260408120549050805f036111f75760405162461bcd60e51b815260206004820152601960248201527f546f6b656e2062616c616e63652063616e6e6f74206265203000000000000000604482015260640161093d565b6010545f9082901561123957620186a0600260105461121691906122c9565b61122090856122e8565b61122a91906122c9565b915061123682846122ff565b90505b61124281611c84565b475f8190036112935760405162461bcd60e51b815260206004820152601760248201527f4554482062616c616e63652063616e6e6f742062652030000000000000000000604482015260640161093d565b601054156112d2575f620186a060026010546112af91906122c9565b6112b990846122e8565b6112c391906122c9565b90506112d0308583611dd4565b505b6011541561139f575f620186a0601154836112ed91906122e8565b6112f791906122c9565b6008546040519192505f916001600160a01b039091169083908381818185875af1925050503d805f8114611346576040519150601f19603f3d011682016040523d82523d5f602084013e61134b565b606091505b505090508061139c5760405162461bcd60e51b815260206004820152601c60248201527f5472616e7366657220746f207472656173757279206661696c65642e00000000604482015260640161093d565b50505b6012541561146c575f620186a0601254836113ba91906122e8565b6113c491906122c9565b6009546040519192505f916001600160a01b039091169083908381818185875af1925050503d805f8114611413576040519150601f19603f3d011682016040523d82523d5f602084013e611418565b606091505b50509050806114695760405162461bcd60e51b815260206004820152601760248201527f5472616e7366657220746f20646576206661696c65642e000000000000000000604482015260640161093d565b50505b6040517f073f67f6b2a495a773c8f33582c762d9c1a89fec310d1e2ce2808b4ff65d8290905f90a150506005805460ff60a01b191690555050565b6114af611742565b69d3c21bcecceda100000081101561152f5760405162461bcd60e51b815260206004820152603760248201527f4d61782077616c6c6574206973206c65737320746865206d696e696d756d207460448201527f68656e20302c3125206f6620746f74616c537570706c79000000000000000000606482015260840161093d565b600680549082905560408051828152602081018490527f35f2577625659032d553fbc001320996b756a5dae410a0b74e931934e020464b9101610d4a565b611575611742565b600b54604080516315ab88c960e31b815290515f926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156115bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e09190612312565b6040516370a0823160e01b81523060048201529091506001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa15801561162d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116519190612238565b6040518263ffffffff1660e01b815260040161166f91815260200190565b5f604051808303815f87803b158015611686575f80fd5b505af1158015611698573d5f803e3d5ffd5b5050505050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6116d1611742565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093d565b61173f81611c33565b50565b6005546001600160a01b03163314610f055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093d565b6001600160a01b0383166117fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161093d565b6001600160a01b03821661185f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161093d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6118ca848461169f565b90505f19811461193157818110156119245760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161093d565b611931848484840361179c565b50505050565b60145460ff168061195557506005546001600160a01b038481169116145b6119ad5760405162461bcd60e51b815260206004820152602360248201527f54726164696e672077696c6c20656e61626c65207768656e20414d4d206973206044820152621cd95d60ea1b606482015260840161093d565b6001600160a01b0383165f9081526013602052604090205460ff16806119ea57506001600160a01b0382165f9081526013602052604090205460ff165b156119fa57610821838383611edd565b6001600160a01b0383165f908152600d6020526040902054819060ff1680611a3957506001600160a01b0383165f908152600d602052604090205460ff165b15611bce576001600160a01b0384165f908152600d602052604081205460ff1615611a7d57620186a0600e5483611a7091906122e8565b611a7a91906122c9565b90505b6001600160a01b0384165f908152600d602052604090205460ff1615611af357620186a0600f5483611aaf91906122e8565b611ab991906122c9565b600554909150600160a01b900460ff16158015611ae65750600754305f9081526020819052604090205410155b15611af357611af3611184565b611afd81836122ff565b6001600160a01b0386165f908152600d602052604090205490925060ff1615611bc1576006546001600160a01b0386165f908152600d60205260409020548390611b699060ff16611b4e5787610514565b866001600160a01b03165f9081526020819052604090205490565b611b7391906122b6565b1115611bc15760405162461bcd60e51b815260206004820152601e60248201527f7472616e73616374696f6e2065786365656473206d61782077616c6c65740000604482015260640161093d565b611bcc853083611edd565b505b6001600160a01b0383165f908152600d602052604090205460ff168015611bff5750600554600160a01b900460ff16155b8015611c1b5750600754305f9081526020819052604090205410155b15611c2857611c28611184565b611931848483611edd565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611cb757611cb761232d565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d329190612312565b81600181518110611d4557611d4561232d565b6001600160a01b039283166020918202929092010152600b54611d6b913091168461179c565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611da39085905f90869030904290600401612341565b5f604051808303815f87803b158015611dba575f80fd5b505af1158015611dcc573d5f803e3d5ffd5b505050505050565b600b5460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490529084169063095ea7b3906044016020604051808303815f875af1158015611e24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e48919061224f565b50600b54600a5460405163f305d71960e01b81526001600160a01b038681166004830152602482018690525f60448301819052606483015291821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611eb8573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611dcc91906123b0565b6001600160a01b038316611f415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161093d565b6001600160a01b038216611fa35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161093d565b6001600160a01b0383165f908152602081905260409020548181101561201a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161093d565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611931565b6001600160a01b038116811461173f575f80fd5b5f602082840312156120a3575f80fd5b81356120ae8161207f565b9392505050565b5f6020808352835180828501525f5b818110156120e0578581018301518582016040015282016120c4565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612111575f80fd5b823561211c8161207f565b946020939093013593505050565b801515811461173f575f80fd5b5f8060408385031215612148575f80fd5b82356121538161207f565b915060208301356121638161212a565b809150509250929050565b5f805f60608486031215612180575f80fd5b833561218b8161207f565b9250602084013561219b8161207f565b929592945050506040919091013590565b5f602082840312156121bc575f80fd5b5035919050565b5f805f606084860312156121d5575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156121fd575f80fd5b50508035926020909101359150565b5f806040838503121561221d575f80fd5b82356122288161207f565b915060208301356121638161207f565b5f60208284031215612248575f80fd5b5051919050565b5f6020828403121561225f575f80fd5b81516120ae8161212a565b600181811c9082168061227e57607f821691505b60208210810361229c57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108c9576108c96122a2565b5f826122e357634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176108c9576108c96122a2565b818103818111156108c9576108c96122a2565b5f60208284031215612322575f80fd5b81516120ae8161207f565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561238f5784516001600160a01b03168352938301939183019160010161236a565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156123c2575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f13b347f72d9bf2c98c55ade703f9835cd8a7d0ff47818ca4d248a82187d2df964736f6c63430008140033